diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index fdf521d3e3..4d9a1bda84 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,5 +19,3 @@ jobs: - name: Lint run: | npm run lint - npm run lint:markdown - npm run lint:readme diff --git a/.release-please-manifest.json b/.release-please-manifest.json index b096def77a..72c93336b4 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,13 +1,13 @@ { - "detectors/node/opentelemetry-resource-detector-alibaba-cloud": "0.29.2", + "detectors/node/opentelemetry-resource-detector-alibaba-cloud": "0.29.3", "detectors/node/opentelemetry-resource-detector-aws": "1.6.2", "detectors/node/opentelemetry-resource-detector-azure": "0.2.11", - "detectors/node/opentelemetry-resource-detector-container": "0.4.2", + "detectors/node/opentelemetry-resource-detector-container": "0.4.4", "detectors/node/opentelemetry-resource-detector-gcp": "0.29.12", "detectors/node/opentelemetry-resource-detector-github": "0.29.0", "detectors/node/opentelemetry-resource-detector-instana": "0.13.0", "metapackages/auto-configuration-propagators": "0.3.1", - "metapackages/auto-instrumentations-node": "0.50.1", + "metapackages/auto-instrumentations-node": "0.51.0", "metapackages/auto-instrumentations-web": "0.41.0", "packages/baggage-span-processor": "0.3.1", "packages/opentelemetry-host-metrics": "0.35.4", @@ -48,7 +48,7 @@ "plugins/node/opentelemetry-instrumentation-mysql2": "0.41.0", "plugins/node/opentelemetry-instrumentation-nestjs-core": "0.40.0", "plugins/node/opentelemetry-instrumentation-net": "0.39.0", - "plugins/node/opentelemetry-instrumentation-pg": "0.45.0", + "plugins/node/opentelemetry-instrumentation-pg": "0.46.0", "plugins/node/opentelemetry-instrumentation-pino": "0.42.0", "plugins/node/opentelemetry-instrumentation-redis": "0.42.0", "plugins/node/opentelemetry-instrumentation-redis-4": "0.42.1", diff --git a/detectors/node/opentelemetry-resource-detector-alibaba-cloud/CHANGELOG.md b/detectors/node/opentelemetry-resource-detector-alibaba-cloud/CHANGELOG.md index 7782a06d96..725c8ba1ed 100644 --- a/detectors/node/opentelemetry-resource-detector-alibaba-cloud/CHANGELOG.md +++ b/detectors/node/opentelemetry-resource-detector-alibaba-cloud/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.29.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-alibaba-cloud-v0.29.2...resource-detector-alibaba-cloud-v0.29.3) (2024-10-10) + + +### Bug Fixes + +* add missing @opentelemetry/core dependency ([#2473](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2473)) ([4d66431](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4d66431a2ad480720bf6c33663a419ec1404cd33)) + ## [0.29.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-alibaba-cloud-v0.29.1...resource-detector-alibaba-cloud-v0.29.2) (2024-10-08) diff --git a/detectors/node/opentelemetry-resource-detector-alibaba-cloud/package.json b/detectors/node/opentelemetry-resource-detector-alibaba-cloud/package.json index a50771f53a..8bc7b29fcd 100644 --- a/detectors/node/opentelemetry-resource-detector-alibaba-cloud/package.json +++ b/detectors/node/opentelemetry-resource-detector-alibaba-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resource-detector-alibaba-cloud", - "version": "0.29.2", + "version": "0.29.3", "description": "OpenTelemetry resource detector for Alibaba Cloud", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -57,6 +57,7 @@ }, "dependencies": { "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/core": "^1.26.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/detectors/node/opentelemetry-resource-detector-alibaba-cloud#readme" diff --git a/detectors/node/opentelemetry-resource-detector-container/CHANGELOG.md b/detectors/node/opentelemetry-resource-detector-container/CHANGELOG.md index 8737d316e2..ad0185fc9c 100644 --- a/detectors/node/opentelemetry-resource-detector-container/CHANGELOG.md +++ b/detectors/node/opentelemetry-resource-detector-container/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [0.4.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-container-v0.4.3...resource-detector-container-v0.4.4) (2024-10-16) + + +### Bug Fixes + +* **detector-container:** properly detect container ID when using Podman ([#2448](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2448)) ([ad560df](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/ad560dfc5f662d418a74b0b197b3f48e4ae002d0)) + +## [0.4.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-container-v0.4.2...resource-detector-container-v0.4.3) (2024-10-10) + + +### Bug Fixes + +* add missing @opentelemetry/core dependency ([#2473](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2473)) ([4d66431](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4d66431a2ad480720bf6c33663a419ec1404cd33)) + ## [0.4.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-container-v0.4.1...resource-detector-container-v0.4.2) (2024-10-08) diff --git a/detectors/node/opentelemetry-resource-detector-container/package.json b/detectors/node/opentelemetry-resource-detector-container/package.json index ec71e00022..a84471a345 100644 --- a/detectors/node/opentelemetry-resource-detector-container/package.json +++ b/detectors/node/opentelemetry-resource-detector-container/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resource-detector-container", - "version": "0.4.2", + "version": "0.4.4", "description": "Opentelemetry resource detector to get container resource attributes", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -51,6 +51,7 @@ }, "dependencies": { "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/core": "^1.26.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/detectors/node/opentelemetry-resource-detector-container#readme" diff --git a/detectors/node/opentelemetry-resource-detector-container/src/detectors/ContainerDetector.ts b/detectors/node/opentelemetry-resource-detector-container/src/detectors/ContainerDetector.ts index 6350b25485..239228e7df 100644 --- a/detectors/node/opentelemetry-resource-detector-container/src/detectors/ContainerDetector.ts +++ b/detectors/node/opentelemetry-resource-detector-container/src/detectors/ContainerDetector.ts @@ -35,7 +35,7 @@ export class ContainerDetector implements DetectorSync { readonly DEFAULT_CGROUP_V2_PATH = '/proc/self/mountinfo'; readonly UTF8_UNICODE = 'utf8'; readonly HOSTNAME = 'hostname'; - readonly MARKING_PREFIX = 'containers'; + readonly MARKING_PREFIX = ['containers', 'overlay-containers']; readonly CRIO = 'crio-'; readonly CRI_CONTAINERD = 'cri-containerd-'; readonly DOCKER = 'docker-'; @@ -105,7 +105,7 @@ export class ContainerDetector implements DetectorSync { const strArray = str?.split('/') ?? []; for (let i = 0; i < strArray.length - 1; i++) { if ( - strArray[i] === this.MARKING_PREFIX && + this.MARKING_PREFIX.includes(strArray[i]) && strArray[i + 1]?.length === this.CONTAINER_ID_LENGTH ) { return strArray[i + 1]; diff --git a/detectors/node/opentelemetry-resource-detector-container/src/detectors/utils.ts b/detectors/node/opentelemetry-resource-detector-container/src/detectors/utils.ts index 96bae1fe80..c43d19e98c 100644 --- a/detectors/node/opentelemetry-resource-detector-container/src/detectors/utils.ts +++ b/detectors/node/opentelemetry-resource-detector-container/src/detectors/utils.ts @@ -18,7 +18,7 @@ export const DEFAULT_CGROUP_V1_PATH = '/proc/self/cgroup'; export const DEFAULT_CGROUP_V2_PATH = '/proc/self/mountinfo'; export const UTF8_UNICODE = 'utf8'; export const HOSTNAME = 'hostname'; -export const MARKING_PREFIX = 'containers'; +export const MARKING_PREFIX = ['containers', 'overlay-containers']; export const CRIO = 'crio-'; export const CRI_CONTAINERD = 'cri-containerd-'; export const DOCKER = 'docker-'; diff --git a/detectors/node/opentelemetry-resource-detector-container/test/ContainerDetector.test.ts b/detectors/node/opentelemetry-resource-detector-container/test/ContainerDetector.test.ts index 51b3c41120..cb6a7e0133 100644 --- a/detectors/node/opentelemetry-resource-detector-container/test/ContainerDetector.test.ts +++ b/detectors/node/opentelemetry-resource-detector-container/test/ContainerDetector.test.ts @@ -32,6 +32,8 @@ describe('ContainerDetector', () => { const correctCgroupV2Data = `containers/tmhdefghijklmnopqrstuvwxyzafgrefghiugkmnopqrstuvwxyzabcdefghijkl/hostname fhkjdshgfhsdfjhdsfkjhfkdshkjhfd/host sahfhfjkhjhfhjdhfjkdhfkjdhfjkhhdsjfhdfhjdhfkj/somethingelse`; + const correctCgroupV2PodmanData = + '4245 4237 0:94 /containers/overlay-containers/4e9dc37d00ebd2daea029d84bb37764ce12d746a6f3a33c5969cee15c4fc4418/userdata/hostname /etc/hostname rw - tmpfs tmpfs rw'; const wrongCgroupV2Data = 'bcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklm/wrongkeyword'; @@ -85,6 +87,22 @@ describe('ContainerDetector', () => { }); }); + it('should return a resource with container ID with a valid container ID present for v2 (Podman)', async () => { + readStub = sinon.stub(ContainerDetector, 'readFileAsync' as any); + + readStub.onFirstCall().resolves(''); + readStub.onSecondCall().resolves(correctCgroupV2PodmanData); + + const resource = containerDetector.detect(); + await resource.waitForAsyncAttributes?.(); + sinon.assert.calledTwice(readStub); + + assert.ok(resource); + assertContainerResource(resource, { + id: '4e9dc37d00ebd2daea029d84bb37764ce12d746a6f3a33c5969cee15c4fc4418', + }); + }); + it('should return a empty resource with failed hostname check for v2', async () => { readStub = sinon.stub(ContainerDetector, 'readFileAsync' as any); diff --git a/examples/mysql/README.md b/examples/mysql/README.md index 4dd0437442..7c11a80ee3 100644 --- a/examples/mysql/README.md +++ b/examples/mysql/README.md @@ -1,6 +1,6 @@ # Overview -OpenTelemetry MySQL Instrumentation allows the user to automatically collect trace data and metrics and export them to the backend of choice (we can use Zipkin, Jaeger or Grafana for this example), to give observability to distributed systems. +OpenTelemetry MySQL Instrumentation allows the user to automatically collect trace data and metrics and export them to the backend of choice (we can use Zipkin or Grafana for this example), to give observability to distributed systems. This is a modification of the HTTP example that executes multiple parallel requests that interact with a MySQL server backend using the `mysql` npm module. The example displays traces using multiple connection methods. @@ -20,13 +20,11 @@ npm install ``` Setup [Zipkin Tracing](https://zipkin.io/pages/quickstart.html) -or -Setup [Jaeger Tracing](https://www.jaegertracing.io/docs/latest/getting-started/#all-in-one) In case you want to see also metrics: 1. Go to `docker` folder -2. Run `docker compose up`. This will set up Zipkin, Jaeger, otel collector, Prometheus and Grafana. +2. Run `docker compose up`. This will set up Zipkin, otel collector, Prometheus and Grafana. 3. To see your metrics, go to `http://localhost:3000/`. ## Run the Application @@ -54,29 +52,6 @@ Go to Zipkin with your browser Zipkin UI with trace

-### Jaeger - -- Run the server - - ```sh - # from this directory - npm run jaeger:server - ``` - -- Run the client - - ```sh - # from this directory - npm run jaeger:client - ``` - -#### Jaeger UI - -The `jaeger:server` script should output the `traceid` in the terminal (e.g `traceid: 4815c3d576d930189725f1f1d1bdfcc6`). -Go to Jaeger with your browser (e.g ) - -

Jaeger UI with trace

- ## Useful links - For more information on OpenTelemetry, visit: diff --git a/examples/mysql/docker/collector/otel-collector-config.yaml b/examples/mysql/docker/collector/otel-collector-config.yaml index bf4e67b135..710e88d048 100644 --- a/examples/mysql/docker/collector/otel-collector-config.yaml +++ b/examples/mysql/docker/collector/otel-collector-config.yaml @@ -9,18 +9,13 @@ exporters: const_labels: label1: value1 - logging: - loglevel: debug + debug: + verbosity: detailed zipkin: endpoint: "http://zipkin-all-in-one:9411/api/v2/spans" format: proto - jaeger: - endpoint: jaeger-all-in-one:14250 - tls: - insecure: true - processors: batch: @@ -37,8 +32,8 @@ service: traces: receivers: [otlp] processors: [batch] - exporters: [logging] + exporters: [debug] metrics: receivers: [otlp] processors: [batch] - exporters: [logging, prometheus] + exporters: [debug, prometheus] diff --git a/examples/mysql/docker/docker-compose.yaml b/examples/mysql/docker/docker-compose.yaml index b95dabc9ad..3142fbdc00 100644 --- a/examples/mysql/docker/docker-compose.yaml +++ b/examples/mysql/docker/docker-compose.yaml @@ -1,9 +1,9 @@ -version: "2" services: # mysql mysql: image: mysql:5.7 + platform: linux/amd64 command: --init-file /etc/mysql/init.sql volumes: - ./mysql/init.sql:/etc/mysql/init.sql @@ -12,15 +12,6 @@ services: ports: - "3306:3306" -# Jaeger - - jaeger-all-in-one: - image: jaegertracing/all-in-one:latest - ports: - - "16686:16686" - - "14268" - - "14250" - # Zipkin zipkin-all-in-one: @@ -31,7 +22,7 @@ services: # Collector otel-collector: - image: otel/opentelemetry-collector-contrib:0.61.0 + image: otel/opentelemetry-collector-contrib:0.111.0 command: ["--config=/etc/otel-collector-config.yaml", ""] volumes: - ./collector/otel-collector-config.yaml:/etc/otel-collector-config.yaml @@ -43,7 +34,6 @@ services: - "4317:4317" # OTLP gRPC receiver - "55679:55679" # zpages extension depends_on: - - jaeger-all-in-one - zipkin-all-in-one # Prometheus diff --git a/examples/mysql/package.json b/examples/mysql/package.json index 80becff747..d1faf67976 100644 --- a/examples/mysql/package.json +++ b/examples/mysql/package.json @@ -9,8 +9,6 @@ "docker:stop": "docker stop example-mysql && docker rm example-mysql", "zipkin:server": "cross-env EXPORTER=zipkin ts-node src/server.ts", "zipkin:client": "cross-env EXPORTER=zipkin ts-node src/client.ts", - "jaeger:server": "cross-env EXPORTER=jaeger ts-node src/server.ts", - "jaeger:client": "cross-env EXPORTER=jaeger ts-node src/client.ts", "compile": "tsc -p ." }, "repository": { @@ -32,7 +30,7 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/exporter-jaeger": "^1.0.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "^0.48.0", "@opentelemetry/exporter-zipkin": "^1.0.0", "@opentelemetry/instrumentation": "^0.48.0", "@opentelemetry/instrumentation-http": "^0.48.0", @@ -40,7 +38,7 @@ "@opentelemetry/sdk-trace-base": "^1.0.0", "@opentelemetry/sdk-trace-node": "^1.0.0", "@opentelemetry/semantic-conventions": "^1.27.0", - "@opentelemetry/exporter-metrics-otlp-grpc": "^0.48.0", + "@types/node": "^18.18.14", "mysql": "^2.18.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/mysql#readme", diff --git a/examples/mysql/src/server.ts b/examples/mysql/src/server.ts index dba7d523c7..180224e2c7 100644 --- a/examples/mysql/src/server.ts +++ b/examples/mysql/src/server.ts @@ -52,7 +52,6 @@ function handleRequest(request: any, response: any) { // display traceid in the terminal const traceId = currentSpan?.spanContext().traceId; console.log(`traceid: ${traceId}`); - console.log(`Jaeger URL: http://localhost:16686/trace/${traceId}`); console.log(`Zipkin URL: http://localhost:9411/zipkin/traces/${traceId}`); try { const body = []; diff --git a/examples/mysql/src/tracer.ts b/examples/mysql/src/tracer.ts index b5c2f522cb..2ded0e2567 100644 --- a/examples/mysql/src/tracer.ts +++ b/examples/mysql/src/tracer.ts @@ -3,7 +3,6 @@ import opentelemetry from '@opentelemetry/api'; import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'; import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'; -import { JaegerExporter } from '@opentelemetry/exporter-jaeger'; import { ZipkinExporter } from '@opentelemetry/exporter-zipkin'; import { registerInstrumentations } from '@opentelemetry/instrumentation'; import { HttpInstrumentation } from '@opentelemetry/instrumentation-http'; @@ -38,8 +37,6 @@ export const setupTracing = (serviceName: string) => { if (EXPORTER.toLowerCase().startsWith('z')) { tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new ZipkinExporter())); - } else { - tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new JaegerExporter())); } // Initialize the OpenTelemetry APIs to use the NodeTracerProvider bindings diff --git a/metapackages/auto-instrumentations-node/CHANGELOG.md b/metapackages/auto-instrumentations-node/CHANGELOG.md index b54893aa1c..c7eeb625c5 100644 --- a/metapackages/auto-instrumentations-node/CHANGELOG.md +++ b/metapackages/auto-instrumentations-node/CHANGELOG.md @@ -1,5 +1,35 @@ # Changelog +## [0.51.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/auto-instrumentations-node-v0.50.2...auto-instrumentations-node-v0.51.0) (2024-10-16) + + +### ⚠ BREAKING CHANGES + +* **auto-instrumentations-node:** disable @opentelemetry/instrumentation-fs by default ([#2467](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2467)) + +### Features + +* **auto-instrumentations-node:** disable @opentelemetry/instrumentation-fs by default ([#2467](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2467)) ([a558044](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/a55804415d39c751a3f5f58c00cf27747821302f)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @opentelemetry/instrumentation-pg bumped from ^0.45.1 to ^0.46.0 + * @opentelemetry/resource-detector-container bumped from ^0.4.3 to ^0.4.4 + +## [0.50.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/auto-instrumentations-node-v0.50.1...auto-instrumentations-node-v0.50.2) (2024-10-10) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @opentelemetry/instrumentation-pg bumped from ^0.45.0 to ^0.45.1 + * @opentelemetry/resource-detector-alibaba-cloud bumped from ^0.29.2 to ^0.29.3 + * @opentelemetry/resource-detector-container bumped from ^0.4.2 to ^0.4.3 + ## [0.50.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/auto-instrumentations-node-v0.50.0...auto-instrumentations-node-v0.50.1) (2024-10-08) diff --git a/metapackages/auto-instrumentations-node/README.md b/metapackages/auto-instrumentations-node/README.md index 2674dfd4fe..b41c31fa3c 100644 --- a/metapackages/auto-instrumentations-node/README.md +++ b/metapackages/auto-instrumentations-node/README.md @@ -77,8 +77,8 @@ For example, to enable only the `env`, `host` detectors: export OTEL_NODE_RESOURCE_DETECTORS="env,host" ``` -By default, all [Supported Instrumentations](#supported-instrumentations) are enabled. -You can use the environment variable `OTEL_NODE_ENABLED_INSTRUMENTATIONS` to enable only certain instrumentations, +By default, all [Supported Instrumentations](#supported-instrumentations) are enabled, unless they are annotated with "default disabled". +You can use the environment variable `OTEL_NODE_ENABLED_INSTRUMENTATIONS` to enable only certain instrumentations, including "default disabled" ones OR the environment variable `OTEL_NODE_DISABLED_INSTRUMENTATIONS` to disable only certain instrumentations, by providing a comma-separated list of the instrumentation package names without the `@opentelemetry/instrumentation-` prefix. @@ -91,10 +91,10 @@ instrumentations: export OTEL_NODE_ENABLED_INSTRUMENTATIONS="http,nestjs-core" ``` -To disable only [@opentelemetry/instrumentation-fs](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-fs): +To disable only [@opentelemetry/instrumentation-net](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-net): ```shell -export OTEL_NODE_DISABLED_INSTRUMENTATIONS="fs" +export OTEL_NODE_DISABLED_INSTRUMENTATIONS="net" ``` If both environment variables are set, `OTEL_NODE_ENABLED_INSTRUMENTATIONS` is applied first, and then `OTEL_NODE_DISABLED_INSTRUMENTATIONS` is applied to that list. @@ -170,6 +170,7 @@ registerInstrumentations({ - [@opentelemetry/instrumentation-dns](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-dns) - [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express) - [@opentelemetry/instrumentation-fastify](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-fastify) +- [@opentelemetry/instrumentation-fs](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-fs) (default disabled) - [@opentelemetry/instrumentation-generic-pool](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-generic-pool) - [@opentelemetry/instrumentation-graphql](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-graphql) - [@opentelemetry/instrumentation-grpc](https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-grpc) diff --git a/metapackages/auto-instrumentations-node/package.json b/metapackages/auto-instrumentations-node/package.json index a73eda1350..c1b30d2a91 100644 --- a/metapackages/auto-instrumentations-node/package.json +++ b/metapackages/auto-instrumentations-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/auto-instrumentations-node", - "version": "0.50.1", + "version": "0.51.0", "description": "Metapackage which bundles opentelemetry node core and contrib instrumentations", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/metapackages/auto-instrumentations-node#readme", @@ -79,7 +79,7 @@ "@opentelemetry/instrumentation-mysql2": "^0.41.0", "@opentelemetry/instrumentation-nestjs-core": "^0.40.0", "@opentelemetry/instrumentation-net": "^0.39.0", - "@opentelemetry/instrumentation-pg": "^0.45.0", + "@opentelemetry/instrumentation-pg": "^0.46.0", "@opentelemetry/instrumentation-pino": "^0.42.0", "@opentelemetry/instrumentation-redis": "^0.42.0", "@opentelemetry/instrumentation-redis-4": "^0.42.1", @@ -89,10 +89,10 @@ "@opentelemetry/instrumentation-tedious": "^0.14.0", "@opentelemetry/instrumentation-undici": "^0.6.0", "@opentelemetry/instrumentation-winston": "^0.40.0", - "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.2", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.3", "@opentelemetry/resource-detector-aws": "^1.6.2", "@opentelemetry/resource-detector-azure": "^0.2.11", - "@opentelemetry/resource-detector-container": "^0.4.2", + "@opentelemetry/resource-detector-container": "^0.4.4", "@opentelemetry/resource-detector-gcp": "^0.29.12", "@opentelemetry/resources": "^1.24.0", "@opentelemetry/sdk-node": "^0.53.0" diff --git a/metapackages/auto-instrumentations-node/src/utils.ts b/metapackages/auto-instrumentations-node/src/utils.ts index b0417115a5..d7e6a0cd6b 100644 --- a/metapackages/auto-instrumentations-node/src/utils.ts +++ b/metapackages/auto-instrumentations-node/src/utils.ts @@ -136,6 +136,8 @@ const InstrumentationMap = { '@opentelemetry/instrumentation-winston': WinstonInstrumentation, }; +const defaultExcludedInstrumentations = ['@opentelemetry/instrumentation-fs']; + // Config types inferred automatically from the first argument of the constructor type ConfigArg = T extends new (...args: infer U) => unknown ? U[0] : never; export type InstrumentationConfigMap = { @@ -208,10 +210,14 @@ function getInstrumentationsFromEnv(envVar: string): string[] { /** * Returns the list of instrumentations that are enabled based on the environment variable. + * If the environment variable is unset, returns all instrumentation that are enabled by default. */ function getEnabledInstrumentationsFromEnv() { if (!process.env.OTEL_NODE_ENABLED_INSTRUMENTATIONS) { - return Object.keys(InstrumentationMap); + // all keys in the InstrumentationMap except for everything that is not enabled by default. + return Object.keys(InstrumentationMap).filter( + key => !defaultExcludedInstrumentations.includes(key) + ); } const instrumentationsFromEnv = getInstrumentationsFromEnv( diff --git a/metapackages/auto-instrumentations-node/test/utils.test.ts b/metapackages/auto-instrumentations-node/test/utils.test.ts index cc7cb24c68..d2959b6ddd 100644 --- a/metapackages/auto-instrumentations-node/test/utils.test.ts +++ b/metapackages/auto-instrumentations-node/test/utils.test.ts @@ -23,12 +23,15 @@ import { getResourceDetectorsFromEnv } from '../src/utils'; describe('utils', () => { describe('getNodeAutoInstrumentations', () => { - it('should include all installed instrumentations', () => { + it('should include all default instrumentations', () => { const instrumentations = getNodeAutoInstrumentations(); const installedInstrumentations = Object.keys( require('../package.json').dependencies ).filter(depName => { - return depName.startsWith('@opentelemetry/instrumentation-'); + return ( + depName.startsWith('@opentelemetry/instrumentation-') && + depName !== '@opentelemetry/instrumentation-fs' + ); }); assert.deepStrictEqual( @@ -89,6 +92,20 @@ describe('utils', () => { } }); + it('should allow enabling non-default instrumentations via OTEL_NODE_ENABLED_INSTRUMENTATIONS environment variable', () => { + process.env.OTEL_NODE_ENABLED_INSTRUMENTATIONS = 'fs'; // separator with and without whitespaces should be allowed + try { + const instrumentations = getNodeAutoInstrumentations(); + + assert.deepStrictEqual( + new Set(instrumentations.map(i => i.instrumentationName)), + new Set(['@opentelemetry/instrumentation-fs']) + ); + } finally { + delete process.env.OTEL_NODE_ENABLED_INSTRUMENTATIONS; + } + }); + it('should include all instrumentations except those disabled via OTEL_NODE_DISABLED_INSTRUMENTATIONS environment variable', () => { process.env.OTEL_NODE_DISABLED_INSTRUMENTATIONS = 'fs,aws-sdk, aws-lambda'; // separator with and without whitespaces should be allowed diff --git a/package-lock.json b/package-lock.json index dba5b500b2..be68f92a0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,9 +39,10 @@ }, "detectors/node/opentelemetry-resource-detector-alibaba-cloud": { "name": "@opentelemetry/resource-detector-alibaba-cloud", - "version": "0.29.2", + "version": "0.29.3", "license": "Apache-2.0", "dependencies": { + "@opentelemetry/core": "^1.26.0", "@opentelemetry/resources": "^1.10.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, @@ -172,9 +173,10 @@ }, "detectors/node/opentelemetry-resource-detector-container": { "name": "@opentelemetry/resource-detector-container", - "version": "0.4.2", + "version": "0.4.4", "license": "Apache-2.0", "dependencies": { + "@opentelemetry/core": "^1.26.0", "@opentelemetry/resources": "^1.10.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, @@ -387,7 +389,7 @@ }, "metapackages/auto-instrumentations-node": { "name": "@opentelemetry/auto-instrumentations-node", - "version": "0.50.1", + "version": "0.51.0", "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.53.0", @@ -420,7 +422,7 @@ "@opentelemetry/instrumentation-mysql2": "^0.41.0", "@opentelemetry/instrumentation-nestjs-core": "^0.40.0", "@opentelemetry/instrumentation-net": "^0.39.0", - "@opentelemetry/instrumentation-pg": "^0.45.0", + "@opentelemetry/instrumentation-pg": "^0.46.0", "@opentelemetry/instrumentation-pino": "^0.42.0", "@opentelemetry/instrumentation-redis": "^0.42.0", "@opentelemetry/instrumentation-redis-4": "^0.42.1", @@ -430,10 +432,10 @@ "@opentelemetry/instrumentation-tedious": "^0.14.0", "@opentelemetry/instrumentation-undici": "^0.6.0", "@opentelemetry/instrumentation-winston": "^0.40.0", - "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.2", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.3", "@opentelemetry/resource-detector-aws": "^1.6.2", "@opentelemetry/resource-detector-azure": "^0.2.11", - "@opentelemetry/resource-detector-container": "^0.4.2", + "@opentelemetry/resource-detector-container": "^0.4.4", "@opentelemetry/resource-detector-gcp": "^0.29.12", "@opentelemetry/resources": "^1.24.0", "@opentelemetry/sdk-node": "^0.53.0" @@ -8912,6 +8914,8 @@ "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-9.4.3.tgz", "integrity": "sha512-piMw8d3C4ppc5St5AhQEtecMhyeBK2Q1VYk4AL3NKtG6U0fzz/6KLiETpWdKXmazeI/m7qac2upOvwmRzle0aA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "iterare": "1.2.1", "tslib": "2.5.3" @@ -8969,13 +8973,17 @@ "version": "2.5.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "node_modules/@nestjs/platform-express": { "version": "9.4.3", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.4.3.tgz", "integrity": "sha512-FpdczWoRSC0zz2dNL9u2AQLXKXRVtq4HgHklAhbL59X0uy+mcxhlSThG7DHzDMkoSnuuHY8ojDVf7mDxk+GtCw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "body-parser": "1.20.2", "cors": "2.8.5", @@ -8997,6 +9005,8 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "ms": "2.0.0" } @@ -9006,6 +9016,8 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -9048,6 +9060,8 @@ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -9072,6 +9086,8 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -9089,19 +9105,25 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "node_modules/@nestjs/platform-express/node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "node_modules/@nestjs/platform-express/node_modules/raw-body": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -9116,13 +9138,17 @@ "version": "2.5.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "node_modules/@nestjs/websockets": { "version": "9.4.3", "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-9.4.3.tgz", "integrity": "sha512-LMLKJWZbWH3VQRxDK/658ynyN1n5lLCIen/dey2y5TzB0RNgxlSso/YJATVVfWNaT2CxPG8TUQMOTdopXCWGQw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "iterare": "1.2.1", "object-hash": "3.0.0", @@ -9145,7 +9171,9 @@ "version": "2.5.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "node_modules/@netflix/nerror": { "version": "1.1.3", @@ -14338,7 +14366,9 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "node_modules/append-transform": { "version": "2.0.0", @@ -16475,6 +16505,8 @@ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "streamsearch": "^1.1.0" }, @@ -17734,6 +17766,8 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, + "optional": true, + "peer": true, "engines": { "node": ">= 0.6" } @@ -26687,7 +26721,9 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "node_modules/merge-source-map": { "version": "1.1.0", @@ -27662,6 +27698,8 @@ "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "append-field": "^1.0.0", "busboy": "^1.0.0", @@ -27683,6 +27721,8 @@ "engines": [ "node >= 0.8" ], + "optional": true, + "peer": true, "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -27695,6 +27735,8 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "minimist": "^1.2.6" }, @@ -27707,6 +27749,8 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -27721,13 +27765,17 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "node_modules/multer/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -29616,6 +29664,8 @@ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true, + "optional": true, + "peer": true, "engines": { "node": ">= 6" } @@ -32949,6 +32999,8 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -34079,6 +34131,8 @@ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "dev": true, + "optional": true, + "peer": true, "engines": { "node": ">=10.0.0" } @@ -39695,9 +39749,6 @@ "devDependencies": { "@nestjs/common": "9.4.3", "@nestjs/core": "9.4.3", - "@nestjs/microservices": "9.4.3", - "@nestjs/platform-express": "9.4.3", - "@nestjs/websockets": "9.4.3", "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", "@opentelemetry/sdk-trace-base": "^1.8.0", @@ -39774,11 +39825,12 @@ }, "plugins/node/opentelemetry-instrumentation-pg": { "name": "@opentelemetry/instrumentation-pg", - "version": "0.45.0", + "version": "0.46.0", "license": "Apache-2.0", "dependencies": { + "@opentelemetry/core": "^1.26.0", "@opentelemetry/instrumentation": "^0.53.0", - "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/semantic-conventions": "1.27.0", "@opentelemetry/sql-common": "^0.40.1", "@types/pg": "8.6.1", "@types/pg-pool": "2.0.6" @@ -49102,6 +49154,8 @@ "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-9.4.3.tgz", "integrity": "sha512-piMw8d3C4ppc5St5AhQEtecMhyeBK2Q1VYk4AL3NKtG6U0fzz/6KLiETpWdKXmazeI/m7qac2upOvwmRzle0aA==", "dev": true, + "optional": true, + "peer": true, "requires": { "iterare": "1.2.1", "tslib": "2.5.3" @@ -49111,7 +49165,9 @@ "version": "2.5.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "optional": true, + "peer": true } } }, @@ -49120,6 +49176,8 @@ "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.4.3.tgz", "integrity": "sha512-FpdczWoRSC0zz2dNL9u2AQLXKXRVtq4HgHklAhbL59X0uy+mcxhlSThG7DHzDMkoSnuuHY8ojDVf7mDxk+GtCw==", "dev": true, + "optional": true, + "peer": true, "requires": { "body-parser": "1.20.2", "cors": "2.8.5", @@ -49133,6 +49191,8 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "optional": true, + "peer": true, "requires": { "ms": "2.0.0" } @@ -49142,6 +49202,8 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, + "optional": true, + "peer": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -49181,6 +49243,8 @@ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, + "optional": true, + "peer": true, "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -49203,6 +49267,8 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, + "optional": true, + "peer": true, "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -49217,19 +49283,25 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "raw-body": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, + "optional": true, + "peer": true, "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -49241,7 +49313,9 @@ "version": "2.5.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "optional": true, + "peer": true } } }, @@ -49250,6 +49324,8 @@ "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-9.4.3.tgz", "integrity": "sha512-LMLKJWZbWH3VQRxDK/658ynyN1n5lLCIen/dey2y5TzB0RNgxlSso/YJATVVfWNaT2CxPG8TUQMOTdopXCWGQw==", "dev": true, + "optional": true, + "peer": true, "requires": { "iterare": "1.2.1", "object-hash": "3.0.0", @@ -49260,7 +49336,9 @@ "version": "2.5.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "optional": true, + "peer": true } } }, @@ -50136,7 +50214,7 @@ "@opentelemetry/instrumentation-mysql2": "^0.41.0", "@opentelemetry/instrumentation-nestjs-core": "^0.40.0", "@opentelemetry/instrumentation-net": "^0.39.0", - "@opentelemetry/instrumentation-pg": "^0.45.0", + "@opentelemetry/instrumentation-pg": "^0.46.0", "@opentelemetry/instrumentation-pino": "^0.42.0", "@opentelemetry/instrumentation-redis": "^0.42.0", "@opentelemetry/instrumentation-redis-4": "^0.42.1", @@ -50146,10 +50224,10 @@ "@opentelemetry/instrumentation-tedious": "^0.14.0", "@opentelemetry/instrumentation-undici": "^0.6.0", "@opentelemetry/instrumentation-winston": "^0.40.0", - "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.2", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.3", "@opentelemetry/resource-detector-aws": "^1.6.2", "@opentelemetry/resource-detector-azure": "^0.2.11", - "@opentelemetry/resource-detector-container": "^0.4.2", + "@opentelemetry/resource-detector-container": "^0.4.4", "@opentelemetry/resource-detector-gcp": "^0.29.12", "@opentelemetry/resources": "^1.24.0", "@opentelemetry/sdk-node": "^0.53.0", @@ -52630,9 +52708,6 @@ "requires": { "@nestjs/common": "9.4.3", "@nestjs/core": "9.4.3", - "@nestjs/microservices": "9.4.3", - "@nestjs/platform-express": "9.4.3", - "@nestjs/websockets": "9.4.3", "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", "@opentelemetry/instrumentation": "^0.53.0", @@ -52703,10 +52778,11 @@ "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", "@opentelemetry/contrib-test-utils": "^0.41.0", + "@opentelemetry/core": "^1.26.0", "@opentelemetry/instrumentation": "^0.53.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", - "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/semantic-conventions": "1.27.0", "@opentelemetry/sql-common": "^0.40.1", "@types/mocha": "7.0.2", "@types/node": "18.18.14", @@ -55024,6 +55100,7 @@ "requires": { "@opentelemetry/api": "^1.0.0", "@opentelemetry/contrib-test-utils": "^0.41.0", + "@opentelemetry/core": "^1.26.0", "@opentelemetry/resources": "^1.10.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/mocha": "8.2.3", @@ -55133,6 +55210,7 @@ "requires": { "@opentelemetry/api": "^1.0.0", "@opentelemetry/contrib-test-utils": "^0.41.0", + "@opentelemetry/core": "^1.26.0", "@opentelemetry/resources": "^1.10.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/mocha": "8.2.3", @@ -58133,7 +58211,9 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "append-transform": { "version": "2.0.0", @@ -59992,6 +60072,8 @@ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, + "optional": true, + "peer": true, "requires": { "streamsearch": "^1.1.0" } @@ -60975,7 +61057,9 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "cookie-signature": { "version": "1.0.6", @@ -67929,7 +68013,9 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "merge-source-map": { "version": "1.1.0", @@ -68704,6 +68790,8 @@ "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", "dev": true, + "optional": true, + "peer": true, "requires": { "append-field": "^1.0.0", "busboy": "^1.0.0", @@ -68719,6 +68807,8 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, + "optional": true, + "peer": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -68731,6 +68821,8 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "optional": true, + "peer": true, "requires": { "minimist": "^1.2.6" } @@ -68740,6 +68832,8 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "optional": true, + "peer": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -68754,13 +68848,17 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "optional": true, + "peer": true, "requires": { "safe-buffer": "~5.1.0" } @@ -70269,7 +70367,9 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "object-inspect": { "version": "1.13.1", @@ -72801,6 +72901,8 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, + "optional": true, + "peer": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -73692,7 +73794,9 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "streamx": { "version": "2.16.1", diff --git a/package.json b/package.json index f0daf35bfc..dfee7ad5aa 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,6 @@ "clean": "lerna run clean", "precompile": "tsc --version && npm run version:update", "version:update": "lerna run version:update", - "lint:readme": "lerna run lint:readme", "compile": "lerna run compile", "prewatch": "npm run precompile", "test": "lerna run test", @@ -24,12 +23,13 @@ "test-all-versions": "npm run --if-present --workspaces test-all-versions", "bump": "lerna publish", "changelog": "lerna-changelog", - "lint": "lerna run lint", - "lint:fix": "lerna run lint:fix", + "lint": "lerna run lint && npm run lint:readme && npm run lint:markdown", + "lint:fix": "lerna run lint:fix && npm run lint:markdown:fix", "lint:examples": "eslint ./examples/**/*.js", "lint:examples:fix": "eslint ./examples/**/*.js --fix", "lint:markdown": "markdownlint-cli2 $(git ls-files '*.md')", - "lint:markdown:fix": "markdownlint-cli2 --fix $(git ls-files '*.md')" + "lint:markdown:fix": "markdownlint-cli2 --fix $(git ls-files '*.md')", + "lint:readme": "lerna run lint:readme" }, "keywords": [ "opentelemetry", diff --git a/plugins/node/instrumentation-amqplib/.tav.yml b/plugins/node/instrumentation-amqplib/.tav.yml index bf4e3eed80..8dd3a78a9b 100644 --- a/plugins/node/instrumentation-amqplib/.tav.yml +++ b/plugins/node/instrumentation-amqplib/.tav.yml @@ -1,4 +1,6 @@ -'amqplib': - versions: ">=0.5.5" +amqplib: + versions: + include: ">=0.5.5" + mode: latest-minors commands: - - yarn test + - npm test diff --git a/plugins/node/instrumentation-cucumber/.tav.yml b/plugins/node/instrumentation-cucumber/.tav.yml index a1771a240c..0a9cf7031d 100644 --- a/plugins/node/instrumentation-cucumber/.tav.yml +++ b/plugins/node/instrumentation-cucumber/.tav.yml @@ -1,7 +1,11 @@ '@cucumber/cucumber': - - versions: '^8.0.0 || ^9.0.0' + - versions: + include: '^8.0.0 || ^9.0.0' + mode: latest-minors node: '>=14' commands: npm test - - versions: '^10.0.0' + - versions: + include: '^10.0.0' + mode: latest-minors node: '>=18' commands: npm test diff --git a/plugins/node/instrumentation-dataloader/.tav.yml b/plugins/node/instrumentation-dataloader/.tav.yml index f0baa3a47a..6b8c5c32dd 100644 --- a/plugins/node/instrumentation-dataloader/.tav.yml +++ b/plugins/node/instrumentation-dataloader/.tav.yml @@ -1,4 +1,6 @@ dataloader: # Testing ^2.0.0 covers about 90% of the downloaded versions - versions: "^2.0.0" + versions: + include: "^2.0.0" + mode: latest-minors commands: npm run test diff --git a/plugins/node/instrumentation-lru-memoizer/.tav.yml b/plugins/node/instrumentation-lru-memoizer/.tav.yml index bf8a138d1b..e6a3bbf017 100644 --- a/plugins/node/instrumentation-lru-memoizer/.tav.yml +++ b/plugins/node/instrumentation-lru-memoizer/.tav.yml @@ -1,4 +1,6 @@ 'lru-memoizer': - versions: ">=1.3 <3" + versions: + include: ">=1.3 <3" + mode: latest-minors commands: - npm test diff --git a/plugins/node/instrumentation-socket.io/.tav.yml b/plugins/node/instrumentation-socket.io/.tav.yml index a7c5a52ec5..c8d487e10d 100644 --- a/plugins/node/instrumentation-socket.io/.tav.yml +++ b/plugins/node/instrumentation-socket.io/.tav.yml @@ -1,5 +1,7 @@ 'socket.io': - - versions: "2.1.1 || 2.2.0 || 2.3.0 || 2.4.0 || ^2.5.0" + - versions: + include: "^2.1.1" + mode: latest-minors peerDependencies: socket.io-client@^2 commands: - npm run test @@ -9,7 +11,9 @@ commands: - npm run test - - versions: "4.5.3 || 4.6.2 || ^4.7.1" + - versions: + include: "^4.5.3" + mode: latest-minors peerDependencies: socket.io-client@^4 commands: - npm run test diff --git a/plugins/node/opentelemetry-instrumentation-aws-sdk/.tav.yml b/plugins/node/opentelemetry-instrumentation-aws-sdk/.tav.yml index 5db96c82f3..33461acc0b 100644 --- a/plugins/node/opentelemetry-instrumentation-aws-sdk/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-aws-sdk/.tav.yml @@ -1,19 +1,28 @@ "aws-sdk": # A small subset of releases in the range [2.308.0, 3) to reduce testing time. - versions: "2.308.0 || 2.556.0 || 2.801.0 || 2.1049.0 || 2.1297.0 || 2.1546.0 || >=2.1548.0" + versions: + include: "^2.308.0" + mode: max-7 commands: - npm run test +# Versions [3.363.0, 3.377.0] of all @aws-sdk/client-* were bad releases. See: +# - https://github.com/open-telemetry/opentelemetry-js-contrib/pull/2464#issuecomment-2403652552 +# - https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1828#issuecomment-1834276719 + "@aws-sdk/client-s3": - # A small subset of releases in the range [3.6.1, 4) to reduce testing time. - # - 3.377.0 was a bad release (see issue #1828). # - 3.529.0 was missing the fast-xml-parser dependency (https://github.com/aws/aws-sdk-js-v3/releases/tag/v3.529.1) - versions: "3.6.1 || 3.55.0 || 3.180.0 || 3.289.0 || 3.385.0 || 3.498.0 || >=3.529.1" + versions: + include: "^3.6.1" + exclude: "3.529.0 || >=3.363.0 <=3.377.0" + mode: "max-7" commands: - npm run test "@aws-sdk/client-sqs": - # A small subset of releases in the range [3.24.0, 4) to reduce testing time. - versions: "3.24.0 || 3.94.0 || 3.202.0 || 3.296.0 || 3.388.0 || 3.496.0 || >=3.503.1" + versions: + include: "^3.24.0" + exclude: ">=3.363.0 <=3.377.0" + mode: "max-7" commands: - npm run test diff --git a/plugins/node/opentelemetry-instrumentation-bunyan/.tav.yml b/plugins/node/opentelemetry-instrumentation-bunyan/.tav.yml index 84c75a6dc0..f3fa90578f 100644 --- a/plugins/node/opentelemetry-instrumentation-bunyan/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-bunyan/.tav.yml @@ -1,4 +1,6 @@ bunyan: # Testing ^1.8.12 covers at least 95% of the downloaded versions - versions: "^1.8.12" + versions: + include: "^1.8.12" + mode: latest-minors commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-express/.tav.yml b/plugins/node/opentelemetry-instrumentation-express/.tav.yml index 241e7dcc4b..eeee57a593 100644 --- a/plugins/node/opentelemetry-instrumentation-express/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-express/.tav.yml @@ -1,3 +1,5 @@ express: - - versions: "^4.16.2" + - versions: + include: "^4.16.2" + mode: latest-minors commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-fastify/.tav.yml b/plugins/node/opentelemetry-instrumentation-fastify/.tav.yml index 6f23da47eb..608eb2dbf8 100644 --- a/plugins/node/opentelemetry-instrumentation-fastify/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-fastify/.tav.yml @@ -1,9 +1,11 @@ "fastify": - # Sanity check the first 4.x release, instead of all releases, plus recent - # releases. - - versions: "4.0.0 || >=4.24.3 <5" + - versions: + include: "^4.0.0" + mode: max-7 commands: npm run test - - versions: ">=5 <6" + - versions: + include: ">=5 <6" + mode: max-7 commands: npm run test peerDependencies: "@fastify/express@4.0.1" node: '>=20' diff --git a/plugins/node/opentelemetry-instrumentation-graphql/.tav.yml b/plugins/node/opentelemetry-instrumentation-graphql/.tav.yml index 603ce40daf..ab32f433d2 100644 --- a/plugins/node/opentelemetry-instrumentation-graphql/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-graphql/.tav.yml @@ -1,4 +1,5 @@ graphql: - # Taking a sample from the most downloaded versions in the range "14 || 15 || 16" - versions: "16.4.0 || 16.3.0 || 16.2.0 || 16.0.0 || ^15.8.0 || 15.7.2 || 15.6.1 || 15.6.0 || 15.5.3 || 15.5.1 || 15.5.0 || 15.4.0 || 15.3.0 || ^14.7.0 || 14.6.0 || 14.5.8 || 14.0.0" + versions: + include: "14 || 15 || 16" + mode: max-7 commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-hapi/.tav.yml b/plugins/node/opentelemetry-instrumentation-hapi/.tav.yml index c1d07484cb..738740e3f9 100644 --- a/plugins/node/opentelemetry-instrumentation-hapi/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-hapi/.tav.yml @@ -1,11 +1,17 @@ "@hapi/hapi": - - versions: "^19.2.0 || ^18.4.1 || ^17.9.0" + - versions: + include: "^19.2.0 || ^18.4.1 || ^17.9.0" + mode: latest-minors node: ">=14 <16" commands: npm test - - versions: "^20.3.0" + - versions: + include: "^20.3.0" + mode: latest-minors node: ">=14" commands: npm test - - versions: "^21.3.3" + - versions: + include: "^21.3.3" + mode: latest-minors node: ">=14.15.0" commands: npm test diff --git a/plugins/node/opentelemetry-instrumentation-ioredis/.tav.yml b/plugins/node/opentelemetry-instrumentation-ioredis/.tav.yml index cc4d970155..eb2248a00b 100644 --- a/plugins/node/opentelemetry-instrumentation-ioredis/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-ioredis/.tav.yml @@ -1,4 +1,7 @@ ioredis: # Ignoring v4.19.0. Tests never ends. Caused by https://github.com/luin/ioredis/pull/1219 - versions: "^2.5.0 || ^3.2.2 || 4.14.1 || 4.16.3 || 4.17.3 || 4.18.0 || 4.19.2 || 4.19.4 || 4.22.0 || 4.24.5 || 4.26.0 || 4.27.11 || ^4.28.5 || 5.0.6 || 5.2.6 || ^5.3.2" + versions: + include: '>=2.0.0 <6' + exclude: '4.19.0' + mode: max-7 commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-koa/.tav.yml b/plugins/node/opentelemetry-instrumentation-koa/.tav.yml index 2cd22120aa..973c1fb861 100644 --- a/plugins/node/opentelemetry-instrumentation-koa/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-koa/.tav.yml @@ -1,8 +1,12 @@ "@koa/router": - versions: "8.0.8 || 9.4.0 || 10.0.0 || 10.1.1 || 11.0.1 || >=12.0.0" + versions: + include: ">=8.0.0" + mode: latest-minors commands: npm run test koa: # Testing ^2.7.0 covers at least 97% of the downloaded koa versions - versions: "^2.7.0" + versions: + include: "^2.7.0" + mode: latest-minors commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-mongodb/.tav.yml b/plugins/node/opentelemetry-instrumentation-mongodb/.tav.yml index fadf8c0d27..681ef1dcb6 100644 --- a/plugins/node/opentelemetry-instrumentation-mongodb/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-mongodb/.tav.yml @@ -1,5 +1,7 @@ mongodb: - - versions: ">=3.3 <4" + - versions: + include: ">=3.3 <4" + mode: max-7 commands: npm run test-v3 - versions: include: ">=4 <5" @@ -9,9 +11,14 @@ mongodb: # tests for the wrong version. # Ref: https://github.com/open-telemetry/opentelemetry-js-contrib/pull/2001#issuecomment-1992202942 exclude: "4.17.2" + mode: max-7 commands: npm run test-v4 - - versions: ">=5 <6" + - versions: + include: ">=5 <6" + mode: max-7 commands: npm run test-v5-v6 - - versions: ">=6 <7" + - versions: + include: ">=6 <7" + mode: max-7 node: '>=15.0.0' commands: npm run test-v5-v6 diff --git a/plugins/node/opentelemetry-instrumentation-mysql2/.tav.yml b/plugins/node/opentelemetry-instrumentation-mysql2/.tav.yml index e0965468ab..10c6cee55b 100644 --- a/plugins/node/opentelemetry-instrumentation-mysql2/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-mysql2/.tav.yml @@ -1,11 +1,8 @@ mysql2: - - versions: <4 >=3.2.0 || 3.1.0 || 3.0.0 - commands: npm run test - - - versions: <3 >=2.3.2 || 2.3.0 || 2.2.5 || 2.1.0 - # Skip 2.3.3 which installs types from git which takes 10m on it's own - commands: npm run test - - - versions: 1.4.2 || 1.5.3 || 1.6.4 || 1.6.5 || 1.7.0 + versions: + include: ">=1.4.2 <4" # Skip v1.6.2, which is broken - commands: npm run test + # Skip 2.3.3 which installs types from git which takes 10m on it's own + exclude: "1.6.2 || 2.3.3" + mode: latest-minors + commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-nestjs-core/.tav.yml b/plugins/node/opentelemetry-instrumentation-nestjs-core/.tav.yml index ba5fe6062a..f412b3cb3e 100644 --- a/plugins/node/opentelemetry-instrumentation-nestjs-core/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-nestjs-core/.tav.yml @@ -1,27 +1,44 @@ "@nestjs/core": - - versions: "^8.2.0 || 8.1.2 || 8.1.1 || 8.0.11 || 8.0.9 || 8.0.6" + - versions: + include: ">=10.0.0 <11" + mode: latest-minors + # NestJS 10 requires Node.js v16 or later. + # https://docs.nestjs.com/migration-guide#dropping-support-for-nodejs-v12 + node: ">=16" + peerDependencies: + - "@nestjs/common@^10.0.0" + - "rxjs@^7.1.0" + commands: npm run test + + - versions: + include: ">=9.0.0 <10" + mode: latest-minors + peerDependencies: + - "@nestjs/common@^9.0.0" + - "rxjs@^7.1.0" + commands: npm run test + + - versions: + include: ">=8.0.0 <9" + mode: latest-minors peerDependencies: - "@nestjs/common@^8.0.0" - - "@nestjs/microservices@^8.0.0" - - "@nestjs/platform-express@^8.0.0" - - "@nestjs/websockets@^8.0.0" - "rxjs@^7.1.0" commands: npm run test - - versions: "^7.6.17 || 7.6.15 || 7.6.13 || 7.6.12" + - versions: + # We *could* test all 7.x "latest-minors", but the latest 7.x release was + # 2021, so let's just test the latest. + include: "^7.6.18" peerDependencies: - "@nestjs/common@^7.0.0" - - "@nestjs/microservices@^7.0.0" - "@nestjs/platform-express@^7.0.0" - - "@nestjs/websockets@^7.0.0" - "rxjs@^6.0.0" commands: npm run test - versions: "6.11.11" peerDependencies: - "@nestjs/common@^6.0.0" - - "@nestjs/microservices@^6.0.0" - "@nestjs/platform-express@^6.0.0" - - "@nestjs/websockets@^6.0.0" - "rxjs@^6.0.0" commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-nestjs-core/package.json b/plugins/node/opentelemetry-instrumentation-nestjs-core/package.json index 377b82a2fa..ba291c1e21 100644 --- a/plugins/node/opentelemetry-instrumentation-nestjs-core/package.json +++ b/plugins/node/opentelemetry-instrumentation-nestjs-core/package.json @@ -47,9 +47,6 @@ "devDependencies": { "@nestjs/common": "9.4.3", "@nestjs/core": "9.4.3", - "@nestjs/microservices": "9.4.3", - "@nestjs/platform-express": "9.4.3", - "@nestjs/websockets": "9.4.3", "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", "@opentelemetry/sdk-trace-base": "^1.8.0", diff --git a/plugins/node/opentelemetry-instrumentation-nestjs-core/scripts/test-all-versions b/plugins/node/opentelemetry-instrumentation-nestjs-core/scripts/test-all-versions deleted file mode 100755 index 07de70e070..0000000000 --- a/plugins/node/opentelemetry-instrumentation-nestjs-core/scripts/test-all-versions +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env bash - -# return to the default package.json and install all deps -git checkout -- package.json -npm install - -test_silent () { - npm run test &> /dev/null && echo OK || echo FAIL -} - -echo -e "\n## 4.0.0" -npm install -D \ - reflect-metadata@0.1.13 \ - @nestjs/common@^4.0.0 \ - @nestjs/core@^4.0.0 \ - @nestjs/microservices@^4.0.0 \ - @nestjs/websockets@^4.0.0 \ - rxjs@^5.4.2 \ - rxjs-compat@^6.0.0 > /dev/null -test_silent - -echo -e "\n## ^4.0.0" -npm install -D \ - reflect-metadata@0.1.13 \ - @nestjs/common@^4.4.0 \ - @nestjs/core@^4.4.0 \ - @nestjs/microservices@^4.4.0 \ - @nestjs/websockets@^4.4.0 \ - rxjs@^5.4.2 \ - rxjs-compat@^6.0.0 > /dev/null -test_silent - -echo -e "\n## ^5.0.0" -npm install -D \ - reflect-metadata@0.1.13 \ - @nestjs/common@^5.0.0 \ - @nestjs/core@^5.0.0 \ - @nestjs/microservices@^5.0.0 \ - @nestjs/websockets@^5.0.0 \ - rxjs@^6.0.0 \ - rxjs-compat@^6.0.0 > /dev/null -test_silent - -echo -e "\n## ^6.0.0" -npm install -D \ - reflect-metadata@0.1.13 \ - @nestjs/common@^6.0.0 \ - @nestjs/core@^6.0.0 \ - @nestjs/microservices@^6.0.0 \ - @nestjs/websockets@^6.0.0 \ - @nestjs/platform-express@^6.0.0 \ - rxjs@^6.0.0 \ - rxjs-compat@^6.0.0 > /dev/null -test_silent - -echo -e "\n## ^7.0.0" -npm install -D \ - reflect-metadata@0.1.13 \ - @nestjs/common@^7.0.0 \ - @nestjs/core@^7.0.0 \ - @nestjs/microservices@^7.0.0 \ - @nestjs/websockets@^7.0.0 \ - @nestjs/platform-express@^7.0.0 \ - rxjs@^7.0.0 \ - rxjs-compat@latest > /dev/null -test_silent - -echo -e "\n## ^8.0.0" -npm install -D \ - reflect-metadata@0.1.13 \ - @nestjs/common@^8.0.0 \ - @nestjs/core@^8.0.0 \ - @nestjs/microservices@^8.0.0 \ - @nestjs/websockets@^8.0.0 \ - @nestjs/platform-express@^8.0.0 \ - rxjs@^7.2.0 \ - rxjs-compat@latest > /dev/null -test_silent diff --git a/plugins/node/opentelemetry-instrumentation-nestjs-core/test/setup.ts b/plugins/node/opentelemetry-instrumentation-nestjs-core/test/setup.ts index 1b77efe8ea..23fdcb8662 100644 --- a/plugins/node/opentelemetry-instrumentation-nestjs-core/test/setup.ts +++ b/plugins/node/opentelemetry-instrumentation-nestjs-core/test/setup.ts @@ -232,7 +232,7 @@ export const setup = async (version: string): Promise => { ); } - const app = await core.NestFactory.create(AppModule); + const app = await core.NestFactory.create(AppModule, { logger: false }); if (app.listenAsync) { await app.listenAsync(0, 'localhost'); } else { diff --git a/plugins/node/opentelemetry-instrumentation-pg/.tav.yml b/plugins/node/opentelemetry-instrumentation-pg/.tav.yml index 9f9320f8d5..eea3b2b2fb 100644 --- a/plugins/node/opentelemetry-instrumentation-pg/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-pg/.tav.yml @@ -1,5 +1,6 @@ pg: - # a sample from supported versions - - versions: "8.5.1 || 8.6.0 || 8.7.1" - peerDependencies: pg-pool@^3 - commands: npm run test + versions: + include: '>=8.0.3 <9' + mode: max-7 + peerDependencies: pg-pool@^3 + commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-pg/CHANGELOG.md b/plugins/node/opentelemetry-instrumentation-pg/CHANGELOG.md index f72f9b6d68..146fc0cf57 100644 --- a/plugins/node/opentelemetry-instrumentation-pg/CHANGELOG.md +++ b/plugins/node/opentelemetry-instrumentation-pg/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [0.46.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-pg-v0.45.1...instrumentation-pg-v0.46.0) (2024-10-16) + + +### Features + +* **instrumentation-pg:** add operation name attribute to db duration metric ([#2475](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2475)) ([b043ffb](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/b043ffbe17947409c0ae9ea6fabe6ab1ec5b4cc9)) + + +### Bug Fixes + +* **instrumentation-pg:** not add duplicate listeners to pg pool ([#2484](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2484)) ([33c093d](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/33c093daf77153ea3d0ab8d7925772efd37bdebe)) + +## [0.45.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-pg-v0.45.0...instrumentation-pg-v0.45.1) (2024-10-10) + + +### Bug Fixes + +* add missing @opentelemetry/core dependency ([#2473](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2473)) ([4d66431](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4d66431a2ad480720bf6c33663a419ec1404cd33)) + ## [0.45.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-pg-v0.44.0...instrumentation-pg-v0.45.0) (2024-10-08) diff --git a/plugins/node/opentelemetry-instrumentation-pg/README.md b/plugins/node/opentelemetry-instrumentation-pg/README.md index ba267f7f17..b2657c625e 100644 --- a/plugins/node/opentelemetry-instrumentation-pg/README.md +++ b/plugins/node/opentelemetry-instrumentation-pg/README.md @@ -17,7 +17,7 @@ npm install --save @opentelemetry/instrumentation-pg ### Supported Versions -- [`pg`](https://www.npmjs.com/package/pg) versions `>=8.0.0 <9` +- [`pg`](https://www.npmjs.com/package/pg) versions `>=8.0.3 <9` - [`pg-pool`](https://www.npmjs.com/package/pg-pool) versions `>=2.0.0 <4` ## Usage diff --git a/plugins/node/opentelemetry-instrumentation-pg/package.json b/plugins/node/opentelemetry-instrumentation-pg/package.json index 1012044cb5..76deba667a 100644 --- a/plugins/node/opentelemetry-instrumentation-pg/package.json +++ b/plugins/node/opentelemetry-instrumentation-pg/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-pg", - "version": "0.45.0", + "version": "0.46.0", "description": "OpenTelemetry instrumentation for `pg` and `pg-pool` database client for PostgreSQL", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -16,8 +16,8 @@ "prepublishOnly": "npm run compile", "tdd": "npm run test -- --watch-extensions ts --watch", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", - "test-all-versions": "cross-env IN_TAV=true tav", - "test-all-versions:local": "cross-env IN_TAV=true RUN_POSTGRES_TESTS_LOCAL=true npm run test-all-versions", + "test-all-versions": "tav", + "test-all-versions:local": "cross-env RUN_POSTGRES_TESTS_LOCAL=true npm run test-all-versions", "test:debug": "ts-mocha --inspect-brk --no-timeouts -p tsconfig.json 'test/**/*.test.ts'", "test:local": "cross-env RUN_POSTGRES_TESTS_LOCAL=true npm run test", "version:update": "node ../../../scripts/version-update.js", @@ -73,8 +73,9 @@ }, "dependencies": { "@opentelemetry/instrumentation": "^0.53.0", - "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/semantic-conventions": "1.27.0", "@opentelemetry/sql-common": "^0.40.1", + "@opentelemetry/core": "^1.26.0", "@types/pg": "8.6.1", "@types/pg-pool": "2.0.6" }, diff --git a/plugins/node/opentelemetry-instrumentation-pg/src/instrumentation.ts b/plugins/node/opentelemetry-instrumentation-pg/src/instrumentation.ts index e7c3da7a5f..2905e783a8 100644 --- a/plugins/node/opentelemetry-instrumentation-pg/src/instrumentation.ts +++ b/plugins/node/opentelemetry-instrumentation-pg/src/instrumentation.ts @@ -39,6 +39,7 @@ import { PostgresCallback, PgPoolExtended, PgPoolCallback, + EVENT_LISTENERS_SET, } from './internal-types'; import { PgInstrumentationConfig } from './types'; import * as utils from './utils'; @@ -62,6 +63,7 @@ import { METRIC_DB_CLIENT_CONNECTION_PENDING_REQUESTS, METRIC_DB_CLIENT_OPERATION_DURATION, ATTR_DB_NAMESPACE, + ATTR_DB_OPERATION_NAME, } from '@opentelemetry/semantic-conventions/incubating'; export class PgInstrumentation extends InstrumentationBase { @@ -124,7 +126,7 @@ export class PgInstrumentation extends InstrumentationBase=8.0.0 <9'], + ['>=8.0.3 <9'], (module: any) => { const moduleExports: typeof pgTypes = module[Symbol.toStringTag] === 'Module' @@ -228,6 +230,7 @@ export class PgInstrumentation extends InstrumentationBase { @@ -282,6 +285,11 @@ export class PgInstrumentation extends InstrumentationBase { plugin.recordOperationDuration(attributes, startTime); }; @@ -428,6 +436,52 @@ export class PgInstrumentation extends InstrumentationBase { + this._connectionsCounter = utils.updateCounter( + poolName, + pgPool, + this._connectionsCount, + this._connectionPendingRequests, + this._connectionsCounter + ); + }); + + pgPool.on('acquire', () => { + this._connectionsCounter = utils.updateCounter( + poolName, + pgPool, + this._connectionsCount, + this._connectionPendingRequests, + this._connectionsCounter + ); + }); + + pgPool.on('remove', () => { + this._connectionsCounter = utils.updateCounter( + poolName, + pgPool, + this._connectionsCount, + this._connectionPendingRequests, + this._connectionsCounter + ); + }); + + pgPool.on('release' as any, () => { + this._connectionsCounter = utils.updateCounter( + poolName, + pgPool, + this._connectionsCount, + this._connectionPendingRequests, + this._connectionsCounter + ); + }); + pgPool[EVENT_LISTENERS_SET] = true; + } + private _getPoolConnectPatch() { const plugin = this; return (originalConnect: typeof pgPoolTypes.prototype.connect) => { @@ -442,41 +496,7 @@ export class PgInstrumentation extends InstrumentationBase { - plugin._connectionsCounter = utils.updateCounter( - this, - plugin._connectionsCount, - plugin._connectionPendingRequests, - plugin._connectionsCounter - ); - }); - - this.on('acquire', () => { - plugin._connectionsCounter = utils.updateCounter( - this, - plugin._connectionsCount, - plugin._connectionPendingRequests, - plugin._connectionsCounter - ); - }); - - this.on('remove', () => { - plugin._connectionsCounter = utils.updateCounter( - this, - plugin._connectionsCount, - plugin._connectionPendingRequests, - plugin._connectionsCounter - ); - }); - - this.on('release' as any, () => { - plugin._connectionsCounter = utils.updateCounter( - this, - plugin._connectionsCount, - plugin._connectionPendingRequests, - plugin._connectionsCounter - ); - }); + plugin._setPoolConnectEventListeners(this); if (callback) { const parentSpan = trace.getSpan(context.active()); diff --git a/plugins/node/opentelemetry-instrumentation-pg/src/internal-types.ts b/plugins/node/opentelemetry-instrumentation-pg/src/internal-types.ts index 1270814499..d01432b65c 100644 --- a/plugins/node/opentelemetry-instrumentation-pg/src/internal-types.ts +++ b/plugins/node/opentelemetry-instrumentation-pg/src/internal-types.ts @@ -55,8 +55,13 @@ export interface PgPoolOptionsParams { maxClient: number; // maximum size of the pool } +export const EVENT_LISTENERS_SET = Symbol( + 'opentelemetry.instrumentation.pg.eventListenersSet' +); + export interface PgPoolExtended extends pgPoolTypes { options: PgPoolOptionsParams; + [EVENT_LISTENERS_SET]?: boolean; // flag to identify if the event listeners for instrumentation have been set } export type PgClientConnect = (callback?: Function) => Promise | void; diff --git a/plugins/node/opentelemetry-instrumentation-pg/src/utils.ts b/plugins/node/opentelemetry-instrumentation-pg/src/utils.ts index f3d65f5b82..7d2eb9c115 100644 --- a/plugins/node/opentelemetry-instrumentation-pg/src/utils.ts +++ b/plugins/node/opentelemetry-instrumentation-pg/src/utils.ts @@ -92,7 +92,7 @@ export function getQuerySpanName( return `${SpanNames.QUERY_PREFIX}:${command}${dbName ? ` ${dbName}` : ''}`; } -function parseNormalizedOperationName(queryText: string) { +export function parseNormalizedOperationName(queryText: string) { const indexOfFirstSpace = queryText.indexOf(' '); let sqlCommand = indexOfFirstSpace === -1 @@ -282,12 +282,12 @@ export interface poolConnectionsCounter { } export function updateCounter( + poolName: string, pool: PgPoolExtended, connectionCount: UpDownCounter, connectionPendingRequests: UpDownCounter, latestCounter: poolConnectionsCounter ): poolConnectionsCounter { - const poolName = getPoolName(pool.options); const all = pool.totalCount; const pending = pool.waitingCount; const idle = pool.idleCount; diff --git a/plugins/node/opentelemetry-instrumentation-pg/test/pg-pool.test.ts b/plugins/node/opentelemetry-instrumentation-pg/test/pg-pool.test.ts index 84b203788e..b8d65a42b5 100644 --- a/plugins/node/opentelemetry-instrumentation-pg/test/pg-pool.test.ts +++ b/plugins/node/opentelemetry-instrumentation-pg/test/pg-pool.test.ts @@ -50,7 +50,11 @@ import { SEMATTRS_DB_USER, SEMATTRS_DB_STATEMENT, } from '@opentelemetry/semantic-conventions'; -import { ATTR_DB_CLIENT_CONNECTION_STATE } from '@opentelemetry/semantic-conventions/incubating'; +import { + METRIC_DB_CLIENT_CONNECTION_COUNT, + METRIC_DB_CLIENT_CONNECTION_PENDING_REQUESTS, + ATTR_DB_CLIENT_CONNECTION_STATE, +} from '@opentelemetry/semantic-conventions/incubating'; const memoryExporter = new InMemorySpanExporter(); @@ -277,6 +281,7 @@ describe('pg-pool', () => { await client.query('SELECT NOW()'); } finally { client.release(); + await newPool.end(); } const spans = memoryExporter.getFinishedSpans(); assert.strictEqual(spans.length, 0); @@ -491,7 +496,7 @@ describe('pg-pool', () => { metricReader = testUtils.initMeterProvider(instrumentation); }); - it('should generate `db.client.connection.count` and `db.client.connection.pending_requests` metrics', async () => { + it('should generate `db.client.connection.count` and `db.client.connection.pending_requests` metrics', done => { pool.connect((err, client, release) => { if (err) { throw new Error(err.message); @@ -521,7 +526,7 @@ describe('pg-pool', () => { const metrics = resourceMetrics.scopeMetrics[0].metrics; assert.strictEqual( metrics[1].descriptor.name, - 'db.client.connection.count' + METRIC_DB_CLIENT_CONNECTION_COUNT ); assert.strictEqual( metrics[1].descriptor.description, @@ -552,7 +557,7 @@ describe('pg-pool', () => { assert.strictEqual( metrics[2].descriptor.name, - 'db.client.connection.pending_requests' + METRIC_DB_CLIENT_CONNECTION_PENDING_REQUESTS ); assert.strictEqual( metrics[2].descriptor.description, @@ -563,8 +568,276 @@ describe('pg-pool', () => { 0, 'expected to have 0 pending requests' ); + done(); + }); + }); + }); + + it('should not add duplicate event listeners to PgPool events', done => { + const poolAux: pgPool = new pgPool(CONFIG); + let completed = 0; + poolAux.connect((err, client, release) => { + if (err) { + throw new Error(err.message); + } + if (!release) { + throw new Error('Did not receive release function'); + } + if (!client) { + throw new Error('No client received'); + } + assert.ok(client); + release(); + + assert.equal( + poolAux.listenerCount('connect'), + 1, + `${poolAux.listenerCount('connect')} event listener(s) for 'connect'` + ); + assert.equal( + poolAux.listenerCount('acquire'), + 1, + `${poolAux.listenerCount('acquire')} event listener(s) for 'acquire'` + ); + assert.equal( + poolAux.listenerCount('remove'), + 1, + `${poolAux.listenerCount('remove')} event listener(s) for 'remove'` + ); + assert.equal( + poolAux.listenerCount('release'), + 1, + `${poolAux.listenerCount('release')} event listener(s) for 'release'` + ); + + completed++; + if (completed >= 2) { + done(); + } + }); + + poolAux.connect((err, client, release) => { + if (err) { + throw new Error(err.message); + } + if (!release) { + throw new Error('Did not receive release function'); + } + if (!client) { + throw new Error('No client received'); + } + assert.ok(client); + release(); + + assert.equal( + poolAux.listenerCount('connect'), + 1, + `${poolAux.listenerCount('connect')} event listener(s) for 'connect'` + ); + assert.equal( + poolAux.listenerCount('acquire'), + 1, + `${poolAux.listenerCount('acquire')} event listener(s) for 'acquire'` + ); + assert.equal( + poolAux.listenerCount('remove'), + 1, + `${poolAux.listenerCount('remove')} event listener(s) for 'remove'` + ); + assert.equal( + poolAux.listenerCount('release'), + 1, + `${poolAux.listenerCount('release')} event listener(s) for 'release'` + ); + + completed++; + if (completed >= 2) { + done(); + } + }); + }); + + it('adding a custom event listener should still work with the default event listeners to PgPool events', done => { + const poolAux: pgPool = new pgPool(CONFIG); + let testValue = 0; + poolAux.on('connect', () => { + testValue = 1; + }); + + poolAux.connect((err, client, release) => { + if (err) { + throw new Error(err.message); + } + if (!release) { + throw new Error('Did not receive release function'); + } + if (!client) { + throw new Error('No client received'); + } + assert.ok(client); + + client.query('SELECT NOW()', async (err, ret) => { + release(); + if (err) { + throw new Error(err.message); + } + assert.ok(ret); + assert.equal( + poolAux.listenerCount('connect'), + 2, + `${poolAux.listenerCount( + 'connect' + )} event listener(s) for 'connect'` + ); + assert.equal( + poolAux.listenerCount('acquire'), + 1, + `${poolAux.listenerCount( + 'acquire' + )} event listener(s) for 'acquire'` + ); + assert.equal( + poolAux.listenerCount('remove'), + 1, + `${poolAux.listenerCount('remove')} event listener(s) for 'remove'` + ); + assert.equal( + poolAux.listenerCount('release'), + 1, + `${poolAux.listenerCount( + 'release' + )} event listener(s) for 'release'` + ); + assert.equal(testValue, 1); + + const { resourceMetrics, errors } = await metricReader.collect(); + assert.deepEqual( + errors, + [], + 'expected no errors from the callback during metric collection' + ); + + const metrics = resourceMetrics.scopeMetrics[0].metrics; + assert.strictEqual( + metrics[1].descriptor.name, + METRIC_DB_CLIENT_CONNECTION_COUNT + ); + assert.strictEqual( + metrics[1].dataPoints[0].attributes[ + ATTR_DB_CLIENT_CONNECTION_STATE + ], + 'used' + ); + assert.strictEqual( + metrics[1].dataPoints[0].value, + 1, + 'expected to have 1 used connection' + ); + done(); }); }); }); + + it('when creating multiple pools, all of them should be instrumented', done => { + const pool1: pgPool = new pgPool(CONFIG); + const pool2: pgPool = new pgPool(CONFIG); + + let completed = 0; + pool1.connect((err, client, release) => { + if (err) { + throw new Error(err.message); + } + if (!release) { + throw new Error('Did not receive release function'); + } + if (!client) { + throw new Error('No client received'); + } + assert.ok(client); + release(); + + assert.equal( + pool1.listenerCount('connect'), + 1, + `${pool1.listenerCount( + 'connect' + )} event listener(s) for 'connect' on pool1` + ); + assert.equal( + pool1.listenerCount('acquire'), + 1, + `${pool1.listenerCount( + 'acquire' + )} event listener(s) for 'acquire' on pool1` + ); + assert.equal( + pool1.listenerCount('remove'), + 1, + `${pool1.listenerCount( + 'remove' + )} event listener(s) for 'remove' on pool1` + ); + assert.equal( + pool1.listenerCount('release'), + 1, + `${pool1.listenerCount( + 'release' + )} event listener(s) for 'release' on pool1` + ); + + completed++; + if (completed >= 2) { + done(); + } + }); + + pool2.connect((err, client, release) => { + if (err) { + throw new Error(err.message); + } + if (!release) { + throw new Error('Did not receive release function'); + } + if (!client) { + throw new Error('No client received'); + } + assert.ok(client); + release(); + + assert.equal( + pool2.listenerCount('connect'), + 1, + `${pool2.listenerCount( + 'connect' + )} event listener(s) for 'connect' on pool2` + ); + assert.equal( + pool2.listenerCount('acquire'), + 1, + `${pool2.listenerCount( + 'acquire' + )} event listener(s) for 'acquire' on pool2` + ); + assert.equal( + pool2.listenerCount('remove'), + 1, + `${pool2.listenerCount( + 'remove' + )} event listener(s) for 'remove' on pool2` + ); + assert.equal( + pool2.listenerCount('release'), + 1, + `${pool2.listenerCount( + 'release' + )} event listener(s) for 'release' on pool2` + ); + + completed++; + if (completed >= 2) { + done(); + } + }); + }); }); }); diff --git a/plugins/node/opentelemetry-instrumentation-pg/test/pg.test.ts b/plugins/node/opentelemetry-instrumentation-pg/test/pg.test.ts index b394893399..cff686eae1 100644 --- a/plugins/node/opentelemetry-instrumentation-pg/test/pg.test.ts +++ b/plugins/node/opentelemetry-instrumentation-pg/test/pg.test.ts @@ -53,6 +53,10 @@ import { DBSYSTEMVALUES_POSTGRESQL, ATTR_ERROR_TYPE, } from '@opentelemetry/semantic-conventions'; +import { + METRIC_DB_CLIENT_OPERATION_DURATION, + ATTR_DB_OPERATION_NAME, +} from '@opentelemetry/semantic-conventions/incubating'; import { addSqlCommenterComment } from '@opentelemetry/sql-common'; const memoryExporter = new InMemorySpanExporter(); @@ -984,7 +988,7 @@ describe('pg', () => { const metrics = resourceMetrics.scopeMetrics[0].metrics; assert.strictEqual( metrics[0].descriptor.name, - 'db.client.operation.duration' + METRIC_DB_CLIENT_OPERATION_DURATION ); assert.strictEqual( metrics[0].descriptor.description, @@ -995,6 +999,10 @@ describe('pg', () => { dataPoint.attributes[SEMATTRS_DB_SYSTEM], DBSYSTEMVALUES_POSTGRESQL ); + assert.strictEqual( + dataPoint.attributes[ATTR_DB_OPERATION_NAME], + 'SELECT' + ); assert.strictEqual(dataPoint.attributes[ATTR_ERROR_TYPE], undefined); const v = (dataPoint as DataPoint).value; diff --git a/plugins/node/opentelemetry-instrumentation-pino/.tav.yml b/plugins/node/opentelemetry-instrumentation-pino/.tav.yml index 94d5d5f97e..737cc73989 100644 --- a/plugins/node/opentelemetry-instrumentation-pino/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-pino/.tav.yml @@ -1,10 +1,11 @@ pino: - - versions: "^9.0.0" + - versions: + include: '>=9.0.0 <10' + mode: latest-minors node: ">=18" commands: npm run test - - versions: "^8.21.0 || 8.20.0 || 8.16.2 || 8.12.1 || 8.8.0 || 8.4.0 || 8.0.0 || ^7.11.0 || 7.8.0 || 7.2.0 || ^6.13.3 || 5.17.0 || 5.14.0" + - versions: + include: '>=5.14.0 <9' + mode: max-7 node: ">=14" commands: npm run test - - versions: "^7.11.0 || 7.8.0 || 7.2.0 || ^6.13.1 || 5.17.0 || 5.14.0" - node: ">=8 <14" - commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-redis-4/.tav.yml b/plugins/node/opentelemetry-instrumentation-redis-4/.tav.yml index 2a13580b74..8890082e4c 100644 --- a/plugins/node/opentelemetry-instrumentation-redis-4/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-redis-4/.tav.yml @@ -1,7 +1,7 @@ redis: - jobs: - # The latest minor releases in the range "^4.0.0", excluding - # "4.6.9", which was a bad release that accidentally broke - # node v14 support. - - versions: "4.0.0 || 4.0.6 || 4.1.1 || 4.2.0 || 4.3.1 || 4.4.0 || 4.5.1 || ^4.6.11" - commands: npm run test + versions: + include: "^4.0.0" + # "4.6.9" was a bad release that accidentally broke node v14 support. + exclude: "4.6.9" + mode: latest-minors + commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-redis/.tav.yml b/plugins/node/opentelemetry-instrumentation-redis/.tav.yml index c6b5a4154f..81020bc78f 100644 --- a/plugins/node/opentelemetry-instrumentation-redis/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-redis/.tav.yml @@ -1,3 +1,5 @@ redis: - versions: ^2.6.0 || ^3.0.0 + versions: + include: '>=2.6.0 <4' + mode: latest-minors commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-restify/.tav.yml b/plugins/node/opentelemetry-instrumentation-restify/.tav.yml index a1ef4c915c..8d354d0d58 100644 --- a/plugins/node/opentelemetry-instrumentation-restify/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-restify/.tav.yml @@ -1,8 +1,12 @@ restify: - - versions: "^10.0.0 || ^11.1.0" + - versions: + include: '>=10.0.0 <12' + mode: latest-minors node: ">=18" commands: npm run test - - versions: "4.3.4 || 5.2.0 || 6.4.0 || 7.7.0 || ^8.4.0 || 9.1.0 || ^10.0.0 || ^11.1.0" + - versions: + include: '>=4.1.0 <10' + mode: max-7 node: "<18" commands: npm run test diff --git a/plugins/node/opentelemetry-instrumentation-restify/README.md b/plugins/node/opentelemetry-instrumentation-restify/README.md index dc08120c43..1894864da5 100644 --- a/plugins/node/opentelemetry-instrumentation-restify/README.md +++ b/plugins/node/opentelemetry-instrumentation-restify/README.md @@ -17,7 +17,7 @@ npm install --save @opentelemetry/instrumentation-restify ### Supported Versions -- [`restify`](https://www.npmjs.com/package/restify) versions `>=4.0.0 <12` +- [`restify`](https://www.npmjs.com/package/restify) versions `>=4.1.0 <12` ## Usage diff --git a/plugins/node/opentelemetry-instrumentation-restify/src/instrumentation.ts b/plugins/node/opentelemetry-instrumentation-restify/src/instrumentation.ts index 372b90d3ae..81c4bc90c0 100644 --- a/plugins/node/opentelemetry-instrumentation-restify/src/instrumentation.ts +++ b/plugins/node/opentelemetry-instrumentation-restify/src/instrumentation.ts @@ -35,7 +35,7 @@ import { isPromise, isAsyncFunction } from './utils'; import { getRPCMetadata, RPCType } from '@opentelemetry/core'; import type { RestifyInstrumentationConfig } from './types'; -const supportedVersions = ['>=4.0.0 <12']; +const supportedVersions = ['>=4.1.0 <12']; export class RestifyInstrumentation extends InstrumentationBase { constructor(config: RestifyInstrumentationConfig = {}) { diff --git a/plugins/node/opentelemetry-instrumentation-restify/test/restify.test.ts b/plugins/node/opentelemetry-instrumentation-restify/test/restify.test.ts index 90f50071ed..ee7e6c524e 100644 --- a/plugins/node/opentelemetry-instrumentation-restify/test/restify.test.ts +++ b/plugins/node/opentelemetry-instrumentation-restify/test/restify.test.ts @@ -241,12 +241,13 @@ describe('Restify Instrumentation', () => { rootSpan.end(); assert.strictEqual(memoryExporter.getFinishedSpans().length, 4); - if (semver.satisfies(LIB_VERSION, '>=8')) { + if (semver.satisfies(LIB_VERSION, '>=8.2.0')) { + // Error handling changed slightly in v8.2.0 (https://github.com/restify/node-restify/pull/1757). assert.deepEqual( result, '{"code":"Internal","message":"Error: NOK"}' ); - } else if (semver.satisfies(LIB_VERSION, '>=7 <8')) { + } else if (semver.satisfies(LIB_VERSION, '>=7 <8.2.0')) { assert.deepEqual( result, '{"code":"Internal","message":"caused by Error: NOK"}' diff --git a/plugins/node/opentelemetry-instrumentation-winston/.tav.yml b/plugins/node/opentelemetry-instrumentation-winston/.tav.yml index 34335a07f7..4ab7caaa65 100644 --- a/plugins/node/opentelemetry-instrumentation-winston/.tav.yml +++ b/plugins/node/opentelemetry-instrumentation-winston/.tav.yml @@ -1,5 +1,6 @@ winston: - # A selection of versions of Winston 2.x and 3.x - - versions: "2.0.0 || 2.4.0 || 2.4.7 || 3.3.1 || 3.6.0 || 3.10.0 || ^3.11.0" - commands: npm run test + versions: + include: '>=2.0.0 <4' + mode: max-7 + commands: npm run test