Skip to content

fix(new-webui): Bind to host specified by host environment variable (fixes #951).#954

Merged
davemarco merged 4 commits into
y-scope:mainfrom
davemarco:host
Jun 3, 2025
Merged

fix(new-webui): Bind to host specified by host environment variable (fixes #951).#954
davemarco merged 4 commits into
y-scope:mainfrom
davemarco:host

Conversation

@davemarco

@davemarco davemarco commented Jun 2, 2025

Copy link
Copy Markdown
Contributor

Description

When moving to new fastify setup, we replaced script with one from demo app. Demo app did not load the host name.

Note this fix will only work for production setup. We should change environment variable names to FASTIFY_HOST, etc, so the dev scripts also load these variables. We can maybe also use an alias, but perhaps that may confuse people. Anyways, I will leave changing var name to #939.

Checklist

  • The PR satisfies the contribution guidelines.
  • This is a breaking change and that has been indicated in the PR title, OR this isn't a
    breaking change.
  • Necessary docs have been updated, OR no docs need to be updated.

Validation performed

Started server with 0.0.0.0 hostname and it started

Summary by CodeRabbit

  • Chores
    • Updated server to use host and port settings from the application configuration instead of environment variables or default values.

@davemarco davemarco requested a review from a team as a code owner June 2, 2025 13:52
@coderabbitai

coderabbitai Bot commented Jun 2, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

The server initialization logic was updated to use the host and port values from the application's configuration object instead of relying on environment variables or a default constant. The unused constant for the default port was removed, and a reference to the configuration object was added after the server is marked as ready.

Changes

File(s) Change Summary
components/log-viewer-webui/server/src/main.ts Removed DEFAULT_PORT constant; server now listens on host and port from app.config instead of environment variable or default; added a reference to app.config after server readiness.

Sequence Diagram(s)

sequenceDiagram
    participant App
    participant Config

    App->>App: Initialize
    App->>App: await ready()
    App->>Config: Access HOST and PORT
    App->>App: Listen on {host: Config.HOST, port: Config.PORT}
Loading

📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f0c8d64 and 22c312b.

📒 Files selected for processing (1)
  • components/log-viewer-webui/server/src/main.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.{cpp,hpp,java,js,jsx,tpp,ts,tsx}`: - Prefer `false == ` rather than `!`.

**/*.{cpp,hpp,java,js,jsx,tpp,ts,tsx}: - Prefer false == <expression> rather than !<expression>.

  • components/log-viewer-webui/server/src/main.ts
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: lint-check (ubuntu-latest)
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6d114b9 and f0c8d64.

📒 Files selected for processing (1)
  • components/log-viewer-webui/server/src/main.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.{cpp,hpp,java,js,jsx,tpp,ts,tsx}`: - Prefer `false == ` rather than `!`.

**/*.{cpp,hpp,java,js,jsx,tpp,ts,tsx}: - Prefer false == <expression> rather than !<expression>.

  • components/log-viewer-webui/server/src/main.ts

Comment thread components/log-viewer-webui/server/src/main.ts Outdated

try {
await app.listen({port: Number(process.env.PORT || DEFAULT_PORT)});
await app.listen({host: app.config.HOST, port: app.config.PORT});

@coderabbitai coderabbitai Bot Jun 2, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Verify that app.config properties exist and add error handling.

The change correctly reads from app.config, but there's no validation that HOST and PORT properties exist. This could cause runtime errors if the configuration is incomplete.

Please verify that app.config.HOST and app.config.PORT are properly defined by running this script to check the configuration setup:

Consider adding defensive programming to handle missing config values:

-        await app.listen({host: app.config.HOST, port: app.config.PORT});
+        const host = app.config.HOST || '127.0.0.1';
+        const port = app.config.PORT || 3000;
+        await app.listen({host, port});

🏁 Script executed:

#!/bin/bash
# Description: Verify app.config properties are properly set in the Fastify configuration

# Search for config definitions and usage patterns
echo "=== Searching for config property definitions ==="
ast-grep --pattern 'config: {
  $$$
}'

echo "=== Searching for HOST and PORT config assignments ==="
rg -A 3 -B 3 'HOST.*=' 
rg -A 3 -B 3 'PORT.*='

echo "=== Searching for fastify config plugin registration ==="
rg -A 5 'fastify.*config'

Length of output: 4846


Please check how the config plugin is registered (and whether it enforces required HOST and PORT properties) by running:


🏁 Script executed:

#!/bin/bash
echo "=== Checking for @fastify/env import in app.ts ==="
rg -n "@fastify/env" components/log-viewer-webui/server/src/fastify-v2/app.ts

echo "=== Listing fastify.register calls in app.ts ==="
rg -n "fastify\.register" -A3 components/log-viewer-webui/server/src/fastify-v2/app.ts

Length of output: 1017


Add validation or fallbacks for HOST and PORT.

The config plugin isn’t enforcing these variables or providing defaults, so calling
await app.listen({ host: app.config.HOST, port: app.config.PORT })
may throw at runtime if either is undefined.

• In server/src/main.ts (line 62):

await app.listen({ host: app.config.HOST, port: app.config.PORT });

• In server/src/fastify-v2/app.ts: no import or registration of @fastify/env was detected.

Suggested fixes:

  1. Register @fastify/env with a schema requiring HOST and PORT (and sensible defaults):

    await fastify.register(import('@fastify/env'), {
      schema: {
        type: 'object',
        required: ['HOST', 'PORT'],
        properties: {
          HOST: { type: 'string', default: '127.0.0.1' },
          PORT: { type: 'integer', default: 3000 }
        }
      }
    });
  2. Or apply inline fallbacks in main.ts:

    - await app.listen({ host: app.config.HOST, port: app.config.PORT });
    + const host = app.config.HOST ?? '127.0.0.1';
    + const port = app.config.PORT ?? 3000;
    + await app.listen({ host, port });
🤖 Prompt for AI Agents
In components/log-viewer-webui/server/src/main.ts at line 62, the code uses
app.config.HOST and app.config.PORT without verifying their existence, which can
cause runtime errors if these config values are missing. To fix this, add
validation to ensure HOST and PORT are defined before calling app.listen, or
provide default fallback values inline. Alternatively, register the @fastify/env
plugin in server/src/fastify-v2/app.ts with a schema that requires HOST and PORT
and sets sensible defaults, ensuring these config properties are always
available.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shh

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@davemarco Understood! I'll drop this concern. 🤐

@davemarco davemarco requested review from hoophalab and junhaoliao June 2, 2025 14:05
@junhaoliao junhaoliao removed their request for review June 3, 2025 09:09

@kirkrodrigues kirkrodrigues left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the PR title, how about:

fix(new-webui): Bind to host specified by host environment variable (fixes #951).

@davemarco davemarco changed the title fix(new-webui): Read host environment variable when starting fastify app (fixes #951). fix(new-webui): Bind to host specified by host environment variable (fixes #951). Jun 3, 2025
@davemarco davemarco merged commit eeca055 into y-scope:main Jun 3, 2025
6 checks passed
junhaoliao pushed a commit to junhaoliao/clp that referenced this pull request May 17, 2026
…ixes y-scope#951). (y-scope#954)

Co-authored-by: Marco <david.marcovitch@yscope.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants