From b94565c587bd8352901417af4fe37dab02538c07 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 2 May 2025 15:04:54 -0400 Subject: [PATCH 01/42] Update proto to v1.6.0 --- experimental/packages/otlp-transformer/protos | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experimental/packages/otlp-transformer/protos b/experimental/packages/otlp-transformer/protos index 1608f92cf0..be5d584704 160000 --- a/experimental/packages/otlp-transformer/protos +++ b/experimental/packages/otlp-transformer/protos @@ -1 +1 @@ -Subproject commit 1608f92cf08119f9aec237c910b200d1317ec696 +Subproject commit be5d58470429d0255ffdd49491f0815a3a63d6ef From 5c9c43ec042f72da688ba97e06de5232bedb3172 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 2 May 2025 15:06:35 -0400 Subject: [PATCH 02/42] Docs and changelog --- experimental/CHANGELOG.md | 1 + experimental/packages/exporter-logs-otlp-grpc/README.md | 2 +- experimental/packages/exporter-logs-otlp-http/README.md | 2 +- experimental/packages/exporter-logs-otlp-proto/README.md | 2 +- experimental/packages/exporter-trace-otlp-grpc/README.md | 2 +- experimental/packages/exporter-trace-otlp-http/README.md | 2 +- experimental/packages/exporter-trace-otlp-proto/README.md | 2 +- .../packages/opentelemetry-exporter-metrics-otlp-grpc/README.md | 2 +- .../packages/opentelemetry-exporter-metrics-otlp-http/README.md | 2 +- .../opentelemetry-exporter-metrics-otlp-proto/README.md | 2 +- 10 files changed, 10 insertions(+), 9 deletions(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index fc53083d51..092fedc595 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -13,6 +13,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2 ### :rocket: Features * feat(instrumentation-http): capture synthetic source type on requests [#5488](https://github.com/open-telemetry/opentelemetry-js/pull/5488) @JacksonWeber +* feat: update proto to `v1.6.0` ### :bug: Bug Fixes diff --git a/experimental/packages/exporter-logs-otlp-grpc/README.md b/experimental/packages/exporter-logs-otlp-grpc/README.md index f052ff6d8b..cdb651114b 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/README.md +++ b/experimental/packages/exporter-logs-otlp-grpc/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a logs-exporter for OTLP (gRPC) using protocol version `v0.20.0`. +This module provides a logs-exporter for OTLP (gRPC) using protocol version `v1.6.0`. ## Installation diff --git a/experimental/packages/exporter-logs-otlp-http/README.md b/experimental/packages/exporter-logs-otlp-http/README.md index 72cd8fec78..ad2b66dab9 100644 --- a/experimental/packages/exporter-logs-otlp-http/README.md +++ b/experimental/packages/exporter-logs-otlp-http/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a logs-exporter for OTLP (http/json) using protocol version `v0.20.0`. +This module provides a logs-exporter for OTLP (http/json) using protocol version `v1.6.0`. ## Installation diff --git a/experimental/packages/exporter-logs-otlp-proto/README.md b/experimental/packages/exporter-logs-otlp-proto/README.md index 4e80c278ce..fa86a1e74b 100644 --- a/experimental/packages/exporter-logs-otlp-proto/README.md +++ b/experimental/packages/exporter-logs-otlp-proto/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a logs-exporter for OTLP (http/protobuf) using protocol version `v0.20.0`. +This module provides a logs-exporter for OTLP (http/protobuf) using protocol version `v1.6.0`. ## Installation diff --git a/experimental/packages/exporter-trace-otlp-grpc/README.md b/experimental/packages/exporter-trace-otlp-grpc/README.md index 240295aa05..8a5292039a 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/README.md +++ b/experimental/packages/exporter-trace-otlp-grpc/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a trace-exporter for OTLP (gRPC) traces using protocol version `v0.20.0`. +This module provides a trace-exporter for OTLP (gRPC) traces using protocol version `v1.6.0`. ## Installation diff --git a/experimental/packages/exporter-trace-otlp-http/README.md b/experimental/packages/exporter-trace-otlp-http/README.md index 10f71e5811..35e1cd9761 100644 --- a/experimental/packages/exporter-trace-otlp-http/README.md +++ b/experimental/packages/exporter-trace-otlp-http/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a trace-exporter for OTLP (http/json) using protocol version `v0.20.0`. +This module provides a trace-exporter for OTLP (http/json) using protocol version `v1.6.0`. ## Installation diff --git a/experimental/packages/exporter-trace-otlp-proto/README.md b/experimental/packages/exporter-trace-otlp-proto/README.md index c72b18c993..8902cbed36 100644 --- a/experimental/packages/exporter-trace-otlp-proto/README.md +++ b/experimental/packages/exporter-trace-otlp-proto/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a trace-exporter for OTLP (http/protobuf) using protocol version `v0.20.0`. +This module provides a trace-exporter for OTLP (http/protobuf) using protocol version `v1.6.0`. ## Installation diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md index 25bf7cd559..a5a97bd731 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a metrics-exporter for OTLP (gRPC) using protocol version `v0.20.0`. +This module provides a metrics-exporter for OTLP (gRPC) using protocol version `v1.6.0`. ## Installation diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md index 49938ce7bd..ec92eb03e5 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a metrics-exporter for OTLP (http/json) using protocol version `v0.20.0`. +This module provides a metrics-exporter for OTLP (http/json) using protocol version `v1.6.0`. ## Installation diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md index 8408d80fa9..a31f8260ee 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a metrics-exporter for OTLP (http/protobuf) using protocol version `v0.20.0`. +This module provides a metrics-exporter for OTLP (http/protobuf) using protocol version `v1.6.0`. ## Installation From f16c665d469fdfcb1f7516318e0070d8afa4f16d Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 13:08:15 -0400 Subject: [PATCH 03/42] Add e2e tests --- e2e/Makefile | 28 +++++++ e2e/otel-collector-config.yaml | 21 ++++++ e2e/otel-collector-output.json | 3 + e2e/package.json | 14 ++++ e2e/test.mjs | 75 +++++++++++++++++++ experimental/packages/otlp-transformer/protos | 2 +- package-lock.json | 22 ++++++ package.json | 1 + scripts/update-ts-configs.js | 1 + 9 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 e2e/Makefile create mode 100644 e2e/otel-collector-config.yaml create mode 100644 e2e/otel-collector-output.json create mode 100644 e2e/package.json create mode 100644 e2e/test.mjs diff --git a/e2e/Makefile b/e2e/Makefile new file mode 100644 index 0000000000..b03e6f9a14 --- /dev/null +++ b/e2e/Makefile @@ -0,0 +1,28 @@ +COLLECTOR_IMAGE=otel/opentelemetry-collector-contrib:latest +COLLECTOR_CONFIG=otel-collector-config.yaml +TEST_SCRIPT=test.mjs +COLLECTOR_CONTAINER=otelcol-e2e + +.PHONY: all run-collector test stop-collector + +all: run-collector test stop-collector +create-output-json: + @> otel-collector-output.json + +run-collector: create-output-json + @echo "Starting OpenTelemetry Collector in Docker..." + docker run -d --rm --name $(COLLECTOR_CONTAINER) \ + -v $(PWD)/$(COLLECTOR_CONFIG):/etc/otelcol/config.yaml \ + -v $(PWD)/otel-collector-output.json:/tmp/otel-collector-output.json \ + -p 4317:4317 -p 4318:4318 \ + $(COLLECTOR_IMAGE) --config /etc/otelcol/config.yaml + @sleep 5 + +test: run-collector + @echo "Running tests..." + node $(TEST_SCRIPT) + $(MAKE) stop-collector + +stop-collector: + @echo "Stopping OpenTelemetry Collector Docker container..." + @docker stop $(COLLECTOR_CONTAINER) || true \ No newline at end of file diff --git a/e2e/otel-collector-config.yaml b/e2e/otel-collector-config.yaml new file mode 100644 index 0000000000..7fec9fcee2 --- /dev/null +++ b/e2e/otel-collector-config.yaml @@ -0,0 +1,21 @@ +receivers: + otlp: + protocols: + http: + endpoint: 0.0.0.0:4318 + +exporters: + file: + path: /tmp/otel-collector-output.json + +service: + pipelines: + traces: + receivers: [otlp] + exporters: [file] + metrics: + receivers: [otlp] + exporters: [file] + logs: + receivers: [otlp] + exporters: [file] \ No newline at end of file diff --git a/e2e/otel-collector-output.json b/e2e/otel-collector-output.json new file mode 100644 index 0000000000..cf06272155 --- /dev/null +++ b/e2e/otel-collector-output.json @@ -0,0 +1,3 @@ +{"resourceMetrics":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"19634"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.1"}}]},"scopeMetrics":[{"scope":{"name":"example-meter"},"metrics":[{"name":"example_gauge","sum":{"dataPoints":[{"attributes":[{"key":"foo","value":{"stringValue":"bar"}}],"startTimeUnixNano":"1748020051990000000","timeUnixNano":"1748020051990000000","asDouble":42}],"aggregationTemporality":2}}]}]}]} +{"resourceLogs":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"19634"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.1"}}]},"scopeLogs":[{"scope":{"name":"example-logger"},"logRecords":[{"timeUnixNano":"1748020051990000000","observedTimeUnixNano":"1748020051990000000","severityText":"INFO","body":{"stringValue":"This is an example log message"},"attributes":[{"key":"foo","value":{"stringValue":"bar"}}],"traceId":"","spanId":""}]}]}]} +{"resourceSpans":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"19634"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.1"}}]},"scopeSpans":[{"scope":{"name":"example-tracer"},"spans":[{"traceId":"8393cbcc861bd4ca02ac760edbcf3ebe","spanId":"051cbe2060fbf262","parentSpanId":"","name":"example-span","kind":1,"startTimeUnixNano":"1748020051989000000","endTimeUnixNano":"1748020051989136041","attributes":[{"key":"example-attribute","value":{"stringValue":"value"}}],"status":{}}]}]}]} diff --git a/e2e/package.json b/e2e/package.json new file mode 100644 index 0000000000..0f28b7fccc --- /dev/null +++ b/e2e/package.json @@ -0,0 +1,14 @@ +{ + "name": "opentelemetry-e2e-test", + "private": true, + "description": "End-to-end tests for OpenTelemetry JS", + "version": "0.0.0", + "scripts": { + "test": "node test/index.js" + }, + "dependencies": { + "@opentelemetry/api": "*", + "@opentelemetry/api-logs": "*", + "@opentelemetry/sdk-node": "*" + } +} \ No newline at end of file diff --git a/e2e/test.mjs b/e2e/test.mjs new file mode 100644 index 0000000000..a5c7efd776 --- /dev/null +++ b/e2e/test.mjs @@ -0,0 +1,75 @@ +import { NodeSDK } from '@opentelemetry/sdk-node'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto'; +import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto'; +import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'; +import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-proto'; +import { LoggerProvider, SimpleLogRecordProcessor } from '@opentelemetry/sdk-logs'; +import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'; +import { diag, DiagConsoleLogger, DiagLogLevel, trace, metrics } from '@opentelemetry/api'; +import { logs } from '@opentelemetry/api-logs'; + +// Enable diagnostic logging (optional) +diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO); + +const collectorUrl = 'http://localhost:4318/v1'; + +// Set up trace exporter with SimpleSpanProcessor +const traceExporter = new OTLPTraceExporter({ + url: `${collectorUrl}/traces`, +}); +const spanProcessors = [new SimpleSpanProcessor(traceExporter)]; + +// Set up metric exporter +const metricExporter = new OTLPMetricExporter({ + url: `${collectorUrl}/metrics`, +}); +const metricReader = new PeriodicExportingMetricReader({ + exporter: metricExporter, + exportIntervalMillis: 1000, +}); + +// Set up log exporter +const logExporter = new OTLPLogExporter({ + url: `${collectorUrl}/logs`, +}); +const loggerProvider = new LoggerProvider({ + processors: [new SimpleLogRecordProcessor(logExporter)], +}); + +// Set up OpenTelemetry SDK +const sdk = new NodeSDK({ + spanProcessors, + metricReader, + loggerProvider, +}); + +async function main() { + await sdk.start(); + + // Create a span + const tracer = trace.getTracer('example-tracer'); + const span = tracer.startSpan('example-span'); + span.setAttribute('example-attribute', 'value'); + span.end(); + + // Create a metric + const meter = metrics.getMeter('example-meter'); + const gauge = meter.createUpDownCounter('example_gauge'); + gauge.add(42, { foo: 'bar' }); + + // Create a log + const logger = logs.getLogger('example-logger'); + logger.emit({ + severityText: 'INFO', + body: 'This is an example log message', + attributes: { foo: 'bar' }, + }); + + // flushes exporters and shuts down the SDK + await sdk.shutdown(); +} + +main().catch((err) => { + console.error('Error running example:', err); + process.exit(1); +}); diff --git a/experimental/packages/otlp-transformer/protos b/experimental/packages/otlp-transformer/protos index be5d584704..1608f92cf0 160000 --- a/experimental/packages/otlp-transformer/protos +++ b/experimental/packages/otlp-transformer/protos @@ -1 +1 @@ -Subproject commit be5d58470429d0255ffdd49491f0815a3a63d6ef +Subproject commit 1608f92cf08119f9aec237c910b200d1317ec696 diff --git a/package-lock.json b/package-lock.json index cf77892aa3..3c4a9e234d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "api", "packages/*", "semantic-conventions", + "e2e", "experimental/packages/*", "experimental/examples/*", "experimental/backwards-compatibility/*", @@ -96,6 +97,15 @@ "dev": true, "license": "MIT" }, + "e2e": { + "name": "opentelemetry-e2e-test", + "version": "0.0.0", + "dependencies": { + "@opentelemetry/api": "*", + "@opentelemetry/api-logs": "*", + "@opentelemetry/sdk-node": "*" + } + }, "examples/esm-http-ts": { "version": "0.200.0", "license": "Apache-2.0", @@ -21698,6 +21708,10 @@ "resolved": "experimental/examples/opencensus-shim", "link": true }, + "node_modules/opentelemetry-e2e-test": { + "resolved": "e2e", + "link": true + }, "node_modules/opentracing": { "version": "0.14.7", "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz", @@ -45037,6 +45051,14 @@ "@opentelemetry/shim-opencensus": "0.200.0" } }, + "opentelemetry-e2e-test": { + "version": "file:e2e", + "requires": { + "@opentelemetry/api": "*", + "@opentelemetry/api-logs": "*", + "@opentelemetry/sdk-node": "*" + } + }, "opentracing": { "version": "0.14.7", "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz", diff --git a/package.json b/package.json index b25cff6196..af8f0fcf42 100644 --- a/package.json +++ b/package.json @@ -118,6 +118,7 @@ "api", "packages/*", "semantic-conventions", + "e2e", "experimental/packages/*", "experimental/examples/*", "experimental/backwards-compatibility/*", diff --git a/scripts/update-ts-configs.js b/scripts/update-ts-configs.js index fc38cad168..4706aba51a 100644 --- a/scripts/update-ts-configs.js +++ b/scripts/update-ts-configs.js @@ -44,6 +44,7 @@ const tsConfigMergeKeys = [ // Make `extends` the first field. const tsConfigPriorityKeys = ['extends']; const ignoredLernaProjects = [ + 'e2e', 'experimental/examples/*', 'experimental/backwards-compatibility/*', 'integration-tests/*', From 95a11bc9dd41a390e35d0758d2297db2ae79ec2d Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 13:29:43 -0400 Subject: [PATCH 04/42] Run e2e tests in workflow --- .github/workflows/e2e.yml | 21 +++++++++++++++++++++ .gitignore | 3 +++ e2e/otel-collector-output.json | 3 --- e2e/test.mjs | 4 ++-- e2e/verify.sh | 19 +++++++++++++++++++ 5 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/e2e.yml delete mode 100644 e2e/otel-collector-output.json create mode 100755 e2e/verify.sh diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml new file mode 100644 index 0000000000..608ba61cf2 --- /dev/null +++ b/.github/workflows/e2e.yml @@ -0,0 +1,21 @@ +name: E2E Tests + +on: + push: + branches: [main] + pull_request: + +jobs: + e2e-tests: + runs-on: ubuntu-latest + defaults: + run: + working-directory: e2e + steps: + - uses: actions/checkout@v4 + - name: Run E2E Tests + run: make test + - name: Print output + run: jq --indent 2 '.' otel-collector-output.json + - name: verify span name + run: verify.sh diff --git a/.gitignore b/.gitignore index 8bea02a1b0..4b2664b12d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,9 @@ yarn-error.log* # Filter Logs singal files !experimental/examples/logs +# test files +e2e/otel-collector-output.json + # Runtime data pids *.pid diff --git a/e2e/otel-collector-output.json b/e2e/otel-collector-output.json deleted file mode 100644 index cf06272155..0000000000 --- a/e2e/otel-collector-output.json +++ /dev/null @@ -1,3 +0,0 @@ -{"resourceMetrics":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"19634"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.1"}}]},"scopeMetrics":[{"scope":{"name":"example-meter"},"metrics":[{"name":"example_gauge","sum":{"dataPoints":[{"attributes":[{"key":"foo","value":{"stringValue":"bar"}}],"startTimeUnixNano":"1748020051990000000","timeUnixNano":"1748020051990000000","asDouble":42}],"aggregationTemporality":2}}]}]}]} -{"resourceLogs":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"19634"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.1"}}]},"scopeLogs":[{"scope":{"name":"example-logger"},"logRecords":[{"timeUnixNano":"1748020051990000000","observedTimeUnixNano":"1748020051990000000","severityText":"INFO","body":{"stringValue":"This is an example log message"},"attributes":[{"key":"foo","value":{"stringValue":"bar"}}],"traceId":"","spanId":""}]}]}]} -{"resourceSpans":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"19634"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.1"}}]},"scopeSpans":[{"scope":{"name":"example-tracer"},"spans":[{"traceId":"8393cbcc861bd4ca02ac760edbcf3ebe","spanId":"051cbe2060fbf262","parentSpanId":"","name":"example-span","kind":1,"startTimeUnixNano":"1748020051989000000","endTimeUnixNano":"1748020051989136041","attributes":[{"key":"example-attribute","value":{"stringValue":"value"}}],"status":{}}]}]}]} diff --git a/e2e/test.mjs b/e2e/test.mjs index a5c7efd776..93e7d9958d 100644 --- a/e2e/test.mjs +++ b/e2e/test.mjs @@ -54,8 +54,8 @@ async function main() { // Create a metric const meter = metrics.getMeter('example-meter'); - const gauge = meter.createUpDownCounter('example_gauge'); - gauge.add(42, { foo: 'bar' }); + const counter = meter.createUpDownCounter('example_counter'); + counter.add(42, { foo: 'bar' }); // Create a log const logger = logs.getLogger('example-logger'); diff --git a/e2e/verify.sh b/e2e/verify.sh new file mode 100755 index 0000000000..0542bfac11 --- /dev/null +++ b/e2e/verify.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +SPAN_NAME=$(jq -r 'select(has("resourceSpans")) | .resourceSpans[0].scopeSpans[0].spans[0].name' otel-collector-output.json) +if [ "$SPAN_NAME" != "example-span" ]; then + echo "Expected span name 'example-span', but got '$SPAN_NAME'" + exit 1 +fi + +METRIC_NAME=$(jq -r 'select(has("resourceMetrics")) | .resourceMetrics[0].scopeMetrics[0].metrics[0].name' otel-collector-output.json) +if [ "$METRIC_NAME" != "example_counter" ]; then + echo "Expected metric name 'example_counter', but got '$METRIC_NAME'" + exit 1 +fi + +LOG_BODY=$(jq -r 'select(has("resourceLogs")) | .resourceLogs[0].scopeLogs[0].logRecords[0].body.stringValue' otel-collector-output.json) +if [ "$LOG_BODY" != "test-log-body" ]; then + echo "Expected log body 'test-log-body', but got '$LOG_BODY'" + exit 1 +fi From 0b555a9dbf02b5b0514254cb0e6b7fda559ca214 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 13:37:29 -0400 Subject: [PATCH 05/42] Remove unused test script --- e2e/package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index 0f28b7fccc..210838e7a5 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -3,9 +3,6 @@ "private": true, "description": "End-to-end tests for OpenTelemetry JS", "version": "0.0.0", - "scripts": { - "test": "node test/index.js" - }, "dependencies": { "@opentelemetry/api": "*", "@opentelemetry/api-logs": "*", From d082b5485e5e9e3880a6337669efbaeb61883b40 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 13:38:32 -0400 Subject: [PATCH 06/42] More specific changelog --- experimental/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 092fedc595..9503a62c60 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -13,7 +13,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2 ### :rocket: Features * feat(instrumentation-http): capture synthetic source type on requests [#5488](https://github.com/open-telemetry/opentelemetry-js/pull/5488) @JacksonWeber -* feat: update proto to `v1.6.0` +* feat(exporter-otlp-*): update proto to `v1.6.0` ### :bug: Bug Fixes From eb0784e3b8d9095f2dd8e12c8363880ce7ee7fbe Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 13:45:33 -0400 Subject: [PATCH 07/42] Setup node before tests --- .github/workflows/e2e.yml | 46 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 608ba61cf2..cc21a7be88 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -7,12 +7,52 @@ on: jobs: e2e-tests: + strategy: + fail-fast: false + matrix: + node_version: + - "18.19.0" + - "18" + - "20.6.0" + - "20" + - "22" + - "23" runs-on: ubuntu-latest - defaults: - run: - working-directory: e2e + env: + NPM_CONFIG_UNSAFE_PERM: true + steps: - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + cache: 'npm' + cache-dependency-path: | + package-lock.json + node-version: ${{ matrix.node_version }} + + # npm@11.0.0 drops support for Node.js v18 + # Install the latest npm compatible with this version of Node.js + # - npm@11.1.0 supports: {"node":"^20.17.0 || >=22.9.0"} + - run: npm install -g npm@"<11.0.0" + if: ${{ + matrix.node_version == '18.19.0' || + matrix.node_version == '18' || + matrix.node_version == '20.6.0' + }} + - run: npm install -g npm@latest + if: ${{ + matrix.node_version == '20' || + matrix.node_version == '22' || + matrix.node_version == '23' + }} + + - name: Bootstrap + run: npm ci + + - name: Build 🔧 + run: npm run compile + - name: Run E2E Tests run: make test - name: Print output From 381f4adee37430c1ca6f72fb813ed09c739460ba Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 13:47:58 -0400 Subject: [PATCH 08/42] cd to e2e --- .github/workflows/e2e.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index cc21a7be88..43a24a1e68 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -53,6 +53,8 @@ jobs: - name: Build 🔧 run: npm run compile + + - run: cd e2e - name: Run E2E Tests run: make test - name: Print output From 221c2c91ead226f03b72eb6a7b32225763ea27b0 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 13:50:29 -0400 Subject: [PATCH 09/42] Use working dir instead of cd --- .github/workflows/e2e.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 43a24a1e68..5d30de4e93 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -54,10 +54,12 @@ jobs: run: npm run compile - - run: cd e2e - name: Run E2E Tests run: make test + working-directory: e2e - name: Print output run: jq --indent 2 '.' otel-collector-output.json + working-directory: e2e - name: verify span name run: verify.sh + working-directory: e2e From 1cc9d6a5cbf1de489b51c424b1810f27d181a20d Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 14:02:06 -0400 Subject: [PATCH 10/42] Don't use docker in github --- .github/workflows/e2e.yml | 10 +++++++++- e2e/Makefile | 3 +-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 5d30de4e93..619219eff6 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -53,7 +53,15 @@ jobs: - name: Build 🔧 run: npm run compile - + - name: Install collector + run: | + curl -sSL -o otelcol-contrib.tar.gz https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.126.0/otelcol-contrib_0.126.0_linux_amd64.tar.gz + tar -xzf otelcol-contrib.tar.gz + working-directory: e2e + - name: run collector in background + run: | + ./otelcol-contrib --config otel-collector-config.yaml & + working-directory: e2e - name: Run E2E Tests run: make test working-directory: e2e diff --git a/e2e/Makefile b/e2e/Makefile index b03e6f9a14..eaa03704be 100644 --- a/e2e/Makefile +++ b/e2e/Makefile @@ -18,10 +18,9 @@ run-collector: create-output-json $(COLLECTOR_IMAGE) --config /etc/otelcol/config.yaml @sleep 5 -test: run-collector +test: @echo "Running tests..." node $(TEST_SCRIPT) - $(MAKE) stop-collector stop-collector: @echo "Stopping OpenTelemetry Collector Docker container..." From 494f5699d827c884be48cf6e1bfa217653f91cbe Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 14:05:53 -0400 Subject: [PATCH 11/42] Use relative path for output json --- e2e/otel-collector-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/otel-collector-config.yaml b/e2e/otel-collector-config.yaml index 7fec9fcee2..c564b54602 100644 --- a/e2e/otel-collector-config.yaml +++ b/e2e/otel-collector-config.yaml @@ -6,7 +6,7 @@ receivers: exporters: file: - path: /tmp/otel-collector-output.json + path: ./otel-collector-output.json service: pipelines: From 59f13d99f135dd68947daa0a91bfecc897027ffa Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 14:17:42 -0400 Subject: [PATCH 12/42] Kill collector before jq --- .github/workflows/e2e.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 619219eff6..c74d433393 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -65,6 +65,10 @@ jobs: - name: Run E2E Tests run: make test working-directory: e2e + - name: kill collector + run: | + pkill -f otelcol-contrib + working-directory: e2e - name: Print output run: jq --indent 2 '.' otel-collector-output.json working-directory: e2e From 16418151a06787d297b84f400f8ed2d85d1b5365 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 14:27:47 -0400 Subject: [PATCH 13/42] Ignore blank lines --- .github/workflows/e2e.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index c74d433393..674b6e25ad 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -69,9 +69,9 @@ jobs: run: | pkill -f otelcol-contrib working-directory: e2e - - name: Print output - run: jq --indent 2 '.' otel-collector-output.json - working-directory: e2e - name: verify span name run: verify.sh working-directory: e2e + - name: Print output + run: jq --indent 2 'select( . != null )' otel-collector-output.json + working-directory: e2e \ No newline at end of file From 1916a456288123d4782d35dc54edce2529f9fd71 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 14:31:31 -0400 Subject: [PATCH 14/42] Use relative path --- .github/workflows/e2e.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 674b6e25ad..1749fbe526 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -70,7 +70,7 @@ jobs: pkill -f otelcol-contrib working-directory: e2e - name: verify span name - run: verify.sh + run: ./verify.sh working-directory: e2e - name: Print output run: jq --indent 2 'select( . != null )' otel-collector-output.json From d13b863634a585706739202fc8c03bfc8139964b Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 14:31:59 -0400 Subject: [PATCH 15/42] Use cat for output --- .github/workflows/e2e.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 1749fbe526..4f663134db 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -69,9 +69,9 @@ jobs: run: | pkill -f otelcol-contrib working-directory: e2e + - name: Print output + run: cat otel-collector-output.json + working-directory: e2e - name: verify span name run: ./verify.sh - working-directory: e2e - - name: Print output - run: jq --indent 2 'select( . != null )' otel-collector-output.json working-directory: e2e \ No newline at end of file From 742afa459704cccf4a3abd7797fb01492504b16f Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 14:37:02 -0400 Subject: [PATCH 16/42] fix tests and add deps --- e2e/package.json | 8 +++++++- e2e/test.mjs | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index 210838e7a5..9c729c68b4 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -6,6 +6,12 @@ "dependencies": { "@opentelemetry/api": "*", "@opentelemetry/api-logs": "*", - "@opentelemetry/sdk-node": "*" + "@opentelemetry/sdk-node": "*", + "@opentelemetry/exporter-trace-otlp-proto": "*", + "@opentelemetry/exporter-metrics-otlp-proto": "*", + "@opentelemetry/exporter-logs-otlp-proto": "*", + "@opentelemetry/sdk-metrics": "*", + "@opentelemetry/sdk-logs": "*", + "@opentelemetry/sdk-trace-base": "*" } } \ No newline at end of file diff --git a/e2e/test.mjs b/e2e/test.mjs index 93e7d9958d..6aaabc53f6 100644 --- a/e2e/test.mjs +++ b/e2e/test.mjs @@ -61,7 +61,7 @@ async function main() { const logger = logs.getLogger('example-logger'); logger.emit({ severityText: 'INFO', - body: 'This is an example log message', + body: 'test-log-body', attributes: { foo: 'bar' }, }); From 27c3346b610b0bd5f70469f75218b2203193aaf1 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 15:21:32 -0400 Subject: [PATCH 17/42] Verify metric value --- e2e/verify.sh | 6 ++++++ package-lock.json | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/e2e/verify.sh b/e2e/verify.sh index 0542bfac11..e1080114a8 100755 --- a/e2e/verify.sh +++ b/e2e/verify.sh @@ -12,6 +12,12 @@ if [ "$METRIC_NAME" != "example_counter" ]; then exit 1 fi +METRIC_VALUE=$(jq -r 'select(has("resourceMetrics")) | .resourceMetrics[0].scopeMetrics[0].metrics[0].sum.dataPoints[0].value' otel-collector-output.json) +if [ "$METRIC_VALUE" != "1" ]; then + echo "Expected metric value '1', but got '$METRIC_VALUE'" + exit 1 +fi + LOG_BODY=$(jq -r 'select(has("resourceLogs")) | .resourceLogs[0].scopeLogs[0].logRecords[0].body.stringValue' otel-collector-output.json) if [ "$LOG_BODY" != "test-log-body" ]; then echo "Expected log body 'test-log-body', but got '$LOG_BODY'" diff --git a/package-lock.json b/package-lock.json index 3c4a9e234d..53b40f07ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -103,7 +103,13 @@ "dependencies": { "@opentelemetry/api": "*", "@opentelemetry/api-logs": "*", - "@opentelemetry/sdk-node": "*" + "@opentelemetry/exporter-logs-otlp-proto": "*", + "@opentelemetry/exporter-metrics-otlp-proto": "*", + "@opentelemetry/exporter-trace-otlp-proto": "*", + "@opentelemetry/sdk-logs": "*", + "@opentelemetry/sdk-metrics": "*", + "@opentelemetry/sdk-node": "*", + "@opentelemetry/sdk-trace-base": "*" } }, "examples/esm-http-ts": { @@ -45056,7 +45062,13 @@ "requires": { "@opentelemetry/api": "*", "@opentelemetry/api-logs": "*", - "@opentelemetry/sdk-node": "*" + "@opentelemetry/exporter-logs-otlp-proto": "*", + "@opentelemetry/exporter-metrics-otlp-proto": "*", + "@opentelemetry/exporter-trace-otlp-proto": "*", + "@opentelemetry/sdk-logs": "*", + "@opentelemetry/sdk-metrics": "*", + "@opentelemetry/sdk-node": "*", + "@opentelemetry/sdk-trace-base": "*" } }, "opentracing": { From 2c6824c3bf81abaad1a6277399a7fb6f7836e87d Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 23 May 2025 15:36:12 -0400 Subject: [PATCH 18/42] Test metric value --- e2e/Makefile | 2 +- e2e/docker-collector-config.yaml | 21 +++++++++++++++++++++ e2e/test.mjs | 1 + e2e/verify.sh | 6 +++--- 4 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 e2e/docker-collector-config.yaml diff --git a/e2e/Makefile b/e2e/Makefile index eaa03704be..e4a21ecba3 100644 --- a/e2e/Makefile +++ b/e2e/Makefile @@ -1,5 +1,5 @@ COLLECTOR_IMAGE=otel/opentelemetry-collector-contrib:latest -COLLECTOR_CONFIG=otel-collector-config.yaml +COLLECTOR_CONFIG=docker-collector-config.yaml TEST_SCRIPT=test.mjs COLLECTOR_CONTAINER=otelcol-e2e diff --git a/e2e/docker-collector-config.yaml b/e2e/docker-collector-config.yaml new file mode 100644 index 0000000000..7fec9fcee2 --- /dev/null +++ b/e2e/docker-collector-config.yaml @@ -0,0 +1,21 @@ +receivers: + otlp: + protocols: + http: + endpoint: 0.0.0.0:4318 + +exporters: + file: + path: /tmp/otel-collector-output.json + +service: + pipelines: + traces: + receivers: [otlp] + exporters: [file] + metrics: + receivers: [otlp] + exporters: [file] + logs: + receivers: [otlp] + exporters: [file] \ No newline at end of file diff --git a/e2e/test.mjs b/e2e/test.mjs index 6aaabc53f6..3b79f0895e 100644 --- a/e2e/test.mjs +++ b/e2e/test.mjs @@ -26,6 +26,7 @@ const metricExporter = new OTLPMetricExporter({ const metricReader = new PeriodicExportingMetricReader({ exporter: metricExporter, exportIntervalMillis: 1000, + exportTimeoutMillis: 1000, }); // Set up log exporter diff --git a/e2e/verify.sh b/e2e/verify.sh index e1080114a8..0466aabe99 100755 --- a/e2e/verify.sh +++ b/e2e/verify.sh @@ -12,9 +12,9 @@ if [ "$METRIC_NAME" != "example_counter" ]; then exit 1 fi -METRIC_VALUE=$(jq -r 'select(has("resourceMetrics")) | .resourceMetrics[0].scopeMetrics[0].metrics[0].sum.dataPoints[0].value' otel-collector-output.json) -if [ "$METRIC_VALUE" != "1" ]; then - echo "Expected metric value '1', but got '$METRIC_VALUE'" +METRIC_VALUE=$(jq -r 'select(has("resourceMetrics")) | .resourceMetrics[0].scopeMetrics[0].metrics[0].sum.dataPoints[0].asDouble' otel-collector-output.json) +if [ "$METRIC_VALUE" != "42" ]; then + echo "Expected metric value '42', but got '$METRIC_VALUE'" exit 1 fi From 5e1a34dd11cc5c58d9ef7647bad1d9dbf1bea7cd Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 08:11:43 -0400 Subject: [PATCH 19/42] Update to 1.7.0 and remove unused submodules.md --- .../otlp-grpc-exporter-base/submodule.md | 46 ------------------- experimental/packages/otlp-transformer/protos | 2 +- 2 files changed, 1 insertion(+), 47 deletions(-) delete mode 100644 experimental/packages/otlp-grpc-exporter-base/submodule.md diff --git a/experimental/packages/otlp-grpc-exporter-base/submodule.md b/experimental/packages/otlp-grpc-exporter-base/submodule.md deleted file mode 100644 index fd5d1a7a47..0000000000 --- a/experimental/packages/otlp-grpc-exporter-base/submodule.md +++ /dev/null @@ -1,46 +0,0 @@ -# Important - -**Submodule is always pointing to certain revision number. So updating the submodule repo will not have impact on your code. -Knowing this if you want to change the submodule to point to a different version (when for example proto has changed) here is how to do it:** - -## Updating submodule to point to certain revision number - -1. Make sure you are in the same folder as this instruction - -2. Update your submodules by running this command - - ```shell script - git submodule sync --recursive - git submodule update --init --recursive - ``` - -3. Find the SHA which you want to update to and copy it (the long one) -the latest sha when this guide was written is `59c488bfb8fb6d0458ad6425758b70259ff4a2bd` - -4. Enter a submodule directory from this directory - - ```shell script - cd protos - ``` - -5. Updates files in the submodule tree to given commit: - - ```shell script - git checkout -q - ``` - -6. Return to the main directory: - - ```shell script - cd ../ - ``` - -7. Please run `git status` you should see something like `Head detached at`. This is correct, go to next step - -8. Now thing which is very important. You have to commit this to apply these changes - - ```shell script - git commit -am "chore: updating submodule for otlp-grpc-exporter-base" - ``` - -9. If you look now at git log you will notice that the folder `protos` has been changed and it will show what was the previous sha and what is current one. diff --git a/experimental/packages/otlp-transformer/protos b/experimental/packages/otlp-transformer/protos index 1608f92cf0..8654ab7a5a 160000 --- a/experimental/packages/otlp-transformer/protos +++ b/experimental/packages/otlp-transformer/protos @@ -1 +1 @@ -Subproject commit 1608f92cf08119f9aec237c910b200d1317ec696 +Subproject commit 8654ab7a5a43ca25fe8046e59dcd6935c3f76de0 From d604d8030a4f143f86ddd789f5958455fd73ecab Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 08:13:19 -0400 Subject: [PATCH 20/42] Bump protocol version in readme --- experimental/packages/exporter-logs-otlp-grpc/README.md | 2 +- experimental/packages/exporter-logs-otlp-http/README.md | 2 +- experimental/packages/exporter-logs-otlp-proto/README.md | 2 +- experimental/packages/exporter-trace-otlp-grpc/README.md | 2 +- experimental/packages/exporter-trace-otlp-http/README.md | 2 +- experimental/packages/exporter-trace-otlp-proto/README.md | 2 +- .../packages/opentelemetry-exporter-metrics-otlp-grpc/README.md | 2 +- .../packages/opentelemetry-exporter-metrics-otlp-http/README.md | 2 +- .../opentelemetry-exporter-metrics-otlp-proto/README.md | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/experimental/packages/exporter-logs-otlp-grpc/README.md b/experimental/packages/exporter-logs-otlp-grpc/README.md index cdb651114b..f4bf1f259a 100644 --- a/experimental/packages/exporter-logs-otlp-grpc/README.md +++ b/experimental/packages/exporter-logs-otlp-grpc/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a logs-exporter for OTLP (gRPC) using protocol version `v1.6.0`. +This module provides a logs-exporter for OTLP (gRPC) using protocol version `v1.7.0`. ## Installation diff --git a/experimental/packages/exporter-logs-otlp-http/README.md b/experimental/packages/exporter-logs-otlp-http/README.md index ad2b66dab9..da43e1e74f 100644 --- a/experimental/packages/exporter-logs-otlp-http/README.md +++ b/experimental/packages/exporter-logs-otlp-http/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a logs-exporter for OTLP (http/json) using protocol version `v1.6.0`. +This module provides a logs-exporter for OTLP (http/json) using protocol version `v1.7.0`. ## Installation diff --git a/experimental/packages/exporter-logs-otlp-proto/README.md b/experimental/packages/exporter-logs-otlp-proto/README.md index fa86a1e74b..8ef48bcf21 100644 --- a/experimental/packages/exporter-logs-otlp-proto/README.md +++ b/experimental/packages/exporter-logs-otlp-proto/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a logs-exporter for OTLP (http/protobuf) using protocol version `v1.6.0`. +This module provides a logs-exporter for OTLP (http/protobuf) using protocol version `v1.7.0`. ## Installation diff --git a/experimental/packages/exporter-trace-otlp-grpc/README.md b/experimental/packages/exporter-trace-otlp-grpc/README.md index 8a5292039a..194a04aad1 100644 --- a/experimental/packages/exporter-trace-otlp-grpc/README.md +++ b/experimental/packages/exporter-trace-otlp-grpc/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a trace-exporter for OTLP (gRPC) traces using protocol version `v1.6.0`. +This module provides a trace-exporter for OTLP (gRPC) traces using protocol version `v1.7.0`. ## Installation diff --git a/experimental/packages/exporter-trace-otlp-http/README.md b/experimental/packages/exporter-trace-otlp-http/README.md index 35e1cd9761..5e41a7f343 100644 --- a/experimental/packages/exporter-trace-otlp-http/README.md +++ b/experimental/packages/exporter-trace-otlp-http/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a trace-exporter for OTLP (http/json) using protocol version `v1.6.0`. +This module provides a trace-exporter for OTLP (http/json) using protocol version `v1.7.0`. ## Installation diff --git a/experimental/packages/exporter-trace-otlp-proto/README.md b/experimental/packages/exporter-trace-otlp-proto/README.md index 8902cbed36..d8017c9c87 100644 --- a/experimental/packages/exporter-trace-otlp-proto/README.md +++ b/experimental/packages/exporter-trace-otlp-proto/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a trace-exporter for OTLP (http/protobuf) using protocol version `v1.6.0`. +This module provides a trace-exporter for OTLP (http/protobuf) using protocol version `v1.7.0`. ## Installation diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md index a5a97bd731..7e292dcba7 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a metrics-exporter for OTLP (gRPC) using protocol version `v1.6.0`. +This module provides a metrics-exporter for OTLP (gRPC) using protocol version `v1.7.0`. ## Installation diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md index ec92eb03e5..3f6812dc87 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a metrics-exporter for OTLP (http/json) using protocol version `v1.6.0`. +This module provides a metrics-exporter for OTLP (http/json) using protocol version `v1.7.0`. ## Installation diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md index a31f8260ee..a385870e7d 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides a metrics-exporter for OTLP (http/protobuf) using protocol version `v1.6.0`. +This module provides a metrics-exporter for OTLP (http/protobuf) using protocol version `v1.7.0`. ## Installation From b2eee2bb1ffaa9f18d885cbff85618f4cee2fd2b Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 08:25:22 -0400 Subject: [PATCH 21/42] Use log record processor instead of provider --- e2e/Makefile | 4 ++-- e2e/test.mjs | 8 +++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/e2e/Makefile b/e2e/Makefile index e4a21ecba3..c675f2f6a8 100644 --- a/e2e/Makefile +++ b/e2e/Makefile @@ -3,9 +3,9 @@ COLLECTOR_CONFIG=docker-collector-config.yaml TEST_SCRIPT=test.mjs COLLECTOR_CONTAINER=otelcol-e2e -.PHONY: all run-collector test stop-collector +.PHONY: all create-output-json run-collector test stop-collector -all: run-collector test stop-collector +all: create-output-json run-collector test stop-collector create-output-json: @> otel-collector-output.json diff --git a/e2e/test.mjs b/e2e/test.mjs index 3b79f0895e..73698fac03 100644 --- a/e2e/test.mjs +++ b/e2e/test.mjs @@ -33,19 +33,17 @@ const metricReader = new PeriodicExportingMetricReader({ const logExporter = new OTLPLogExporter({ url: `${collectorUrl}/logs`, }); -const loggerProvider = new LoggerProvider({ - processors: [new SimpleLogRecordProcessor(logExporter)], -}); +const logRecordProcessors = [new SimpleLogRecordProcessor(logExporter)]; // Set up OpenTelemetry SDK const sdk = new NodeSDK({ spanProcessors, metricReader, - loggerProvider, + logRecordProcessors, }); async function main() { - await sdk.start(); + sdk.start(); // Create a span const tracer = trace.getTracer('example-tracer'); From b517b7f4906a68ea0865d0fb119fe066a213b282 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 08:26:48 -0400 Subject: [PATCH 22/42] Wording nit --- .github/workflows/e2e.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 4f663134db..4bc9e97a05 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -72,6 +72,6 @@ jobs: - name: Print output run: cat otel-collector-output.json working-directory: e2e - - name: verify span name + - name: verify exported telemetry run: ./verify.sh working-directory: e2e \ No newline at end of file From 34564a4b445bff311c941803fba6d582d4fff3b1 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 08:42:31 -0400 Subject: [PATCH 23/42] Use js for verify --- .github/workflows/e2e.yml | 2 +- e2e/test.mjs | 2 +- e2e/verify.js | 81 +++++++++++++++++++++++++++++++++++++++ e2e/verify.sh | 25 ------------ 4 files changed, 83 insertions(+), 27 deletions(-) create mode 100755 e2e/verify.js delete mode 100755 e2e/verify.sh diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 4bc9e97a05..4ece80a7fe 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -73,5 +73,5 @@ jobs: run: cat otel-collector-output.json working-directory: e2e - name: verify exported telemetry - run: ./verify.sh + run: node verify.sh working-directory: e2e \ No newline at end of file diff --git a/e2e/test.mjs b/e2e/test.mjs index 73698fac03..6f65ecc745 100644 --- a/e2e/test.mjs +++ b/e2e/test.mjs @@ -3,7 +3,7 @@ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto'; import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto'; import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'; import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-proto'; -import { LoggerProvider, SimpleLogRecordProcessor } from '@opentelemetry/sdk-logs'; +import { SimpleLogRecordProcessor } from '@opentelemetry/sdk-logs'; import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'; import { diag, DiagConsoleLogger, DiagLogLevel, trace, metrics } from '@opentelemetry/api'; import { logs } from '@opentelemetry/api-logs'; diff --git a/e2e/verify.js b/e2e/verify.js new file mode 100755 index 0000000000..9592ba7254 --- /dev/null +++ b/e2e/verify.js @@ -0,0 +1,81 @@ +'use strict'; + +const fs = require('fs'); +const data = fs.readFileSync('otel-collector-output.json', 'utf8'); + +let verifiedSpan = false; +let verifiedMetric = false; +let verifiedLog = false; + +const lines = data.split('\n').filter(Boolean); +for (const line of lines) { + const parsed = JSON.parse(line); + if (parsed.resourceSpans) { + console.log('found span'); + verifySpan(parsed.resourceSpans[0].scopeSpans[0].spans[0]); + verifiedSpan = true; + } + if (parsed.resourceMetrics) { + console.log('found metric'); + verifyMetric(parsed.resourceMetrics[0].scopeMetrics[0].metrics[0]); + verifiedMetric = true; + } + if (parsed.resourceLogs) { + console.log('found log'); + verifyLog(parsed.resourceLogs[0].scopeLogs[0].logRecords[0]); + verifiedLog = true; + } +} + +if (!verifiedSpan) { + console.error('No spans found in the output'); + process.exit(1); +} +if (!verifiedMetric) { + console.error('No metrics found in the output'); + process.exit(1); +} +if (!verifiedLog) { + console.error('No logs found in the output'); + process.exit(1); +} + +function verifySpan(span) { + const expectedName = 'example-span'; + if (span.name !== expectedName) { + console.error(`Expected span name ${expectedName}, but got '${span.name}'`); + process.exit(1); + } +} + +function verifyMetric(metric) { + const expectedName = 'example_counter'; + const expectedValue = 42; + + if (metric.name !== expectedName) { + console.error( + `Expected metric name ${expectedName}, but got '${metric.name}'` + ); + process.exit(1); + } + if ( + metric.sum && + metric.sum.dataPoints && + metric.sum.dataPoints[0].asDouble !== expectedValue + ) { + console.error( + `Expected metric value ${expectedValue}, but got '${metric.sum.dataPoints[0].asDouble}'` + ); + process.exit(1); + } +} + +function verifyLog(log) { + const expectedBody = 'test-log-body'; + if (log.body && log.body.stringValue !== expectedBody) { + console.error( + `Expected log body '${expectedBody}', but got '${log.body.stringValue}'` + ); + process.exit(1); + } +} diff --git a/e2e/verify.sh b/e2e/verify.sh deleted file mode 100755 index 0466aabe99..0000000000 --- a/e2e/verify.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -SPAN_NAME=$(jq -r 'select(has("resourceSpans")) | .resourceSpans[0].scopeSpans[0].spans[0].name' otel-collector-output.json) -if [ "$SPAN_NAME" != "example-span" ]; then - echo "Expected span name 'example-span', but got '$SPAN_NAME'" - exit 1 -fi - -METRIC_NAME=$(jq -r 'select(has("resourceMetrics")) | .resourceMetrics[0].scopeMetrics[0].metrics[0].name' otel-collector-output.json) -if [ "$METRIC_NAME" != "example_counter" ]; then - echo "Expected metric name 'example_counter', but got '$METRIC_NAME'" - exit 1 -fi - -METRIC_VALUE=$(jq -r 'select(has("resourceMetrics")) | .resourceMetrics[0].scopeMetrics[0].metrics[0].sum.dataPoints[0].asDouble' otel-collector-output.json) -if [ "$METRIC_VALUE" != "42" ]; then - echo "Expected metric value '42', but got '$METRIC_VALUE'" - exit 1 -fi - -LOG_BODY=$(jq -r 'select(has("resourceLogs")) | .resourceLogs[0].scopeLogs[0].logRecords[0].body.stringValue' otel-collector-output.json) -if [ "$LOG_BODY" != "test-log-body" ]; then - echo "Expected log body 'test-log-body', but got '$LOG_BODY'" - exit 1 -fi From ad1531d9ae0b1f6e7d2ac8ac770aa9322d7beeb7 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 08:45:43 -0400 Subject: [PATCH 24/42] File extension --- .github/workflows/e2e.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 4ece80a7fe..b7b6dc0891 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -73,5 +73,5 @@ jobs: run: cat otel-collector-output.json working-directory: e2e - name: verify exported telemetry - run: node verify.sh + run: node verify.js working-directory: e2e \ No newline at end of file From 172da9590c866703886596ea69c1cf4145d925ea Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 08:52:09 -0400 Subject: [PATCH 25/42] Clean up configs --- .github/workflows/e2e.yml | 4 ++-- .gitignore | 2 +- e2e/Makefile | 7 ++++--- ...ctor-config.yaml => collector-config.yaml} | 2 +- e2e/docker-collector-config.yaml | 21 ------------------- e2e/otel-collector-output.json | 3 +++ e2e/verify.js | 2 +- 7 files changed, 12 insertions(+), 29 deletions(-) rename e2e/{otel-collector-config.yaml => collector-config.yaml} (88%) delete mode 100644 e2e/docker-collector-config.yaml create mode 100644 e2e/otel-collector-output.json diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index b7b6dc0891..0aa92d906a 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -60,7 +60,7 @@ jobs: working-directory: e2e - name: run collector in background run: | - ./otelcol-contrib --config otel-collector-config.yaml & + ./otelcol-contrib --config collector-config.yaml & working-directory: e2e - name: Run E2E Tests run: make test @@ -70,7 +70,7 @@ jobs: pkill -f otelcol-contrib working-directory: e2e - name: Print output - run: cat otel-collector-output.json + run: cat collector-output.json working-directory: e2e - name: verify exported telemetry run: node verify.js diff --git a/.gitignore b/.gitignore index 4b2664b12d..0a0f815831 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,7 @@ yarn-error.log* !experimental/examples/logs # test files -e2e/otel-collector-output.json +e2e/collector-output.json # Runtime data pids diff --git a/e2e/Makefile b/e2e/Makefile index c675f2f6a8..6c6fe5455c 100644 --- a/e2e/Makefile +++ b/e2e/Makefile @@ -1,5 +1,5 @@ COLLECTOR_IMAGE=otel/opentelemetry-collector-contrib:latest -COLLECTOR_CONFIG=docker-collector-config.yaml +COLLECTOR_CONFIG=collector-config.yaml TEST_SCRIPT=test.mjs COLLECTOR_CONTAINER=otelcol-e2e @@ -7,14 +7,15 @@ COLLECTOR_CONTAINER=otelcol-e2e all: create-output-json run-collector test stop-collector create-output-json: - @> otel-collector-output.json + @> collector-output.json run-collector: create-output-json @echo "Starting OpenTelemetry Collector in Docker..." docker run -d --rm --name $(COLLECTOR_CONTAINER) \ -v $(PWD)/$(COLLECTOR_CONFIG):/etc/otelcol/config.yaml \ - -v $(PWD)/otel-collector-output.json:/tmp/otel-collector-output.json \ + -v $(PWD)/collector-output.json:/tmp/collector-output.json \ -p 4317:4317 -p 4318:4318 \ + -w /tmp \ $(COLLECTOR_IMAGE) --config /etc/otelcol/config.yaml @sleep 5 diff --git a/e2e/otel-collector-config.yaml b/e2e/collector-config.yaml similarity index 88% rename from e2e/otel-collector-config.yaml rename to e2e/collector-config.yaml index c564b54602..e9d46fd83b 100644 --- a/e2e/otel-collector-config.yaml +++ b/e2e/collector-config.yaml @@ -6,7 +6,7 @@ receivers: exporters: file: - path: ./otel-collector-output.json + path: ./collector-output.json service: pipelines: diff --git a/e2e/docker-collector-config.yaml b/e2e/docker-collector-config.yaml deleted file mode 100644 index 7fec9fcee2..0000000000 --- a/e2e/docker-collector-config.yaml +++ /dev/null @@ -1,21 +0,0 @@ -receivers: - otlp: - protocols: - http: - endpoint: 0.0.0.0:4318 - -exporters: - file: - path: /tmp/otel-collector-output.json - -service: - pipelines: - traces: - receivers: [otlp] - exporters: [file] - metrics: - receivers: [otlp] - exporters: [file] - logs: - receivers: [otlp] - exporters: [file] \ No newline at end of file diff --git a/e2e/otel-collector-output.json b/e2e/otel-collector-output.json new file mode 100644 index 0000000000..723852b3ff --- /dev/null +++ b/e2e/otel-collector-output.json @@ -0,0 +1,3 @@ +{"resourceMetrics":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"30318"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.0"}}]},"scopeMetrics":[{"scope":{"name":"example-meter"},"metrics":[{"name":"example_counter","sum":{"dataPoints":[{"attributes":[{"key":"foo","value":{"stringValue":"bar"}}],"startTimeUnixNano":"1748350252498000000","timeUnixNano":"1748350252498000000","asDouble":42}],"aggregationTemporality":2}}]}]}]} +{"resourceSpans":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"30318"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.0"}}]},"scopeSpans":[{"scope":{"name":"example-tracer"},"spans":[{"traceId":"0fd9e04bd92a225f708f074ceff2ee8c","spanId":"d357f0a0f9061fb5","parentSpanId":"","name":"example-span","kind":1,"startTimeUnixNano":"1748350252497000000","endTimeUnixNano":"1748350252497136208","attributes":[{"key":"example-attribute","value":{"stringValue":"value"}}],"status":{}}]}]}]} +{"resourceLogs":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"30318"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.0"}}]},"scopeLogs":[{"scope":{"name":"example-logger"},"logRecords":[{"timeUnixNano":"1748350252498000000","observedTimeUnixNano":"1748350252498000000","severityText":"INFO","body":{"stringValue":"test-log-body"},"attributes":[{"key":"foo","value":{"stringValue":"bar"}}],"traceId":"","spanId":""}]}]}]} diff --git a/e2e/verify.js b/e2e/verify.js index 9592ba7254..8fc6ae3fbd 100755 --- a/e2e/verify.js +++ b/e2e/verify.js @@ -1,7 +1,7 @@ 'use strict'; const fs = require('fs'); -const data = fs.readFileSync('otel-collector-output.json', 'utf8'); +const data = fs.readFileSync('collector-output.json', 'utf8'); let verifiedSpan = false; let verifiedMetric = false; From c57025b56f72ffb23b4646e971369fd4e394b47a Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 09:04:37 -0400 Subject: [PATCH 26/42] Delete old file --- e2e/otel-collector-output.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 e2e/otel-collector-output.json diff --git a/e2e/otel-collector-output.json b/e2e/otel-collector-output.json deleted file mode 100644 index 723852b3ff..0000000000 --- a/e2e/otel-collector-output.json +++ /dev/null @@ -1,3 +0,0 @@ -{"resourceMetrics":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"30318"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.0"}}]},"scopeMetrics":[{"scope":{"name":"example-meter"},"metrics":[{"name":"example_counter","sum":{"dataPoints":[{"attributes":[{"key":"foo","value":{"stringValue":"bar"}}],"startTimeUnixNano":"1748350252498000000","timeUnixNano":"1748350252498000000","asDouble":42}],"aggregationTemporality":2}}]}]}]} -{"resourceSpans":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"30318"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.0"}}]},"scopeSpans":[{"scope":{"name":"example-tracer"},"spans":[{"traceId":"0fd9e04bd92a225f708f074ceff2ee8c","spanId":"d357f0a0f9061fb5","parentSpanId":"","name":"example-span","kind":1,"startTimeUnixNano":"1748350252497000000","endTimeUnixNano":"1748350252497136208","attributes":[{"key":"example-attribute","value":{"stringValue":"value"}}],"status":{}}]}]}]} -{"resourceLogs":[{"resource":{"attributes":[{"key":"host.name","value":{"stringValue":"DT-CDC4WW765D"}},{"key":"host.arch","value":{"stringValue":"arm64"}},{"key":"host.id","value":{"stringValue":"6B2E5173-86F9-5947-A92D-05F3B471C55B"}},{"key":"process.pid","value":{"intValue":"30318"}},{"key":"process.executable.name","value":{"stringValue":"node"}},{"key":"process.executable.path","value":{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"}},{"key":"process.command_args","value":{"arrayValue":{"values":[{"stringValue":"/Users/daniel.dyla/.nvm/versions/node/v20.11.0/bin/node"},{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}]}}},{"key":"process.runtime.version","value":{"stringValue":"20.11.0"}},{"key":"process.runtime.name","value":{"stringValue":"nodejs"}},{"key":"process.runtime.description","value":{"stringValue":"Node.js"}},{"key":"process.command","value":{"stringValue":"/Users/daniel.dyla/code/otel/opentelemetry-js/e2e/test.mjs"}},{"key":"process.owner","value":{"stringValue":"daniel.dyla"}},{"key":"service.name","value":{"stringValue":"unknown_service:node"}},{"key":"telemetry.sdk.language","value":{"stringValue":"nodejs"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"2.0.0"}}]},"scopeLogs":[{"scope":{"name":"example-logger"},"logRecords":[{"timeUnixNano":"1748350252498000000","observedTimeUnixNano":"1748350252498000000","severityText":"INFO","body":{"stringValue":"test-log-body"},"attributes":[{"key":"foo","value":{"stringValue":"bar"}}],"traceId":"","spanId":""}]}]}]} From 2880c16ec58ec6eaf70484b104e83435977b28b2 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 09:34:28 -0400 Subject: [PATCH 27/42] Remove unsafe perm env --- .github/workflows/e2e.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 0aa92d906a..3f26ce83a4 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -18,9 +18,6 @@ jobs: - "22" - "23" runs-on: ubuntu-latest - env: - NPM_CONFIG_UNSAFE_PERM: true - steps: - uses: actions/checkout@v4 From 0221020e15c2de81a002c06f519be06d081b9560 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 14:39:41 -0400 Subject: [PATCH 28/42] Changelog update --- experimental/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index b3ea22d03f..316974ff05 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -9,6 +9,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2 ### :boom: Breaking Changes ### :rocket: Features +* feat(exporter-otlp-*): update proto to `v1.7.0` ### :bug: Bug Fixes @@ -34,7 +35,6 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2 * See [the utility comment](https://github.com/trentm/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation/src/semconvStability.ts). * feat(instrumentation-grpc): support migration to stable HTTP semconv [#5653](https://github.com/open-telemetry/opentelemetry-js/pull/5653) @JamieDanielson * feat(instrumentation-http): capture synthetic source type on requests [#5488](https://github.com/open-telemetry/opentelemetry-js/pull/5488) @JacksonWeber -* feat(exporter-otlp-*): update proto to `v1.6.0` ### :bug: Bug Fixes From d0c18557c148d59bbf4afb223686b13c172c9619 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 14:43:49 -0400 Subject: [PATCH 29/42] Rename dir e2e-tests --- .github/workflows/e2e.yml | 12 ++++++------ .gitignore | 3 --- e2e-tests/.gitignore | 2 ++ {e2e => e2e-tests}/Makefile | 0 {e2e => e2e-tests}/collector-config.yaml | 0 {e2e => e2e-tests}/package.json | 0 {e2e => e2e-tests}/test.mjs | 0 {e2e => e2e-tests}/verify.js | 0 package.json | 2 +- scripts/update-ts-configs.js | 2 +- 10 files changed, 10 insertions(+), 11 deletions(-) create mode 100644 e2e-tests/.gitignore rename {e2e => e2e-tests}/Makefile (100%) rename {e2e => e2e-tests}/collector-config.yaml (100%) rename {e2e => e2e-tests}/package.json (100%) rename {e2e => e2e-tests}/test.mjs (100%) rename {e2e => e2e-tests}/verify.js (100%) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 3f26ce83a4..48c589df38 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -54,21 +54,21 @@ jobs: run: | curl -sSL -o otelcol-contrib.tar.gz https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.126.0/otelcol-contrib_0.126.0_linux_amd64.tar.gz tar -xzf otelcol-contrib.tar.gz - working-directory: e2e + working-directory: e2e-tests - name: run collector in background run: | ./otelcol-contrib --config collector-config.yaml & - working-directory: e2e + working-directory: e2e-tests - name: Run E2E Tests run: make test - working-directory: e2e + working-directory: e2e-tests - name: kill collector run: | pkill -f otelcol-contrib - working-directory: e2e + working-directory: e2e-tests - name: Print output run: cat collector-output.json - working-directory: e2e + working-directory: e2e-tests - name: verify exported telemetry run: node verify.js - working-directory: e2e \ No newline at end of file + working-directory: e2e-tests \ No newline at end of file diff --git a/.gitignore b/.gitignore index 0a0f815831..8bea02a1b0 100644 --- a/.gitignore +++ b/.gitignore @@ -11,9 +11,6 @@ yarn-error.log* # Filter Logs singal files !experimental/examples/logs -# test files -e2e/collector-output.json - # Runtime data pids *.pid diff --git a/e2e-tests/.gitignore b/e2e-tests/.gitignore new file mode 100644 index 0000000000..5013eee09b --- /dev/null +++ b/e2e-tests/.gitignore @@ -0,0 +1,2 @@ +# collector output file +collector-output.json \ No newline at end of file diff --git a/e2e/Makefile b/e2e-tests/Makefile similarity index 100% rename from e2e/Makefile rename to e2e-tests/Makefile diff --git a/e2e/collector-config.yaml b/e2e-tests/collector-config.yaml similarity index 100% rename from e2e/collector-config.yaml rename to e2e-tests/collector-config.yaml diff --git a/e2e/package.json b/e2e-tests/package.json similarity index 100% rename from e2e/package.json rename to e2e-tests/package.json diff --git a/e2e/test.mjs b/e2e-tests/test.mjs similarity index 100% rename from e2e/test.mjs rename to e2e-tests/test.mjs diff --git a/e2e/verify.js b/e2e-tests/verify.js similarity index 100% rename from e2e/verify.js rename to e2e-tests/verify.js diff --git a/package.json b/package.json index c3d5552c12..39e5b88426 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "api", "packages/*", "semantic-conventions", - "e2e", + "e2e-tests", "experimental/packages/*", "experimental/examples/*", "experimental/backwards-compatibility/*", diff --git a/scripts/update-ts-configs.js b/scripts/update-ts-configs.js index 4706aba51a..82592be06f 100644 --- a/scripts/update-ts-configs.js +++ b/scripts/update-ts-configs.js @@ -44,7 +44,7 @@ const tsConfigMergeKeys = [ // Make `extends` the first field. const tsConfigPriorityKeys = ['extends']; const ignoredLernaProjects = [ - 'e2e', + 'e2e-tests', 'experimental/examples/*', 'experimental/backwards-compatibility/*', 'integration-tests/*', From 3b9dbde9760195091c0f4b01375c2dfddb155851 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 14:45:34 -0400 Subject: [PATCH 30/42] Verify after make all --- e2e-tests/Makefile | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/e2e-tests/Makefile b/e2e-tests/Makefile index 6c6fe5455c..5cc9e96382 100644 --- a/e2e-tests/Makefile +++ b/e2e-tests/Makefile @@ -3,9 +3,9 @@ COLLECTOR_CONFIG=collector-config.yaml TEST_SCRIPT=test.mjs COLLECTOR_CONTAINER=otelcol-e2e -.PHONY: all create-output-json run-collector test stop-collector +.PHONY: all create-output-json run-collector test stop-collector verify -all: create-output-json run-collector test stop-collector +all: create-output-json run-collector test stop-collector verify create-output-json: @> collector-output.json @@ -25,4 +25,9 @@ test: stop-collector: @echo "Stopping OpenTelemetry Collector Docker container..." - @docker stop $(COLLECTOR_CONTAINER) || true \ No newline at end of file + @docker stop $(COLLECTOR_CONTAINER) || true + + +verify: + @echo "Verifying output..." + @node verify.js \ No newline at end of file From f34e854ebd59e19afa51f55193ef8d30a0a03c67 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 14:49:49 -0400 Subject: [PATCH 31/42] Lint verification script --- .github/workflows/e2e.yml | 2 +- e2e-tests/.eslintrc.js | 25 +++++++++ e2e-tests/Makefile | 2 +- e2e-tests/package.json | 5 ++ e2e-tests/test.mjs | 85 ++++++++++++++++++----------- e2e-tests/{verify.js => verify.mjs} | 18 +++++- 6 files changed, 102 insertions(+), 35 deletions(-) create mode 100644 e2e-tests/.eslintrc.js rename e2e-tests/{verify.js => verify.mjs} (76%) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 48c589df38..de8b046d54 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -70,5 +70,5 @@ jobs: run: cat collector-output.json working-directory: e2e-tests - name: verify exported telemetry - run: node verify.js + run: make verify working-directory: e2e-tests \ No newline at end of file diff --git a/e2e-tests/.eslintrc.js b/e2e-tests/.eslintrc.js new file mode 100644 index 0000000000..509232fb86 --- /dev/null +++ b/e2e-tests/.eslintrc.js @@ -0,0 +1,25 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +module.exports = { + env: { + node: true, + }, + ...require('../eslint.base.js'), + rules: { + 'no-console': 'off', + }, +}; diff --git a/e2e-tests/Makefile b/e2e-tests/Makefile index 5cc9e96382..6d3a2e5ca0 100644 --- a/e2e-tests/Makefile +++ b/e2e-tests/Makefile @@ -30,4 +30,4 @@ stop-collector: verify: @echo "Verifying output..." - @node verify.js \ No newline at end of file + @node verify.mjs diff --git a/e2e-tests/package.json b/e2e-tests/package.json index 9c729c68b4..abd7e0d98b 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -3,6 +3,11 @@ "private": true, "description": "End-to-end tests for OpenTelemetry JS", "version": "0.0.0", + "scripts": { + "test": "make all", + "lint": "eslint . --ext .mjs", + "lint:fix": "eslint . --ext .mjs --fix" + }, "dependencies": { "@opentelemetry/api": "*", "@opentelemetry/api-logs": "*", diff --git a/e2e-tests/test.mjs b/e2e-tests/test.mjs index 6f65ecc745..dbff03e01f 100644 --- a/e2e-tests/test.mjs +++ b/e2e-tests/test.mjs @@ -1,3 +1,18 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ import { NodeSDK } from '@opentelemetry/sdk-node'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto'; import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto'; @@ -5,7 +20,13 @@ import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'; import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-proto'; import { SimpleLogRecordProcessor } from '@opentelemetry/sdk-logs'; import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'; -import { diag, DiagConsoleLogger, DiagLogLevel, trace, metrics } from '@opentelemetry/api'; +import { + diag, + DiagConsoleLogger, + DiagLogLevel, + trace, + metrics, +} from '@opentelemetry/api'; import { logs } from '@opentelemetry/api-logs'; // Enable diagnostic logging (optional) @@ -15,60 +36,60 @@ const collectorUrl = 'http://localhost:4318/v1'; // Set up trace exporter with SimpleSpanProcessor const traceExporter = new OTLPTraceExporter({ - url: `${collectorUrl}/traces`, + url: `${collectorUrl}/traces`, }); const spanProcessors = [new SimpleSpanProcessor(traceExporter)]; // Set up metric exporter const metricExporter = new OTLPMetricExporter({ - url: `${collectorUrl}/metrics`, + url: `${collectorUrl}/metrics`, }); const metricReader = new PeriodicExportingMetricReader({ - exporter: metricExporter, - exportIntervalMillis: 1000, - exportTimeoutMillis: 1000, + exporter: metricExporter, + exportIntervalMillis: 1000, + exportTimeoutMillis: 1000, }); // Set up log exporter const logExporter = new OTLPLogExporter({ - url: `${collectorUrl}/logs`, + url: `${collectorUrl}/logs`, }); const logRecordProcessors = [new SimpleLogRecordProcessor(logExporter)]; // Set up OpenTelemetry SDK const sdk = new NodeSDK({ - spanProcessors, - metricReader, - logRecordProcessors, + spanProcessors, + metricReader, + logRecordProcessors, }); async function main() { - sdk.start(); + sdk.start(); - // Create a span - const tracer = trace.getTracer('example-tracer'); - const span = tracer.startSpan('example-span'); - span.setAttribute('example-attribute', 'value'); - span.end(); + // Create a span + const tracer = trace.getTracer('example-tracer'); + const span = tracer.startSpan('example-span'); + span.setAttribute('example-attribute', 'value'); + span.end(); - // Create a metric - const meter = metrics.getMeter('example-meter'); - const counter = meter.createUpDownCounter('example_counter'); - counter.add(42, { foo: 'bar' }); + // Create a metric + const meter = metrics.getMeter('example-meter'); + const counter = meter.createUpDownCounter('example_counter'); + counter.add(42, { foo: 'bar' }); - // Create a log - const logger = logs.getLogger('example-logger'); - logger.emit({ - severityText: 'INFO', - body: 'test-log-body', - attributes: { foo: 'bar' }, - }); + // Create a log + const logger = logs.getLogger('example-logger'); + logger.emit({ + severityText: 'INFO', + body: 'test-log-body', + attributes: { foo: 'bar' }, + }); - // flushes exporters and shuts down the SDK - await sdk.shutdown(); + // flushes exporters and shuts down the SDK + await sdk.shutdown(); } -main().catch((err) => { - console.error('Error running example:', err); - process.exit(1); +main().catch(err => { + console.error('Error running example:', err); + process.exit(1); }); diff --git a/e2e-tests/verify.js b/e2e-tests/verify.mjs similarity index 76% rename from e2e-tests/verify.js rename to e2e-tests/verify.mjs index 8fc6ae3fbd..05c6888a3d 100755 --- a/e2e-tests/verify.js +++ b/e2e-tests/verify.mjs @@ -1,6 +1,22 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ 'use strict'; -const fs = require('fs'); +import fs from 'fs'; + const data = fs.readFileSync('collector-output.json', 'utf8'); let verifiedSpan = false; From a9404032ba7e9e2bc28020d9999476d5db75b649 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 14:51:43 -0400 Subject: [PATCH 32/42] Add e2e test script --- e2e-tests/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e-tests/package.json b/e2e-tests/package.json index abd7e0d98b..e9f0baf395 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -4,7 +4,7 @@ "description": "End-to-end tests for OpenTelemetry JS", "version": "0.0.0", "scripts": { - "test": "make all", + "test:e2e": "make all", "lint": "eslint . --ext .mjs", "lint:fix": "eslint . --ext .mjs --fix" }, From ee8d1367694b523031b4c1d804f01e2efb94c2c6 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 14:52:34 -0400 Subject: [PATCH 33/42] 2 space indent --- e2e-tests/package.json | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/e2e-tests/package.json b/e2e-tests/package.json index e9f0baf395..5de9c89ca2 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -1,22 +1,22 @@ { - "name": "opentelemetry-e2e-test", - "private": true, - "description": "End-to-end tests for OpenTelemetry JS", - "version": "0.0.0", - "scripts": { - "test:e2e": "make all", - "lint": "eslint . --ext .mjs", - "lint:fix": "eslint . --ext .mjs --fix" - }, - "dependencies": { - "@opentelemetry/api": "*", - "@opentelemetry/api-logs": "*", - "@opentelemetry/sdk-node": "*", - "@opentelemetry/exporter-trace-otlp-proto": "*", - "@opentelemetry/exporter-metrics-otlp-proto": "*", - "@opentelemetry/exporter-logs-otlp-proto": "*", - "@opentelemetry/sdk-metrics": "*", - "@opentelemetry/sdk-logs": "*", - "@opentelemetry/sdk-trace-base": "*" - } + "name": "opentelemetry-e2e-test", + "private": true, + "description": "End-to-end tests for OpenTelemetry JS", + "version": "0.0.0", + "scripts": { + "test:e2e": "make all", + "lint": "eslint . --ext .mjs", + "lint:fix": "eslint . --ext .mjs --fix" + }, + "dependencies": { + "@opentelemetry/api": "*", + "@opentelemetry/api-logs": "*", + "@opentelemetry/sdk-node": "*", + "@opentelemetry/exporter-trace-otlp-proto": "*", + "@opentelemetry/exporter-metrics-otlp-proto": "*", + "@opentelemetry/exporter-logs-otlp-proto": "*", + "@opentelemetry/sdk-metrics": "*", + "@opentelemetry/sdk-logs": "*", + "@opentelemetry/sdk-trace-base": "*" + } } \ No newline at end of file From 3f4d9fe38eba10ec6572f78ce128d3eb133e7ab4 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 15:24:37 -0400 Subject: [PATCH 34/42] Fix package-lock --- package-lock.json | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0a3ee8cfec..5f7260f77d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "api", "packages/*", "semantic-conventions", - "e2e", + "e2e-tests", "experimental/packages/*", "experimental/examples/*", "experimental/backwards-compatibility/*", @@ -98,6 +98,22 @@ "license": "MIT" }, "e2e": { + "name": "opentelemetry-e2e-test", + "version": "0.0.0", + "extraneous": true, + "dependencies": { + "@opentelemetry/api": "*", + "@opentelemetry/api-logs": "*", + "@opentelemetry/exporter-logs-otlp-proto": "*", + "@opentelemetry/exporter-metrics-otlp-proto": "*", + "@opentelemetry/exporter-trace-otlp-proto": "*", + "@opentelemetry/sdk-logs": "*", + "@opentelemetry/sdk-metrics": "*", + "@opentelemetry/sdk-node": "*", + "@opentelemetry/sdk-trace-base": "*" + } + }, + "e2e-tests": { "name": "opentelemetry-e2e-test", "version": "0.0.0", "dependencies": { @@ -23214,7 +23230,7 @@ "link": true }, "node_modules/opentelemetry-e2e-test": { - "resolved": "e2e", + "resolved": "e2e-tests", "link": true }, "node_modules/opentracing": { @@ -48254,7 +48270,7 @@ } }, "opentelemetry-e2e-test": { - "version": "file:e2e", + "version": "file:e2e-tests", "requires": { "@opentelemetry/api": "*", "@opentelemetry/api-logs": "*", From 5dcbc9b2e17f8745f506fb0ec3866a3071bc1d13 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 15:25:18 -0400 Subject: [PATCH 35/42] Fix package name --- e2e-tests/package.json | 2 +- package-lock.json | 38 +++++++++++++++++++------------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/e2e-tests/package.json b/e2e-tests/package.json index 5de9c89ca2..c5bf5a121e 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -1,5 +1,5 @@ { - "name": "opentelemetry-e2e-test", + "name": "@opentelemetry/e2e-test", "private": true, "description": "End-to-end tests for OpenTelemetry JS", "version": "0.0.0", diff --git a/package-lock.json b/package-lock.json index 5f7260f77d..f065455dc0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -114,7 +114,7 @@ } }, "e2e-tests": { - "name": "opentelemetry-e2e-test", + "name": "@opentelemetry/e2e-test", "version": "0.0.0", "dependencies": { "@opentelemetry/api": "*", @@ -7817,6 +7817,10 @@ "resolved": "packages/opentelemetry-core", "link": true }, + "node_modules/@opentelemetry/e2e-test": { + "resolved": "e2e-tests", + "link": true + }, "node_modules/@opentelemetry/exporter-jaeger": { "resolved": "packages/opentelemetry-exporter-jaeger", "link": true @@ -23229,10 +23233,6 @@ "resolved": "experimental/examples/opencensus-shim", "link": true }, - "node_modules/opentelemetry-e2e-test": { - "resolved": "e2e-tests", - "link": true - }, "node_modules/opentracing": { "version": "0.14.7", "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz", @@ -34814,6 +34814,20 @@ } } }, + "@opentelemetry/e2e-test": { + "version": "file:e2e-tests", + "requires": { + "@opentelemetry/api": "*", + "@opentelemetry/api-logs": "*", + "@opentelemetry/exporter-logs-otlp-proto": "*", + "@opentelemetry/exporter-metrics-otlp-proto": "*", + "@opentelemetry/exporter-trace-otlp-proto": "*", + "@opentelemetry/sdk-logs": "*", + "@opentelemetry/sdk-metrics": "*", + "@opentelemetry/sdk-node": "*", + "@opentelemetry/sdk-trace-base": "*" + } + }, "@opentelemetry/exporter-jaeger": { "version": "file:packages/opentelemetry-exporter-jaeger", "requires": { @@ -48269,20 +48283,6 @@ "@opentelemetry/shim-opencensus": "0.201.1" } }, - "opentelemetry-e2e-test": { - "version": "file:e2e-tests", - "requires": { - "@opentelemetry/api": "*", - "@opentelemetry/api-logs": "*", - "@opentelemetry/exporter-logs-otlp-proto": "*", - "@opentelemetry/exporter-metrics-otlp-proto": "*", - "@opentelemetry/exporter-trace-otlp-proto": "*", - "@opentelemetry/sdk-logs": "*", - "@opentelemetry/sdk-metrics": "*", - "@opentelemetry/sdk-node": "*", - "@opentelemetry/sdk-trace-base": "*" - } - }, "opentracing": { "version": "0.14.7", "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz", From 35e372489f8df0b356cbe240d04963096e735ebb Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 May 2025 17:07:34 -0400 Subject: [PATCH 36/42] Pin versions for tests --- e2e-tests/package.json | 18 +++++++++--------- package-lock.json | 36 ++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/e2e-tests/package.json b/e2e-tests/package.json index c5bf5a121e..8b47402c2d 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -9,14 +9,14 @@ "lint:fix": "eslint . --ext .mjs --fix" }, "dependencies": { - "@opentelemetry/api": "*", - "@opentelemetry/api-logs": "*", - "@opentelemetry/sdk-node": "*", - "@opentelemetry/exporter-trace-otlp-proto": "*", - "@opentelemetry/exporter-metrics-otlp-proto": "*", - "@opentelemetry/exporter-logs-otlp-proto": "*", - "@opentelemetry/sdk-metrics": "*", - "@opentelemetry/sdk-logs": "*", - "@opentelemetry/sdk-trace-base": "*" + "@opentelemetry/api": "^1.3.0", + "@opentelemetry/api-logs": "~0.201.1", + "@opentelemetry/sdk-node": "0.201.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.201.1", + "@opentelemetry/exporter-metrics-otlp-proto": "0.201.1", + "@opentelemetry/exporter-logs-otlp-proto": "0.201.1", + "@opentelemetry/sdk-metrics": "2.0.1", + "@opentelemetry/sdk-logs": "0.201.1", + "@opentelemetry/sdk-trace-base": "2.0.1" } } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f065455dc0..a3cec7cedc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -117,15 +117,15 @@ "name": "@opentelemetry/e2e-test", "version": "0.0.0", "dependencies": { - "@opentelemetry/api": "*", - "@opentelemetry/api-logs": "*", - "@opentelemetry/exporter-logs-otlp-proto": "*", - "@opentelemetry/exporter-metrics-otlp-proto": "*", - "@opentelemetry/exporter-trace-otlp-proto": "*", - "@opentelemetry/sdk-logs": "*", - "@opentelemetry/sdk-metrics": "*", - "@opentelemetry/sdk-node": "*", - "@opentelemetry/sdk-trace-base": "*" + "@opentelemetry/api": "^1.3.0", + "@opentelemetry/api-logs": "~0.201.1", + "@opentelemetry/exporter-logs-otlp-proto": "0.201.1", + "@opentelemetry/exporter-metrics-otlp-proto": "0.201.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.201.1", + "@opentelemetry/sdk-logs": "0.201.1", + "@opentelemetry/sdk-metrics": "2.0.1", + "@opentelemetry/sdk-node": "0.201.1", + "@opentelemetry/sdk-trace-base": "2.0.1" } }, "examples/esm-http-ts": { @@ -34817,15 +34817,15 @@ "@opentelemetry/e2e-test": { "version": "file:e2e-tests", "requires": { - "@opentelemetry/api": "*", - "@opentelemetry/api-logs": "*", - "@opentelemetry/exporter-logs-otlp-proto": "*", - "@opentelemetry/exporter-metrics-otlp-proto": "*", - "@opentelemetry/exporter-trace-otlp-proto": "*", - "@opentelemetry/sdk-logs": "*", - "@opentelemetry/sdk-metrics": "*", - "@opentelemetry/sdk-node": "*", - "@opentelemetry/sdk-trace-base": "*" + "@opentelemetry/api": "^1.3.0", + "@opentelemetry/api-logs": "~0.201.1", + "@opentelemetry/exporter-logs-otlp-proto": "0.201.1", + "@opentelemetry/exporter-metrics-otlp-proto": "0.201.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.201.1", + "@opentelemetry/sdk-logs": "0.201.1", + "@opentelemetry/sdk-metrics": "2.0.1", + "@opentelemetry/sdk-node": "0.201.1", + "@opentelemetry/sdk-trace-base": "2.0.1" } }, "@opentelemetry/exporter-jaeger": { From 733a3f87b8f3c104f4418664f82d0b0ae5dc4914 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Wed, 28 May 2025 13:35:21 +0200 Subject: [PATCH 37/42] Update experimental/CHANGELOG.md --- experimental/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 85ba466911..dc10929301 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -9,8 +9,8 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2 ### :boom: Breaking Changes ### :rocket: Features -* feat(exporter-otlp-*): update proto to `v1.7.0` +* feat(exporter-otlp-\*): update proto to `v1.7.0` * feat(exporter-metrics-otlp-proto): Support to protobuf in browser metrics. [#5710](https://github.com/open-telemetry/opentelemetry-js/pull/5710) @YangJonghun ### :bug: Bug Fixes From 5af0a0c6d15a5f914a9b3f74a1d84873f54136a0 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Wed, 28 May 2025 08:00:12 -0400 Subject: [PATCH 38/42] Add readme for e2e tests --- e2e-tests/README.md | 53 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 e2e-tests/README.md diff --git a/e2e-tests/README.md b/e2e-tests/README.md new file mode 100644 index 0000000000..ea499fbe2a --- /dev/null +++ b/e2e-tests/README.md @@ -0,0 +1,53 @@ +# OpenTelemetry JS End-to-End Tests + +This directory contains end-to-end (E2E) tests for the OpenTelemetry JavaScript project. These tests verify the integration of OpenTelemetry components with a real OpenTelemetry Collector. + +## Prerequisites + +- [Node.js](https://nodejs.org/) (version as required by the root project) +- [Docker](https://www.docker.com/) (for running the OpenTelemetry Collector) + +## Installation + +Install dependencies: + +```sh +npm install +``` + +## Running Tests + +The default Make target runs the collector in docker, executes the tests, and verifies the results: + +```sh +make +``` + +### Additional Make Targets + +Each step of the tests can also be run separately: + + +#### `make all` + +Runs the full E2E test workflow in sequence: prepares the output file, starts the Collector, runs the tests, stops the Collector, and verifies the results. + +#### `make create-output-json` + +Creates or truncates collector-output.json to ensure it’s empty before the test run. + +#### `make run-collector` + +Starts the OpenTelemetry Collector in a Docker container using the specified config and mounts the output file for results. Waits 5 seconds for the Collector to be ready. + +#### `make test` + +Runs the main E2E test script (test.mjs) using Node.js, which sends telemetry data to the Collector. + +#### `make stop-collector` + +Stops the Docker container running the Collector if it’s running. + +#### `make verify` + +Runs the verification script (verify.mjs) to check the contents of collector-output.json for expected results. From eee1171b9670e4d0a3cd00ff7c9a586fd74f518a Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Wed, 28 May 2025 08:27:35 -0400 Subject: [PATCH 39/42] Lint --- e2e-tests/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/e2e-tests/README.md b/e2e-tests/README.md index ea499fbe2a..516020a8ab 100644 --- a/e2e-tests/README.md +++ b/e2e-tests/README.md @@ -27,8 +27,7 @@ make Each step of the tests can also be run separately: - -#### `make all` +#### `make all` (default target) Runs the full E2E test workflow in sequence: prepares the output file, starts the Collector, runs the tests, stops the Collector, and verifies the results. From e3a370216d0ccde8df498bd8b03d8848b19554fb Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Wed, 28 May 2025 09:10:46 -0400 Subject: [PATCH 40/42] Convert makefile to npm scripts --- .github/workflows/e2e.yml | 11 +++++------ e2e-tests/Makefile | 33 --------------------------------- e2e-tests/README.md | 20 ++++++-------------- e2e-tests/package.json | 9 +++++++-- 4 files changed, 18 insertions(+), 55 deletions(-) delete mode 100644 e2e-tests/Makefile diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index de8b046d54..2c88a08efc 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -59,16 +59,15 @@ jobs: run: | ./otelcol-contrib --config collector-config.yaml & working-directory: e2e-tests - - name: Run E2E Tests - run: make test + - name: Export telemetry to collector + run: npm run export-telemetry working-directory: e2e-tests - - name: kill collector - run: | - pkill -f otelcol-contrib + - name: stop collector + run: npm run stop-collector working-directory: e2e-tests - name: Print output run: cat collector-output.json working-directory: e2e-tests - name: verify exported telemetry - run: make verify + run: npm run verify working-directory: e2e-tests \ No newline at end of file diff --git a/e2e-tests/Makefile b/e2e-tests/Makefile deleted file mode 100644 index 6d3a2e5ca0..0000000000 --- a/e2e-tests/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -COLLECTOR_IMAGE=otel/opentelemetry-collector-contrib:latest -COLLECTOR_CONFIG=collector-config.yaml -TEST_SCRIPT=test.mjs -COLLECTOR_CONTAINER=otelcol-e2e - -.PHONY: all create-output-json run-collector test stop-collector verify - -all: create-output-json run-collector test stop-collector verify -create-output-json: - @> collector-output.json - -run-collector: create-output-json - @echo "Starting OpenTelemetry Collector in Docker..." - docker run -d --rm --name $(COLLECTOR_CONTAINER) \ - -v $(PWD)/$(COLLECTOR_CONFIG):/etc/otelcol/config.yaml \ - -v $(PWD)/collector-output.json:/tmp/collector-output.json \ - -p 4317:4317 -p 4318:4318 \ - -w /tmp \ - $(COLLECTOR_IMAGE) --config /etc/otelcol/config.yaml - @sleep 5 - -test: - @echo "Running tests..." - node $(TEST_SCRIPT) - -stop-collector: - @echo "Stopping OpenTelemetry Collector Docker container..." - @docker stop $(COLLECTOR_CONTAINER) || true - - -verify: - @echo "Verifying output..." - @node verify.mjs diff --git a/e2e-tests/README.md b/e2e-tests/README.md index 516020a8ab..9262972ccd 100644 --- a/e2e-tests/README.md +++ b/e2e-tests/README.md @@ -27,26 +27,18 @@ make Each step of the tests can also be run separately: -#### `make all` (default target) +#### `npm run test:e2e` Runs the full E2E test workflow in sequence: prepares the output file, starts the Collector, runs the tests, stops the Collector, and verifies the results. -#### `make create-output-json` +#### `npm run run-collector` -Creates or truncates collector-output.json to ensure it’s empty before the test run. +Starts the OpenTelemetry Collector in a Docker container and mounts the output file for results. Waits 5 seconds for the Collector to be ready. -#### `make run-collector` - -Starts the OpenTelemetry Collector in a Docker container using the specified config and mounts the output file for results. Waits 5 seconds for the Collector to be ready. - -#### `make test` - -Runs the main E2E test script (test.mjs) using Node.js, which sends telemetry data to the Collector. - -#### `make stop-collector` +#### `npm run stop-collector` Stops the Docker container running the Collector if it’s running. -#### `make verify` +#### `npm run verify` -Runs the verification script (verify.mjs) to check the contents of collector-output.json for expected results. +Runs the verification script (`verify.mjs`) to check the contents of `collector-output.json` for expected results. diff --git a/e2e-tests/package.json b/e2e-tests/package.json index 8b47402c2d..9701d3ecf4 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -4,9 +4,14 @@ "description": "End-to-end tests for OpenTelemetry JS", "version": "0.0.0", "scripts": { - "test:e2e": "make all", + "test:e2e": "npm run run-collector && npm run export-telemetry && npm run verify && npm run stop-collector", "lint": "eslint . --ext .mjs", - "lint:fix": "eslint . --ext .mjs --fix" + "lint:fix": "eslint . --ext .mjs --fix", + "run-collector": "docker run -d --rm --name otelcol-e2e -v $(pwd)/collector-config.yaml:/etc/otelcol/config.yaml -v $(pwd)/collector-output.json:/tmp/collector-output.json -p 4317:4317 -p 4318:4318 -w /tmp otel/opentelemetry-collector-contrib:latest --config /etc/otelcol/config.yaml && sleep 5", + "export-telemetry": "node test.mjs", + "prerun-collector": "node -e \"require('fs').writeFileSync('collector-output.json', '')\"", + "stop-collector": "docker stop otelcol-e2e", + "verify": "node verify.mjs" }, "dependencies": { "@opentelemetry/api": "^1.3.0", From 8fded0f5a9250055e3bf4637318b38543857519d Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Wed, 28 May 2025 09:23:14 -0400 Subject: [PATCH 41/42] Col not running in docker in actions --- .github/workflows/e2e.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 2c88a08efc..1dcd0e07af 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -63,7 +63,7 @@ jobs: run: npm run export-telemetry working-directory: e2e-tests - name: stop collector - run: npm run stop-collector + run: pkill -f otelcol-contrib working-directory: e2e-tests - name: Print output run: cat collector-output.json From 4833cea51929afadb864fddf1af84c679e8ddfd8 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Wed, 28 May 2025 10:54:38 -0400 Subject: [PATCH 42/42] Remove make references from readme --- e2e-tests/README.md | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/e2e-tests/README.md b/e2e-tests/README.md index 9262972ccd..38e08da0d0 100644 --- a/e2e-tests/README.md +++ b/e2e-tests/README.md @@ -17,28 +17,20 @@ npm install ## Running Tests -The default Make target runs the collector in docker, executes the tests, and verifies the results: +Test can be run completely or each step can be run separately. -```sh -make -``` - -### Additional Make Targets - -Each step of the tests can also be run separately: - -#### `npm run test:e2e` +### `npm run test:e2e` Runs the full E2E test workflow in sequence: prepares the output file, starts the Collector, runs the tests, stops the Collector, and verifies the results. -#### `npm run run-collector` +### `npm run run-collector` Starts the OpenTelemetry Collector in a Docker container and mounts the output file for results. Waits 5 seconds for the Collector to be ready. -#### `npm run stop-collector` +### `npm run stop-collector` Stops the Docker container running the Collector if it’s running. -#### `npm run verify` +### `npm run verify` Runs the verification script (`verify.mjs`) to check the contents of `collector-output.json` for expected results.