From 624d1a9ba0d20d7ea69bfa5b3999d1e9fb2d8d80 Mon Sep 17 00:00:00 2001 From: "Connell, Joseph" Date: Fri, 23 May 2025 22:19:28 -0700 Subject: [PATCH 1/8] Added otel enabled Docker Compose file. Otel Enabled on lowcoder-api-service. Updated .sh files from CRLF to LF. Updated DockerFile to include OpenTelemetry JavaAgent. --- deploy/docker/Dockerfile | 7 + deploy/docker/docker-compose-multi-otel.yaml | 205 +++++++++++++++++++ 2 files changed, 212 insertions(+) create mode 100644 deploy/docker/docker-compose-multi-otel.yaml diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index 5ecbbd579d..da06c12e20 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -14,6 +14,10 @@ RUN mkdir -p /lowcoder/api-service/config /lowcoder/api-service/logs /lowcoder/p # Copy lowcoder server configuration COPY server/api-service/lowcoder-server/src/main/resources/application.yaml /lowcoder/api-service/config/ +# Add Opentelemetry agent +RUN curl -L -o /lowcoder/api-service/opentelemetry-javaagent.jar \ + "https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar" + # Add bootstrapfile COPY deploy/docker/api-service/entrypoint.sh /lowcoder/api-service/entrypoint.sh COPY deploy/docker/api-service/init.sh /lowcoder/api-service/init.sh @@ -43,6 +47,9 @@ COPY --chown=lowcoder:lowcoder --from=build-api-service /lowcoder-server/lowcode COPY --chown=lowcoder:lowcoder --from=build-api-service /lowcoder-server/lowcoder-server/target/lowcoder-api-service-bin/libs /lowcoder/api-service/libs COPY --chown=lowcoder:lowcoder --from=build-api-service /lowcoder-server/lowcoder-server/target/lowcoder-api-service-bin/plugins /lowcoder/api-service/plugins +#Define OpenTelemetry Java agent +ENV JAVA_TOOL_OPTIONS="-javaagent:/lowcoder/api-service/opentelemetry-javaagent.jar" + EXPOSE 8080 CMD [ "/bin/bash" , "/lowcoder/api-service/entrypoint.sh" ] diff --git a/deploy/docker/docker-compose-multi-otel.yaml b/deploy/docker/docker-compose-multi-otel.yaml new file mode 100644 index 0000000000..132f9ba7da --- /dev/null +++ b/deploy/docker/docker-compose-multi-otel.yaml @@ -0,0 +1,205 @@ +name: lowcoder-ce + +services: + + ## + ## Start services required for Lowcoder (MongoDB and Redis) + ## + mongodb: + image: "mongo:7.0" + container_name: mongodb + environment: + MONGO_INITDB_DATABASE: lowcoder + MONGO_INITDB_ROOT_USERNAME: lowcoder + MONGO_INITDB_ROOT_PASSWORD: secret123 + volumes: + - ./lowcoder-stacks/data/mongodb:/data/db + restart: unless-stopped + healthcheck: # https://github.com/rodrigobdz/docker-compose-healthchecks?tab=readme-ov-file#mongo + test: + [ + "CMD", + "mongosh", + "--quiet", + "127.0.0.1/test", + "--eval", + "'quit(db.runCommand({ ping: 1 }).ok ? 0 : 2)'", + ] + interval: 5s + timeout: 10s + retries: 10 + start_period: 40s + + redis: + image: redis:7-alpine + container_name: redis + restart: unless-stopped + healthcheck: # https://stackoverflow.com/a/71504657 + test: ["CMD-SHELL", "redis-cli ping | grep PONG"] + interval: 1s + timeout: 3s + retries: 10 + + + ## + ## Start Lowcoder backend services (api-service and node-service) + ## + lowcoder-api-service: + image: lowcoder-ce-api-service-jmc:latest + container_name: lowcoder-api-service + # Enabled ports to be able to access backend from host + # ports: + # - "8080:8080" + environment: + LOWCODER_PUBLIC_URL: "http://localhost:3000/" + LOWCODER_PUID: "9001" + LOWCODER_PGID: "9001" + LOWCODER_MONGODB_URL: "mongodb://lowcoder:secret123@mongodb/lowcoder?authSource=admin" + LOWCODER_REDIS_URL: "redis://redis:6379" + LOWCODER_NODE_SERVICE_URL: "http://lowcoder-node-service:6060" + LOWCODER_MAX_QUERY_TIMEOUT: 120 + LOWCODER_MAX_REQUEST_SIZE: 20m + LOWCODER_EMAIL_AUTH_ENABLED: "true" + LOWCODER_EMAIL_SIGNUP_ENABLED: "true" + LOWCODER_CREATE_WORKSPACE_ON_SIGNUP: "true" + # + # ! PLEASE CHANGE THESE TO SOMETHING UNIQUE ! + # + # LOWCODER_DB_ENCRYPTION_PASSWORD and LOWCODER_DB_ENCRYPTION_SALT is used + # to encrypt sensitive data in database so it is important to change the defaults + # + LOWCODER_DB_ENCRYPTION_PASSWORD: "lowcoder.org" + LOWCODER_DB_ENCRYPTION_SALT: "lowcoder.org" + LOWCODER_CORS_DOMAINS: "*" + LOWCODER_MAX_ORGS_PER_USER: 100 + LOWCODER_MAX_MEMBERS_PER_ORG: 1000 + LOWCODER_MAX_GROUPS_PER_ORG: 100 + LOWCODER_MAX_APPS_PER_ORG: 1000 + LOWCODER_MAX_DEVELOPERS: 50 + # + # API-KEY secret - should be a string of at least 32 random characters + # - on linux/mac, generate one eg. with: head /dev/urandom | head -c 30 | shasum -a 256 + # + LOWCODER_API_KEY_SECRET: "5a41b090758b39b226603177ef48d73ae9839dd458ccb7e66f7e7cc028d5a50b" + LOWCODER_PLUGINS_DIR: "../plugins" + LOWCODER_API_RATE_LIMIT: 50 + LOWCODER_WORKSPACE_MODE: SAAS + LOWCODER_MARKETPLACE_PRIVATE_MODE: "true" + # Lowcoder notification emails setup + LOWCODER_ADMIN_SMTP_HOST: smtp.gmail.com + LOWCODER_ADMIN_SMTP_PORT: 587 + LOWCODER_ADMIN_SMTP_USERNAME: + LOWCODER_ADMIN_SMTP_PASSWORD: + LOWCODER_ADMIN_SMTP_AUTH: "true" + LOWCODER_ADMIN_SMTP_SSL_ENABLED: "false" + LOWCODER_ADMIN_SMTP_STARTTLS_ENABLED: "true" + LOWCODER_ADMIN_SMTP_STARTTLS_REQUIRED: "true" + # Email used as sender in lost password email + LOWCODER_EMAIL_NOTIFICATIONS_SENDER: info@localhost + # Lowcoder superuser details + LOWCODER_SUPERUSER_USERNAME: admin@localhost + # If left blank, a password will be generated and written into api-service log + LOWCODER_SUPERUSER_PASSWORD: + + # OpenTelemetry Related Settings + # OTEL_JAVAAGENT_ENABLED: "false" + OTEL_RESOURCE_ATTRIBUTES: "service.name=lowcoder-api-service,service.version=2.6.5,deployment.environment=production" + OTEL_SERVICE_NAME: "lowcoder-api-service" + OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" + OTEL_EXPORTER_OTLP_ENDPOINT: "http://otel-lgtm:4317" + OTEL_TRACES_EXPORTER: "otlp" + OTEL_METRICS_EXPORTER: "otlp" + OTEL_LOGS_EXPORTER: "otlp" + + + restart: unless-stopped + depends_on: + mongodb: + condition: service_healthy + restart: true + redis: + condition: service_healthy + restart: true + otel-lgtm: + condition: service_healthy + restart: true + volumes: + - ./lowcoder-stacks:/lowcoder-stacks + - ./lowcoder-stacks/assets:/lowcoder/assets + healthcheck: #https://stackoverflow.com/questions/71101967/how-should-i-use-grep-in-docker-compose-healthcheck + test: curl -sS http://lowcoder-api-service:8080 | grep -c "Lowcoder API is up and runnig" > /dev/null + interval: 3s + timeout: 5s + retries: 10 + + + lowcoder-node-service: + image: lowcoder-ce-node-service-jmc:latest + container_name: lowcoder-node-service + # Enabled ports to be able to access backend from host + # ports: + # - "6060:6060" + environment: + LOWCODER_PUID: "9001" + LOWCODER_PGID: "9001" + LOWCODER_API_SERVICE_URL: "http://lowcoder-api-service:8080" + restart: unless-stopped + depends_on: + lowcoder-api-service: + condition: service_healthy + restart: true + healthcheck: #https://stackoverflow.com/questions/71101967/how-should-i-use-grep-in-docker-compose-healthcheck + test: curl -sS http://lowcoder-node-service:6060 | grep -c "Lowcoder Node Service is up and running" > /dev/null + interval: 3s + timeout: 5s + retries: 10 + + ## + ## Start Lowcoder web frontend + ## + lowcoder-frontend: + image: lowcoder-ce-frontend-jmc:latest + container_name: lowcoder-frontend + ports: + - "3000:3000" + environment: + LOWCODER_PUID: "9001" + LOWCODER_PGID: "9001" + LOWCODER_MAX_REQUEST_SIZE: 20m + LOWCODER_MAX_QUERY_TIMEOUT: 120 + LOWCODER_API_SERVICE_URL: "http://lowcoder-api-service:8080" + LOWCODER_NODE_SERVICE_URL: "http://lowcoder-node-service:6060" + restart: unless-stopped + depends_on: + lowcoder-node-service: + condition: service_healthy + restart: true + lowcoder-api-service: + condition: service_healthy + restart: true + volumes: + - ./lowcoder-stacks/assets:/lowcoder/assets + healthcheck: + test: curl --fail http://lowcoder-frontend:3000 || exit 1 + interval: 5s + retries: 10 + start_period: 10s + timeout: 10s + otel-lgtm: + image: grafana/otel-lgtm:latest + container_name: otel-lgtm + ports: + - "3001:3000" # Grafana UI + - "4317:4317" # OTLP gRPC receiver + - "4318:4318" # OTLP HTTP receiver + - "9090:9090" # Prometheus / Mimir + - "3100:3100" # Loki + - "3200:3200" # Tempo + volumes: + - ./otel-lgtm-data:/data # Persistent storage for Grafana, Loki, Tempo, Mimir + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3001/api/health"] # Check Grafana UI health + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s # Give it some time to start up initially From 6b2001f2169b969fc4779a1543a7d51bc46d05b3 Mon Sep 17 00:00:00 2001 From: "Connell, Joseph" Date: Sat, 24 May 2025 17:53:32 -0700 Subject: [PATCH 2/8] Added Node Service Otel-Auto Instrumentation --- deploy/docker/.dockerignore | 45 ++++++ deploy/docker/Dockerfile | 3 +- deploy/docker/docker-compose-multi-otel.yaml | 22 ++- deploy/docker/node-service/entrypoint.sh | 3 + deploy/docker/node-service/otel-config.js | 139 +++++++++++++++++++ server/node-service/.gitignore | 2 +- 6 files changed, 210 insertions(+), 4 deletions(-) create mode 100644 deploy/docker/.dockerignore create mode 100644 deploy/docker/node-service/otel-config.js diff --git a/deploy/docker/.dockerignore b/deploy/docker/.dockerignore new file mode 100644 index 0000000000..b874686d2c --- /dev/null +++ b/deploy/docker/.dockerignore @@ -0,0 +1,45 @@ +# Node.js dependencies +node_modules +npm-debug.log +yarn-error.log + +# Logs +logs +*.log + +# Build artifacts +dist +build +*.tsbuildinfo + +# Environment files +.env +.env.local +.env.*.local + +# IDE and editor files +.vscode/ +.idea/ +*.swp + +# OS files +.DS_Store +Thumbs.db + +# Docker-related files +.dockerignore +Dockerfile* + +# Temporary files +tmp/ +temp/ +*.tmp +*.temp + +# Test files +coverage/ +*.test.js +*.spec.js +*.test.ts +*.spec.ts +jest.config.js diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index da06c12e20..3eca75d472 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -78,9 +78,10 @@ WORKDIR /lowcoder/node-service/app/ RUN yarn --immutable RUN yarn build -# Copy startup script +# Copy startup script and OpenTelemetry config COPY deploy/docker/node-service/entrypoint.sh /lowcoder/node-service/entrypoint.sh COPY deploy/docker/node-service/init.sh /lowcoder/node-service/init.sh +COPY deploy/docker/node-service/otel-config.js /lowcoder/node-service/otel-config.js RUN chmod +x /lowcoder/node-service/*.sh ## diff --git a/deploy/docker/docker-compose-multi-otel.yaml b/deploy/docker/docker-compose-multi-otel.yaml index 132f9ba7da..c4b5191d53 100644 --- a/deploy/docker/docker-compose-multi-otel.yaml +++ b/deploy/docker/docker-compose-multi-otel.yaml @@ -103,8 +103,9 @@ services: # OpenTelemetry Related Settings # OTEL_JAVAAGENT_ENABLED: "false" - OTEL_RESOURCE_ATTRIBUTES: "service.name=lowcoder-api-service,service.version=2.6.5,deployment.environment=production" + OTEL_RESOURCE_ATTRIBUTES: "deployment.environment=production" OTEL_SERVICE_NAME: "lowcoder-api-service" + OTEL_SERVICE_VERSION: "2.6.5" OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" OTEL_EXPORTER_OTLP_ENDPOINT: "http://otel-lgtm:4317" OTEL_TRACES_EXPORTER: "otlp" @@ -143,6 +144,23 @@ services: LOWCODER_PUID: "9001" LOWCODER_PGID: "9001" LOWCODER_API_SERVICE_URL: "http://lowcoder-api-service:8080" + + ## + # OpenTelemetry Related Settings + # + # Uncomment OTEL_NODE_ENABLED_INSTRUMENTATIONS + # to disable OpenTelemetry Node agent + ## + # OTEL_NODE_ENABLED_INSTRUMENTATIONS="" + OTEL_RESOURCE_ATTRIBUTES: "deployment.environment=production" + OTEL_SERVICE_NAME: "lowcoder-node-service" + OTEL_SERVICE_VERSION: "2.6.5" + OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" + OTEL_EXPORTER_OTLP_ENDPOINT: "http://otel-lgtm:4317" + OTEL_TRACES_EXPORTER: "otlp" + OTEL_METRICS_EXPORTER: "otlp" + OTEL_LOGS_EXPORTER: "otlp" + restart: unless-stopped depends_on: lowcoder-api-service: @@ -153,7 +171,7 @@ services: interval: 3s timeout: 5s retries: 10 - + ## ## Start Lowcoder web frontend ## diff --git a/deploy/docker/node-service/entrypoint.sh b/deploy/docker/node-service/entrypoint.sh index 33308e4c7b..bd2bafc13c 100755 --- a/deploy/docker/node-service/entrypoint.sh +++ b/deploy/docker/node-service/entrypoint.sh @@ -23,4 +23,7 @@ if [ "$(id -u)" -eq 0 ]; then fi echo +# Require OpenTelemetry configuration +export NODE_OPTIONS="-r ./otel-config.js" + exec $GOSU yarn start diff --git a/deploy/docker/node-service/otel-config.js b/deploy/docker/node-service/otel-config.js new file mode 100644 index 0000000000..05b2128747 --- /dev/null +++ b/deploy/docker/node-service/otel-config.js @@ -0,0 +1,139 @@ +/** + * OpenTelemetry Configuration for Lowcoder Application + * + * This file sets up OpenTelemetry auto-instrumentation for traces and metrics. + * + * How to use: + * 1. Save this file as `otel-config.js` in your application's root directory. + * 2. Ensure you have the necessary OpenTelemetry packages installed: + * @opentelemetry/sdk-node + * @opentelemetry/api + * @opentelemetry/exporter-trace-otlp-http (or -grpc) + * @opentelemetry/exporter-metrics-otlp-http (or -grpc) + * @opentelemetry/resources + * @opentelemetry/semantic-conventions + * @opentelemetry/auto-instrumentations-node (CRITICAL for auto-instrumentation) + * + * Install @opentelemetry/auto-instrumentations-node if you haven't: + * `npm install @opentelemetry/auto-instrumentations-node` + * or + * `yarn add @opentelemetry/auto-instrumentations-node` + * + * 3. Start your application using the `-r` flag to preload this configuration: + * `export NODE_OPTIONS="-r ./otel-config.js"` + * + * Environment Variables for Configuration: + * - OTEL_EXPORTER_OTLP_ENDPOINT: Base URL for OTLP HTTP exporters (e.g., http://localhost:4318). + * If not set, defaults to http://localhost:4318. + * - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: Specific URL for OTLP HTTP traces exporter (e.g., http://localhost:4318/v1/traces). + * - OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: Specific URL for OTLP HTTP metrics exporter (e.g., http://localhost:4318/v1/metrics). + * - OTEL_SERVICE_NAME: Name of your service (e.g., 'node-service'). Defaults to 'unknown_service:nodejs'. + * - OTEL_LOG_LEVEL: Set OpenTelemetry diagnostic logging level (e.g., 'debug', 'info', 'warn', 'error'). + * - OTEL_EXPORTER_PROTOCOL: 'http/protobuf' (default) or 'grpc'. + */ + +const process = require('process'); +const { NodeSDK } = require('@opentelemetry/sdk-node'); +const { OTLPTraceExporter: OTLPTraceExporterHttp } = require('@opentelemetry/exporter-trace-otlp-http'); +const { OTLPTraceExporter: OTLPTraceExporterGrpc } = require('@opentelemetry/exporter-trace-otlp-grpc'); +const { OTLPMetricExporter: OTLPMetricExporterHttp } = require('@opentelemetry/exporter-metrics-otlp-http'); +const { OTLPMetricExporter: OTLPMetricExporterGrpc } = require('@opentelemetry/exporter-metrics-otlp-grpc'); +const { BatchSpanProcessor } = require('@opentelemetry/sdk-trace-node'); // Using BatchSpanProcessor for better performance +const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics'); +const { Resource } = require('@opentelemetry/resources'); +const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions'); +const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node'); +const { DiagConsoleLogger, DiagLogLevel, diag } = require('@opentelemetry/api'); + +// --- Configuration --- +const SERVICE_NAME = process.env.OTEL_SERVICE_NAME || 'lowcoder-node-service'; +const OTLP_EXPORTER_PROTOCOL = process.env.OTEL_EXPORTER_PROTOCOL || 'http/protobuf'; // 'http/protobuf' or 'grpc' + +const DEFAULT_OTLP_HTTP_ENDPOINT = 'http://localhost:4318'; +const DEFAULT_OTLP_GRPC_ENDPOINT = 'http://localhost:4317'; + +const OTLP_ENDPOINT = process.env.OTEL_EXPORTER_OTLP_ENDPOINT || + (OTLP_EXPORTER_PROTOCOL === 'grpc' ? DEFAULT_OTLP_GRPC_ENDPOINT : DEFAULT_OTLP_HTTP_ENDPOINT); + +const TRACES_ENDPOINT = process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT || + (OTLP_EXPORTER_PROTOCOL === 'grpc' ? OTLP_ENDPOINT : `${OTLP_ENDPOINT}/v1/traces`); +const METRICS_ENDPOINT = process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT || + (OTLP_EXPORTER_PROTOCOL === 'grpc' ? OTLP_ENDPOINT : `${OTLP_ENDPOINT}/v1/metrics`); + +// Optional: Set OpenTelemetry diagnostic logging level +const otelLogLevel = process.env.OTEL_LOG_LEVEL?.toUpperCase(); +if (otelLogLevel && DiagLogLevel[otelLogLevel]) { + diag.setLogger(new DiagConsoleLogger(), DiagLogLevel[otelLogLevel]); +} else { + diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO); // Default to INFO +} + +diag.info(`OpenTelemetry SDK configured for service: ${SERVICE_NAME}`); +diag.info(`Using OTLP protocol: ${OTLP_EXPORTER_PROTOCOL}`); +diag.info(`Traces Exporter Endpoint: ${TRACES_ENDPOINT}`); +diag.info(`Metrics Exporter Endpoint: ${METRICS_ENDPOINT}`); + +// --- Resource Definition --- +const resource = Resource.default().merge( + new Resource({ + [SemanticResourceAttributes.SERVICE_NAME]: SERVICE_NAME, + // [SemanticResourceAttributes.SERVICE_VERSION]: '1.0.0', // Optional + }) +); + +// --- Exporter Configuration --- +let traceExporter; +let metricExporter; + +if (OTLP_EXPORTER_PROTOCOL === 'grpc') { + diag.info('Using gRPC Exporters'); + traceExporter = new OTLPTraceExporterGrpc({ url: TRACES_ENDPOINT }); + metricExporter = new OTLPMetricExporterGrpc({ url: METRICS_ENDPOINT }); +} else { + diag.info('Using HTTP/protobuf Exporters'); + traceExporter = new OTLPTraceExporterHttp({ url: TRACES_ENDPOINT }); + metricExporter = new OTLPMetricExporterHttp({ url: METRICS_ENDPOINT }); +} + +// --- SDK Initialization --- +const sdk = new NodeSDK({ + resource: resource, + traceExporter: traceExporter, + spanProcessor: new BatchSpanProcessor(traceExporter), // Recommended for most cases + metricReader: new PeriodicExportingMetricReader({ + exporter: metricExporter, + exportIntervalMillis: 10000, // Export metrics every 10 seconds + }), + instrumentations: [ + getNodeAutoInstrumentations({ + // Configuration for specific instrumentations can be added here if needed + // Example: + // '@opentelemetry/instrumentation-http': { + // applyCustomAttributesOnSpan: (span, request, response) => { + // span.setAttribute('custom.attribute', 'value'); + // }, + // }, + }), + ], +}); + +// --- Start SDK and Graceful Shutdown --- +try { + sdk.start(); + diag.info('OpenTelemetry SDK started successfully for traces and metrics.'); +} catch (error) { + diag.error('Error starting OpenTelemetry SDK:', error); + process.exit(1); +} + +// Graceful shutdown +const shutdown = () => { + diag.info('Shutting down OpenTelemetry SDK...'); + sdk.shutdown() + .then(() => diag.info('OpenTelemetry SDK shut down successfully.')) + .catch(error => diag.error('Error shutting down OpenTelemetry SDK:', error)) + .finally(() => process.exit(0)); +}; + +process.on('SIGTERM', shutdown); +process.on('SIGINT', shutdown); \ No newline at end of file diff --git a/server/node-service/.gitignore b/server/node-service/.gitignore index 04cdacb56d..57c109e6c4 100644 --- a/server/node-service/.gitignore +++ b/server/node-service/.gitignore @@ -1,7 +1,7 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies -/node_modules +/node_modules/** /packages/*/node_modules /packages/*/dist /packages/*/tsdoc-metadata.json From c1df04c245d5c9963a53bdbd19542231f7f425c5 Mon Sep 17 00:00:00 2001 From: "Connell, Joseph" Date: Sat, 24 May 2025 20:45:20 -0700 Subject: [PATCH 3/8] node-service auto-instrumentation --- deploy/docker/Dockerfile | 11 +- deploy/docker/node-service/entrypoint.sh | 3 - deploy/docker/node-service/otel-config.js | 139 ---------------------- 3 files changed, 9 insertions(+), 144 deletions(-) delete mode 100644 deploy/docker/node-service/otel-config.js diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index 3eca75d472..d86c5e4443 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -78,10 +78,14 @@ WORKDIR /lowcoder/node-service/app/ RUN yarn --immutable RUN yarn build -# Copy startup script and OpenTelemetry config +# --- ADDED: Install OpenTelemetry dependencies for Node.js service --- +RUN yarn add \ + @opentelemetry/api \ + @opentelemetry/auto-instrumentations-node + +# Copy startup script COPY deploy/docker/node-service/entrypoint.sh /lowcoder/node-service/entrypoint.sh COPY deploy/docker/node-service/init.sh /lowcoder/node-service/init.sh -COPY deploy/docker/node-service/otel-config.js /lowcoder/node-service/otel-config.js RUN chmod +x /lowcoder/node-service/*.sh ## @@ -110,6 +114,9 @@ RUN apt-get update \ COPY --from=build-node-service /lowcoder/node-service /lowcoder/node-service +#Enable OpenTelemetry node agent +ENV NODE_OPTIONS="--require @opentelemetry/auto-instrumentations-node/register" + EXPOSE 6060 CMD [ "/bin/sh", "/lowcoder/node-service/entrypoint.sh" ] diff --git a/deploy/docker/node-service/entrypoint.sh b/deploy/docker/node-service/entrypoint.sh index bd2bafc13c..33308e4c7b 100755 --- a/deploy/docker/node-service/entrypoint.sh +++ b/deploy/docker/node-service/entrypoint.sh @@ -23,7 +23,4 @@ if [ "$(id -u)" -eq 0 ]; then fi echo -# Require OpenTelemetry configuration -export NODE_OPTIONS="-r ./otel-config.js" - exec $GOSU yarn start diff --git a/deploy/docker/node-service/otel-config.js b/deploy/docker/node-service/otel-config.js deleted file mode 100644 index 05b2128747..0000000000 --- a/deploy/docker/node-service/otel-config.js +++ /dev/null @@ -1,139 +0,0 @@ -/** - * OpenTelemetry Configuration for Lowcoder Application - * - * This file sets up OpenTelemetry auto-instrumentation for traces and metrics. - * - * How to use: - * 1. Save this file as `otel-config.js` in your application's root directory. - * 2. Ensure you have the necessary OpenTelemetry packages installed: - * @opentelemetry/sdk-node - * @opentelemetry/api - * @opentelemetry/exporter-trace-otlp-http (or -grpc) - * @opentelemetry/exporter-metrics-otlp-http (or -grpc) - * @opentelemetry/resources - * @opentelemetry/semantic-conventions - * @opentelemetry/auto-instrumentations-node (CRITICAL for auto-instrumentation) - * - * Install @opentelemetry/auto-instrumentations-node if you haven't: - * `npm install @opentelemetry/auto-instrumentations-node` - * or - * `yarn add @opentelemetry/auto-instrumentations-node` - * - * 3. Start your application using the `-r` flag to preload this configuration: - * `export NODE_OPTIONS="-r ./otel-config.js"` - * - * Environment Variables for Configuration: - * - OTEL_EXPORTER_OTLP_ENDPOINT: Base URL for OTLP HTTP exporters (e.g., http://localhost:4318). - * If not set, defaults to http://localhost:4318. - * - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: Specific URL for OTLP HTTP traces exporter (e.g., http://localhost:4318/v1/traces). - * - OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: Specific URL for OTLP HTTP metrics exporter (e.g., http://localhost:4318/v1/metrics). - * - OTEL_SERVICE_NAME: Name of your service (e.g., 'node-service'). Defaults to 'unknown_service:nodejs'. - * - OTEL_LOG_LEVEL: Set OpenTelemetry diagnostic logging level (e.g., 'debug', 'info', 'warn', 'error'). - * - OTEL_EXPORTER_PROTOCOL: 'http/protobuf' (default) or 'grpc'. - */ - -const process = require('process'); -const { NodeSDK } = require('@opentelemetry/sdk-node'); -const { OTLPTraceExporter: OTLPTraceExporterHttp } = require('@opentelemetry/exporter-trace-otlp-http'); -const { OTLPTraceExporter: OTLPTraceExporterGrpc } = require('@opentelemetry/exporter-trace-otlp-grpc'); -const { OTLPMetricExporter: OTLPMetricExporterHttp } = require('@opentelemetry/exporter-metrics-otlp-http'); -const { OTLPMetricExporter: OTLPMetricExporterGrpc } = require('@opentelemetry/exporter-metrics-otlp-grpc'); -const { BatchSpanProcessor } = require('@opentelemetry/sdk-trace-node'); // Using BatchSpanProcessor for better performance -const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics'); -const { Resource } = require('@opentelemetry/resources'); -const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions'); -const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node'); -const { DiagConsoleLogger, DiagLogLevel, diag } = require('@opentelemetry/api'); - -// --- Configuration --- -const SERVICE_NAME = process.env.OTEL_SERVICE_NAME || 'lowcoder-node-service'; -const OTLP_EXPORTER_PROTOCOL = process.env.OTEL_EXPORTER_PROTOCOL || 'http/protobuf'; // 'http/protobuf' or 'grpc' - -const DEFAULT_OTLP_HTTP_ENDPOINT = 'http://localhost:4318'; -const DEFAULT_OTLP_GRPC_ENDPOINT = 'http://localhost:4317'; - -const OTLP_ENDPOINT = process.env.OTEL_EXPORTER_OTLP_ENDPOINT || - (OTLP_EXPORTER_PROTOCOL === 'grpc' ? DEFAULT_OTLP_GRPC_ENDPOINT : DEFAULT_OTLP_HTTP_ENDPOINT); - -const TRACES_ENDPOINT = process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT || - (OTLP_EXPORTER_PROTOCOL === 'grpc' ? OTLP_ENDPOINT : `${OTLP_ENDPOINT}/v1/traces`); -const METRICS_ENDPOINT = process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT || - (OTLP_EXPORTER_PROTOCOL === 'grpc' ? OTLP_ENDPOINT : `${OTLP_ENDPOINT}/v1/metrics`); - -// Optional: Set OpenTelemetry diagnostic logging level -const otelLogLevel = process.env.OTEL_LOG_LEVEL?.toUpperCase(); -if (otelLogLevel && DiagLogLevel[otelLogLevel]) { - diag.setLogger(new DiagConsoleLogger(), DiagLogLevel[otelLogLevel]); -} else { - diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO); // Default to INFO -} - -diag.info(`OpenTelemetry SDK configured for service: ${SERVICE_NAME}`); -diag.info(`Using OTLP protocol: ${OTLP_EXPORTER_PROTOCOL}`); -diag.info(`Traces Exporter Endpoint: ${TRACES_ENDPOINT}`); -diag.info(`Metrics Exporter Endpoint: ${METRICS_ENDPOINT}`); - -// --- Resource Definition --- -const resource = Resource.default().merge( - new Resource({ - [SemanticResourceAttributes.SERVICE_NAME]: SERVICE_NAME, - // [SemanticResourceAttributes.SERVICE_VERSION]: '1.0.0', // Optional - }) -); - -// --- Exporter Configuration --- -let traceExporter; -let metricExporter; - -if (OTLP_EXPORTER_PROTOCOL === 'grpc') { - diag.info('Using gRPC Exporters'); - traceExporter = new OTLPTraceExporterGrpc({ url: TRACES_ENDPOINT }); - metricExporter = new OTLPMetricExporterGrpc({ url: METRICS_ENDPOINT }); -} else { - diag.info('Using HTTP/protobuf Exporters'); - traceExporter = new OTLPTraceExporterHttp({ url: TRACES_ENDPOINT }); - metricExporter = new OTLPMetricExporterHttp({ url: METRICS_ENDPOINT }); -} - -// --- SDK Initialization --- -const sdk = new NodeSDK({ - resource: resource, - traceExporter: traceExporter, - spanProcessor: new BatchSpanProcessor(traceExporter), // Recommended for most cases - metricReader: new PeriodicExportingMetricReader({ - exporter: metricExporter, - exportIntervalMillis: 10000, // Export metrics every 10 seconds - }), - instrumentations: [ - getNodeAutoInstrumentations({ - // Configuration for specific instrumentations can be added here if needed - // Example: - // '@opentelemetry/instrumentation-http': { - // applyCustomAttributesOnSpan: (span, request, response) => { - // span.setAttribute('custom.attribute', 'value'); - // }, - // }, - }), - ], -}); - -// --- Start SDK and Graceful Shutdown --- -try { - sdk.start(); - diag.info('OpenTelemetry SDK started successfully for traces and metrics.'); -} catch (error) { - diag.error('Error starting OpenTelemetry SDK:', error); - process.exit(1); -} - -// Graceful shutdown -const shutdown = () => { - diag.info('Shutting down OpenTelemetry SDK...'); - sdk.shutdown() - .then(() => diag.info('OpenTelemetry SDK shut down successfully.')) - .catch(error => diag.error('Error shutting down OpenTelemetry SDK:', error)) - .finally(() => process.exit(0)); -}; - -process.on('SIGTERM', shutdown); -process.on('SIGINT', shutdown); \ No newline at end of file From 6a25813bb3c716d9566c1cafb89cd6bd0cd48f61 Mon Sep 17 00:00:00 2001 From: "Connell, Joseph" Date: Sun, 25 May 2025 11:37:38 -0700 Subject: [PATCH 4/8] updated docker compose image to public image. --- deploy/docker/docker-compose-multi-otel.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deploy/docker/docker-compose-multi-otel.yaml b/deploy/docker/docker-compose-multi-otel.yaml index c4b5191d53..7d4a91ae3c 100644 --- a/deploy/docker/docker-compose-multi-otel.yaml +++ b/deploy/docker/docker-compose-multi-otel.yaml @@ -45,7 +45,7 @@ services: ## Start Lowcoder backend services (api-service and node-service) ## lowcoder-api-service: - image: lowcoder-ce-api-service-jmc:latest + image: lowcoderorg/lowcoder-ce-api-service:latest container_name: lowcoder-api-service # Enabled ports to be able to access backend from host # ports: @@ -135,7 +135,7 @@ services: lowcoder-node-service: - image: lowcoder-ce-node-service-jmc:latest + image: lowcoderorg/lowcoder-ce-node-service:latest container_name: lowcoder-node-service # Enabled ports to be able to access backend from host # ports: @@ -176,7 +176,7 @@ services: ## Start Lowcoder web frontend ## lowcoder-frontend: - image: lowcoder-ce-frontend-jmc:latest + image: lowcoderorg/lowcoder-ce-frontend:latest container_name: lowcoder-frontend ports: - "3000:3000" From 0686db57b88b634663557f6bb5615891c407d30f Mon Sep 17 00:00:00 2001 From: "Connell, Joseph" Date: Sun, 25 May 2025 14:33:05 -0700 Subject: [PATCH 5/8] Update duckdb Plugin to new duckdb/node-api (existing was depricated and breaking tests) --- server/node-service/package.json | 7 +- .../node-service/src/plugins/duckdb/index.ts | 12 +- server/node-service/yarn.lock | 2096 ++++++++++++----- 3 files changed, 1555 insertions(+), 560 deletions(-) diff --git a/server/node-service/package.json b/server/node-service/package.json index d7676d9ce0..4009ee8a53 100644 --- a/server/node-service/package.json +++ b/server/node-service/package.json @@ -37,8 +37,14 @@ "@aws-sdk/client-lambda": "^3.332.0", "@aws-sdk/client-s3": "^3.332.0", "@aws-sdk/s3-request-presigner": "^3.332.0", + "@duckdb/node-api": "^1.3.0-alpha.21", "@google-cloud/bigquery": "^6.1.0", "@google-cloud/storage": "^6.10.1", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.59.0", + "@opentelemetry/sdk-metrics": "^2.0.1", + "@opentelemetry/sdk-node": "^0.201.1", + "@opentelemetry/sdk-trace-node": "^2.0.1", "@supabase/supabase-js": "^2.26.0", "@types/cors": "^2.8.17", "@types/express": "^4.17.14", @@ -52,7 +58,6 @@ "base64-arraybuffer": "^1.0.2", "bluebird": "^3.7.2", "cors": "^2.8.5", - "duckdb-async": "^1.1.3", "dynamodb-data-types": "^4.0.1", "express": "^4.21.0", "express-async-errors": "^3.1.1", diff --git a/server/node-service/src/plugins/duckdb/index.ts b/server/node-service/src/plugins/duckdb/index.ts index 6d3e3872fa..e4e928c7c7 100644 --- a/server/node-service/src/plugins/duckdb/index.ts +++ b/server/node-service/src/plugins/duckdb/index.ts @@ -1,7 +1,7 @@ import { DataSourcePlugin } from "lowcoder-sdk/dataSource"; import dataSourceConfig, { DataSourceDataType } from "./dataSourceConfig"; import queryConfig, { ActionDataType } from "./queryConfig"; -import { Database } from "duckdb-async"; +import { DuckDBInstance } from "@duckdb/node-api"; import { ServiceError } from "../../common/error"; // Helper function to handle BigInt serialization @@ -23,17 +23,19 @@ const duckdbPlugin: DataSourcePlugin = { run: async function (actionData, dataSourceConfig): Promise { const { databaseFile, options } = dataSourceConfig; const parsedOptions = JSON.parse(options); - const db = await Database.create(databaseFile, parsedOptions); + const instance = await DuckDBInstance.create(databaseFile, parsedOptions); + const db = await instance.connect(); if (actionData.actionName === "Query") { try { - const result = await db.all(actionData.queryString); + const result = await db.runAndReadAll(actionData.queryString); + const data = await result.getRows(); // Apply BigInt serialization to each row - return result.map(serializeBigInts); + return data.map(serializeBigInts); } catch (error) { throw new ServiceError((error as Error).message); } finally { - await db.close(); + await db.closeSync(); } } }, diff --git a/server/node-service/yarn.lock b/server/node-service/yarn.lock index e45db240c4..11d4a7cdb9 100644 --- a/server/node-service/yarn.lock +++ b/server/node-service/yarn.lock @@ -1877,6 +1877,74 @@ __metadata: languageName: node linkType: hard +"@duckdb/node-api@npm:^1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-api@npm:1.3.0-alpha.21" + dependencies: + "@duckdb/node-bindings": 1.3.0-alpha.21 + checksum: 05ca91baa03afc9d765dce7aab5e03b63ee6d25dd7a63dcdcecce9f41a21d46ce95eb5ac86c368620f229608be94631834a5515fd5d937e9f05558d4b97d2aa3 + languageName: node + linkType: hard + +"@duckdb/node-bindings-darwin-arm64@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings-darwin-arm64@npm:1.3.0-alpha.21" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@duckdb/node-bindings-darwin-x64@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings-darwin-x64@npm:1.3.0-alpha.21" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@duckdb/node-bindings-linux-arm64@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings-linux-arm64@npm:1.3.0-alpha.21" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@duckdb/node-bindings-linux-x64@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings-linux-x64@npm:1.3.0-alpha.21" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@duckdb/node-bindings-win32-x64@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings-win32-x64@npm:1.3.0-alpha.21" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@duckdb/node-bindings@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings@npm:1.3.0-alpha.21" + dependencies: + "@duckdb/node-bindings-darwin-arm64": 1.3.0-alpha.21 + "@duckdb/node-bindings-darwin-x64": 1.3.0-alpha.21 + "@duckdb/node-bindings-linux-arm64": 1.3.0-alpha.21 + "@duckdb/node-bindings-linux-x64": 1.3.0-alpha.21 + "@duckdb/node-bindings-win32-x64": 1.3.0-alpha.21 + dependenciesMeta: + "@duckdb/node-bindings-darwin-arm64": + optional: true + "@duckdb/node-bindings-darwin-x64": + optional: true + "@duckdb/node-bindings-linux-arm64": + optional: true + "@duckdb/node-bindings-linux-x64": + optional: true + "@duckdb/node-bindings-win32-x64": + optional: true + checksum: c2b71f6d8857d20ba381091584bbec597bf156059aa8af890b6f2016193de02aec2d376d776ede32722cf3752a1defaa02a457ea957e3686e3389c31b4e9055c + languageName: node + linkType: hard + "@fastify/busboy@npm:^3.0.0": version: 3.0.0 resolution: "@fastify/busboy@npm:3.0.0" @@ -2022,13 +2090,6 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.1.3": - version: 1.1.3 - resolution: "@gar/promisify@npm:1.1.3" - checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 - languageName: node - linkType: hard - "@google-cloud/bigquery@npm:^6.1.0": version: 6.2.1 resolution: "@google-cloud/bigquery@npm:6.2.1" @@ -2211,6 +2272,16 @@ __metadata: languageName: node linkType: hard +"@grpc/grpc-js@npm:^1.7.1": + version: 1.13.4 + resolution: "@grpc/grpc-js@npm:1.13.4" + dependencies: + "@grpc/proto-loader": ^0.7.13 + "@js-sdsl/ordered-map": ^4.4.2 + checksum: fe5db84bbbcd07cc1b68d1683b7fbe9cfcc5c3a60655ecc17fb3e1cd2adc4c1ce891b15e6e9a9c2140f6891def6f93b509a60d2bce253d13b317f9136e968451 + languageName: node + linkType: hard + "@grpc/proto-loader@npm:^0.7.13": version: 0.7.13 resolution: "@grpc/proto-loader@npm:0.7.13" @@ -2530,105 +2601,1115 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 + languageName: node + linkType: hard + +"@js-sdsl/ordered-map@npm:^4.4.2": + version: 4.4.2 + resolution: "@js-sdsl/ordered-map@npm:4.4.2" + checksum: a927ae4ff8565ecb75355cc6886a4f8fadbf2af1268143c96c0cce3ba01261d241c3f4ba77f21f3f017a00f91dfe9e0673e95f830255945c80a0e96c6d30508a + languageName: node + linkType: hard + +"@jsdevtools/ono@npm:^7.1.3": + version: 7.1.3 + resolution: "@jsdevtools/ono@npm:7.1.3" + checksum: 2297fcd472ba810bffe8519d2249171132844c7174f3a16634f9260761c8c78bc0428a4190b5b6d72d45673c13918ab9844d706c3ed4ef8f62ab11a2627a08ad + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.3 + checksum: e8fc25d536250ed3e669813b36e8c6d805628b472353c57afd8c4fde0fcfcf3dda4ffe22f7af8c9070812ec2e7a03fb41d7151547cef3508efe661a5a3add20f + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: ^7.3.5 + checksum: 68951c589e9a4328698a35fd82fe71909a257d6f2ede0434d236fa55634f0fbcad9bb8755553ce5849bd25ee6f019f4d435921ac715c853582c4a7f5983c8d4a + languageName: node + linkType: hard + +"@opentelemetry/api-logs@npm:0.201.1, @opentelemetry/api-logs@npm:^0.201.0": + version: 0.201.1 + resolution: "@opentelemetry/api-logs@npm:0.201.1" + dependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 32ba6db254a0d1f25909a1664c5489dea803a724b9e2ed8ddf6eac7f795a709f681e813a636c6ab9633aecf31aad4d9781cd6eb26e38fb671c708e0ab348b372 + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.9.0": + version: 1.9.0 + resolution: "@opentelemetry/api@npm:1.9.0" + checksum: 9e88e59d53ced668f3daaecfd721071c5b85a67dd386f1c6f051d1be54375d850016c881f656ffbe9a03bedae85f7e89c2f2b635313f9c9b195ad033cdc31020 + languageName: node + linkType: hard + +"@opentelemetry/auto-instrumentations-node@npm:^0.59.0": + version: 0.59.0 + resolution: "@opentelemetry/auto-instrumentations-node@npm:0.59.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/instrumentation-amqplib": ^0.48.0 + "@opentelemetry/instrumentation-aws-lambda": ^0.52.0 + "@opentelemetry/instrumentation-aws-sdk": ^0.53.0 + "@opentelemetry/instrumentation-bunyan": ^0.47.0 + "@opentelemetry/instrumentation-cassandra-driver": ^0.47.0 + "@opentelemetry/instrumentation-connect": ^0.45.0 + "@opentelemetry/instrumentation-cucumber": ^0.16.0 + "@opentelemetry/instrumentation-dataloader": ^0.18.0 + "@opentelemetry/instrumentation-dns": ^0.45.0 + "@opentelemetry/instrumentation-express": ^0.50.0 + "@opentelemetry/instrumentation-fastify": ^0.46.0 + "@opentelemetry/instrumentation-fs": ^0.21.0 + "@opentelemetry/instrumentation-generic-pool": ^0.45.0 + "@opentelemetry/instrumentation-graphql": ^0.49.0 + "@opentelemetry/instrumentation-grpc": ^0.201.0 + "@opentelemetry/instrumentation-hapi": ^0.47.0 + "@opentelemetry/instrumentation-http": ^0.201.0 + "@opentelemetry/instrumentation-ioredis": ^0.49.0 + "@opentelemetry/instrumentation-kafkajs": ^0.10.0 + "@opentelemetry/instrumentation-knex": ^0.46.0 + "@opentelemetry/instrumentation-koa": ^0.49.0 + "@opentelemetry/instrumentation-lru-memoizer": ^0.46.0 + "@opentelemetry/instrumentation-memcached": ^0.45.0 + "@opentelemetry/instrumentation-mongodb": ^0.54.0 + "@opentelemetry/instrumentation-mongoose": ^0.48.0 + "@opentelemetry/instrumentation-mysql": ^0.47.0 + "@opentelemetry/instrumentation-mysql2": ^0.47.0 + "@opentelemetry/instrumentation-nestjs-core": ^0.47.0 + "@opentelemetry/instrumentation-net": ^0.45.0 + "@opentelemetry/instrumentation-oracledb": ^0.27.0 + "@opentelemetry/instrumentation-pg": ^0.53.0 + "@opentelemetry/instrumentation-pino": ^0.48.0 + "@opentelemetry/instrumentation-redis": ^0.48.0 + "@opentelemetry/instrumentation-redis-4": ^0.48.0 + "@opentelemetry/instrumentation-restify": ^0.47.0 + "@opentelemetry/instrumentation-router": ^0.46.0 + "@opentelemetry/instrumentation-runtime-node": ^0.15.0 + "@opentelemetry/instrumentation-socket.io": ^0.48.0 + "@opentelemetry/instrumentation-tedious": ^0.20.0 + "@opentelemetry/instrumentation-undici": ^0.12.0 + "@opentelemetry/instrumentation-winston": ^0.46.0 + "@opentelemetry/resource-detector-alibaba-cloud": ^0.31.1 + "@opentelemetry/resource-detector-aws": ^2.1.0 + "@opentelemetry/resource-detector-azure": ^0.8.0 + "@opentelemetry/resource-detector-container": ^0.7.1 + "@opentelemetry/resource-detector-gcp": ^0.35.0 + "@opentelemetry/resources": ^2.0.0 + "@opentelemetry/sdk-node": ^0.201.0 + peerDependencies: + "@opentelemetry/api": ^1.4.1 + "@opentelemetry/core": ^2.0.0 + checksum: ca9a1cacd10efdad92b093c88420f3a1c496dcee5410009b59d7498adac87af3ebd0dd35f86c7bccdba78f063963e2e9ed36794af9b153114f3b527ef95b928d + languageName: node + linkType: hard + +"@opentelemetry/context-async-hooks@npm:2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/context-async-hooks@npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 8452859fdae166b73d8c5c3198f8b4188bfdc8975f7682a3c07f1c470c95b4185478efaef912a85073be603423d5f7e510bc51295e3a8610a52b53519990261d + languageName: node + linkType: hard + +"@opentelemetry/core@npm:2.0.1, @opentelemetry/core@npm:^2.0.0": + version: 2.0.1 + resolution: "@opentelemetry/core@npm:2.0.1" + dependencies: + "@opentelemetry/semantic-conventions": ^1.29.0 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: e1ac1f69a84d1e5e9bd8fb75f459f963c96e5adb4ffc5e7be35ae3100471c3337d053eab1d5dc3b5de68affb8ae0d72c1f229c0e067fa1679623d92fadd50a94 + languageName: node + linkType: hard + +"@opentelemetry/exporter-logs-otlp-grpc@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/exporter-logs-otlp-grpc@npm:0.201.1" + dependencies: + "@grpc/grpc-js": ^1.7.1 + "@opentelemetry/core": 2.0.1 + "@opentelemetry/otlp-exporter-base": 0.201.1 + "@opentelemetry/otlp-grpc-exporter-base": 0.201.1 + "@opentelemetry/otlp-transformer": 0.201.1 + "@opentelemetry/sdk-logs": 0.201.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 7a0fa023b5d1af84ba4459909b911adcaee5b4a2fe33d41e6b775563dbe6600bb3a61f9f4ef3848fa21c3dc050d0de1ba2d4af152d944859d20ca494e070cb81 + languageName: node + linkType: hard + +"@opentelemetry/exporter-logs-otlp-http@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/exporter-logs-otlp-http@npm:0.201.1" + dependencies: + "@opentelemetry/api-logs": 0.201.1 + "@opentelemetry/core": 2.0.1 + "@opentelemetry/otlp-exporter-base": 0.201.1 + "@opentelemetry/otlp-transformer": 0.201.1 + "@opentelemetry/sdk-logs": 0.201.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 79e46d2ef9c5ed71c8757f6d3f3bafa7e7f8a89b69ab351289318286e829ef5485b2ef6d2115f2db5cfaf74538be1ceb954130ab3aaabee7d06288a56a99005a + languageName: node + linkType: hard + +"@opentelemetry/exporter-logs-otlp-proto@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/exporter-logs-otlp-proto@npm:0.201.1" + dependencies: + "@opentelemetry/api-logs": 0.201.1 + "@opentelemetry/core": 2.0.1 + "@opentelemetry/otlp-exporter-base": 0.201.1 + "@opentelemetry/otlp-transformer": 0.201.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/sdk-logs": 0.201.1 + "@opentelemetry/sdk-trace-base": 2.0.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 591f9089d42dabb5854f377eefd27933237882ad40dd9d9f4230d4f37491ece59633ef950e8da5ead2bf3a189b48db7c259b653afee1147083c662c4236b5451 + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-grpc@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/exporter-metrics-otlp-grpc@npm:0.201.1" + dependencies: + "@grpc/grpc-js": ^1.7.1 + "@opentelemetry/core": 2.0.1 + "@opentelemetry/exporter-metrics-otlp-http": 0.201.1 + "@opentelemetry/otlp-exporter-base": 0.201.1 + "@opentelemetry/otlp-grpc-exporter-base": 0.201.1 + "@opentelemetry/otlp-transformer": 0.201.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/sdk-metrics": 2.0.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: eef208413e6cda24ecdd29a171eb61ab7c026ff77b65f791630ffc0ec5ab1c5df6908cf0047f658805dd14a07aa2a7ca31f853d89726f341448887e59f88fec5 + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-http@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/exporter-metrics-otlp-http@npm:0.201.1" + dependencies: + "@opentelemetry/core": 2.0.1 + "@opentelemetry/otlp-exporter-base": 0.201.1 + "@opentelemetry/otlp-transformer": 0.201.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/sdk-metrics": 2.0.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: d50f925056a8a3d8ae0ac33a3732f51a417d23ab8327c533136f6ba01f5d5ffd51ab896310770e7c2ea9f1ee6087af8d9b9ba3fe73681b99f91eacfe179d84d2 + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-proto@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/exporter-metrics-otlp-proto@npm:0.201.1" + dependencies: + "@opentelemetry/core": 2.0.1 + "@opentelemetry/exporter-metrics-otlp-http": 0.201.1 + "@opentelemetry/otlp-exporter-base": 0.201.1 + "@opentelemetry/otlp-transformer": 0.201.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/sdk-metrics": 2.0.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 0aac7ef9cf577dd684bd1199faa169dd377be49fa2a5feffc1e16360c5cec621a648641c17f2380f3b86c5143702df775ae5f7fd7d869e314a1b41bba3e101ea + languageName: node + linkType: hard + +"@opentelemetry/exporter-prometheus@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/exporter-prometheus@npm:0.201.1" + dependencies: + "@opentelemetry/core": 2.0.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/sdk-metrics": 2.0.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: a74514794d57e6855818a77aa29221fd901a26beee1d34e546ad56138057adfd8adb7d0fcfd2eb35393d0cecd9e65a2fb92e5dcd9f50785e19b396c2e2245f72 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-grpc@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.201.1" + dependencies: + "@grpc/grpc-js": ^1.7.1 + "@opentelemetry/core": 2.0.1 + "@opentelemetry/otlp-exporter-base": 0.201.1 + "@opentelemetry/otlp-grpc-exporter-base": 0.201.1 + "@opentelemetry/otlp-transformer": 0.201.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/sdk-trace-base": 2.0.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 801640d6f4b3101cc884bbae83821e21b468fc74768194e7978cda817c3c29323c2931d800345529e8257badbc86bdb9cfd9403634701099acde5c3374979931 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-http@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.201.1" + dependencies: + "@opentelemetry/core": 2.0.1 + "@opentelemetry/otlp-exporter-base": 0.201.1 + "@opentelemetry/otlp-transformer": 0.201.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/sdk-trace-base": 2.0.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: d03277d34228721767cb6997ddb6fa9a020d7bea7b4e342effaf6be880047be0545bf53026b56de16aab3d4a31476f55451426abc28cb1bf2ffac18f8b3b6ccb + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-proto@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.201.1" + dependencies: + "@opentelemetry/core": 2.0.1 + "@opentelemetry/otlp-exporter-base": 0.201.1 + "@opentelemetry/otlp-transformer": 0.201.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/sdk-trace-base": 2.0.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 2c6eb896bedbb7c7f1051858e8a4fa9fffdc45b7729f68a294963881e31348ce41b69b3b876eb5302b70cc2c59315bfef851a554797f1655732336be857043dc + languageName: node + linkType: hard + +"@opentelemetry/exporter-zipkin@npm:2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/exporter-zipkin@npm:2.0.1" + dependencies: + "@opentelemetry/core": 2.0.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/sdk-trace-base": 2.0.1 + "@opentelemetry/semantic-conventions": ^1.29.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 194b69097713c59ea413a067facd2046d0ccc3b571685a7d76dffd5e67a6bb4a6918b2a552649126b16d481dbb6e2f6370a419fae73e32a6251794dc7ad87182 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-amqplib@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-amqplib@npm:0.48.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 707735b1eab377d1124c18400ce5638910484a6b92c5ab7579fd92a2689fc6ec916cfb93db2de4bed3d69b6e0ed7335dfd128e855eedb10e85b476fef7aba504 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-aws-lambda@npm:^0.52.0": + version: 0.52.0 + resolution: "@opentelemetry/instrumentation-aws-lambda@npm:0.52.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + "@types/aws-lambda": 8.10.147 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 65a4dcf54eb18c04c29bc605e809c3b6eaa0cbdb01bab634b802e9c2703b969071322cde4c127ca1aa6eab1b8660811676933417faefddc4130a94be198129f8 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-aws-sdk@npm:^0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation-aws-sdk@npm:0.53.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/propagation-utils": ^0.31.1 + "@opentelemetry/semantic-conventions": ^1.31.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: ef06281df20b8b56c5909df6401ec4e5e1f3e7079189f86388010a8bcc839e93e11728a4ea7032c733d0eba7103c99208dc5ced738d29130837ab9ea27e119e8 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-bunyan@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-bunyan@npm:0.47.0" + dependencies: + "@opentelemetry/api-logs": ^0.201.0 + "@opentelemetry/instrumentation": ^0.201.0 + "@types/bunyan": 1.8.11 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: ba0e871b79b5eeda2efee22c549e9d4d8f01b2aae6696585db08bada426af1857cc684765e240db20f96a9c2bfd231c5c0e3eee86ca73ab673bc217ca36216d8 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-cassandra-driver@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-cassandra-driver@npm:0.47.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 59e4aae5a2ee6cf28cec7f483a2548796bc95099cce49136a28e67042de794502a8aafd7c2757bf40f5c46e22edf02d59c0f00245024095b1207f594523e22c2 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-connect@npm:^0.45.0": + version: 0.45.0 + resolution: "@opentelemetry/instrumentation-connect@npm:0.45.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + "@types/connect": 3.4.38 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 291c628007dbc47fa497e874e0385e674f858b204b9f505008c28f3f2603fc1de2e7bc4db19d2e3193d600959642e44c023d4512f82e3b1aa571f5ade25ea145 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-cucumber@npm:^0.16.0": + version: 0.16.0 + resolution: "@opentelemetry/instrumentation-cucumber@npm:0.16.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 90d3bfb0ab4eafa7a6874fd3c59daddcf9d02624785c628aee8f4085e2595f56b9dd75355689c731111d656180531cbbfa040d64bba091f82aa2a5765d2eb37c + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-dataloader@npm:^0.18.0": + version: 0.18.0 + resolution: "@opentelemetry/instrumentation-dataloader@npm:0.18.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: ea2622834e3f0bd71ab2f9ffda43985bcf1a80937a86b0286191fbc434d567a8612568dbf0df8a2a4c7282de441575272772d82bcae72766e81671e7ea5e7611 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-dns@npm:^0.45.0": + version: 0.45.0 + resolution: "@opentelemetry/instrumentation-dns@npm:0.45.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: e63e52d57d993652beef55e910dcda5e8ec11927b3252177c9bca821162be6f539aba5a35d63f5b36cd9283cf210c19c3a8cd45e861db7fdc4b5979f1b2c8bd5 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-express@npm:^0.50.0": + version: 0.50.0 + resolution: "@opentelemetry/instrumentation-express@npm:0.50.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: fc7a04d3dd87e1233e8cf133dcaf2625989a86f44e7f9ecf10c663875572e2b017b79bd5d35ac9b309cae13a9b79c4b54b8a5f77c1b09b94350f9cb8fb71e545 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-fastify@npm:^0.46.0": + version: 0.46.0 + resolution: "@opentelemetry/instrumentation-fastify@npm:0.46.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: a84fb5c7cb5df0d9efb90aff7d1e2b9fca2c377897213f01ddd1a74673b166bf23fb42a18bdc1cde85698a5356ef49dd3afa457e1fea87cde32ff0938610b763 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-fs@npm:^0.21.0": + version: 0.21.0 + resolution: "@opentelemetry/instrumentation-fs@npm:0.21.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: fe843e02483cc5fcd47afba8ffae8c6deb36915992f97f0f07fcece22be7399a8576729ec135cb8ed22855b56d37abe46eae1b674af6871589473f963629fd35 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-generic-pool@npm:^0.45.0": + version: 0.45.0 + resolution: "@opentelemetry/instrumentation-generic-pool@npm:0.45.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 382b193946b596e76714ca7b3989cabbd62b51b7af02d6189464eb3ab8f564de88d11059eefb3fd44a78bdb52c12f84cf3b95ebe8d02e9293ff87aace0c2f3f0 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-graphql@npm:^0.49.0": + version: 0.49.0 + resolution: "@opentelemetry/instrumentation-graphql@npm:0.49.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 7d3700a9886ecef68697ac541bd4154896f170243bf04bae91f93040045aadee37228ffe7a461894f9d650221c0340108ca0a6d5538e5f8d6a4f767a114e71db + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-grpc@npm:^0.201.0": + version: 0.201.1 + resolution: "@opentelemetry/instrumentation-grpc@npm:0.201.1" + dependencies: + "@opentelemetry/instrumentation": 0.201.1 + "@opentelemetry/semantic-conventions": ^1.29.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 31240661ca3d26662b79b434b2a8d738c5b625cfc2b677c7e89b39c6eb008104930318671e141fb18fe57b8be7aeb1770032cbb2f13a55dac77e123cc0a7c058 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-hapi@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-hapi@npm:0.47.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 33a83ea50b350ff680aef07abd311ad75d69b6de8541f06550980b0912a528eb91084a74685dade1b769096ee271c7b08d8c86d45a063f972184707c6ea08a9c + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-http@npm:^0.201.0": + version: 0.201.1 + resolution: "@opentelemetry/instrumentation-http@npm:0.201.1" + dependencies: + "@opentelemetry/core": 2.0.1 + "@opentelemetry/instrumentation": 0.201.1 + "@opentelemetry/semantic-conventions": ^1.29.0 + forwarded-parse: 2.1.2 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: e139951fab90d58c3ecf30fcf588f6540d2ea54696c250ee1bc889d5bcca83f1ee49b7f836ebdd1d56f7139d9e75d24b7ea9c8dfe5273c3e2824f805b1dfc426 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-ioredis@npm:^0.49.0": + version: 0.49.0 + resolution: "@opentelemetry/instrumentation-ioredis@npm:0.49.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/redis-common": ^0.37.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 840d1abdfbd740b960ba7079b9ae1b2e2ea4e154aeb951c63fbbefe028d2a55109b061c0bec79b506860cc39a643b6f7abaa8179466bf772085772861a605a6f + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-kafkajs@npm:^0.10.0": + version: 0.10.0 + resolution: "@opentelemetry/instrumentation-kafkajs@npm:0.10.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.30.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: a93946ae79491804405ee37022060f1cdd8ffa8390e3f2eae1cb5c2aa602bd83ccf420f4397d9350f32bca133acc1872e0fa8dfd80d1fd7ebaf95f6f590d16a1 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-knex@npm:^0.46.0": + version: 0.46.0 + resolution: "@opentelemetry/instrumentation-knex@npm:0.46.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 5d3f751d009f1472f9d424bce0940dbfa52f470b4422e147a194bb52a2a87c7330732b8dc984248a06270de28775506f2394bd35c90eb033eaee35e7df0bb1e3 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-koa@npm:^0.49.0": + version: 0.49.0 + resolution: "@opentelemetry/instrumentation-koa@npm:0.49.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 90a9766a0dbb1909f382f37215ba1480492c5d436fe4aa8a27786fe85b4d32c7fcdd34a6df592b82a699e689f8438286da8b8f6e18c41dafdf74687e92f5b48e + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-lru-memoizer@npm:^0.46.0": + version: 0.46.0 + resolution: "@opentelemetry/instrumentation-lru-memoizer@npm:0.46.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 474a3e2aeffaf291ef4b62f786de42f5cbc4467bdfce69e63ccf276d2ee0899239bbbbc774d115377aab1f4d295daa128856ad798e1a23d00dec3b5854b75527 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-memcached@npm:^0.45.0": + version: 0.45.0 + resolution: "@opentelemetry/instrumentation-memcached@npm:0.45.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + "@types/memcached": ^2.2.6 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: f6b42dc1ac04271ccd4c1e32adc41fd24f691db5ba77d205b18256b1209e4b330f9336f34c954067b30d7aacd2c23469d9b4d60352cab74504f94fbc659462dc + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongodb@npm:^0.54.0": + version: 0.54.0 + resolution: "@opentelemetry/instrumentation-mongodb@npm:0.54.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 77062e3c9e2bd8dd05c48a3a7f1cd55474b51ec9ca2c4a861ae7d77f460a0b08eeb425a8756191406fa0ba8ed1eae9a4e01f914e92bd041092ab069000272ed7 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongoose@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-mongoose@npm:0.48.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: fa3beaa39ae3721bfa55419ebd688ca5504c00b46645e01ad86bbaefc1c1fe310b2b0a958013bba488b75a08c357bafd19c474bdd01b82eb71d7bd2e82ee329f + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql2@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-mysql2@npm:0.47.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + "@opentelemetry/sql-common": ^0.41.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 7ca8c0b709b4e96f3dfab0bc4a9fffbe03e0b2779935ba03aa5dbe0ff2862db8f109d272c789244e02b6158d5582fed77582ced3cc4da691f905b296a4c1894a + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-mysql@npm:0.47.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + "@types/mysql": 2.15.26 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 29dcac0958d71a2c0bffd2a214407a71bb243dead44bbac3c212e42a13ddd3f430a300b0f49260abdd7ffce8587c9561e25b3dc5dc4718fac138d2d369b35633 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-nestjs-core@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-nestjs-core@npm:0.47.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.30.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 6c965f98f995f260803ca3620d79cf73ad39328238ac571b56c939a55f4ad90d9a1c737ca0b194edd2cc72737e229e54e174f01eb965cb92154b48073c6a21dd + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-net@npm:^0.45.0": + version: 0.45.0 + resolution: "@opentelemetry/instrumentation-net@npm:0.45.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 679d998ce8526a38856d0c094f90e184a0c3cfd02c30cc47a6fcf52536f08f2d839924ced0934101ecf42c742f8212861ef4c5555b1280532527cf4d8088c539 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-oracledb@npm:^0.27.0": + version: 0.27.0 + resolution: "@opentelemetry/instrumentation-oracledb@npm:0.27.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + "@types/oracledb": 6.5.2 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 5effe374b39efee86f4ef339054b7ae42da9782a8858f68c91bf6f5d91add91e0ca5f0e0ffd69a7a9dc52e73da29a5bd2ce91f4ef484b1d9113a5fecc84deaa1 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pg@npm:^0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation-pg@npm:0.53.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + "@opentelemetry/sql-common": ^0.41.0 + "@types/pg": 8.6.1 + "@types/pg-pool": 2.0.6 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 88287d6dd466b55959778c98a194521c599480d42b17d95a80fab23286b8de4f3dfcbe70f93cd19e223ea83fb410ba4b89a0a7f950afe0036f3d726a23d90880 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pino@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-pino@npm:0.48.0" + dependencies: + "@opentelemetry/api-logs": ^0.201.0 + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 6c509303d3aa88f1ed69a2eb4455e6edb8dd60ca08cc5eb8e6526d98413a284243447e0ceaad4b4b2417394a74051dee48d74b19ef227986bc590d313ca49b4b + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-redis-4@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-redis-4@npm:0.48.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/redis-common": ^0.37.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 4879cd9ebb0b0fce47e9af90f6c4b9667a5b626a62888df7bdeb18f560779db177823af60beda82962a364e6ccf8d4f9101ca4c95b4799b428e9ed91dc6e55c6 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-redis@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-redis@npm:0.48.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/redis-common": ^0.37.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 39a399cc5bf5286b7ede2230e5973177b6864ad7eb31f74aa24a8fdcfdd6e92b40db8ebadfd3d92cbbf8acceebbfcb9f0346b00811b064570b32280fc62a8071 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-restify@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-restify@npm:0.47.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 7d02e409ec93304d3311e31af951658788266012f931168f5f8d50bfc711401c15d0dc287533ab83ef9cf8595f4a62e25ad6866c9aa785bace7b90e02893aa23 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-router@npm:^0.46.0": + version: 0.46.0 + resolution: "@opentelemetry/instrumentation-router@npm:0.46.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 7a20d10c6c2cf3602ac4785b89a527ce79547ec0ae37cdd748f2bea1039167d9d4f1a5606d7c8b386ff585ce954df9077eec6d0a37d04660e925e4534ba60c61 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-runtime-node@npm:^0.15.0": + version: 0.15.0 + resolution: "@opentelemetry/instrumentation-runtime-node@npm:0.15.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 3d8f5ea7af8117529714d9db0d1994838b2d55abb24f455a0032692dd6ae23c556b944fbc58747ce49c65213acc8afa7d6462987537b1d76bc05b264f20fbc7d + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-socket.io@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-socket.io@npm:0.48.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 08804974dc35c558c484af65143c0a56f9d1293bb7798e6cdd31bbfa70a3ec3d352fafd245e2b51ed99b9647d5ed6da476b7792bc637bb6404f01ccad941492e + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-tedious@npm:^0.20.0": + version: 0.20.0 + resolution: "@opentelemetry/instrumentation-tedious@npm:0.20.0" + dependencies: + "@opentelemetry/instrumentation": ^0.201.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + "@types/tedious": ^4.0.14 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 40c076ef31823f7c445039e45da03b46d3bcdbfda562ee10fe155004bb92d5125ad46fabe7f61f08d7fa7bd01f652390ff74991416ececa57c2e53d106683254 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-undici@npm:^0.12.0": + version: 0.12.0 + resolution: "@opentelemetry/instrumentation-undici@npm:0.12.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/instrumentation": ^0.201.0 + peerDependencies: + "@opentelemetry/api": ^1.7.0 + checksum: c51001fab5fb79d59fa79181ac5750d120bc59c13e4f122940652e4774ee10518476dc2bb9198290eb5cdf7257bc48d0c4f667bfd04faf210c91dc234c3b05ff + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-winston@npm:^0.46.0": + version: 0.46.0 + resolution: "@opentelemetry/instrumentation-winston@npm:0.46.0" + dependencies: + "@opentelemetry/api-logs": ^0.201.0 + "@opentelemetry/instrumentation": ^0.201.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 7711ccc31f4c5cc63f1211bdfcc0e48c12c7c995e52f51833e1210e782bc7c630377688f6a3f55eb252fc5f589db145b5859bba03863efb7192e9c8986f25322 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.201.1, @opentelemetry/instrumentation@npm:^0.201.0": + version: 0.201.1 + resolution: "@opentelemetry/instrumentation@npm:0.201.1" + dependencies: + "@opentelemetry/api-logs": 0.201.1 + "@types/shimmer": ^1.2.0 + import-in-the-middle: ^1.8.1 + require-in-the-middle: ^7.1.1 + shimmer: ^1.2.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 7c2959ae2132f9b890701034450d676231233ba3d845b0fe823c3235bc8de00790e1f706d1e9e1a4a28eda679eedc466c7bbef16cb3367b75ba3a360fb27405d + languageName: node + linkType: hard + +"@opentelemetry/otlp-exporter-base@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/otlp-exporter-base@npm:0.201.1" + dependencies: + "@opentelemetry/core": 2.0.1 + "@opentelemetry/otlp-transformer": 0.201.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 30f83eb513f4151fd7a4e2b6211e624afdb6280919d2b3b3483f5852d15f792a21e6d7cd492b02a564ec38b1338baff9788f775f8153b475f23137a806633736 + languageName: node + linkType: hard + +"@opentelemetry/otlp-grpc-exporter-base@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.201.1" + dependencies: + "@grpc/grpc-js": ^1.7.1 + "@opentelemetry/core": 2.0.1 + "@opentelemetry/otlp-exporter-base": 0.201.1 + "@opentelemetry/otlp-transformer": 0.201.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 7bde72718035108c52d2da87a152a95c49d78802b7e915e8a210164564ea3562faaa09f30ac6dc5ed16ce7d29bb039dbc5838afc9b1b3908878cdadd92801bf6 + languageName: node + linkType: hard + +"@opentelemetry/otlp-transformer@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/otlp-transformer@npm:0.201.1" + dependencies: + "@opentelemetry/api-logs": 0.201.1 + "@opentelemetry/core": 2.0.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/sdk-logs": 0.201.1 + "@opentelemetry/sdk-metrics": 2.0.1 + "@opentelemetry/sdk-trace-base": 2.0.1 + protobufjs: ^7.3.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 3ef90d40260121dc67a46faffa5ae9d42d2c32198fff2a596e63f1bc9f4117cdee7fe9cf8034ee6cb45c2a17f94fcc53efd2b4bf3e416e9e601ed25b7120cc18 + languageName: node + linkType: hard + +"@opentelemetry/propagation-utils@npm:^0.31.1": + version: 0.31.1 + resolution: "@opentelemetry/propagation-utils@npm:0.31.1" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 1fbe0abad68f26db6f2592a5cffbf02bab24011dd28f96ef9a977568cf70f55724c3516c0599e4a27964b0f67883c0d091cadd4f688c6caadc6b3bb527e99cfd + languageName: node + linkType: hard + +"@opentelemetry/propagator-b3@npm:2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/propagator-b3@npm:2.0.1" + dependencies: + "@opentelemetry/core": 2.0.1 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 36a759725651462ae5fc1ff3999fe5195e79374be1977ca090e4407d5d282153cf669dc588eb4f47d556e95224ae2af4208f3608b6a70bdc1e142d0543bd6a85 + languageName: node + linkType: hard + +"@opentelemetry/propagator-jaeger@npm:2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/propagator-jaeger@npm:2.0.1" + dependencies: + "@opentelemetry/core": 2.0.1 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: b9939c13b0e6c9b655a29b3f773f02bda78479a37526ee1f0fb30bf7111c084704d1b138c05c9784ce2c8a662d4975ec0475a5964e90b1a597a767df3781e95d + languageName: node + linkType: hard + +"@opentelemetry/redis-common@npm:^0.37.0": + version: 0.37.0 + resolution: "@opentelemetry/redis-common@npm:0.37.0" + checksum: 55e7da87e2d4378ad47eb878313a20e4596d0758f877fad9c4439cd68039e7ac9634e51c24465413d7c6c74190f83bfcd51c4155c8671c987d38d554213ba81e + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-alibaba-cloud@npm:^0.31.1": + version: 0.31.1 + resolution: "@opentelemetry/resource-detector-alibaba-cloud@npm:0.31.1" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/resources": ^2.0.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: f5564865532410545ba519e8e44c73e469e270d77398c46df7c4d983767c6b298b2d39498a5959a9e19ca0210b2b123c8877646f8752f9668ddcfff6795cb940 + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-aws@npm:^2.1.0": + version: 2.1.0 + resolution: "@opentelemetry/resource-detector-aws@npm:2.1.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/resources": ^2.0.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 0b008c675f2f0c44da915a4781c1d7955cf1808896ba486498697697b33ebb6ae472ab667fddb68cc8adfeea9048ec51f3e99fbfa63a622c6c4dcc9024a89231 + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-azure@npm:^0.8.0": + version: 0.8.0 + resolution: "@opentelemetry/resource-detector-azure@npm:0.8.0" dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/resources": ^2.0.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 2de41fb50f1c97175d584e2a1ae99aeeed095e91dbfd3db3352a46f160f9453dcb77df9fc6e0d13daac39dacf77f16487cec1d870e12026da2370e7dab6f773e languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" +"@opentelemetry/resource-detector-container@npm:^0.7.1": + version: 0.7.1 + resolution: "@opentelemetry/resource-detector-container@npm:0.7.1" dependencies: - "@jridgewell/resolve-uri": ^3.1.0 - "@jridgewell/sourcemap-codec": ^1.4.14 - checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/resources": ^2.0.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 590bf0721aade9cc63e8756bfd9f711630290ab99edc4fdf2275e982c297b9d200dbddf0cda69a7277785485e9f96d3fc24160c5e80512a2b4aa266dce4cc54b languageName: node linkType: hard -"@js-sdsl/ordered-map@npm:^4.4.2": - version: 4.4.2 - resolution: "@js-sdsl/ordered-map@npm:4.4.2" - checksum: a927ae4ff8565ecb75355cc6886a4f8fadbf2af1268143c96c0cce3ba01261d241c3f4ba77f21f3f017a00f91dfe9e0673e95f830255945c80a0e96c6d30508a +"@opentelemetry/resource-detector-gcp@npm:^0.35.0": + version: 0.35.0 + resolution: "@opentelemetry/resource-detector-gcp@npm:0.35.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + "@opentelemetry/resources": ^2.0.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + gcp-metadata: ^6.0.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: eed48fef07f973b13be4d47773afb4f892c8c890422bb9256ea436ae396f1d9c40996e6017340a8d16c04163f6993ce2fc1fc2aa676f87baaccdb15f1d6b35b6 languageName: node linkType: hard -"@jsdevtools/ono@npm:^7.1.3": - version: 7.1.3 - resolution: "@jsdevtools/ono@npm:7.1.3" - checksum: 2297fcd472ba810bffe8519d2249171132844c7174f3a16634f9260761c8c78bc0428a4190b5b6d72d45673c13918ab9844d706c3ed4ef8f62ab11a2627a08ad +"@opentelemetry/resources@npm:2.0.1, @opentelemetry/resources@npm:^2.0.0": + version: 2.0.1 + resolution: "@opentelemetry/resources@npm:2.0.1" + dependencies: + "@opentelemetry/core": 2.0.1 + "@opentelemetry/semantic-conventions": ^1.29.0 + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: c6609739dba208d7b5fe17595cec391a27a774a7e2b9d9ff23d916269a4a5523422d7a8180f6256701f403d68e79e903145454476792b8d83551770a2e42df59 languageName: node linkType: hard -"@mapbox/node-pre-gyp@npm:^1.0.0": - version: 1.0.11 - resolution: "@mapbox/node-pre-gyp@npm:1.0.11" +"@opentelemetry/sdk-logs@npm:0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/sdk-logs@npm:0.201.1" dependencies: - detect-libc: ^2.0.0 - https-proxy-agent: ^5.0.0 - make-dir: ^3.1.0 - node-fetch: ^2.6.7 - nopt: ^5.0.0 - npmlog: ^5.0.1 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.11 - bin: - node-pre-gyp: bin/node-pre-gyp - checksum: b848f6abc531a11961d780db813cc510ca5a5b6bf3184d72134089c6875a91c44d571ba6c1879470020803f7803609e7b2e6e429651c026fe202facd11d444b8 + "@opentelemetry/api-logs": 0.201.1 + "@opentelemetry/core": 2.0.1 + "@opentelemetry/resources": 2.0.1 + peerDependencies: + "@opentelemetry/api": ">=1.4.0 <1.10.0" + checksum: 0794949e5fcc4124ff567183ff4e36a545236cc2e61930667d54f365248e89eb95dec89161447421676974cd226d34487f2bf31353e5632eaa0a623ad9359f2f languageName: node linkType: hard -"@npmcli/agent@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/agent@npm:3.0.0" +"@opentelemetry/sdk-metrics@npm:2.0.1, @opentelemetry/sdk-metrics@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/sdk-metrics@npm:2.0.1" dependencies: - agent-base: ^7.1.0 - http-proxy-agent: ^7.0.0 - https-proxy-agent: ^7.0.1 - lru-cache: ^10.0.1 - socks-proxy-agent: ^8.0.3 - checksum: e8fc25d536250ed3e669813b36e8c6d805628b472353c57afd8c4fde0fcfcf3dda4ffe22f7af8c9070812ec2e7a03fb41d7151547cef3508efe661a5a3add20f + "@opentelemetry/core": 2.0.1 + "@opentelemetry/resources": 2.0.1 + peerDependencies: + "@opentelemetry/api": ">=1.9.0 <1.10.0" + checksum: d06dc527a030824ae2334eeacec57fad54a4c699809d2e14d98b9c4fff74b7dc34c0dfd7031e17016cce1e96e67fbd5353975ee24472e31569bb7d7863e59a67 + languageName: node + linkType: hard + +"@opentelemetry/sdk-node@npm:^0.201.0, @opentelemetry/sdk-node@npm:^0.201.1": + version: 0.201.1 + resolution: "@opentelemetry/sdk-node@npm:0.201.1" + dependencies: + "@opentelemetry/api-logs": 0.201.1 + "@opentelemetry/core": 2.0.1 + "@opentelemetry/exporter-logs-otlp-grpc": 0.201.1 + "@opentelemetry/exporter-logs-otlp-http": 0.201.1 + "@opentelemetry/exporter-logs-otlp-proto": 0.201.1 + "@opentelemetry/exporter-metrics-otlp-grpc": 0.201.1 + "@opentelemetry/exporter-metrics-otlp-http": 0.201.1 + "@opentelemetry/exporter-metrics-otlp-proto": 0.201.1 + "@opentelemetry/exporter-prometheus": 0.201.1 + "@opentelemetry/exporter-trace-otlp-grpc": 0.201.1 + "@opentelemetry/exporter-trace-otlp-http": 0.201.1 + "@opentelemetry/exporter-trace-otlp-proto": 0.201.1 + "@opentelemetry/exporter-zipkin": 2.0.1 + "@opentelemetry/instrumentation": 0.201.1 + "@opentelemetry/propagator-b3": 2.0.1 + "@opentelemetry/propagator-jaeger": 2.0.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/sdk-logs": 0.201.1 + "@opentelemetry/sdk-metrics": 2.0.1 + "@opentelemetry/sdk-trace-base": 2.0.1 + "@opentelemetry/sdk-trace-node": 2.0.1 + "@opentelemetry/semantic-conventions": ^1.29.0 + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: a5f8fd809b49c6d966a61be265d77e5ef07c96d3a0616740d2d275755a08f9bf795daf2d5a1600a37765981411a9f14f82a7259d53d37e17c5b2c11c6c315379 languageName: node linkType: hard -"@npmcli/fs@npm:^2.1.0": - version: 2.1.2 - resolution: "@npmcli/fs@npm:2.1.2" +"@opentelemetry/sdk-trace-base@npm:2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/sdk-trace-base@npm:2.0.1" dependencies: - "@gar/promisify": ^1.1.3 - semver: ^7.3.5 - checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 + "@opentelemetry/core": 2.0.1 + "@opentelemetry/resources": 2.0.1 + "@opentelemetry/semantic-conventions": ^1.29.0 + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: a1acccfdacee811b5cc42718679e8b5fb47ce0dfe26a128a8f8b8a54f726531d8582e2c3ddcfcd2b63f5f7c0d66ee6b6a30d0a931cf628fff7238931a564f80b languageName: node linkType: hard -"@npmcli/fs@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/fs@npm:4.0.0" +"@opentelemetry/sdk-trace-node@npm:2.0.1, @opentelemetry/sdk-trace-node@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/sdk-trace-node@npm:2.0.1" dependencies: - semver: ^7.3.5 - checksum: 68951c589e9a4328698a35fd82fe71909a257d6f2ede0434d236fa55634f0fbcad9bb8755553ce5849bd25ee6f019f4d435921ac715c853582c4a7f5983c8d4a + "@opentelemetry/context-async-hooks": 2.0.1 + "@opentelemetry/core": 2.0.1 + "@opentelemetry/sdk-trace-base": 2.0.1 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: a8f7b3e997fbf31fa813556c03663424b5dce265dd86994a7bbd65a61357398041c9b843eaebd84b37a0d1204fb26c18f763e0236ebea26a337e2965ac3ee642 languageName: node linkType: hard -"@npmcli/move-file@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/move-file@npm:2.0.1" - dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 +"@opentelemetry/semantic-conventions@npm:^1.27.0, @opentelemetry/semantic-conventions@npm:^1.29.0, @opentelemetry/semantic-conventions@npm:^1.30.0, @opentelemetry/semantic-conventions@npm:^1.31.0": + version: 1.34.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.34.0" + checksum: ea6a95616f9c0cc2c52439fe3966ff03ac21d9d0d906dca30246c23cee0152525eb6033a83a36951a52b7f1b043423bbb7aefe53d98cbb83feb9b0e91c8bc158 languageName: node linkType: hard -"@opentelemetry/api@npm:^1.3.0": - version: 1.9.0 - resolution: "@opentelemetry/api@npm:1.9.0" - checksum: 9e88e59d53ced668f3daaecfd721071c5b85a67dd386f1c6f051d1be54375d850016c881f656ffbe9a03bedae85f7e89c2f2b635313f9c9b195ad033cdc31020 +"@opentelemetry/sql-common@npm:^0.41.0": + version: 0.41.0 + resolution: "@opentelemetry/sql-common@npm:0.41.0" + dependencies: + "@opentelemetry/core": ^2.0.0 + peerDependencies: + "@opentelemetry/api": ^1.1.0 + checksum: c96b122871330f6a64cf5b59468d808a2c74347d772426978c9f1661897aa4e7d1d692a0f445eccba6d6d8eb38ee5406ce6b76a4f99830b5edc803995157f607 languageName: node linkType: hard @@ -4478,6 +5559,13 @@ __metadata: languageName: node linkType: hard +"@types/aws-lambda@npm:8.10.147": + version: 8.10.147 + resolution: "@types/aws-lambda@npm:8.10.147" + checksum: 697348cb9040563f072d2a77eec8aad3d9705f3e0f43c75ce8ae338c522e0bce8caffcfa0e11e51b674030d3221f776b07c257f98377375af08fe08df6e4de84 + languageName: node + linkType: hard + "@types/babel__core@npm:^7.1.14": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" @@ -4529,6 +5617,15 @@ __metadata: languageName: node linkType: hard +"@types/bunyan@npm:1.8.11": + version: 1.8.11 + resolution: "@types/bunyan@npm:1.8.11" + dependencies: + "@types/node": "*" + checksum: 9c8bf737bc3ca7a7a5bd1ad1414145342025e2c1e18c246b4a48e1ac052267d9072b85e9dba94eef6c53facd298365fc9f0957d9f99286e0f04a2b2c030fe13a + languageName: node + linkType: hard + "@types/caseless@npm:*": version: 0.12.5 resolution: "@types/caseless@npm:0.12.5" @@ -4536,7 +5633,7 @@ __metadata: languageName: node linkType: hard -"@types/connect@npm:*": +"@types/connect@npm:*, @types/connect@npm:3.4.38": version: 3.4.38 resolution: "@types/connect@npm:3.4.38" dependencies: @@ -4666,6 +5763,15 @@ __metadata: languageName: node linkType: hard +"@types/memcached@npm:^2.2.6": + version: 2.2.10 + resolution: "@types/memcached@npm:2.2.10" + dependencies: + "@types/node": "*" + checksum: c95e2ed494d5df5e45bab024d24ff2ba45930eb9737cb86564a5ac2a0b3fb5dfdc23d8a65061da38ffe2aabe202a8d333764c0c3dc99d2bb205bff8ba620f2c2 + languageName: node + linkType: hard + "@types/mime@npm:^1": version: 1.3.5 resolution: "@types/mime@npm:1.3.5" @@ -4682,6 +5788,15 @@ __metadata: languageName: node linkType: hard +"@types/mysql@npm:2.15.26": + version: 2.15.26 + resolution: "@types/mysql@npm:2.15.26" + dependencies: + "@types/node": "*" + checksum: c43395643aca3565492a12f7bb7168cea7f5fa1b6539caabc99e657bbbea3ef330d65e8d8fc873fedfbbbed48a01ac8c1ce0d31c7989cd44a4845b32253daf6c + languageName: node + linkType: hard + "@types/node-fetch@npm:^2.6.2": version: 2.6.11 resolution: "@types/node-fetch@npm:2.6.11" @@ -4701,6 +5816,46 @@ __metadata: languageName: node linkType: hard +"@types/oracledb@npm:6.5.2": + version: 6.5.2 + resolution: "@types/oracledb@npm:6.5.2" + dependencies: + "@types/node": "*" + checksum: 02abec363e8ca1455310e930826095461c2b1e01ca7031aed99f5f0a029ee236a0a4df9c5e6d97e8757ef8e3e8531a1ce906cd65636acf355e72527bb96d4003 + languageName: node + linkType: hard + +"@types/pg-pool@npm:2.0.6": + version: 2.0.6 + resolution: "@types/pg-pool@npm:2.0.6" + dependencies: + "@types/pg": "*" + checksum: cc54ce97115effc982bd052f79901a78215e76554aca0ecc92e78eb907e4fb2962924039369cd9aaf48075f1637593ce14647c62d3a2eb03789ce5d1c6df750b + languageName: node + linkType: hard + +"@types/pg@npm:*": + version: 8.15.2 + resolution: "@types/pg@npm:8.15.2" + dependencies: + "@types/node": "*" + pg-protocol: "*" + pg-types: ^4.0.1 + checksum: 008699150750fe4d50db376cf6a059ce14dd3046bd4be04b5d973418291301e385a5f3b3f4028683c5baadf47fc794544dd0f23179c235957c202a4f0f8460e4 + languageName: node + linkType: hard + +"@types/pg@npm:8.6.1": + version: 8.6.1 + resolution: "@types/pg@npm:8.6.1" + dependencies: + "@types/node": "*" + pg-protocol: "*" + pg-types: ^2.2.0 + checksum: a44710ff06e70f57685ddb88edbb93d4b46e03fed90619f09853ed3868ab28541c4da03eccf6b0b444a7566a0b3c56028543ced43554d51168ca3f8ae15e194f + languageName: node + linkType: hard + "@types/phoenix@npm:^1.5.4": version: 1.6.5 resolution: "@types/phoenix@npm:1.6.5" @@ -4771,6 +5926,13 @@ __metadata: languageName: node linkType: hard +"@types/shimmer@npm:^1.2.0": + version: 1.2.0 + resolution: "@types/shimmer@npm:1.2.0" + checksum: f081a31d826ce7bfe8cc7ba8129d2b1dffae44fd580eba4fcf741237646c4c2494ae6de2cada4b7713d138f35f4bc512dbf01311d813dee82020f97d7d8c491c + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" @@ -4778,6 +5940,15 @@ __metadata: languageName: node linkType: hard +"@types/tedious@npm:^4.0.14": + version: 4.0.14 + resolution: "@types/tedious@npm:4.0.14" + dependencies: + "@types/node": "*" + checksum: 88505dda8b8e57e1da58ce74fb29bc2b4d64d90e9c34dc1d4b4010116b9785e23ce43f1e8016901bd27037e17d9d148e34d4ebd5f57d060212847e0df91cf024 + languageName: node + linkType: hard + "@types/tough-cookie@npm:*": version: 4.0.5 resolution: "@types/tough-cookie@npm:4.0.5" @@ -4810,13 +5981,6 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:1, abbrev@npm:^1.0.0": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 - languageName: node - linkType: hard - "abbrev@npm:^3.0.0": version: 3.0.1 resolution: "abbrev@npm:3.0.1" @@ -4843,6 +6007,15 @@ __metadata: languageName: node linkType: hard +"acorn-import-attributes@npm:^1.9.5": + version: 1.9.5 + resolution: "acorn-import-attributes@npm:1.9.5" + peerDependencies: + acorn: ^8 + checksum: 1c0c49b6a244503964ae46ae850baccf306e84caf99bc2010ed6103c69a423987b07b520a6c619f075d215388bd4923eccac995886a54309eda049ab78a4be95 + languageName: node + linkType: hard + "acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": version: 8.3.4 resolution: "acorn-walk@npm:8.3.4" @@ -4861,6 +6034,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.14.0": + version: 8.14.1 + resolution: "acorn@npm:8.14.1" + bin: + acorn: bin/acorn + checksum: 260d9bb6017a1b6e42d31364687f0258f78eb20210b36ef2baad38fd619d78d4e95ff7dde9b3dbe0d81f137f79a8d651a845363a26e6985997f7b71145dc5e94 + languageName: node + linkType: hard + "address@npm:^1.2.2": version: 1.2.2 resolution: "address@npm:1.2.2" @@ -4902,25 +6084,6 @@ __metadata: languageName: node linkType: hard -"agentkeepalive@npm:^4.2.1": - version: 4.5.0 - resolution: "agentkeepalive@npm:4.5.0" - dependencies: - humanize-ms: ^1.2.1 - checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - "ajv-draft-04@npm:^1.0.0": version: 1.0.0 resolution: "ajv-draft-04@npm:1.0.0" @@ -5057,33 +6220,6 @@ __metadata: languageName: node linkType: hard -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^2.0.0": - version: 2.0.0 - resolution: "are-we-there-yet@npm:2.0.0" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 6c80b4fd04ecee6ba6e737e0b72a4b41bdc64b7d279edfc998678567ff583c8df27e27523bc789f2c99be603ffa9eaa612803da1d886962d2086e7ff6fa90c7c - languageName: node - linkType: hard - -"are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 - languageName: node - linkType: hard - "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" @@ -5451,32 +6587,6 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^16.1.0": - version: 16.1.3 - resolution: "cacache@npm:16.1.3" - dependencies: - "@npmcli/fs": ^2.1.0 - "@npmcli/move-file": ^2.0.0 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - glob: ^8.0.1 - infer-owner: ^1.0.4 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - mkdirp: ^1.0.4 - p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^9.0.0 - tar: ^6.1.11 - unique-filename: ^2.0.0 - checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 - languageName: node - linkType: hard - "cacache@npm:^19.0.1": version: 19.0.1 resolution: "cacache@npm:19.0.1" @@ -5592,13 +6702,6 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - "chownr@npm:^3.0.0": version: 3.0.0 resolution: "chownr@npm:3.0.0" @@ -5620,10 +6723,10 @@ __metadata: languageName: node linkType: hard -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 +"cjs-module-lexer@npm:^1.2.2": + version: 1.4.3 + resolution: "cjs-module-lexer@npm:1.4.3" + checksum: 221a1661a9ff4944b472c85ac7cd5029b2f2dc7f6c5f4ecf887f261503611110b43a48acb6c07f8f04109c772d1637fdb20b31252bf27058f35aa97bf5ad8b12 languageName: node linkType: hard @@ -5695,15 +6798,6 @@ __metadata: languageName: node linkType: hard -"color-support@npm:^1.1.2, color-support@npm:^1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - "combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" @@ -5757,13 +6851,6 @@ __metadata: languageName: node linkType: hard -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - "content-disposition@npm:0.5.4": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" @@ -5984,7 +7071,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -5996,6 +7083,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.5": + version: 4.4.1 + resolution: "debug@npm:4.4.1" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: a43826a01cda685ee4cec00fb2d3322eaa90ccadbef60d9287debc2a886be3e835d9199c80070ede75a409ee57828c4c6cd80e4b154f2843f0dc95a570dc0729 + languageName: node + linkType: hard + "dedent@npm:^1.0.0": version: 1.5.3 resolution: "dedent@npm:1.5.3" @@ -6061,13 +7160,6 @@ __metadata: languageName: node linkType: hard -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - "depd@npm:2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -6082,13 +7174,6 @@ __metadata: languageName: node linkType: hard -"detect-libc@npm:^2.0.0": - version: 2.0.3 - resolution: "detect-libc@npm:2.0.3" - checksum: 2ba6a939ae55f189aea996ac67afceb650413c7a34726ee92c40fb0deb2400d57ef94631a8a3f052055eea7efb0f99a9b5e6ce923415daa3e68221f963cfc27d - languageName: node - linkType: hard - "detect-newline@npm:^3.0.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" @@ -6155,26 +7240,6 @@ __metadata: languageName: node linkType: hard -"duckdb-async@npm:^1.1.3": - version: 1.1.3 - resolution: "duckdb-async@npm:1.1.3" - dependencies: - duckdb: 1.1.3 - checksum: f4fe4854811a1818c177540dab36ff95d59f0de4065bdcd8b1a02c609ab52bbf5648f86011af6078db1a07d47f277884d073b7211990ba3d1f6bbf39d17153fe - languageName: node - linkType: hard - -"duckdb@npm:1.1.3": - version: 1.1.3 - resolution: "duckdb@npm:1.1.3" - dependencies: - "@mapbox/node-pre-gyp": ^1.0.0 - node-addon-api: ^7.0.0 - node-gyp: ^9.3.0 - checksum: 026ed420f1884fec5909b334e055dd85e86c3edda4f3e3aab599048fdc81903ddc060837bd04a41de2857959f7a6cba52183a4c39c23b947d3c86113ab9dcd98 - languageName: node - linkType: hard - "duplexify@npm:^4.0.0, duplexify@npm:^4.1.1, duplexify@npm:^4.1.3": version: 4.1.3 resolution: "duplexify@npm:4.1.3" @@ -6800,6 +7865,13 @@ __metadata: languageName: node linkType: hard +"forwarded-parse@npm:2.1.2": + version: 2.1.2 + resolution: "forwarded-parse@npm:2.1.2" + checksum: fca4df8898248d123d9d29a9fdf48005dd757366c2c17c1e195e8311a9aa89caf9f5e592f58f7d3d635087675ff39e85c32c6205838510f6f1fa4109de519930 + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -6825,15 +7897,6 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 - languageName: node - linkType: hard - "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" @@ -6893,39 +7956,6 @@ __metadata: languageName: node linkType: hard -"gauge@npm:^3.0.0": - version: 3.0.2 - resolution: "gauge@npm:3.0.2" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.2 - console-control-strings: ^1.0.0 - has-unicode: ^2.0.1 - object-assign: ^4.1.1 - signal-exit: ^3.0.0 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.2 - checksum: 81296c00c7410cdd48f997800155fbead4f32e4f82109be0719c63edc8560e6579946cc8abd04205297640691ec26d21b578837fd13a4e96288ab4b40b1dc3e9 - languageName: node - linkType: hard - -"gauge@npm:^4.0.3": - version: 4.0.4 - resolution: "gauge@npm:4.0.4" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.3 - console-control-strings: ^1.1.0 - has-unicode: ^2.0.1 - signal-exit: ^3.0.7 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.5 - checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d - languageName: node - linkType: hard - "gaxios@npm:^5.0.0, gaxios@npm:^5.0.1": version: 5.1.3 resolution: "gaxios@npm:5.1.3" @@ -6961,6 +7991,17 @@ __metadata: languageName: node linkType: hard +"gcp-metadata@npm:^6.0.0": + version: 6.1.1 + resolution: "gcp-metadata@npm:6.1.1" + dependencies: + gaxios: ^6.1.1 + google-logging-utils: ^0.0.2 + json-bigint: ^1.0.0 + checksum: 7dffe884fd718482b559a841da469dc30e766a4b86c71cda96bed42579763d58f28328238b2eb424c29ba10ef45d4bb8a6586441921734f01012b55bbea79711 + languageName: node + linkType: hard + "gcp-metadata@npm:^6.1.0": version: 6.1.0 resolution: "gcp-metadata@npm:6.1.0" @@ -7072,7 +8113,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.1, glob@npm:^8.0.3": +"glob@npm:^8.0.3": version: 8.1.0 resolution: "glob@npm:8.1.0" dependencies: @@ -7143,6 +8184,13 @@ __metadata: languageName: node linkType: hard +"google-logging-utils@npm:^0.0.2": + version: 0.0.2 + resolution: "google-logging-utils@npm:0.0.2" + checksum: 270de74cde8abe0a6639b4bebbb6db2c7d8a495cf14b23779450d3d010e759f3ffcb7eb200b1bcb05da1897fa63f3e336df2274f02fc69d3bb388019fa2b3134 + languageName: node + linkType: hard + "google-p12-pem@npm:^4.0.0": version: 4.0.1 resolution: "google-p12-pem@npm:4.0.1" @@ -7247,13 +8295,6 @@ __metadata: languageName: node linkType: hard -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - "hasown@npm:^2.0.0, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" @@ -7277,13 +8318,6 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.1.0": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 - languageName: node - linkType: hard - "http-cache-semantics@npm:^4.1.1": version: 4.2.0 resolution: "http-cache-semantics@npm:4.2.0" @@ -7404,6 +8438,18 @@ __metadata: languageName: node linkType: hard +"import-in-the-middle@npm:^1.8.1": + version: 1.13.2 + resolution: "import-in-the-middle@npm:1.13.2" + dependencies: + acorn: ^8.14.0 + acorn-import-attributes: ^1.9.5 + cjs-module-lexer: ^1.2.2 + module-details-from-path: ^1.0.3 + checksum: ef452ce4aa95c010d54634154517e448ae554e817d92d3cdceedecb3a01cfb071f8609144e6a4efdd4eaac35c058db2a7286b8adc2650554bc3d6637125339b5 + languageName: node + linkType: hard + "import-local@npm:^3.0.2": version: 3.2.0 resolution: "import-local@npm:3.2.0" @@ -7417,23 +8463,9 @@ __metadata: linkType: hard "imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - -"infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 languageName: node linkType: hard @@ -7522,6 +8554,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.16.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: ^2.0.2 + checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7 + languageName: node + linkType: hard + "is-extendable@npm:^0.1.0": version: 0.1.1 resolution: "is-extendable@npm:0.1.1" @@ -7559,13 +8600,6 @@ __metadata: languageName: node linkType: hard -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - "is-module@npm:^1.0.0": version: 1.0.0 resolution: "is-module@npm:1.0.0" @@ -8553,8 +9587,14 @@ __metadata: "@aws-sdk/client-lambda": ^3.332.0 "@aws-sdk/client-s3": ^3.332.0 "@aws-sdk/s3-request-presigner": ^3.332.0 + "@duckdb/node-api": ^1.3.0-alpha.21 "@google-cloud/bigquery": ^6.1.0 "@google-cloud/storage": ^6.10.1 + "@opentelemetry/api": ^1.9.0 + "@opentelemetry/auto-instrumentations-node": ^0.59.0 + "@opentelemetry/sdk-metrics": ^2.0.1 + "@opentelemetry/sdk-node": ^0.201.1 + "@opentelemetry/sdk-trace-node": ^2.0.1 "@supabase/supabase-js": ^2.26.0 "@types/ali-oss": ^6.16.11 "@types/cors": ^2.8.17 @@ -8572,7 +9612,6 @@ __metadata: commander: ^10.0.0 copyfiles: ^2.4.1 cors: ^2.8.5 - duckdb-async: ^1.1.3 dynamodb-data-types: ^4.0.1 express: ^4.21.0 express-async-errors: ^3.1.1 @@ -8643,7 +9682,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^7.14.1, lru-cache@npm:^7.7.1": +"lru-cache@npm:^7.14.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 @@ -8669,15 +9708,6 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.1.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 - languageName: node - linkType: hard - "make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -8694,30 +9724,6 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.3": - version: 10.2.1 - resolution: "make-fetch-happen@npm:10.2.1" - dependencies: - agentkeepalive: ^4.2.1 - cacache: ^16.1.0 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-fetch: ^2.0.3 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^7.0.0 - ssri: ^9.0.0 - checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c - languageName: node - linkType: hard - "make-fetch-happen@npm:^14.0.3": version: 14.0.3 resolution: "make-fetch-happen@npm:14.0.3" @@ -8916,15 +9922,6 @@ __metadata: languageName: node linkType: hard -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" - dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 - languageName: node - linkType: hard - "minipass-collect@npm:^2.0.1": version: 2.0.1 resolution: "minipass-collect@npm:2.0.1" @@ -8934,21 +9931,6 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^2.0.3": - version: 2.1.2 - resolution: "minipass-fetch@npm:2.1.2" - dependencies: - encoding: ^0.1.13 - minipass: ^3.1.6 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 - languageName: node - linkType: hard - "minipass-fetch@npm:^4.0.0": version: 4.0.1 resolution: "minipass-fetch@npm:4.0.1" @@ -8991,7 +9973,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": +"minipass@npm:^3.0.0": version: 3.3.6 resolution: "minipass@npm:3.3.6" dependencies: @@ -9000,13 +9982,6 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea - languageName: node - linkType: hard - "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" @@ -9014,16 +9989,6 @@ __metadata: languageName: node linkType: hard -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: ^3.0.0 - yallist: ^4.0.0 - checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 - languageName: node - linkType: hard - "minizlib@npm:^3.0.1": version: 3.0.2 resolution: "minizlib@npm:3.0.2" @@ -9044,7 +10009,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": +"mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -9071,6 +10036,13 @@ __metadata: languageName: node linkType: hard +"module-details-from-path@npm:^1.0.3": + version: 1.0.4 + resolution: "module-details-from-path@npm:1.0.4" + checksum: 2ebfada5358492f6ab496b70f70a1042f2ee7a4c79d29467f59ed6704f741fb4461d7cecb5082144ed39a05fec4d19e9ff38b731c76228151be97227240a05b2 + languageName: node + linkType: hard + "morgan@npm:^1.10.0": version: 1.10.0 resolution: "morgan@npm:1.10.0" @@ -9125,7 +10097,7 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": +"negotiator@npm:0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 @@ -9171,15 +10143,6 @@ __metadata: languageName: node linkType: hard -"node-addon-api@npm:^7.0.0": - version: 7.1.1 - resolution: "node-addon-api@npm:7.1.1" - dependencies: - node-gyp: latest - checksum: 46051999e3289f205799dfaf6bcb017055d7569090f0004811110312e2db94cb4f8654602c7eb77a60a1a05142cc2b96e1b5c56ca4622c41a5c6370787faaf30 - languageName: node - linkType: hard - "node-addon-api@npm:^8.2.1, node-addon-api@npm:^8.2.2, node-addon-api@npm:^8.3.0": version: 8.3.0 resolution: "node-addon-api@npm:8.3.0" @@ -9206,7 +10169,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:2, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9, node-fetch@npm:^2.7.0": +"node-fetch@npm:2, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.9, node-fetch@npm:^2.7.0": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -9248,27 +10211,6 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^9.3.0": - version: 9.4.1 - resolution: "node-gyp@npm:9.4.1" - dependencies: - env-paths: ^2.2.0 - exponential-backoff: ^3.1.1 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 - nopt: ^6.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 8576c439e9e925ab50679f87b7dfa7aa6739e42822e2ad4e26c36341c0ba7163fdf5a946f0a67a476d2f24662bc40d6c97bd9e79ced4321506738e6b760a1577 - languageName: node - linkType: hard - "node-gyp@npm:latest": version: 11.2.0 resolution: "node-gyp@npm:11.2.0" @@ -9340,28 +10282,6 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^5.0.0": - version: 5.0.0 - resolution: "nopt@npm:5.0.0" - dependencies: - abbrev: 1 - bin: - nopt: bin/nopt.js - checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f - languageName: node - linkType: hard - -"nopt@npm:^6.0.0": - version: 6.0.0 - resolution: "nopt@npm:6.0.0" - dependencies: - abbrev: ^1.0.0 - bin: - nopt: bin/nopt.js - checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac - languageName: node - linkType: hard - "nopt@npm:^8.0.0": version: 8.1.0 resolution: "nopt@npm:8.1.0" @@ -9389,30 +10309,6 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^5.0.1": - version: 5.0.1 - resolution: "npmlog@npm:5.0.1" - dependencies: - are-we-there-yet: ^2.0.0 - console-control-strings: ^1.1.0 - gauge: ^3.0.0 - set-blocking: ^2.0.0 - checksum: 516b2663028761f062d13e8beb3f00069c5664925871a9b57989642ebe09f23ab02145bf3ab88da7866c4e112cafff72401f61a672c7c8a20edc585a7016ef5f - languageName: node - linkType: hard - -"npmlog@npm:^6.0.0": - version: 6.0.2 - resolution: "npmlog@npm:6.0.2" - dependencies: - are-we-there-yet: ^3.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.3 - set-blocking: ^2.0.0 - checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a - languageName: node - linkType: hard - "nth-check@npm:^2.0.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" @@ -9422,7 +10318,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": +"object-assign@npm:^4, object-assign@npm:^4.0.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -9450,6 +10346,13 @@ __metadata: languageName: node linkType: hard +"obuf@npm:~1.1.2": + version: 1.1.2 + resolution: "obuf@npm:1.1.2" + checksum: 41a2ba310e7b6f6c3b905af82c275bf8854896e2e4c5752966d64cbcd2f599cfffd5932006bcf3b8b419dfdacebb3a3912d5d94e10f1d0acab59876c8757f27f + languageName: node + linkType: hard + "on-exit-leak-free@npm:^2.1.0": version: 2.1.2 resolution: "on-exit-leak-free@npm:2.1.2" @@ -9589,15 +10492,6 @@ __metadata: languageName: node linkType: hard -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c - languageName: node - linkType: hard - "p-map@npm:^7.0.2": version: 7.0.3 resolution: "p-map@npm:7.0.3" @@ -9720,6 +10614,55 @@ __metadata: languageName: node linkType: hard +"pg-int8@npm:1.0.1": + version: 1.0.1 + resolution: "pg-int8@npm:1.0.1" + checksum: a1e3a05a69005ddb73e5f324b6b4e689868a447c5fa280b44cd4d04e6916a344ac289e0b8d2695d66e8e89a7fba023affb9e0e94778770ada5df43f003d664c9 + languageName: node + linkType: hard + +"pg-numeric@npm:1.0.2": + version: 1.0.2 + resolution: "pg-numeric@npm:1.0.2" + checksum: 8899f8200caa1744439a8778a9eb3ceefb599d893e40a09eef84ee0d4c151319fd416634a6c0fc7b7db4ac268710042da5be700b80ef0de716fe089b8652c84f + languageName: node + linkType: hard + +"pg-protocol@npm:*": + version: 1.10.0 + resolution: "pg-protocol@npm:1.10.0" + checksum: 535a1c5517ac9b797110004463b458a5a3e2fb24b80f567ff0ef7a5417914711515a9279f91983251422ef9fe7a436113e5e9ea66fa6d9d608a468081c14c50d + languageName: node + linkType: hard + +"pg-types@npm:^2.2.0": + version: 2.2.0 + resolution: "pg-types@npm:2.2.0" + dependencies: + pg-int8: 1.0.1 + postgres-array: ~2.0.0 + postgres-bytea: ~1.0.0 + postgres-date: ~1.0.4 + postgres-interval: ^1.1.0 + checksum: bf4ec3f594743442857fb3a8dfe5d2478a04c98f96a0a47365014557cbc0b4b0cee01462c79adca863b93befbf88f876299b75b72c665b5fb84a2c94fbd10316 + languageName: node + linkType: hard + +"pg-types@npm:^4.0.1": + version: 4.0.2 + resolution: "pg-types@npm:4.0.2" + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: ~3.0.1 + postgres-bytea: ~3.0.0 + postgres-date: ~2.1.0 + postgres-interval: ^3.0.0 + postgres-range: ^1.1.1 + checksum: c4b813382d4a75f87462fab3245d5422b86ba1a54a1b330e6b43a459c127b4d02553dc7e5b4ae4fa0f5f17971d416eb393810f69ff6d30d986e45c2f20778c55 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0, picocolors@npm:^1.1.0": version: 1.1.0 resolution: "picocolors@npm:1.1.0" @@ -9801,6 +10744,73 @@ __metadata: languageName: node linkType: hard +"postgres-array@npm:~2.0.0": + version: 2.0.0 + resolution: "postgres-array@npm:2.0.0" + checksum: 0e1e659888147c5de579d229a2d95c0d83ebdbffc2b9396d890a123557708c3b758a0a97ed305ce7f58edfa961fa9f0bbcd1ea9f08b6e5df73322e683883c464 + languageName: node + linkType: hard + +"postgres-array@npm:~3.0.1": + version: 3.0.4 + resolution: "postgres-array@npm:3.0.4" + checksum: 9d0fed9f8a4674cbc31a4e568dc5d068f6e32b4b5c62deae2c4908c75303be0c5aef023fc04dfb8feaf6d63af1a17257e528ef606e8128bffe1f9d6844ad8ffa + languageName: node + linkType: hard + +"postgres-bytea@npm:~1.0.0": + version: 1.0.0 + resolution: "postgres-bytea@npm:1.0.0" + checksum: d844ae4ca7a941b70e45cac1261a73ee8ed39d72d3d74ab1d645248185a1b7f0ac91a3c63d6159441020f4e1f7fe64689ac56536a307b31cef361e5187335090 + languageName: node + linkType: hard + +"postgres-bytea@npm:~3.0.0": + version: 3.0.0 + resolution: "postgres-bytea@npm:3.0.0" + dependencies: + obuf: ~1.1.2 + checksum: 5f917a003fcaa0df7f285e1c37108ad474ce91193466b9bd4bcaecef2cdea98ca069c00aa6a8dbe6d2e7192336cadc3c9b36ae48d1555a299521918e00e2936b + languageName: node + linkType: hard + +"postgres-date@npm:~1.0.4": + version: 1.0.7 + resolution: "postgres-date@npm:1.0.7" + checksum: 5745001d47e51cd767e46bcb1710649cd705d91a24d42fa661c454b6dcbb7353c066a5047983c90a626cd3bbfea9e626cc6fa84a35ec57e5bbb28b49f78e13ed + languageName: node + linkType: hard + +"postgres-date@npm:~2.1.0": + version: 2.1.0 + resolution: "postgres-date@npm:2.1.0" + checksum: 5c573b0602e17c6134fd8bc8ac7689ac0302e1b199f15dd3578fc45186f206dbd0609f97bf0e4bd1db62234d7a37f29c04f4df525f7efebb9304363b2efca272 + languageName: node + linkType: hard + +"postgres-interval@npm:^1.1.0": + version: 1.2.0 + resolution: "postgres-interval@npm:1.2.0" + dependencies: + xtend: ^4.0.0 + checksum: 746b71f93805ae33b03528e429dc624706d1f9b20ee81bf743263efb6a0cd79ae02a642a8a480dbc0f09547b4315ab7df6ce5ec0be77ed700bac42730f5c76b2 + languageName: node + linkType: hard + +"postgres-interval@npm:^3.0.0": + version: 3.0.0 + resolution: "postgres-interval@npm:3.0.0" + checksum: c7a1cf006de97de663b6b8c4d2b167aa9909a238c4866a94b15d303762f5ac884ff4796cd6e2111b7f0a91302b83c570453aa8506fd005b5a5d5dfa87441bebc + languageName: node + linkType: hard + +"postgres-range@npm:^1.1.1": + version: 1.1.4 + resolution: "postgres-range@npm:1.1.4" + checksum: 460af8c882a50e2c3d08ede5d5ee9e5e5a99dcf471e3ed55b4c17cad62dc85177b51bb8105b626a9c73de9edcba934e86665923b0d86e1c8e1f55d3e0f3530c6 + languageName: node + linkType: hard + "postman-to-openapi@npm:^3.0.1": version: 3.0.1 resolution: "postman-to-openapi@npm:3.0.1" @@ -9881,13 +10891,6 @@ __metadata: languageName: node linkType: hard -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 - languageName: node - linkType: hard - "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -9944,6 +10947,26 @@ __metadata: languageName: node linkType: hard +"protobufjs@npm:^7.3.0": + version: 7.5.2 + resolution: "protobufjs@npm:7.5.2" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/node": ">=13.7.0" + long: ^5.0.0 + checksum: fe5663a1f3ec351f08b6281bb87aade9604f0d90d09fd470080bcd64f10c08e94835c7809acf34474c3c003cb25a240fb7350203a0e087337c7a9ca1bee90eec + languageName: node + linkType: hard + "proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" @@ -10093,7 +11116,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.1.1": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -10153,6 +11176,17 @@ __metadata: languageName: node linkType: hard +"require-in-the-middle@npm:^7.1.1": + version: 7.5.2 + resolution: "require-in-the-middle@npm:7.5.2" + dependencies: + debug: ^4.3.5 + module-details-from-path: ^1.0.3 + resolve: ^1.22.8 + checksum: 1b282e3b8bbd1e60b53ba409eade5d7a8d5e3cb09007c613679dc9c16b9c23d606c2dcb56e45e2acf9555143e81e5745317c974b7b817f05f3f1b53c7050355d + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -10189,6 +11223,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.22.8": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: ^2.16.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: ab7a32ff4046fcd7c6fdd525b24a7527847d03c3650c733b909b01b757f92eb23510afa9cc3e9bf3f26a3e073b48c88c706dfd4c1d2fb4a16a96b73b6328ddcf + languageName: node + linkType: hard + "resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" @@ -10202,6 +11249,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@^1.22.8#~builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#~builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: ^2.16.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 8aac1e4e4628bd00bf4b94b23de137dd3fe44097a8d528fd66db74484be929936e20c696e1a3edf4488f37e14180b73df6f600992baea3e089e8674291f16c9d + languageName: node + linkType: hard + "retry-request@npm:^5.0.0": version: 5.0.2 resolution: "retry-request@npm:5.0.2" @@ -10237,17 +11297,6 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: ^7.1.3 - bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 - languageName: node - linkType: hard - "safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" @@ -10301,7 +11350,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": +"semver@npm:^6.3.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -10352,13 +11401,6 @@ __metadata: languageName: node linkType: hard -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 - languageName: node - linkType: hard - "set-function-length@npm:^1.2.1": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -10396,6 +11438,13 @@ __metadata: languageName: node linkType: hard +"shimmer@npm:^1.2.1": + version: 1.2.1 + resolution: "shimmer@npm:1.2.1" + checksum: aa0d6252ad1c682a4fdfda69e541be987f7a265ac7b00b1208e5e48cc68dc55f293955346ea4c71a169b7324b82c70f8400b3d3d2d60b2a7519f0a3522423250 + languageName: node + linkType: hard + "short-unique-id@npm:^5.0.2": version: 5.2.0 resolution: "short-unique-id@npm:5.2.0" @@ -10418,7 +11467,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -10473,17 +11522,6 @@ __metadata: languageName: node linkType: hard -"socks-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "socks-proxy-agent@npm:7.0.0" - dependencies: - agent-base: ^6.0.2 - debug: ^4.3.3 - socks: ^2.6.2 - checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 - languageName: node - linkType: hard - "socks-proxy-agent@npm:^8.0.3": version: 8.0.5 resolution: "socks-proxy-agent@npm:8.0.5" @@ -10495,7 +11533,7 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.3.3, socks@npm:^2.6.2": +"socks@npm:^2.3.3": version: 2.8.3 resolution: "socks@npm:2.8.3" dependencies: @@ -10578,15 +11616,6 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^9.0.0": - version: 9.0.1 - resolution: "ssri@npm:9.0.1" - dependencies: - minipass: ^3.1.1 - checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb - languageName: node - linkType: hard - "stack-utils@npm:^2.0.3": version: 2.0.6 resolution: "stack-utils@npm:2.0.6" @@ -10665,7 +11694,7 @@ __metadata: languageName: node linkType: hard -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -10849,20 +11878,6 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.1 - resolution: "tar@npm:6.2.1" - dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^5.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c - languageName: node - linkType: hard - "tar@npm:^7.4.3": version: 7.4.3 resolution: "tar@npm:7.4.3" @@ -11245,15 +12260,6 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^2.0.0": - version: 2.0.1 - resolution: "unique-filename@npm:2.0.1" - dependencies: - unique-slug: ^3.0.0 - checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f - languageName: node - linkType: hard - "unique-filename@npm:^4.0.0": version: 4.0.0 resolution: "unique-filename@npm:4.0.0" @@ -11270,15 +12276,6 @@ __metadata: languageName: node linkType: hard -"unique-slug@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-slug@npm:3.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c - languageName: node - linkType: hard - "unique-slug@npm:^5.0.0": version: 5.0.0 resolution: "unique-slug@npm:5.0.0" @@ -11511,7 +12508,7 @@ __metadata: languageName: node linkType: hard -"which@npm:^2.0.1, which@npm:^2.0.2": +"which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" dependencies: @@ -11533,15 +12530,6 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: ^1.0.2 || 2 || 3 || 4 - checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 - languageName: node - linkType: hard - "win-release@npm:^1.0.0": version: 1.1.1 resolution: "win-release@npm:1.1.1" From 945efe485c9a48f303d27bc0a711c4aadb8b151d Mon Sep 17 00:00:00 2001 From: "Connell, Joseph" Date: Sun, 25 May 2025 17:02:37 -0700 Subject: [PATCH 6/8] More native implementation of the OTel Node SDK --- deploy/docker/Dockerfile | 8 -------- deploy/docker/node-service/entrypoint.sh | 3 +++ server/node-service/otel.config.js | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 server/node-service/otel.config.js diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index d86c5e4443..da06c12e20 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -78,11 +78,6 @@ WORKDIR /lowcoder/node-service/app/ RUN yarn --immutable RUN yarn build -# --- ADDED: Install OpenTelemetry dependencies for Node.js service --- -RUN yarn add \ - @opentelemetry/api \ - @opentelemetry/auto-instrumentations-node - # Copy startup script COPY deploy/docker/node-service/entrypoint.sh /lowcoder/node-service/entrypoint.sh COPY deploy/docker/node-service/init.sh /lowcoder/node-service/init.sh @@ -114,9 +109,6 @@ RUN apt-get update \ COPY --from=build-node-service /lowcoder/node-service /lowcoder/node-service -#Enable OpenTelemetry node agent -ENV NODE_OPTIONS="--require @opentelemetry/auto-instrumentations-node/register" - EXPOSE 6060 CMD [ "/bin/sh", "/lowcoder/node-service/entrypoint.sh" ] diff --git a/deploy/docker/node-service/entrypoint.sh b/deploy/docker/node-service/entrypoint.sh index 33308e4c7b..ba05cf62d7 100755 --- a/deploy/docker/node-service/entrypoint.sh +++ b/deploy/docker/node-service/entrypoint.sh @@ -6,6 +6,9 @@ export USER_ID=${LOWCODER_PUID:=9001} export GROUP_ID=${LOWCODER_PGID:=9001} export API_HOST="${LOWCODER_API_SERVICE_URL:=http://localhost:8080}" +#Require OpenTelemetry +export NODE_OPTIONS="-r /lowcoder/node-service/app/otel.config.js" + # Run init script echo "Initializing node-service..." /lowcoder/node-service/init.sh diff --git a/server/node-service/otel.config.js b/server/node-service/otel.config.js new file mode 100644 index 0000000000..311f148ba2 --- /dev/null +++ b/server/node-service/otel.config.js @@ -0,0 +1,19 @@ +const { NodeSDK } = require('@opentelemetry/sdk-node'); +const { ConsoleSpanExporter } = require('@opentelemetry/sdk-trace-node'); +const { + getNodeAutoInstrumentations, +} = require('@opentelemetry/auto-instrumentations-node'); +const { + PeriodicExportingMetricReader, + ConsoleMetricExporter, +} = require('@opentelemetry/sdk-metrics'); + +const sdk = new NodeSDK({ + traceExporter: new ConsoleSpanExporter(), + metricReader: new PeriodicExportingMetricReader({ + exporter: new ConsoleMetricExporter(), + }), + instrumentations: [getNodeAutoInstrumentations()], +}); + +sdk.start(); \ No newline at end of file From 5aebba81edbdcd72c3ec8c17b59be819b8acef82 Mon Sep 17 00:00:00 2001 From: "Connell, Joseph" Date: Sun, 25 May 2025 17:04:39 -0700 Subject: [PATCH 7/8] updated Comments --- deploy/docker/docker-compose-multi-otel.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/deploy/docker/docker-compose-multi-otel.yaml b/deploy/docker/docker-compose-multi-otel.yaml index 7d4a91ae3c..ca58dbb5d1 100644 --- a/deploy/docker/docker-compose-multi-otel.yaml +++ b/deploy/docker/docker-compose-multi-otel.yaml @@ -101,7 +101,12 @@ services: # If left blank, a password will be generated and written into api-service log LOWCODER_SUPERUSER_PASSWORD: + ## # OpenTelemetry Related Settings + # Set OTEL_JAVAAGENT_ENABLED=false + # to disable OpenTelemetry Java agent + ## + # OTEL_JAVAAGENT_ENABLED: "false" OTEL_RESOURCE_ATTRIBUTES: "deployment.environment=production" OTEL_SERVICE_NAME: "lowcoder-api-service" From 7e0e5caccf3f6bf5f9df7070eb585178c410023e Mon Sep 17 00:00:00 2001 From: "Connell, Joseph" Date: Mon, 26 May 2025 06:53:00 -0700 Subject: [PATCH 8/8] Added Otel Readme --- deploy/docker/opentelemetry/README.md | 369 ++++++++++++++++++++++++++ 1 file changed, 369 insertions(+) create mode 100644 deploy/docker/opentelemetry/README.md diff --git a/deploy/docker/opentelemetry/README.md b/deploy/docker/opentelemetry/README.md new file mode 100644 index 0000000000..706d4b60b5 --- /dev/null +++ b/deploy/docker/opentelemetry/README.md @@ -0,0 +1,369 @@ +# OpenTelemetry Integration for Lowcoder + +This document provides comprehensive instructions for enabling, configuring, and verifying OpenTelemetry tracing and metrics for the Lowcoder application, which includes both Java backend services and Node.js components. OpenTelemetry enables unified observability, distributed tracing, and metrics collection across your stack, supporting integration with Tempo, Prometheus, Grafana, and other observability backends. + +--- + +## Table of Contents + +- [Overview](#overview) +- [Architecture](#architecture) +- [Prerequisites](#prerequisites) +- [Quick Start](#quick-start) +- [Configuration](#configuration) + - [Common Environment Variables](#common-environment-variables) + - [Java API Service](#java-api-service) + - [Node.js Service](#nodejs-service) +- [Monitoring and Visualization](#monitoring-and-visualization) + - [Distributed Tracing (Tempo + Grafana)](#distributed-tracing-tempo--grafana) + - [Grafana](#grafana-dashboards) + - [Prometheus](#prometheus-metrics-collection) +- [Advanced Configuration](#advanced-configuration) +- [Troubleshooting](#troubleshooting) +- [Production Considerations](#production-considerations) +- [Support](#support) +- [Contributing](#contributing) + +--- + +## Overview + +Lowcoder leverages OpenTelemetry auto-instrumentation for both Java and Node.js services, providing: + +- **Distributed Tracing:** End-to-end visibility of requests across services. +- **Metrics Collection:** Performance and health metrics for all components. +- **Flexible Export:** Support for Tempo, Prometheus, Grafana, Datadog, New Relic, and more. + +--- + +## Architecture + +``` +┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ +│ Lowcoder │ │ OpenTelemetry │ │ Observability │ +│ Application │───▶│ Collector │──▶│ Backends │ +│ (Java + Node.js)│ │ │ │ (Jaeger/Grafana)│ +└─────────────────┘ └──────────────────┘ └─────────────────┘ +``` + +--- + +## Prerequisites + +- **Docker** and **Docker Compose** +- At least **4GB RAM** for the full observability stack +- An OpenTelemetry Collector instance (included in docker-compose) +- Access to Jaeger, Prometheus, and Grafana (included in docker-compose) + +--- + +## Quick Start + +### 1. Clone and Build + +```bash +git clone https://github.com/lowcoder-org/lowcoder.git +cd lowcoder/deploy/docker +docker-compose -f ./docker-compose-multi-otel.yaml up -d +``` + +### 2. Access Services + +- **Lowcoder Application:** http://localhost:8080 +- **Jaeger UI (Traces):** http://localhost:16686 +- **Grafana (Dashboards):** http://localhost:3000 (admin/admin) +- **Prometheus (Metrics):** http://localhost:9090 + +### 3. Generate Traffic + +Use the Lowcoder app to generate telemetry data, then view traces and metrics in Jaeger, Grafana, and Prometheus. + +--- + +## Configuration + +### Common Environment Variables + +| Variable | Description | Default/Example | +|---------------------------------|------------------------------------|----------------------------------------| +| `OTEL_SDK_DISABLED` | Disable all telemetry | `false` | +| `OTEL_SERVICE_NAME` | Java service name | `lowcoder-java-backend` | +| `OTEL_NODE_SERVICE_NAME` | Node.js service name | `lowcoder-node-service` | +| `OTEL_EXPORTER_OTLP_ENDPOINT` | Collector endpoint | `http://otel-collector:4317` | +| `OTEL_RESOURCE_ATTRIBUTES` | Additional resource attributes | `deployment.environment=production` | +| `OTEL_TRACES_EXPORTER` | Trace exporter | `otlp`, `jaeger`, `none` | +| `OTEL_METRICS_EXPORTER` | Metrics exporter | `otlp`, `prometheus`, `none` | +| `OTEL_LOGS_EXPORTER` | Logs exporter | `otlp`, `none` | +| `OTEL_TRACES_SAMPLER` | Sampling strategy | `traceidratio` | +| `OTEL_TRACES_SAMPLER_ARG` | Sampling parameter | `0.1` (10%) | + +#### Example (docker-compose.yml): + +```yaml +environment: + - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317 + - OTEL_SERVICE_NAME=lowcoder-java-backend + - OTEL_NODE_SERVICE_NAME=lowcoder-node-service + - OTEL_RESOURCE_ATTRIBUTES=deployment.environment=production + - OTEL_TRACES_SAMPLER=traceidratio + - OTEL_TRACES_SAMPLER_ARG=0.1 +``` + +--- + +### Java API Service + +- Uses OpenTelemetry SDK with auto-instrumentation. +- Service name and resource attributes are set via environment variables or configuration. +- Traces and metrics are exported to the OpenTelemetry Collector. + +**Custom Spans Example:** +```java +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.trace.Tracer; + +Tracer tracer = GlobalOpenTelemetry.getTracer("my-service"); +Span span = tracer.spanBuilder("custom-operation").startSpan(); +try { + // Your business logic here +} finally { + span.end(); +} +``` + +--- + +### Node.js Service + +- Uses `@opentelemetry/sdk-node` and `@opentelemetry/auto-instrumentations-node`. +- Configuration is handled in `otel.config.js` and via environment variables. +- Traces and metrics are exported to the OpenTelemetry Collector. + +**Custom Spans Example:** +```javascript +const { trace } = require('@opentelemetry/api'); + +const tracer = trace.getTracer('my-service'); +const span = tracer.startSpan('custom-operation'); +try { + // Your business logic here +} finally { + span.end(); +} +``` + +--- + +## Monitoring and Visualization + +### Distributed Tracing (Tempo + Grafana) + +- **Trace Storage:** [Grafana Tempo](https://grafana.com/oss/tempo/) is used as the distributed tracing backend. +- **Visualization:** Traces are visualized and explored via [Grafana](https://grafana.com/). +- **URL:** http://localhost:3001 (Grafana, default login: admin/admin) +- **Features:** + - View end-to-end traces and span timelines + - Analyze service dependencies and request flows + - Debug errors and identify bottlenecks + - Correlate traces with metrics and logs + +### Grafana (Dashboards) + +- **URL:** http://localhost:3001 (admin/admin) +- Visualize metrics, create dashboards, set up alerts, and monitor application health. +- Add Prometheus as a data source (`http://prometheus:9090`). +- Explore traces via the Tempo data source. + +### Prometheus (Metrics Collection) + +- **URL:** http://localhost:9090 +- Query raw metrics, set up recording and alerting rules, and monitor collector health. + +--- + +## Advanced Configuration + +### Customizing Service Names and Attributes + +```yaml +environment: + - OTEL_SERVICE_NAME=lowcoder-api-service +``` + +### Adjusting Sampling + +```yaml +environment: + - OTEL_TRACES_SAMPLER=traceidratio + - OTEL_TRACES_SAMPLER_ARG=0.05 # 5% sampling +``` + +### Custom Collector Configuration + +Edit `otel-collector-config.yaml` to: + +- Add receivers (e.g., filelog) +- Configure exporters (e.g., Jaeger, Datadog, New Relic) +- Add processors and filtering rules + +**Example for log collection:** +```yaml +receivers: + filelog: + include: [/var/log/lowcoder/*.log] + operators: + - type: json_parser + +service: + pipelines: + logs: + receivers: [filelog, otlp] + processors: [batch] + exporters: [logging] +``` + +### External Backend Integration + +**Datadog Example:** +```yaml +exporters: + datadog: + api: + key: "${DD_API_KEY}" + site: datadoghq.com +``` + +**New Relic Example:** +```yaml +exporters: + otlp: + endpoint: https://otlp.nr-data.net:4317 + headers: + api-key: "${NEW_RELIC_LICENSE_KEY}" +``` + +--- + +## Troubleshooting + +### Common Issues + +#### No Traces Appearing + +- Ensure the OpenTelemetry Collector is running (`docker-compose ps`) +- Verify the collector endpoint (`curl http://localhost:4317`) +- Check application logs for OTEL errors +- Ensure `OTEL_SDK_DISABLED` is not set to `true` + +#### High Memory Usage + +- Reduce sampling rate (`OTEL_TRACES_SAMPLER_ARG=0.01`) +- Adjust collector memory limits +- Configure batch processing in the collector + +#### Missing Node.js Traces + +- Check Node.js service logs +- Verify `NODE_OPTIONS` is set correctly +- Ensure OpenTelemetry Node.js packages are installed + +### Debugging Commands + +```bash +docker-compose ps +docker-compose logs lowcoder +docker-compose logs otel-collector +curl -v http://localhost:4318/v1/traces +curl http://localhost:16686/api/services +``` + +### Log Analysis + +Enable debug logging: + +```yaml +environment: + - OTEL_LOG_LEVEL=debug + - OTEL_JAVAAGENT_DEBUG=true +``` + +--- + +## Production Considerations + +### Security + +- Use TLS for collector communication +- Store API keys and credentials securely +- Restrict collector network access +- Sanitize sensitive data in telemetry + +### Performance + +- Use appropriate sampling rates +- Set resource limits for all services +- Configure efficient batch sizes in the collector +- Plan for trace and metrics retention + +### Scaling + +- Deploy multiple collector instances for high throughput +- Ensure observability backends can handle data volume +- Use load balancers for collector endpoints +- Consider sharding for large deployments + +### Example Production Configuration + +```yaml +# docker-compose.prod.yml +version: '3' +services: + lowcoder-api-service: + environment: + - OTEL_TRACES_SAMPLER=traceidratio + - OTEL_TRACES_SAMPLER_ARG=0.01 # 1% sampling + - OTEL_EXPORTER_OTLP_ENDPOINT=https://your-collector.company.com:4317 + - OTEL_SERVICE_VERSION="2.6.5" + - OTEL_RESOURCE_ATTRIBUTES=deployment.environment=production +``` + +### Monitoring the Monitoring + +Set up alerts for: + +- Collector health and availability +- High error rates in telemetry processing +- Backend storage capacity +- Unusual trace volume patterns + +**Example Prometheus Alert:** +```yaml +groups: + - name: otel-collector + rules: + - alert: CollectorDown + expr: up{job="opentelemetry-collector"} == 0 + for: 5m + annotations: + summary: "OpenTelemetry Collector is down" +``` + +--- + +## Support + +- Review the [troubleshooting section](#troubleshooting) +- Consult OpenTelemetry documentation +- Submit issues to the project repository +- Join the OpenTelemetry community discussions + +--- + +## Contributing + +- Test changes locally with the full stack +- Document any new environment variables +- Update this README with configuration changes +- Ensure backward compatibility where possible + +---