wren-engine icon indicating copy to clipboard operation
wren-engine copied to clipboard

chore(ibis): enable OpenTelemetry and multiple workers for the ibis-server image

Open goldmedal opened this issue 7 months ago • 1 comments

Description

  • Enable multiple workers: add WREN_NUM_WORKERS to control the number of gunicorn workers. The default value is 2.
  • Enable the OpenTelemetry for the image: add OTLP_ENABLED to enable tracing. The minimize setting:
  OTLP_ENABLED=true
  OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://host.docker.internal:4317
  OTEL_SERVICE_NAME=wren-engine
  OTEL_TRACES_EXPORTER=otlp
  OTEL_METRICS_EXPORTER=none
  OTEL_LOGS_EXPORTER=none

Summary by CodeRabbit

  • New Features
    • Added OpenTelemetry tracing support, allowing correlation IDs from incoming requests to be included in trace data.
    • Introduced a new entrypoint script for flexible server startup and improved environment variable handling.
    • Added support for running the server with Gunicorn and custom worker configuration.
    • Provided a new justfile command to run the server using Gunicorn.
  • Documentation
    • Updated setup instructions for tracing and Jaeger integration.
    • Added documentation for new environment variables and tracing configuration options.
  • Bug Fixes
    • Improved header filtering to support "x-correlation-id" for better trace correlation.

goldmedal avatar May 06 '25 11:05 goldmedal

Walkthrough

This update introduces OpenTelemetry tracing support and configures the Ibis server to run with Gunicorn and Uvicorn workers. It adds a custom worker class, a new entrypoint script for container startup, and updates documentation and configuration files to reflect these changes. Tracing attributes are now set from HTTP headers.

Changes

File(s) Change Summary
ibis-server/Dockerfile, ibis-server/entrypoint.sh, ibis-server/pyproject.toml Dockerfile updated to install OpenTelemetry dependencies and use a new entrypoint script. Entrypoint script added to launch Gunicorn with optional OpenTelemetry instrumentation. pyproject.toml updated to include uvicorn, gunicorn, and uvicorn-worker dependencies.
ibis-server/app/worker.py New module defining WrenUvicornWorker, a custom Gunicorn worker using uvloop and httptools.
ibis-server/app/util.py New function set_attribute added to propagate X-Correlation-ID from headers to OpenTelemetry spans.
ibis-server/app/routers/v2/connector.py, ibis-server/app/routers/v3/connector.py Updated to call set_attribute(headers, span) after starting each OpenTelemetry span, enriching spans with correlation IDs from request headers. Imports updated accordingly.
ibis-server/app/dependencies.py _filter_headers function modified to allow headers starting with "x-correlation-id".
ibis-server/README.md, ibis-server/docs/development.md Documentation updated to clarify tracing setup, required dependencies, environment variables, and provide explicit OpenTelemetry configuration examples.
ibis-server/justfile Added workers variable and new run-gunicorn recipe to run the server with Gunicorn and the custom worker, with configurable options.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant Gunicorn
    participant WrenUvicornWorker
    participant FastAPI App
    participant OpenTelemetry

    Client->>Gunicorn: HTTP Request
    Gunicorn->>WrenUvicornWorker: Dispatch request
    WrenUvicornWorker->>FastAPI App: Forward request
    FastAPI App->>OpenTelemetry: Start tracing span
    FastAPI App->>OpenTelemetry: set_attribute(headers, span)
    FastAPI App->>FastAPI App: Handle request logic
    FastAPI App-->>WrenUvicornWorker: Response
    WrenUvicornWorker-->>Gunicorn: Response
    Gunicorn-->>Client: HTTP Response

Poem

šŸ‡
A hop, a skip, a trace anew,
With Gunicorn’s workers in a queue.
Correlation IDs now light the way,
Through headers passed and spans at play.
OpenTelemetry joins the run,
Observability—oh what fun!
The server’s ready, let’s debug and chew!

✨ 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @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 generate unit testing code.
    • @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[bot] avatar May 06 '25 11:05 coderabbitai[bot]

Thanks @goldmedal

douenergy avatar May 12 '25 08:05 douenergy