diff --git a/.circleci/checksum.sh b/.circleci/checksum.sh index af2e0f293e..9c9f3288c1 100644 --- a/.circleci/checksum.sh +++ b/.circleci/checksum.sh @@ -21,6 +21,11 @@ fi openssl md5 package.json >> $FILE +find detectors/node/*/package.json | xargs -I{} openssl md5 {} >> $FILE +find metapackages/*/package.json | xargs -I{} openssl md5 {} >> $FILE find packages/*/package.json | xargs -I{} openssl md5 {} >> $FILE +find plugins/node/*/package.json | xargs -I{} openssl md5 {} >> $FILE +find plugins/web/*/package.json | xargs -I{} openssl md5 {} >> $FILE +find propagators/*/package.json | xargs -I{} openssl md5 {} >> $FILE sort -o $FILE $FILE diff --git a/.circleci/config.yml b/.circleci/config.yml index d3c602ad6e..0ccf82e727 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -44,16 +44,26 @@ cache_1: &cache_1 paths: - ./node_modules - ./package-lock.json + - detectors/node/opentelemetry-resource-detector-github/node_modules + - metapackages/plugins-node-core-and-contrib/node_modules + - packages/opentelemetry-host-metrics/node_modules + - packages/opentelemetry-test-utils/node_modules + - plugins/node/opentelemetry-hapi-instrumentation/node_modules + - plugins/node/opentelemetry-instrumentation-graphql/node_modules + - plugins/node/opentelemetry-koa-instrumentation/node_modules - plugins/node/opentelemetry-plugin-dns/node_modules + - plugins/node/opentelemetry-plugin-express/node_modules - plugins/node/opentelemetry-plugin-ioredis/node_modules - plugins/node/opentelemetry-plugin-mongodb/node_modules - - plugins/node/opentelemetry-plugin-redis/node_modules + - plugins/node/opentelemetry-plugin-mysql/node_modules - plugins/node/opentelemetry-plugin-pg/node_modules - - plugins/node/opentelemetry-plugin-document-load/node_modules - plugins/node/opentelemetry-plugin-pg-pool/node_modules - - plugins/node/opentelemetry-plugin-mysql/node_modules - - plugins/node/opentelemetry-plugin-express/node_modules + - plugins/node/opentelemetry-plugin-redis/node_modules + - plugins/web/opentelemetry-plugin-document-load/node_modules + - plugins/web/opentelemetry-plugin-react-load/node_modules + - plugins/web/opentelemetry-plugin-user-interaction/node_modules - propagators/opentelemetry-propagator-jaeger/node_modules + - propagators/opentelemetry-propagator-grpc-census-binary/node_modules node_unit_tests: &node_unit_tests resource_class: large diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4c08b33a6a..1299c32578 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,9 +14,12 @@ jobs: id: cache with: path: | + ./node_modules + ./package-lock.json node_modules - packages/*/node_modules + detectors/node/*/node_modules metapackages/*/node_modules + packages/*/node_modules plugins/node/*/node_modules plugins/web/*/node_modules propagators/*/node_modules diff --git a/detectors/node/opentelemetry-resource-detector-github/package.json b/detectors/node/opentelemetry-resource-detector-github/package.json index 759224cc83..1243086f9d 100644 --- a/detectors/node/opentelemetry-resource-detector-github/package.json +++ b/detectors/node/opentelemetry-resource-detector-github/package.json @@ -43,8 +43,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/core": "^0.12.0", - "@opentelemetry/tracing": "^0.12.0", + "@opentelemetry/core": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", "@types/mocha": "8.0.1", "@types/node": "14.0.27", "@types/sinon": "9.0.4", @@ -55,13 +55,13 @@ "nyc": "15.1.0", "rimraf": "3.0.2", "sinon": "9.0.2", - "ts-mocha": "7.0.0", + "ts-mocha": "8.0.0", "ts-node": "8.10.2", "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", - "@opentelemetry/resources": "^0.12.0" + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", + "@opentelemetry/resources": "^0.13.0" } } diff --git a/examples/dns/package.json b/examples/dns/package.json index ab9ca90e60..f38ddb696b 100644 --- a/examples/dns/package.json +++ b/examples/dns/package.json @@ -26,12 +26,12 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/exporter-jaeger": "^0.12.0", - "@opentelemetry/exporter-zipkin": "^0.12.0", - "@opentelemetry/node": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/exporter-jaeger": "^0.13.0", + "@opentelemetry/exporter-zipkin": "^0.13.0", + "@opentelemetry/node": "^0.13.0", "@opentelemetry/plugin-dns": "^0.11.0", - "@opentelemetry/tracing": "^0.12.0" + "@opentelemetry/tracing": "^0.13.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", "devDependencies": { diff --git a/examples/express/client.js b/examples/express/client.js index aa9a849eec..2b4753e141 100644 --- a/examples/express/client.js +++ b/examples/express/client.js @@ -14,10 +14,10 @@ function makeRequest() { tracer.withSpan(span, async () => { try { const res = await axios.get('http://localhost:8080/run_test'); - span.setStatus({ code: api.CanonicalCode.OK }); + span.setStatus({ code: api.StatusCode.OK }); console.log(res.statusText); } catch (e) { - span.setStatus({ code: api.CanonicalCode.UNKNOWN, message: e.message }); + span.setStatus({ code: api.StatusCode.ERROR, message: e.message }); } span.end(); console.log('Sleeping 5 seconds before shutdown to ensure all records are flushed.'); diff --git a/examples/express/package.json b/examples/express/package.json index 881255e0b5..792abcd6a2 100644 --- a/examples/express/package.json +++ b/examples/express/package.json @@ -28,13 +28,13 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/exporter-jaeger": "^0.12.0", - "@opentelemetry/exporter-zipkin": "^0.12.0", - "@opentelemetry/node": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/exporter-jaeger": "^0.13.0", + "@opentelemetry/exporter-zipkin": "^0.13.0", + "@opentelemetry/node": "^0.13.0", "@opentelemetry/plugin-express": "^0.11.0", - "@opentelemetry/plugin-http": "^0.12.0", - "@opentelemetry/tracing": "^0.12.0", + "@opentelemetry/plugin-http": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", "axios": "^0.19.0", "express": "^4.17.1" }, diff --git a/examples/graphql/package.json b/examples/graphql/package.json index ddf6e16be0..86f9520356 100644 --- a/examples/graphql/package.json +++ b/examples/graphql/package.json @@ -31,14 +31,14 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/exporter-collector": "^0.12.0", - "@opentelemetry/node": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/exporter-collector": "^0.13.0", + "@opentelemetry/node": "^0.13.0", "@opentelemetry/plugin-express": "^0.11.0", "@opentelemetry/instrumentation-graphql": "^0.11.0", - "@opentelemetry/plugin-http": "^0.12.0", - "@opentelemetry/plugin-https": "^0.12.0", - "@opentelemetry/tracing": "^0.12.0", + "@opentelemetry/plugin-http": "^0.13.0", + "@opentelemetry/plugin-https": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", "apollo-server": "^2.18.1", "express": "^4.17.1", "express-graphql": "^0.11.0", diff --git a/examples/grpc-census-prop/package.json b/examples/grpc-census-prop/package.json index 831c0b0e2f..9b91da33c2 100644 --- a/examples/grpc-census-prop/package.json +++ b/examples/grpc-census-prop/package.json @@ -34,12 +34,12 @@ "@opencensus/instrumentation-grpc": "0.0.21", "@opencensus/nodejs": "0.0.21", "@opencensus/propagation-binaryformat": "0.0.21", - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", - "@opentelemetry/node": "^0.12.0", - "@opentelemetry/plugin-grpc": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/plugin-grpc": "^0.13.0", "@opentelemetry/propagator-grpc-census-binary": "^0.11.0", - "@opentelemetry/tracing": "^0.12.0", + "@opentelemetry/tracing": "^0.13.0", "grpc": "^1.24.2", "node-pre-gyp": "0.12.0" }, diff --git a/examples/hapi/client.js b/examples/hapi/client.js index 0876f32201..d3ac6a8a60 100644 --- a/examples/hapi/client.js +++ b/examples/hapi/client.js @@ -14,10 +14,10 @@ function makeRequest() { tracer.withSpan(span, async () => { try { const res = await axios.get('http://localhost:8081/run_test'); - span.setStatus({ code: api.CanonicalCode.OK }); + span.setStatus({ code: api.StatusCode.OK }); console.log(res.statusText); } catch (e) { - span.setStatus({ code: api.CanonicalCode.UNKNOWN, message: e.message }); + span.setStatus({ code: api.StatusCode.ERROR, message: e.message }); } span.end(); console.log('Sleeping 5 seconds before shutdown to ensure all records are flushed.'); diff --git a/examples/hapi/package.json b/examples/hapi/package.json index e8f6ed942f..875a3c0126 100644 --- a/examples/hapi/package.json +++ b/examples/hapi/package.json @@ -32,13 +32,13 @@ }, "dependencies": { "@hapi/hapi": "^19.2.0", - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/exporter-jaeger": "^0.12.0", - "@opentelemetry/exporter-zipkin": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/exporter-jaeger": "^0.13.0", + "@opentelemetry/exporter-zipkin": "^0.13.0", "@opentelemetry/hapi-instrumentation": "^0.11.0", - "@opentelemetry/node": "^0.12.0", - "@opentelemetry/plugin-http": "^0.12.0", - "@opentelemetry/tracing": "^0.12.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/plugin-http": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", "axios": "^0.19.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib#readme", diff --git a/examples/host-metrics/package.json b/examples/host-metrics/package.json index 3a25f5b4db..79fb522545 100644 --- a/examples/host-metrics/package.json +++ b/examples/host-metrics/package.json @@ -28,10 +28,10 @@ "dependencies": { "@opentelemetry/api": "^0.13.0", "@opentelemetry/core": "^0.13.0", - "@opentelemetry/exporter-prometheus": "^0.13.0", "@opentelemetry/exporter-collector": "^0.13.0", - "@opentelemetry/metrics": "^0.13.0", - "@opentelemetry/host-metrics": "^0.11.0" + "@opentelemetry/exporter-prometheus": "^0.13.0", + "@opentelemetry/host-metrics": "^0.11.0", + "@opentelemetry/metrics": "^0.13.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" } diff --git a/examples/ioredis/package.json b/examples/ioredis/package.json index e748fe8bd7..9a56642c50 100644 --- a/examples/ioredis/package.json +++ b/examples/ioredis/package.json @@ -28,11 +28,11 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/exporter-jaeger": "^0.12.0", - "@opentelemetry/node": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/exporter-jaeger": "^0.13.0", + "@opentelemetry/node": "^0.13.0", "@opentelemetry/plugin-ioredis": "^0.11.0", - "@opentelemetry/tracing": "^0.12.0", + "@opentelemetry/tracing": "^0.13.0", "ioredis": "^4.14.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme" diff --git a/examples/koa/client.js b/examples/koa/client.js index 26ba69ea48..f10535a00d 100644 --- a/examples/koa/client.js +++ b/examples/koa/client.js @@ -14,10 +14,10 @@ function makeRequest() { tracer.withSpan(span, async () => { try { const res = await axios.get('http://localhost:8081/run_test'); - span.setStatus({ code: api.CanonicalCode.OK }); + span.setStatus({ code: api.StatusCode.OK }); console.log(res.statusText); } catch (e) { - span.setStatus({ code: api.CanonicalCode.UNKNOWN, message: e.message }); + span.setStatus({ code: api.StatusCode.ERROR, message: e.message }); } span.end(); console.log('Sleeping 5 seconds before shutdown to ensure all records are flushed.'); diff --git a/examples/koa/package.json b/examples/koa/package.json index eb11e33a87..dd98e463aa 100644 --- a/examples/koa/package.json +++ b/examples/koa/package.json @@ -32,13 +32,13 @@ }, "dependencies": { "@koa/router": "^9.3.1", - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/exporter-jaeger": "^0.12.0", - "@opentelemetry/exporter-zipkin": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/exporter-jaeger": "^0.13.0", + "@opentelemetry/exporter-zipkin": "^0.13.0", "@opentelemetry/koa-instrumentation": "^0.11.0", - "@opentelemetry/node": "^0.12.0", - "@opentelemetry/plugin-http": "^0.12.0", - "@opentelemetry/tracing": "^0.12.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/plugin-http": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", "axios": "^0.19.0", "koa": "^2.13.0" }, diff --git a/examples/mysql/package.json b/examples/mysql/package.json index af8eaeb40b..0dcda0edb8 100644 --- a/examples/mysql/package.json +++ b/examples/mysql/package.json @@ -28,13 +28,13 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/exporter-jaeger": "^0.12.0", - "@opentelemetry/exporter-zipkin": "^0.12.0", - "@opentelemetry/node": "^0.12.0", - "@opentelemetry/plugin-http": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/exporter-jaeger": "^0.13.0", + "@opentelemetry/exporter-zipkin": "^0.13.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/plugin-http": "^0.13.0", "@opentelemetry/plugin-mysql": "^0.11.0", - "@opentelemetry/tracing": "^0.12.0", + "@opentelemetry/tracing": "^0.13.0", "mysql": "*" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", diff --git a/examples/postgres/package.json b/examples/postgres/package.json index b10a963058..2b2a0c782c 100644 --- a/examples/postgres/package.json +++ b/examples/postgres/package.json @@ -30,14 +30,14 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/exporter-jaeger": "^0.12.0", - "@opentelemetry/exporter-zipkin": "^0.12.0", - "@opentelemetry/node": "^0.12.0", - "@opentelemetry/plugin-http": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/exporter-jaeger": "^0.13.0", + "@opentelemetry/exporter-zipkin": "^0.13.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/plugin-http": "^0.13.0", "@opentelemetry/plugin-pg": "^0.11.0", "@opentelemetry/plugin-pg-pool": "^0.11.0", - "@opentelemetry/tracing": "^0.12.0", + "@opentelemetry/tracing": "^0.13.0", "express": "^4.17.1", "pg": "^7.12.1" }, diff --git a/examples/postgres/server.js b/examples/postgres/server.js index b893acd4f8..9fb96927b5 100644 --- a/examples/postgres/server.js +++ b/examples/postgres/server.js @@ -2,7 +2,7 @@ // eslint-disable-next-line import/order const tracer = require('./tracer')('postgres-server-service'); -const { SpanKind, CanonicalCode } = require('@opentelemetry/api'); +const { SpanKind, StatusCode } = require('@opentelemetry/api'); const express = require('express'); const setupPg = require('./setupPsql'); @@ -41,7 +41,7 @@ app.get('/:cmd', (req, res) => { }); } catch (e) { res.status(400).send({ message: e.message }); - span.setStatus(CanonicalCode.UNKNOWN); + span.setStatus(StatusCode.ERROR); } span.end(); }); diff --git a/examples/react-load/preact/package.json b/examples/react-load/preact/package.json index bb4cf716b2..2806a3c034 100644 --- a/examples/react-load/preact/package.json +++ b/examples/react-load/preact/package.json @@ -37,11 +37,11 @@ "sirv-cli": "1.0.3" }, "dependencies": { - "@opentelemetry/context-zone": "^0.10.1", - "@opentelemetry/exporter-collector": "^0.10.1", - "@opentelemetry/plugin-react-load": "^0.8.0", - "@opentelemetry/tracing": "^0.10.1", - "@opentelemetry/web": "^0.10.1", + "@opentelemetry/context-zone": "^0.13.0", + "@opentelemetry/exporter-collector": "^0.13.0", + "@opentelemetry/plugin-react-load": "^0.11.0", + "@opentelemetry/tracing": "^0.13.0", + "@opentelemetry/web": "^0.13.0", "preact": "^10.3.2", "preact-render-to-string": "^5.1.4", "preact-router": "^3.2.1" diff --git a/examples/react-load/react/package.json b/examples/react-load/react/package.json index 232f864cba..6dc5fe02b5 100644 --- a/examples/react-load/react/package.json +++ b/examples/react-load/react/package.json @@ -36,12 +36,12 @@ "ts-loader": "^6.0.4" }, "dependencies": { - "@opentelemetry/context-zone": "^0.9.0", - "@opentelemetry/core": "^0.9.0", - "@opentelemetry/exporter-collector": "^0.10.1", - "@opentelemetry/plugin-react-load": "^0.8.0", - "@opentelemetry/tracing": "^0.9.0", - "@opentelemetry/web": "^0.9.0", + "@opentelemetry/context-zone": "^0.13.0", + "@opentelemetry/core": "^0.13.0", + "@opentelemetry/exporter-collector": "^0.13.0", + "@opentelemetry/plugin-react-load": "^0.11.0", + "@opentelemetry/tracing": "^0.13.0", + "@opentelemetry/web": "^0.13.0", "react": "^16.13.1", "react-dom": "^16.13.1", "react-router-dom": "^5.2.0", diff --git a/examples/redis/client.js b/examples/redis/client.js index 9fadc6f1a5..c46cf80319 100644 --- a/examples/redis/client.js +++ b/examples/redis/client.js @@ -14,10 +14,10 @@ function makeRequest() { tracer.withSpan(span, async () => { try { const res = await axios.get('http://localhost:8080/run_test'); - span.setStatus({ code: api.CanonicalCode.OK }); + span.setStatus({ code: api.StatusCode.OK }); console.log(res.statusText); } catch (e) { - span.setStatus({ code: api.CanonicalCode.UNKNOWN, message: e.message }); + span.setStatus({ code: api.StatusCode.ERROR, message: e.message }); } span.end(); console.log('Sleeping 5 seconds before shutdown to ensure all records are flushed.'); diff --git a/examples/redis/express-tracer-handlers.js b/examples/redis/express-tracer-handlers.js index 9e8412a5c8..a916f09a7c 100644 --- a/examples/redis/express-tracer-handlers.js +++ b/examples/redis/express-tracer-handlers.js @@ -25,7 +25,7 @@ function getErrorTracer(tracer) { console.error('Caught error', err.message); const span = tracer.getCurrentSpan(); if (span) { - span.setStatus({ code: api.CanonicalCode.INTERNAL, message: err.message }); + span.setStatus({ code: api.StatusCode.ERROR, message: err.message }); } res.status(500).send(err.message); }; diff --git a/examples/redis/package.json b/examples/redis/package.json index 607d9193c4..43b24b4bf4 100644 --- a/examples/redis/package.json +++ b/examples/redis/package.json @@ -30,13 +30,13 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/exporter-jaeger": "^0.12.0", - "@opentelemetry/exporter-zipkin": "^0.12.0", - "@opentelemetry/node": "^0.12.0", - "@opentelemetry/plugin-http": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/exporter-jaeger": "^0.13.0", + "@opentelemetry/exporter-zipkin": "^0.13.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/plugin-http": "^0.13.0", "@opentelemetry/plugin-redis": "^0.11.0", - "@opentelemetry/tracing": "^0.12.0", + "@opentelemetry/tracing": "^0.13.0", "axios": "^0.19.0", "express": "^4.17.1", "redis": "^2.8.0" diff --git a/metapackages/plugins-node-core-and-contrib/package.json b/metapackages/plugins-node-core-and-contrib/package.json index a5af1a51dd..815eadd006 100644 --- a/metapackages/plugins-node-core-and-contrib/package.json +++ b/metapackages/plugins-node-core-and-contrib/package.json @@ -23,6 +23,6 @@ "@opentelemetry/plugin-pg": "^0.11.0", "@opentelemetry/plugin-pg-pool": "^0.11.0", "@opentelemetry/plugin-redis": "^0.11.0", - "@opentelemetry/plugins-node-core": "0.12.0" + "@opentelemetry/plugins-node-core": "^0.13.0" } } diff --git a/packages/opentelemetry-host-metrics/package.json b/packages/opentelemetry-host-metrics/package.json index 82dcf4eb3b..1107274cee 100644 --- a/packages/opentelemetry-host-metrics/package.json +++ b/packages/opentelemetry-host-metrics/package.json @@ -42,7 +42,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/exporter-prometheus": "0.12.0", + "@opentelemetry/exporter-prometheus": "^0.13.0", "@types/mocha": "8.0.2", "@types/node": "14.0.27", "@types/sinon": "9.0.4", diff --git a/packages/opentelemetry-test-utils/package.json b/packages/opentelemetry-test-utils/package.json index ea7ec147a3..965c67b77e 100644 --- a/packages/opentelemetry-test-utils/package.json +++ b/packages/opentelemetry-test-utils/package.json @@ -9,7 +9,8 @@ "lint:fix": "eslint . --ext .ts --fix", "compile": "tsc -p .", "precompile": "tsc --version", - "prepare": "npm run compile" + "prepare": "npm run compile", + "watch": "tsc -w" }, "repository": "open-telemetry/opentelemetry-js", "keywords": [ @@ -31,8 +32,8 @@ "typescript": "3.9.6" }, "dependencies": { - "@opentelemetry/api": "0.12.0", - "@opentelemetry/core": "0.12.0", - "@opentelemetry/tracing": "0.12.0" + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0" } } diff --git a/plugins/node/opentelemetry-hapi-instrumentation/package.json b/plugins/node/opentelemetry-hapi-instrumentation/package.json index 1b629ea3fe..23d8b275ef 100644 --- a/plugins/node/opentelemetry-hapi-instrumentation/package.json +++ b/plugins/node/opentelemetry-hapi-instrumentation/package.json @@ -42,9 +42,9 @@ }, "devDependencies": { "@hapi/hapi": "20.0.1", - "@opentelemetry/context-async-hooks": "0.12.0", - "@opentelemetry/node": "0.12.0", - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/context-async-hooks": "^0.13.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", "@types/hapi__hapi": "20.0.1", "@types/mocha": "7.0.2", "@types/node": "12.12.47", @@ -64,9 +64,9 @@ "typescript": "3.9.6" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", - "@opentelemetry/semantic-conventions": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", + "@opentelemetry/semantic-conventions": "^0.13.0", "shimmer": "^1.2.1" } } diff --git a/plugins/node/opentelemetry-instrumentation-graphql/package.json b/plugins/node/opentelemetry-instrumentation-graphql/package.json index d2246ea5fc..bfba544dcd 100644 --- a/plugins/node/opentelemetry-instrumentation-graphql/package.json +++ b/plugins/node/opentelemetry-instrumentation-graphql/package.json @@ -43,7 +43,7 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/tracing": "^0.13.0", "@types/graphql": "14.5.0", "@types/mocha": "8.0.1", "@types/node": "14.0.27", @@ -61,7 +61,7 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/instrumentation": "^0.12.0" + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/instrumentation": "^0.13.0" } } diff --git a/plugins/node/opentelemetry-instrumentation-graphql/src/graphql.ts b/plugins/node/opentelemetry-instrumentation-graphql/src/graphql.ts index 6260810b89..a197abf89a 100644 --- a/plugins/node/opentelemetry-instrumentation-graphql/src/graphql.ts +++ b/plugins/node/opentelemetry-instrumentation-graphql/src/graphql.ts @@ -307,9 +307,14 @@ export class GraphQLInstrumentation extends InstrumentationBase { options?: { maxErrors?: number } ): ReadonlyArray { const document = documentAST as ObjectWithOtelSpan; - const span = this.tracer.startSpan(SpanNames.VALIDATE, { - parent: document[OTEL_SPAN_SYMBOL], - }); + const parentSpan = document[OTEL_SPAN_SYMBOL]; + const span = this.tracer.startSpan( + SpanNames.VALIDATE, + {}, + parentSpan + ? api.setActiveSpan(api.context.active(), parentSpan) + : undefined + ); document[OTEL_SPAN_SYMBOL] = span; return this.tracer.withSpan(span, () => { @@ -346,9 +351,15 @@ export class GraphQLInstrumentation extends InstrumentationBase { ): api.Span { const config = this._getConfig(); const document = processedArgs.document as ObjectWithOtelSpan; - const span = this.tracer.startSpan(SpanNames.EXECUTE, { - parent: document[OTEL_SPAN_SYMBOL], - }); + + const parentSpan = document[OTEL_SPAN_SYMBOL]; + const span = this.tracer.startSpan( + SpanNames.EXECUTE, + {}, + parentSpan + ? api.setActiveSpan(api.context.active(), parentSpan) + : undefined + ); if (operation) { const name = (operation as graphqlTypes.OperationDefinitionNode) .operation; diff --git a/plugins/node/opentelemetry-instrumentation-graphql/src/utils.ts b/plugins/node/opentelemetry-instrumentation-graphql/src/utils.ts index 74817454d0..e3b066d1c9 100644 --- a/plugins/node/opentelemetry-instrumentation-graphql/src/utils.ts +++ b/plugins/node/opentelemetry-instrumentation-graphql/src/utils.ts @@ -99,10 +99,13 @@ function createResolverSpan( [SpanAttributes.FIELD_TYPE]: info.returnType.toString(), }; - const span = tracer.startSpan(SpanNames.RESOLVE, { - attributes, - parent: parentSpan, - }); + const span = tracer.startSpan( + SpanNames.RESOLVE, + { + attributes, + }, + parentSpan ? api.setActiveSpan(api.context.active(), parentSpan) : undefined + ); const document = contextValue[OTEL_GRAPHQL_DATA_SYMBOL].source; const fieldNode = info.fieldNodes.find( diff --git a/plugins/node/opentelemetry-koa-instrumentation/package.json b/plugins/node/opentelemetry-koa-instrumentation/package.json index 1c04ad341c..d32eb7b48a 100644 --- a/plugins/node/opentelemetry-koa-instrumentation/package.json +++ b/plugins/node/opentelemetry-koa-instrumentation/package.json @@ -44,9 +44,9 @@ }, "devDependencies": { "@koa/router": "9.4.0", - "@opentelemetry/context-async-hooks": "0.12.0", - "@opentelemetry/node": "0.12.0", - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/context-async-hooks": "^0.13.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", "@types/koa": "2.11.4", "@types/koa__router": "8.0.2", "@types/mocha": "7.0.2", @@ -67,9 +67,9 @@ "typescript": "3.9.6" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", - "@opentelemetry/semantic-conventions": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", + "@opentelemetry/semantic-conventions": "^0.13.0", "shimmer": "^1.2.1" } } diff --git a/plugins/node/opentelemetry-plugin-dns/package.json b/plugins/node/opentelemetry-plugin-dns/package.json index 18b79c48d9..3d4082c668 100644 --- a/plugins/node/opentelemetry-plugin-dns/package.json +++ b/plugins/node/opentelemetry-plugin-dns/package.json @@ -41,8 +41,8 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/node": "0.12.0", - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", "@types/mocha": "7.0.2", "@types/node": "14.0.27", "@types/semver": "7.3.1", @@ -61,8 +61,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", "semver": "^7.3.2", "shimmer": "^1.2.1" } diff --git a/plugins/node/opentelemetry-plugin-dns/src/utils.ts b/plugins/node/opentelemetry-plugin-dns/src/utils.ts index a5560b3a34..00da1bddb1 100644 --- a/plugins/node/opentelemetry-plugin-dns/src/utils.ts +++ b/plugins/node/opentelemetry-plugin-dns/src/utils.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Span, CanonicalCode, Status, Attributes } from '@opentelemetry/api'; +import { Span, StatusCode, Attributes } from '@opentelemetry/api'; import { AttributeNames } from './enums/AttributeNames'; import { AddressFamily } from './enums/AddressFamily'; import * as dns from 'dns'; @@ -42,9 +42,11 @@ export const setError = ( } span.setAttributes(attributes); - const status = parseErrorCode(code); - status.message = message; - span.setStatus(status); + + span.setStatus({ + code: StatusCode.ERROR, + message, + }); }; /** @@ -71,63 +73,6 @@ export const getOperationName = ( return service ? `dns.${service}/${funcName}` : `dns.${funcName}`; }; -export /** - * Parse the error code from DNS response. - * @param code the error code to parse - */ -const parseErrorCode = (code: string | undefined): Status => { - if (!code) { - return { code: CanonicalCode.UNKNOWN }; - } else { - switch (code) { - case dns.BADQUERY: - case dns.BADNAME: - case dns.BADFAMILY: - case dns.BADSTR: - case dns.BADFLAGS: - case dns.BADHINTS: - case dns.FORMERR: - case 'ERR_INVALID_OPT_VALUE': - case 'ERR_INVALID_ARG_TYPE': - case 'ERR_INVALID_ARG_VALUE': - case 'ERR_INVALID_ADDRESS_FAMILY': - case 'ERR_INVALID_CALLBACK': - case 'ERR_INVALID_IP_ADDRESS': - case 'ERR_INVALID_FILE_URL_HOST': - case 'ERR_INVALID_FILE_URL_PATH': - case 'ERR_MISSING_ARGS': - return { code: CanonicalCode.INVALID_ARGUMENT }; - case dns.BADRESP: - case dns.NODATA: - case dns.FILE: - case dns.NOMEM: - case dns.DESTRUCTION: - case dns.NONAME: - case dns.LOADIPHLPAPI: - case dns.ADDRGETNETWORKPARAMS: - return { code: CanonicalCode.INTERNAL }; - case dns.SERVFAIL: - case dns.NOTINITIALIZED: - case dns.CONNREFUSED: - return { code: CanonicalCode.UNAVAILABLE }; - case dns.NOTFOUND: - return { code: CanonicalCode.NOT_FOUND }; - case dns.NOTIMP: - return { code: CanonicalCode.UNIMPLEMENTED }; - case dns.REFUSED: - return { code: CanonicalCode.RESOURCE_EXHAUSTED }; - case dns.CANCELLED: - return { code: CanonicalCode.CANCELLED }; - case dns.TIMEOUT: - return { code: CanonicalCode.DEADLINE_EXCEEDED }; - case dns.EOF: - return { code: CanonicalCode.OUT_OF_RANGE }; - default: - return { code: CanonicalCode.UNKNOWN }; - } - } -}; - export const setLookupAttributes = ( span: Span, address: string | dns.LookupAddress[] | dns.LookupAddress, diff --git a/plugins/node/opentelemetry-plugin-dns/test/functionals/utils.test.ts b/plugins/node/opentelemetry-plugin-dns/test/functionals/utils.test.ts index dab7cfc9df..f07347368b 100644 --- a/plugins/node/opentelemetry-plugin-dns/test/functionals/utils.test.ts +++ b/plugins/node/opentelemetry-plugin-dns/test/functionals/utils.test.ts @@ -16,7 +16,7 @@ import { NoopLogger } from '@opentelemetry/core'; import { BasicTracerProvider, Span } from '@opentelemetry/tracing'; -import { CanonicalCode, SpanKind, TraceFlags } from '@opentelemetry/api'; +import { ROOT_CONTEXT, SpanKind, TraceFlags } from '@opentelemetry/api'; import * as assert from 'assert'; import * as sinon from 'sinon'; import { AttributeNames } from '../../src/enums/AttributeNames'; @@ -24,15 +24,6 @@ import { IgnoreMatcher } from '../../src/types'; import * as utils from '../../src/utils'; describe('Utility', () => { - describe('parseResponseStatus()', () => { - it('should return UNKNOWN code by default', () => { - [(undefined as unknown) as string, '', 'DSHKJSAD'].forEach(code => { - const status = utils.parseErrorCode(code); - assert.deepStrictEqual(status, { code: CanonicalCode.UNKNOWN }); - }); - }); - }); - describe('satisfiesPattern()', () => { it('string pattern', () => { const answer1 = utils.satisfiesPattern('localhost', 'localhost'); @@ -163,6 +154,7 @@ describe('Utility', () => { const errorMessage = 'test error'; const span = new Span( new BasicTracerProvider().getTracer('default'), + ROOT_CONTEXT, 'test', { spanId: '', traceId: '', traceFlags: TraceFlags.NONE }, SpanKind.INTERNAL diff --git a/plugins/node/opentelemetry-plugin-dns/test/integrations/dns-lookup.test.ts b/plugins/node/opentelemetry-plugin-dns/test/integrations/dns-lookup.test.ts index 8ce1d2d076..4897b298fa 100644 --- a/plugins/node/opentelemetry-plugin-dns/test/integrations/dns-lookup.test.ts +++ b/plugins/node/opentelemetry-plugin-dns/test/integrations/dns-lookup.test.ts @@ -25,7 +25,7 @@ import { plugin } from '../../src/dns'; import * as dns from 'dns'; import * as utils from '../utils/utils'; import { assertSpan } from '../utils/assertSpan'; -import { CanonicalCode } from '@opentelemetry/api'; +import { StatusCode } from '@opentelemetry/api'; const memoryExporter = new InMemorySpanExporter(); const logger = new NoopLogger(); @@ -107,7 +107,7 @@ describe('dns.lookup()', () => { addresses: [{ address, family }], hostname, forceStatus: { - code: CanonicalCode.NOT_FOUND, + code: StatusCode.ERROR, message: err!.message, }, }); @@ -128,9 +128,7 @@ describe('dns.lookup()', () => { addresses: [], hostname, forceStatus: { - code: process.versions.node.startsWith('8') - ? CanonicalCode.UNKNOWN - : CanonicalCode.INVALID_ARGUMENT, + code: StatusCode.ERROR, message: error!.message, }, }); @@ -152,9 +150,7 @@ describe('dns.lookup()', () => { // tslint:disable-next-line:no-any hostname: hostname as any, forceStatus: { - code: process.versions.node.startsWith('8') - ? CanonicalCode.UNKNOWN - : CanonicalCode.INVALID_ARGUMENT, + code: StatusCode.ERROR, message: error!.message, }, }); diff --git a/plugins/node/opentelemetry-plugin-dns/test/integrations/dnspromise-lookup.test.ts b/plugins/node/opentelemetry-plugin-dns/test/integrations/dnspromise-lookup.test.ts index 5583a8bd5f..19f6b484bc 100644 --- a/plugins/node/opentelemetry-plugin-dns/test/integrations/dnspromise-lookup.test.ts +++ b/plugins/node/opentelemetry-plugin-dns/test/integrations/dnspromise-lookup.test.ts @@ -24,9 +24,8 @@ import { NodeTracerProvider } from '@opentelemetry/node'; import { plugin } from '../../src/dns'; import * as dns from 'dns'; import * as utils from '../utils/utils'; -import * as semver from 'semver'; import { assertSpan } from '../utils/assertSpan'; -import { CanonicalCode } from '@opentelemetry/api'; +import { StatusCode } from '@opentelemetry/api'; const memoryExporter = new InMemorySpanExporter(); const logger = new NoopLogger(); @@ -122,7 +121,7 @@ describe('dns.promises.lookup()', () => { addresses: [], hostname, forceStatus: { - code: CanonicalCode.NOT_FOUND, + code: StatusCode.ERROR, message: error!.message, }, }); @@ -139,27 +138,15 @@ describe('dns.promises.lookup()', () => { const [span] = spans; assert.strictEqual(spans.length, 1); - if (semver.lt(process.versions.node, '9.0.0')) { - assertSpan(span, { - addresses: [], - // tslint:disable-next-line:no-any - hostname: hostname as any, - forceStatus: { - code: CanonicalCode.UNKNOWN, - message: error!.message, - }, - }); - } else { - assertSpan(span, { - addresses: [], - // tslint:disable-next-line:no-any - hostname: hostname as any, - forceStatus: { - code: CanonicalCode.INVALID_ARGUMENT, - message: error!.message, - }, - }); - } + assertSpan(span, { + addresses: [], + // tslint:disable-next-line:no-any + hostname: hostname as any, + forceStatus: { + code: StatusCode.ERROR, + message: error!.message, + }, + }); } }); @@ -174,27 +161,15 @@ describe('dns.promises.lookup()', () => { const [span] = spans; assert.strictEqual(spans.length, 1); - if (semver.lt(process.versions.node, '9.0.0')) { - assertSpan(span, { - addresses: [], - // tslint:disable-next-line:no-any - hostname: hostname as any, - forceStatus: { - code: CanonicalCode.UNKNOWN, - message: error!.message, - }, - }); - } else { - assertSpan(span, { - addresses: [], - // tslint:disable-next-line:no-any - hostname: hostname as any, - forceStatus: { - code: CanonicalCode.INVALID_ARGUMENT, - message: error!.message, - }, - }); - } + assertSpan(span, { + addresses: [], + // tslint:disable-next-line:no-any + hostname: hostname as any, + forceStatus: { + code: StatusCode.ERROR, + message: error!.message, + }, + }); } }); }); diff --git a/plugins/node/opentelemetry-plugin-dns/test/utils/assertSpan.ts b/plugins/node/opentelemetry-plugin-dns/test/utils/assertSpan.ts index a26319d43d..1d242bde56 100644 --- a/plugins/node/opentelemetry-plugin-dns/test/utils/assertSpan.ts +++ b/plugins/node/opentelemetry-plugin-dns/test/utils/assertSpan.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { SpanKind, Status, CanonicalCode } from '@opentelemetry/api'; +import { SpanKind, Status, StatusCode } from '@opentelemetry/api'; import { hrTimeToNanoseconds } from '@opentelemetry/core'; import * as assert from 'assert'; import { AttributeNames } from '../../src/enums/AttributeNames'; @@ -62,7 +62,7 @@ export const assertSpan = ( assert.deepStrictEqual( span.status, - validations.forceStatus || { code: CanonicalCode.OK } + validations.forceStatus || { code: StatusCode.UNSET } ); assert.ok(hrTimeToNanoseconds(span.duration), 'must have positive duration'); diff --git a/plugins/node/opentelemetry-plugin-express/package.json b/plugins/node/opentelemetry-plugin-express/package.json index 0ee865bd18..3f585c597e 100644 --- a/plugins/node/opentelemetry-plugin-express/package.json +++ b/plugins/node/opentelemetry-plugin-express/package.json @@ -42,9 +42,9 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "0.12.0", - "@opentelemetry/node": "0.12.0", - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/context-async-hooks": "^0.13.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", "@types/express": "4.17.7", "@types/mocha": "7.0.2", "@types/node": "14.0.27", @@ -62,8 +62,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", "shimmer": "^1.2.1" } } diff --git a/plugins/node/opentelemetry-plugin-ioredis/package.json b/plugins/node/opentelemetry-plugin-ioredis/package.json index 8f417c9400..0752c9799f 100644 --- a/plugins/node/opentelemetry-plugin-ioredis/package.json +++ b/plugins/node/opentelemetry-plugin-ioredis/package.json @@ -44,11 +44,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "0.12.0", - "@opentelemetry/node": "0.12.0", - "@opentelemetry/semantic-conventions": "0.12.0", + "@opentelemetry/context-async-hooks": "^0.13.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/semantic-conventions": "^0.13.0", "@opentelemetry/test-utils": "^0.11.0", - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/tracing": "^0.13.0", "@types/ioredis": "4.17.3", "@types/mocha": "7.0.2", "@types/node": "14.0.27", @@ -67,8 +67,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", "shimmer": "^1.2.1" } } diff --git a/plugins/node/opentelemetry-plugin-ioredis/src/utils.ts b/plugins/node/opentelemetry-plugin-ioredis/src/utils.ts index 08d793b609..7c38e669e0 100644 --- a/plugins/node/opentelemetry-plugin-ioredis/src/utils.ts +++ b/plugins/node/opentelemetry-plugin-ioredis/src/utils.ts @@ -15,7 +15,7 @@ */ import type * as ioredisTypes from 'ioredis'; -import { Tracer, SpanKind, Span, CanonicalCode } from '@opentelemetry/api'; +import { Tracer, SpanKind, Span, StatusCode } from '@opentelemetry/api'; import { IoredisCommand, IoredisPluginConfig, @@ -30,11 +30,9 @@ import { const endSpan = (span: Span, err: NodeJS.ErrnoException | null | undefined) => { if (err) { span.setStatus({ - code: CanonicalCode.UNKNOWN, + code: StatusCode.ERROR, message: err.message, }); - } else { - span.setStatus({ code: CanonicalCode.OK }); } span.end(); }; diff --git a/plugins/node/opentelemetry-plugin-ioredis/test/ioredis.test.ts b/plugins/node/opentelemetry-plugin-ioredis/test/ioredis.test.ts index b5c6c5129b..6cedb6a763 100644 --- a/plugins/node/opentelemetry-plugin-ioredis/test/ioredis.test.ts +++ b/plugins/node/opentelemetry-plugin-ioredis/test/ioredis.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CanonicalCode, context, SpanKind, Status } from '@opentelemetry/api'; +import { StatusCode, context, SpanKind, Status } from '@opentelemetry/api'; import { NoopLogger } from '@opentelemetry/core'; import { NodeTracerProvider } from '@opentelemetry/node'; import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks'; @@ -48,8 +48,8 @@ const DEFAULT_ATTRIBUTES = { [GeneralAttribute.NET_PEER_ADDRESS]: URL, }; -const okStatus: Status = { - code: CanonicalCode.OK, +const unsetStatus: Status = { + code: StatusCode.UNSET, }; describe('ioredis', () => { @@ -121,7 +121,7 @@ describe('ioredis', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); span.end(); assert.strictEqual(endedSpans.length, 3); @@ -216,7 +216,7 @@ describe('ioredis', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); testUtils.assertPropagation(endedSpans[0], span); done(); @@ -244,7 +244,7 @@ describe('ioredis', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); testUtils.assertPropagation(endedSpans[0], span); } catch (error) { @@ -282,7 +282,7 @@ describe('ioredis', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); testUtils.assertPropagation(endedSpans[0], span); done(); @@ -338,7 +338,7 @@ describe('ioredis', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); testUtils.assertPropagation(endedSpans[0], span); } catch (error) { @@ -378,7 +378,7 @@ describe('ioredis', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); testUtils.assertPropagation(endedSpans[0], span); done(); @@ -414,7 +414,7 @@ describe('ioredis', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); testUtils.assertPropagation(endedSpans[0], span); done(); @@ -448,7 +448,7 @@ describe('ioredis', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); testUtils.assertPropagation(endedSpans[0], span); done(); @@ -476,7 +476,7 @@ describe('ioredis', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); testUtils.assertPropagation(endedSpans[0], span); } catch (error) { @@ -505,7 +505,7 @@ describe('ioredis', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); testUtils.assertPropagation(endedSpans[0], span); } catch (error) { @@ -564,7 +564,7 @@ describe('ioredis', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); testUtils.assertPropagation(endedSpans[0], span); done(); diff --git a/plugins/node/opentelemetry-plugin-mongodb/package.json b/plugins/node/opentelemetry-plugin-mongodb/package.json index 1645dd7447..006381aa24 100644 --- a/plugins/node/opentelemetry-plugin-mongodb/package.json +++ b/plugins/node/opentelemetry-plugin-mongodb/package.json @@ -41,10 +41,10 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "0.12.0", - "@opentelemetry/node": "0.12.0", - "@opentelemetry/semantic-conventions": "0.12.0", - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/context-async-hooks": "^0.13.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/semantic-conventions": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", "@types/mocha": "7.0.2", "@types/mongodb": "3.5.25", "@types/node": "14.0.27", @@ -62,8 +62,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", "shimmer": "^1.2.1" } } diff --git a/plugins/node/opentelemetry-plugin-mongodb/src/mongodb.ts b/plugins/node/opentelemetry-plugin-mongodb/src/mongodb.ts index 3fe3704754..18b4fa16fc 100644 --- a/plugins/node/opentelemetry-plugin-mongodb/src/mongodb.ts +++ b/plugins/node/opentelemetry-plugin-mongodb/src/mongodb.ts @@ -15,7 +15,7 @@ */ import { BasePlugin } from '@opentelemetry/core'; -import { CanonicalCode, Span, SpanKind } from '@opentelemetry/api'; +import { StatusCode, Span, SpanKind } from '@opentelemetry/api'; import type * as mongodb from 'mongodb'; import * as shimmer from 'shimmer'; import { @@ -249,13 +249,9 @@ export class MongoDBPlugin extends BasePlugin { const error = args[0]; if (error instanceof Error) { span.setStatus({ - code: CanonicalCode.UNKNOWN, + code: StatusCode.ERROR, message: error.message, }); - } else { - span.setStatus({ - code: CanonicalCode.OK, - }); } span.end(); return resultHandler.apply(this, args); diff --git a/plugins/node/opentelemetry-plugin-mongodb/test/mongodb.test.ts b/plugins/node/opentelemetry-plugin-mongodb/test/mongodb.test.ts index f881a2d11b..1168281573 100644 --- a/plugins/node/opentelemetry-plugin-mongodb/test/mongodb.test.ts +++ b/plugins/node/opentelemetry-plugin-mongodb/test/mongodb.test.ts @@ -14,6 +14,9 @@ * limitations under the License. */ +// for testing locally use this command to run docker +// docker run -e MONGODB_DB=opentelemetry-tests -e MONGODB_PORT=27017 -e MONGODB_HOST=localhost -p 27017:27017 --name otmongo mongo + import { context, PluginConfig, SpanKind } from '@opentelemetry/api'; import { NoopLogger } from '@opentelemetry/core'; import { BasicTracerProvider } from '@opentelemetry/tracing'; @@ -36,6 +39,7 @@ describe('MongoDBPlugin', () => { console.log('Skipping test-mongodb. Run MongoDB to test'); shouldTest = false; } + // shouldTest = true const URL = `mongodb://${process.env.MONGODB_HOST || 'localhost'}:${ process.env.MONGODB_PORT || '27017' diff --git a/plugins/node/opentelemetry-plugin-mongodb/test/utils.ts b/plugins/node/opentelemetry-plugin-mongodb/test/utils.ts index cd8de27843..8bf01a332d 100644 --- a/plugins/node/opentelemetry-plugin-mongodb/test/utils.ts +++ b/plugins/node/opentelemetry-plugin-mongodb/test/utils.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CanonicalCode, SpanKind } from '@opentelemetry/api'; +import { StatusCode, SpanKind } from '@opentelemetry/api'; import { ReadableSpan } from '@opentelemetry/tracing'; import * as assert from 'assert'; import * as mongodb from 'mongodb'; @@ -86,7 +86,7 @@ export function assertSpans( mongoSpan.attributes[GeneralAttribute.NET_HOST_NAME], process.env.MONGODB_HOST || 'localhost' ); - assert.strictEqual(mongoSpan.status.code, CanonicalCode.OK); + assert.strictEqual(mongoSpan.status.code, StatusCode.UNSET); if (isEnhancedDatabaseReportingEnabled) { const dbStatement = mongoSpan.attributes[ diff --git a/plugins/node/opentelemetry-plugin-mysql/package.json b/plugins/node/opentelemetry-plugin-mysql/package.json index 9eee4c47a0..994453a53b 100644 --- a/plugins/node/opentelemetry-plugin-mysql/package.json +++ b/plugins/node/opentelemetry-plugin-mysql/package.json @@ -41,11 +41,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "0.12.0", - "@opentelemetry/node": "0.12.0", - "@opentelemetry/semantic-conventions": "0.12.0", + "@opentelemetry/context-async-hooks": "^0.13.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/semantic-conventions": "^0.13.0", "@opentelemetry/test-utils": "^0.11.0", - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/tracing": "^0.13.0", "@types/mocha": "7.0.2", "@types/mysql": "2.15.15", "@types/node": "14.0.27", @@ -63,8 +63,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", "shimmer": "^1.2.1" } } diff --git a/plugins/node/opentelemetry-plugin-mysql/src/mysql.ts b/plugins/node/opentelemetry-plugin-mysql/src/mysql.ts index 145c50f4dd..a6765bb99d 100644 --- a/plugins/node/opentelemetry-plugin-mysql/src/mysql.ts +++ b/plugins/node/opentelemetry-plugin-mysql/src/mysql.ts @@ -15,7 +15,7 @@ */ import { BasePlugin, isWrapped } from '@opentelemetry/core'; -import { CanonicalCode, Span, SpanKind } from '@opentelemetry/api'; +import { StatusCode, Span, SpanKind } from '@opentelemetry/api'; import type * as mysqlTypes from 'mysql'; import * as shimmer from 'shimmer'; import { getConnectionAttributes, getDbStatement, getSpanName } from './utils'; @@ -237,7 +237,7 @@ export class MysqlPlugin extends BasePlugin { return streamableQuery .on('error', err => span.setStatus({ - code: CanonicalCode.UNKNOWN, + code: StatusCode.ERROR, message: err.message, }) ) @@ -266,13 +266,9 @@ export class MysqlPlugin extends BasePlugin { ) { if (err) { span.setStatus({ - code: CanonicalCode.UNKNOWN, + code: StatusCode.ERROR, message: err.message, }); - } else { - span.setStatus({ - code: CanonicalCode.OK, - }); } span.end(); return originalCallback(...arguments); diff --git a/plugins/node/opentelemetry-plugin-mysql/test/mysql.test.ts b/plugins/node/opentelemetry-plugin-mysql/test/mysql.test.ts index d1cb4909cf..4653922123 100644 --- a/plugins/node/opentelemetry-plugin-mysql/test/mysql.test.ts +++ b/plugins/node/opentelemetry-plugin-mysql/test/mysql.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CanonicalCode, context } from '@opentelemetry/api'; +import { StatusCode, context } from '@opentelemetry/api'; import { NoopLogger } from '@opentelemetry/core'; import { NodeTracerProvider } from '@opentelemetry/node'; import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks'; @@ -628,6 +628,6 @@ function assertSpan( ); if (errorMessage) { assert.strictEqual(span.status.message, errorMessage); - assert.strictEqual(span.status.code, CanonicalCode.UNKNOWN); + assert.strictEqual(span.status.code, StatusCode.ERROR); } } diff --git a/plugins/node/opentelemetry-plugin-pg-pool/package.json b/plugins/node/opentelemetry-plugin-pg-pool/package.json index ee2d56b648..43ed437d4c 100644 --- a/plugins/node/opentelemetry-plugin-pg-pool/package.json +++ b/plugins/node/opentelemetry-plugin-pg-pool/package.json @@ -47,10 +47,10 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "0.12.0", + "@opentelemetry/context-async-hooks": "^0.13.0", "@opentelemetry/plugin-pg": "^0.11.0", "@opentelemetry/test-utils": "^0.11.0", - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/tracing": "^0.13.0", "@types/mocha": "7.0.2", "@types/node": "14.0.27", "@types/pg": "7.14.4", @@ -71,8 +71,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", "shimmer": "^1.2.1" } } diff --git a/plugins/node/opentelemetry-plugin-pg-pool/src/pg-pool.ts b/plugins/node/opentelemetry-plugin-pg-pool/src/pg-pool.ts index c894649944..de33d534c9 100644 --- a/plugins/node/opentelemetry-plugin-pg-pool/src/pg-pool.ts +++ b/plugins/node/opentelemetry-plugin-pg-pool/src/pg-pool.ts @@ -15,7 +15,7 @@ */ import { BasePlugin } from '@opentelemetry/core'; -import { CanonicalCode, SpanKind } from '@opentelemetry/api'; +import { StatusCode, SpanKind } from '@opentelemetry/api'; import { AttributeNames } from './enums'; import * as shimmer from 'shimmer'; import * as pgPoolTypes from 'pg-pool'; @@ -100,7 +100,6 @@ export class PostgresPoolPlugin extends BasePlugin { .then((result: any) => { // Return a pass-along promise which ends the span and then goes to user's orig resolvers return new Promise((resolve, _) => { - span.setStatus({ code: CanonicalCode.OK }); span.end(); resolve(result); }); @@ -108,7 +107,7 @@ export class PostgresPoolPlugin extends BasePlugin { .catch((error: Error) => { return new Promise((_, reject) => { span.setStatus({ - code: CanonicalCode.UNKNOWN, + code: StatusCode.ERROR, message: error.message, }); span.end(); diff --git a/plugins/node/opentelemetry-plugin-pg-pool/src/utils.ts b/plugins/node/opentelemetry-plugin-pg-pool/src/utils.ts index c9f8a773bb..119e2824e9 100644 --- a/plugins/node/opentelemetry-plugin-pg-pool/src/utils.ts +++ b/plugins/node/opentelemetry-plugin-pg-pool/src/utils.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Span, CanonicalCode } from '@opentelemetry/api'; +import { Span, StatusCode } from '@opentelemetry/api'; import { PgPoolOptionsParams, PgPoolCallback, PgPoolExtended } from './types'; export function getJDBCString(params: PgPoolOptionsParams) { @@ -33,11 +33,9 @@ export function patchCallback(span: Span, cb: PgPoolCallback): PgPoolCallback { ) { if (err) { span.setStatus({ - code: CanonicalCode.UNKNOWN, + code: StatusCode.ERROR, message: err.message, }); - } else if (res) { - span.setStatus({ code: CanonicalCode.OK }); } span.end(); cb.call(this, err, res, done); diff --git a/plugins/node/opentelemetry-plugin-pg-pool/test/pg-pool.test.ts b/plugins/node/opentelemetry-plugin-pg-pool/test/pg-pool.test.ts index c76bac4631..bd338f65ec 100644 --- a/plugins/node/opentelemetry-plugin-pg-pool/test/pg-pool.test.ts +++ b/plugins/node/opentelemetry-plugin-pg-pool/test/pg-pool.test.ts @@ -16,7 +16,7 @@ import { Attributes, - CanonicalCode, + StatusCode, context, Span, SpanKind, @@ -73,15 +73,15 @@ const DEFAULT_PG_ATTRIBUTES = { [AttributeNames.DB_USER]: CONFIG.user, }; -const okStatus: Status = { - code: CanonicalCode.OK, +const unsetStatus: Status = { + code: StatusCode.UNSET, }; const runCallbackTest = ( parentSpan: Span, attributes: Attributes, events: TimedEvent[], - status: Status = okStatus, + status: Status = unsetStatus, spansLength = 1, spansIndex = 0 ) => { @@ -97,11 +97,12 @@ describe('pg-pool@2.x', () => { let contextManager: AsyncHooksContextManager; const provider = new BasicTracerProvider(); const logger = new NoopLogger(); - const testPostgres = process.env.RUN_POSTGRES_TESTS; // For CI: assumes local postgres db is already available + const testPostgres = process.env.RUN_POSTGRES_TESTS; // For CI: + // assumes local postgres db is already available const testPostgresLocally = process.env.RUN_POSTGRES_TESTS_LOCAL; // For local: spins up local postgres db via docker const shouldTest = testPostgres || testPostgresLocally; // Skips these tests if false (default) - before(function (done) { + before(function () { if (!shouldTest) { // this.skip() workaround // https://github.com/mochajs/mocha/issues/2683#issuecomment-375629901 @@ -113,7 +114,6 @@ describe('pg-pool@2.x', () => { if (testPostgresLocally) { testUtils.startDocker('postgres'); } - done(); }); after(done => { @@ -161,11 +161,11 @@ describe('pg-pool@2.x', () => { const span = provider.getTracer('test-pg-pool').startSpan('test span'); await provider.getTracer('test-pg-pool').withSpan(span, async () => { const client = await pool.connect(); - runCallbackTest(span, pgPoolattributes, events, okStatus, 1, 0); + runCallbackTest(span, pgPoolattributes, events, unsetStatus, 1, 0); assert.ok(client, 'pool.connect() returns a promise'); try { await client.query('SELECT NOW()'); - runCallbackTest(span, pgAttributes, events, okStatus, 2, 1); + runCallbackTest(span, pgAttributes, events, unsetStatus, 2, 1); } finally { client.release(); } @@ -197,14 +197,28 @@ describe('pg-pool@2.x', () => { throw new Error('No client received'); } assert.ok(client); - runCallbackTest(parentSpan, pgPoolattributes, events, okStatus, 1, 0); + runCallbackTest( + parentSpan, + pgPoolattributes, + events, + unsetStatus, + 1, + 0 + ); client.query('SELECT NOW()', (err, ret) => { release(); if (err) { return done(err); } assert.ok(ret); - runCallbackTest(parentSpan, pgAttributes, events, okStatus, 2, 1); + runCallbackTest( + parentSpan, + pgAttributes, + events, + unsetStatus, + 2, + 1 + ); done(); }); }); @@ -227,8 +241,8 @@ describe('pg-pool@2.x', () => { const span = provider.getTracer('test-pg-pool').startSpan('test span'); await provider.getTracer('test-pg-pool').withSpan(span, async () => { const result = await pool.query('SELECT NOW()'); - runCallbackTest(span, pgPoolattributes, events, okStatus, 2, 0); - runCallbackTest(span, pgAttributes, events, okStatus, 2, 1); + runCallbackTest(span, pgPoolattributes, events, unsetStatus, 2, 0); + runCallbackTest(span, pgAttributes, events, unsetStatus, 2, 1); assert.ok(result, 'pool.query() returns a promise'); }); }); @@ -251,8 +265,15 @@ describe('pg-pool@2.x', () => { if (err) { return done(err); } - runCallbackTest(parentSpan, pgPoolattributes, events, okStatus, 2, 0); - runCallbackTest(parentSpan, pgAttributes, events, okStatus, 2, 1); + runCallbackTest( + parentSpan, + pgPoolattributes, + events, + unsetStatus, + 2, + 0 + ); + runCallbackTest(parentSpan, pgAttributes, events, unsetStatus, 2, 1); done(); }); assert.strictEqual(resNoPromise, undefined, 'No promise is returned'); diff --git a/plugins/node/opentelemetry-plugin-pg/package.json b/plugins/node/opentelemetry-plugin-pg/package.json index 03df2b319e..ce368e54de 100644 --- a/plugins/node/opentelemetry-plugin-pg/package.json +++ b/plugins/node/opentelemetry-plugin-pg/package.json @@ -46,10 +46,10 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "0.12.0", - "@opentelemetry/node": "0.12.0", + "@opentelemetry/context-async-hooks": "^0.13.0", + "@opentelemetry/node": "^0.13.0", "@opentelemetry/test-utils": "^0.11.0", - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/tracing": "^0.13.0", "@types/mocha": "7.0.2", "@types/node": "14.0.27", "@types/pg": "7.14.4", @@ -68,8 +68,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", "shimmer": "^1.2.1" } } diff --git a/plugins/node/opentelemetry-plugin-pg/src/pg.ts b/plugins/node/opentelemetry-plugin-pg/src/pg.ts index a8a97a6024..19e0a55516 100644 --- a/plugins/node/opentelemetry-plugin-pg/src/pg.ts +++ b/plugins/node/opentelemetry-plugin-pg/src/pg.ts @@ -15,7 +15,7 @@ */ import { BasePlugin, isWrapped } from '@opentelemetry/core'; -import { CanonicalCode, Span } from '@opentelemetry/api'; +import { StatusCode, Span } from '@opentelemetry/api'; import * as pgTypes from 'pg'; import * as shimmer from 'shimmer'; import { @@ -138,7 +138,6 @@ export class PostgresPlugin extends BasePlugin { .then((result: unknown) => { // Return a pass-along promise which ends the span and then goes to user's orig resolvers return new Promise(resolve => { - span.setStatus({ code: CanonicalCode.OK }); span.end(); resolve(result); }); @@ -146,7 +145,7 @@ export class PostgresPlugin extends BasePlugin { .catch((error: Error) => { return new Promise((_, reject) => { span.setStatus({ - code: CanonicalCode.UNKNOWN, + code: StatusCode.ERROR, message: error.message, }); span.end(); diff --git a/plugins/node/opentelemetry-plugin-pg/src/utils.ts b/plugins/node/opentelemetry-plugin-pg/src/utils.ts index b7da07d8cc..d47e89c7fb 100644 --- a/plugins/node/opentelemetry-plugin-pg/src/utils.ts +++ b/plugins/node/opentelemetry-plugin-pg/src/utils.ts @@ -16,7 +16,7 @@ import { Span, - CanonicalCode, + StatusCode, Tracer, SpanKind, PluginConfig, @@ -152,9 +152,8 @@ export function handleInvalidQuery( const span = pgStartSpan(tracer, this, PostgresPlugin.BASE_SPAN_NAME); try { result = originalQuery.apply(this, args as never); - span.setStatus({ code: CanonicalCode.OK }); // this will never happen, but set a status anyways } catch (e) { - span.setStatus({ code: CanonicalCode.UNKNOWN, message: e.message }); + span.setStatus({ code: StatusCode.ERROR, message: e.message }); throw e; } finally { span.end(); @@ -173,11 +172,9 @@ export function patchCallback( ) { if (err) { span.setStatus({ - code: CanonicalCode.UNKNOWN, + code: StatusCode.ERROR, message: err.message, }); - } else if (res) { - span.setStatus({ code: CanonicalCode.OK }); } span.end(); cb.call(this, err, res); diff --git a/plugins/node/opentelemetry-plugin-pg/test/pg.test.ts b/plugins/node/opentelemetry-plugin-pg/test/pg.test.ts index fd5b9375fd..4447dc9e8a 100644 --- a/plugins/node/opentelemetry-plugin-pg/test/pg.test.ts +++ b/plugins/node/opentelemetry-plugin-pg/test/pg.test.ts @@ -16,7 +16,7 @@ import { Attributes, - CanonicalCode, + StatusCode, context, Span, SpanKind, @@ -57,18 +57,18 @@ const DEFAULT_ATTRIBUTES = { [AttributeNames.DB_USER]: CONFIG.user, }; -const okStatus: Status = { - code: CanonicalCode.OK, +const unsetStatus: Status = { + code: StatusCode.UNSET, }; -const unknownStatus: Status = { - code: CanonicalCode.UNKNOWN, +const errorStatus: Status = { + code: StatusCode.ERROR, }; const runCallbackTest = ( span: Span | null, attributes: Attributes, events: TimedEvent[], - status: Status = okStatus, + status: Status = unsetStatus, spansLength = 1, spansIndex = 0 ) => { @@ -147,7 +147,7 @@ describe('pg@7.x', () => { assertPgError, 'pg should throw when no args provided' ); - runCallbackTest(null, DEFAULT_ATTRIBUTES, [], unknownStatus); + runCallbackTest(null, DEFAULT_ATTRIBUTES, [], errorStatus); memoryExporter.reset(); assert.doesNotThrow( @@ -159,7 +159,7 @@ describe('pg@7.x', () => { ...DEFAULT_ATTRIBUTES, }, [], - unknownStatus + errorStatus ); }), 'pg should not throw when invalid config args are provided' diff --git a/plugins/node/opentelemetry-plugin-redis/package.json b/plugins/node/opentelemetry-plugin-redis/package.json index 6dede4e1ac..749706ee26 100644 --- a/plugins/node/opentelemetry-plugin-redis/package.json +++ b/plugins/node/opentelemetry-plugin-redis/package.json @@ -43,11 +43,11 @@ "access": "public" }, "devDependencies": { - "@opentelemetry/context-async-hooks": "0.12.0", - "@opentelemetry/node": "0.12.0", - "@opentelemetry/semantic-conventions": "0.12.0", + "@opentelemetry/context-async-hooks": "^0.13.0", + "@opentelemetry/node": "^0.13.0", + "@opentelemetry/semantic-conventions": "^0.13.0", "@opentelemetry/test-utils": "^0.11.0", - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/tracing": "^0.13.0", "@types/mocha": "7.0.2", "@types/node": "14.0.27", "@types/redis": "2.8.25", @@ -66,8 +66,8 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", "shimmer": "^1.2.1" } } diff --git a/plugins/node/opentelemetry-plugin-redis/src/utils.ts b/plugins/node/opentelemetry-plugin-redis/src/utils.ts index bee33d287b..d6b3f44897 100644 --- a/plugins/node/opentelemetry-plugin-redis/src/utils.ts +++ b/plugins/node/opentelemetry-plugin-redis/src/utils.ts @@ -15,7 +15,7 @@ */ import type * as redisTypes from 'redis'; -import { Tracer, SpanKind, Span, CanonicalCode } from '@opentelemetry/api'; +import { Tracer, SpanKind, Span, StatusCode } from '@opentelemetry/api'; import { RedisCommand, RedisPluginClientTypes } from './types'; import { EventEmitter } from 'events'; import { RedisPlugin } from './redis'; @@ -27,11 +27,9 @@ import { const endSpan = (span: Span, err?: Error | null) => { if (err) { span.setStatus({ - code: CanonicalCode.UNKNOWN, + code: StatusCode.ERROR, message: err.message, }); - } else { - span.setStatus({ code: CanonicalCode.OK }); } span.end(); }; diff --git a/plugins/node/opentelemetry-plugin-redis/test/redis.test.ts b/plugins/node/opentelemetry-plugin-redis/test/redis.test.ts index ecc62248f0..5d28408fab 100644 --- a/plugins/node/opentelemetry-plugin-redis/test/redis.test.ts +++ b/plugins/node/opentelemetry-plugin-redis/test/redis.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CanonicalCode, context, SpanKind, Status } from '@opentelemetry/api'; +import { StatusCode, context, SpanKind, Status } from '@opentelemetry/api'; import { NoopLogger } from '@opentelemetry/core'; import { NodeTracerProvider } from '@opentelemetry/node'; import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks'; @@ -47,8 +47,8 @@ const DEFAULT_ATTRIBUTES = { [GeneralAttribute.NET_PEER_ADDRESS]: URL, }; -const okStatus: Status = { - code: CanonicalCode.OK, +const unsetStatus: Status = { + code: StatusCode.UNSET, }; describe('redis@2.x', () => { @@ -194,7 +194,7 @@ describe('redis@2.x', () => { SpanKind.CLIENT, attributes, [], - okStatus + unsetStatus ); testUtils.assertPropagation(endedSpans[0], span); done(); diff --git a/plugins/web/opentelemetry-plugin-document-load/package.json b/plugins/web/opentelemetry-plugin-document-load/package.json index e01ac0d22b..76dd12e607 100644 --- a/plugins/web/opentelemetry-plugin-document-load/package.json +++ b/plugins/web/opentelemetry-plugin-document-load/package.json @@ -72,10 +72,10 @@ "webpack-merge": "5.0.9" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", - "@opentelemetry/semantic-conventions": "^0.12.0", - "@opentelemetry/tracing": "^0.12.0", - "@opentelemetry/web": "^0.12.0" + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", + "@opentelemetry/semantic-conventions": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", + "@opentelemetry/web": "^0.13.0" } } diff --git a/plugins/web/opentelemetry-plugin-document-load/src/documentLoad.ts b/plugins/web/opentelemetry-plugin-document-load/src/documentLoad.ts index 2cd3242051..b8e64e3a4f 100644 --- a/plugins/web/opentelemetry-plugin-document-load/src/documentLoad.ts +++ b/plugins/web/opentelemetry-plugin-document-load/src/documentLoad.ts @@ -18,8 +18,8 @@ import { context, PluginConfig, propagation, + setActiveSpan, Span, - SpanOptions, } from '@opentelemetry/api'; import { BasePlugin, @@ -78,7 +78,7 @@ export class DocumentLoad extends BasePlugin { ) as PerformanceResourceTiming[]; if (resources) { resources.forEach(resource => { - this._initResourceSpan(resource, { parent: rootSpan }); + this._initResourceSpan(resource, rootSpan); }); } } @@ -199,17 +199,17 @@ export class DocumentLoad extends BasePlugin { /** * Creates and ends a span with network information about resource added as timed events * @param resource - * @param spanOptions + * @param parentSpan */ private _initResourceSpan( resource: PerformanceResourceTiming, - spanOptions: SpanOptions = {} + parentSpan: Span ) { const span = this._startSpan( AttributeNames.RESOURCE_FETCH, PTN.FETCH_START, resource, - spanOptions + parentSpan ); if (span) { span.setAttribute(HttpAttribute.HTTP_URL, resource.name); @@ -223,13 +223,13 @@ export class DocumentLoad extends BasePlugin { * @param spanName name of span * @param performanceName name of performance entry for time start * @param entries - * @param spanOptions + * @param parentSpan */ private _startSpan( spanName: string, performanceName: string, entries: PerformanceEntries, - spanOptions: SpanOptions = {} + parentSpan?: Span ): Span | undefined { if ( hasKey(entries, performanceName) && @@ -237,13 +237,10 @@ export class DocumentLoad extends BasePlugin { ) { const span = this._tracer.startSpan( spanName, - Object.assign( - {}, - { - startTime: entries[performanceName], - }, - spanOptions - ) + { + startTime: entries[performanceName], + }, + parentSpan ? setActiveSpan(context.active(), parentSpan) : undefined ); span.setAttribute(AttributeNames.COMPONENT, this.component); return span; diff --git a/plugins/web/opentelemetry-plugin-react-load/package.json b/plugins/web/opentelemetry-plugin-react-load/package.json index b5451fabae..4282ad29cf 100644 --- a/plugins/web/opentelemetry-plugin-react-load/package.json +++ b/plugins/web/opentelemetry-plugin-react-load/package.json @@ -51,6 +51,7 @@ "@types/shimmer": "1.0.1", "@types/sinon": "9.0.4", "@types/webpack-env": "1.15.2", + "@opentelemetry/propagator-b3": "^0.13.0", "babel-loader": "8.1.0", "codecov": "3.7.0", "gts": "2.0.2", @@ -81,12 +82,12 @@ "react": "^16.13.1 || ^17.0.0" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/context-zone": "^0.12.0", - "@opentelemetry/core": "^0.12.0", - "@opentelemetry/semantic-conventions": "^0.12.0", - "@opentelemetry/tracing": "^0.12.0", - "@opentelemetry/web": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/context-zone": "^0.13.0", + "@opentelemetry/core": "^0.13.0", + "@opentelemetry/semantic-conventions": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", + "@opentelemetry/web": "^0.13.0", "shimmer": "^1.2.1" } } diff --git a/plugins/web/opentelemetry-plugin-react-load/src/BaseOpenTelemetryComponent.ts b/plugins/web/opentelemetry-plugin-react-load/src/BaseOpenTelemetryComponent.ts index 1c6f96588a..0ddc40a13d 100644 --- a/plugins/web/opentelemetry-plugin-react-load/src/BaseOpenTelemetryComponent.ts +++ b/plugins/web/opentelemetry-plugin-react-load/src/BaseOpenTelemetryComponent.ts @@ -75,16 +75,22 @@ export class BaseOpenTelemetryComponent extends React.Component { * If parent span is undefined, just the child is created. * @param react React component currently being instrumented * @param name Name of span + * @param parentSpan parent span */ private _createSpanWithParent( react: React.Component, name: string, - parent: api.Span + parentSpan: api.Span ): api.Span { - return BaseOpenTelemetryComponent._tracer.startSpan(name, { - attributes: this._getAttributes(react), - parent, - }); + return BaseOpenTelemetryComponent._tracer.startSpan( + name, + { + attributes: this._getAttributes(react), + }, + parentSpan + ? api.setActiveSpan(api.context.active(), parentSpan) + : undefined + ); } /** diff --git a/plugins/web/opentelemetry-plugin-react-load/test/BaseOpenTelemetryComponent.test.ts b/plugins/web/opentelemetry-plugin-react-load/test/BaseOpenTelemetryComponent.test.ts index a5d2f291a3..6a061a8dad 100644 --- a/plugins/web/opentelemetry-plugin-react-load/test/BaseOpenTelemetryComponent.test.ts +++ b/plugins/web/opentelemetry-plugin-react-load/test/BaseOpenTelemetryComponent.test.ts @@ -15,7 +15,8 @@ */ import { context, Logger, propagation, trace } from '@opentelemetry/api'; -import { ConsoleLogger, B3Propagator, isWrapped } from '@opentelemetry/core'; +import { ConsoleLogger, isWrapped } from '@opentelemetry/core'; +import { B3Propagator } from '@opentelemetry/propagator-b3'; import { BasicTracerProvider, SimpleSpanProcessor, diff --git a/plugins/web/opentelemetry-plugin-user-interaction/package.json b/plugins/web/opentelemetry-plugin-user-interaction/package.json index 900108e2d5..d83ed0f666 100644 --- a/plugins/web/opentelemetry-plugin-user-interaction/package.json +++ b/plugins/web/opentelemetry-plugin-user-interaction/package.json @@ -43,17 +43,16 @@ }, "devDependencies": { "@babel/core": "7.11.1", - "@opentelemetry/context-base": "0.12.0", - "@opentelemetry/context-zone-peer-dep": "0.12.0", - "@opentelemetry/plugin-xml-http-request": "0.12.0", - "@opentelemetry/tracing": "0.12.0", + "@opentelemetry/context-base": "^0.13.0", + "@opentelemetry/context-zone-peer-dep": "^0.13.0", + "@opentelemetry/instrumentation-xml-http-request": "^0.13.0", + "@opentelemetry/tracing": "^0.13.0", "@types/jquery": "3.5.1", "@types/mocha": "7.0.2", "@types/node": "14.0.27", "@types/shimmer": "1.0.1", "@types/sinon": "9.0.4", "@types/webpack-env": "1.15.2", - "@types/zone.js": "0.5.12", "babel-loader": "8.1.0", "codecov": "3.7.2", "gts": "2.0.2", @@ -81,9 +80,9 @@ "zone.js": "0.10.3" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0", - "@opentelemetry/web": "^0.12.0", + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0", + "@opentelemetry/web": "^0.13.0", "shimmer": "^1.2.1" }, "peerDependencies": { diff --git a/plugins/web/opentelemetry-plugin-user-interaction/src/userInteraction.ts b/plugins/web/opentelemetry-plugin-user-interaction/src/userInteraction.ts index ec5cdd9908..748bb34e10 100644 --- a/plugins/web/opentelemetry-plugin-user-interaction/src/userInteraction.ts +++ b/plugins/web/opentelemetry-plugin-user-interaction/src/userInteraction.ts @@ -104,17 +104,22 @@ export class UserInteractionPlugin extends BasePlugin { } const xpath = getElementXPath(element, true); try { - const span = this._tracer.startSpan(eventName, { - parent: parentSpan, - attributes: { - [AttributeNames.COMPONENT]: this.component, - [AttributeNames.EVENT_TYPE]: eventName, - [AttributeNames.TARGET_ELEMENT]: element.tagName, - [AttributeNames.TARGET_XPATH]: xpath, - [AttributeNames.HTTP_URL]: window.location.href, - [AttributeNames.HTTP_USER_AGENT]: navigator.userAgent, + const span = this._tracer.startSpan( + eventName, + { + attributes: { + [AttributeNames.COMPONENT]: this.component, + [AttributeNames.EVENT_TYPE]: eventName, + [AttributeNames.TARGET_ELEMENT]: element.tagName, + [AttributeNames.TARGET_XPATH]: xpath, + [AttributeNames.HTTP_URL]: window.location.href, + [AttributeNames.HTTP_USER_AGENT]: navigator.userAgent, + }, }, - }); + parentSpan + ? api.setActiveSpan(api.context.active(), parentSpan) + : undefined + ); this._spansData.set(span, { taskCount: 0, diff --git a/plugins/web/opentelemetry-plugin-user-interaction/test/userInteraction.nozone.test.ts b/plugins/web/opentelemetry-plugin-user-interaction/test/userInteraction.nozone.test.ts index 3b19aee9d7..07ae45eff7 100644 --- a/plugins/web/opentelemetry-plugin-user-interaction/test/userInteraction.nozone.test.ts +++ b/plugins/web/opentelemetry-plugin-user-interaction/test/userInteraction.nozone.test.ts @@ -17,7 +17,7 @@ const originalSetTimeout = window.setTimeout; import { context } from '@opentelemetry/api'; import { isWrapped, LogLevel } from '@opentelemetry/core'; -import { XMLHttpRequestPlugin } from '@opentelemetry/plugin-xml-http-request'; +import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request'; import { ZoneContextManager } from '@opentelemetry/context-zone-peer-dep'; import * as tracing from '@opentelemetry/tracing'; import { WebTracerProvider } from '@opentelemetry/web'; @@ -69,7 +69,7 @@ describe('UserInteractionPlugin', () => { webTracerProvider = new WebTracerProvider({ logLevel: LogLevel.ERROR, - plugins: [userInteractionPlugin, new XMLHttpRequestPlugin()], + plugins: [userInteractionPlugin, new XMLHttpRequestInstrumentation()], }); dummySpanExporter = new DummySpanExporter(); diff --git a/plugins/web/opentelemetry-plugin-user-interaction/test/userInteraction.test.ts b/plugins/web/opentelemetry-plugin-user-interaction/test/userInteraction.test.ts index 7a222c8cc5..3748df69a1 100644 --- a/plugins/web/opentelemetry-plugin-user-interaction/test/userInteraction.test.ts +++ b/plugins/web/opentelemetry-plugin-user-interaction/test/userInteraction.test.ts @@ -18,7 +18,7 @@ import { context } from '@opentelemetry/api'; import { ROOT_CONTEXT } from '@opentelemetry/context-base'; import { ZoneContextManager } from '@opentelemetry/context-zone-peer-dep'; import { isWrapped, LogLevel } from '@opentelemetry/core'; -import { XMLHttpRequestPlugin } from '@opentelemetry/plugin-xml-http-request'; +import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request'; import * as tracing from '@opentelemetry/tracing'; import { WebTracerProvider } from '@opentelemetry/web'; import * as assert from 'assert'; @@ -68,7 +68,7 @@ describe('UserInteractionPlugin', () => { userInteractionPlugin = new UserInteractionPlugin(); webTracerProvider = new WebTracerProvider({ logLevel: LogLevel.ERROR, - plugins: [userInteractionPlugin, new XMLHttpRequestPlugin()], + plugins: [userInteractionPlugin, new XMLHttpRequestInstrumentation()], }); dummySpanExporter = new DummySpanExporter(); exportSpy = sandbox.stub(dummySpanExporter, 'export'); diff --git a/propagators/opentelemetry-propagator-grpc-census-binary/package.json b/propagators/opentelemetry-propagator-grpc-census-binary/package.json index 52bf2bdaf3..a5db7247e3 100644 --- a/propagators/opentelemetry-propagator-grpc-census-binary/package.json +++ b/propagators/opentelemetry-propagator-grpc-census-binary/package.json @@ -58,7 +58,7 @@ "typescript": "3.9.7" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0" + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0" } } diff --git a/propagators/opentelemetry-propagator-grpc-census-binary/src/GrpcCensusPropagator.ts b/propagators/opentelemetry-propagator-grpc-census-binary/src/GrpcCensusPropagator.ts index 8f8030bf26..2af7a96ac7 100644 --- a/propagators/opentelemetry-propagator-grpc-census-binary/src/GrpcCensusPropagator.ts +++ b/propagators/opentelemetry-propagator-grpc-census-binary/src/GrpcCensusPropagator.ts @@ -17,9 +17,9 @@ import { Context, getParentSpanContext, - GetterFunction, setExtractedSpanContext, - SetterFunction, + TextMapGetter, + TextMapSetter, TextMapPropagator, } from '@opentelemetry/api'; import { BinaryTraceContext } from './BinaryTraceContext'; @@ -66,7 +66,7 @@ export class GrpcCensusPropagator implements TextMapPropagator { * @param setter - setter function that sets the correct key in * the carrier */ - inject(context: Context, carrier: unknown, setter: SetterFunction) { + inject(context: Context, carrier: unknown, setter: TextMapSetter) { const spanContext = getParentSpanContext(context); if (!spanContext) return; @@ -82,7 +82,10 @@ export class GrpcCensusPropagator implements TextMapPropagator { if (carrier && encodedContext) { // Set the gRPC header (carrier will be of type grpc.Metadata) - setter(carrier, GRPC_TRACE_KEY, encodedContext); + // @TODO FIX ME once this is resolved + // https://github.com/open-telemetry/opentelemetry-specification/issues/437 + setter.set(carrier, GRPC_TRACE_KEY, encodedContext as any); + // setter.set(carrier, GRPC_TRACE_KEY, encodedContext); } } } @@ -99,12 +102,19 @@ export class GrpcCensusPropagator implements TextMapPropagator { * key in the carrier * @returns Extracted context if successful, otherwise the input context */ - extract(context: Context, carrier: unknown, getter: GetterFunction): Context { + extract(context: Context, carrier: unknown, getter: TextMapGetter): Context { if (carrier) { // Get the gRPC header (carrier will be of type grpc.Metadata and // getter actually returns an Array so we use the zero-th element if // it exists) - const values = getter(carrier, GRPC_TRACE_KEY) as Array; + + // @TODO FIX ME once this is resolved + // https://github.com/open-telemetry/opentelemetry-specification/issues/437 + const values = (getter.get( + carrier, + GRPC_TRACE_KEY + ) as unknown) as Array; + // const values = getter.get(carrier, GRPC_TRACE_KEY) as Array; const metadataValue = values.length > 0 ? values[0] : null; if (!metadataValue) { @@ -135,4 +145,8 @@ export class GrpcCensusPropagator implements TextMapPropagator { return context; } + + fields(): string[] { + return [GRPC_TRACE_KEY]; + } } diff --git a/propagators/opentelemetry-propagator-grpc-census-binary/test/GrpcCensusPropagator.test.ts b/propagators/opentelemetry-propagator-grpc-census-binary/test/GrpcCensusPropagator.test.ts index 93bc8e4b39..a5b44d9aa0 100644 --- a/propagators/opentelemetry-propagator-grpc-census-binary/test/GrpcCensusPropagator.test.ts +++ b/propagators/opentelemetry-propagator-grpc-census-binary/test/GrpcCensusPropagator.test.ts @@ -19,6 +19,8 @@ import { ROOT_CONTEXT, setExtractedSpanContext, SpanContext, + TextMapGetter, + TextMapSetter, TraceFlags, } from '@opentelemetry/api'; import * as assert from 'assert'; @@ -46,7 +48,9 @@ describe('GrpcCensusPropagator', () => { censusPropagator.inject( setExtractedSpanContext(ROOT_CONTEXT, spanContext), metadata, - (metadata, k, v) => metadata.set(k, v as MetadataValue) + makeSetter((metadata: any, k: any, v: any) => + metadata.set(k, v as MetadataValue) + ) ); const value = metadata.getMap()[GRPC_TRACE_KEY] as Buffer; @@ -67,7 +71,9 @@ describe('GrpcCensusPropagator', () => { censusPropagator.inject( setExtractedSpanContext(ROOT_CONTEXT, spanContext), metadata, - (metadata, k, v) => metadata.set(k, v as MetadataValue) + makeSetter((metadata: any, k: any, v: any) => + metadata.set(k, v as MetadataValue) + ) ); const value = metadata.getMap()[GRPC_TRACE_KEY] as Buffer; @@ -88,7 +94,9 @@ describe('GrpcCensusPropagator', () => { censusPropagator.inject( setExtractedSpanContext(ROOT_CONTEXT, emptySpanContext), metadata, - (metadata, k, v) => metadata.set(k, v as MetadataValue) + makeSetter((metadata: any, k: any, v: any) => + metadata.set(k, v as MetadataValue) + ) ); const value = metadata.getMap()[GRPC_TRACE_KEY] as Buffer; @@ -96,8 +104,12 @@ describe('GrpcCensusPropagator', () => { }); it('should not inject when context has no parent', () => { - censusPropagator.inject(ROOT_CONTEXT, metadata, (metadata, k, v) => - metadata.set(k, v as MetadataValue) + censusPropagator.inject( + ROOT_CONTEXT, + metadata, + makeSetter((metadata: any, k: any, v: any) => + metadata.set(k, v as MetadataValue) + ) ); const value = metadata.getMap()[GRPC_TRACE_KEY] as Buffer; @@ -114,7 +126,9 @@ describe('GrpcCensusPropagator', () => { // cast to any so that undefined traceFlags can be used for coverage setExtractedSpanContext(ROOT_CONTEXT, spanContext as any), metadata, - (metadata, k, v) => metadata.set(k, v as MetadataValue) + makeSetter((metadata: any, k: any, v: any) => + metadata.set(k, v as MetadataValue) + ) ); const value = metadata.getMap()[GRPC_TRACE_KEY] as Buffer; @@ -130,7 +144,9 @@ describe('GrpcCensusPropagator', () => { censusPropagator.inject( setExtractedSpanContext(ROOT_CONTEXT, emptySpanContext), null, - (metadata, k, v) => metadata.set(k, v as MetadataValue) + makeSetter((metadata: any, k: any, v: any) => + metadata.set(k, v as MetadataValue) + ) ); const value = metadata.getMap()[GRPC_TRACE_KEY] as Buffer; @@ -145,9 +161,7 @@ describe('GrpcCensusPropagator', () => { metadata.set(GRPC_TRACE_KEY, encoded); const extractedSpanContext = getParentSpanContext( - censusPropagator.extract(ROOT_CONTEXT, metadata, (carrier, key) => - carrier.get(key) - ) + censusPropagator.extract(ROOT_CONTEXT, metadata, makeGetter()) ); assert.deepStrictEqual(extractedSpanContext, { @@ -167,9 +181,7 @@ describe('GrpcCensusPropagator', () => { metadata.set(GRPC_TRACE_KEY, encoded); const extractedSpanContext = getParentSpanContext( - censusPropagator.extract(ROOT_CONTEXT, metadata, (carrier, key) => - carrier.get(key) - ) + censusPropagator.extract(ROOT_CONTEXT, metadata, makeGetter()) ); assert.deepStrictEqual(extractedSpanContext, { @@ -182,9 +194,7 @@ describe('GrpcCensusPropagator', () => { it('should return undefined when header is not set', () => { const extractedSpanContext = getParentSpanContext( - censusPropagator.extract(ROOT_CONTEXT, metadata, (carrier, key) => - carrier.get(key) - ) + censusPropagator.extract(ROOT_CONTEXT, metadata, makeGetter()) ); assert.deepStrictEqual(extractedSpanContext, undefined); }); @@ -198,9 +208,7 @@ describe('GrpcCensusPropagator', () => { metadata.set(GRPC_TRACE_KEY, encoded); const extractedSpanContext = getParentSpanContext( - censusPropagator.extract(ROOT_CONTEXT, metadata, (carrier, key) => - carrier.get(key) - ) + censusPropagator.extract(ROOT_CONTEXT, metadata, makeGetter()) ); assert.deepStrictEqual(extractedSpanContext, undefined); @@ -220,9 +228,7 @@ describe('GrpcCensusPropagator', () => { metadata.set(GRPC_TRACE_KEY, encoded); const extractedSpanContext = getParentSpanContext( - censusPropagator.extract(ROOT_CONTEXT, metadata, (carrier, key) => - carrier.get(key) - ) + censusPropagator.extract(ROOT_CONTEXT, metadata, makeGetter()) ); assert.deepStrictEqual(extractedSpanContext, undefined); @@ -230,13 +236,17 @@ describe('GrpcCensusPropagator', () => { it('should return undefined when carrier is null', () => { const extractedSpanContext = getParentSpanContext( - censusPropagator.extract(ROOT_CONTEXT, null, (carrier, key) => - carrier.get(key) - ) + censusPropagator.extract(ROOT_CONTEXT, metadata, makeGetter()) ); assert.deepStrictEqual(extractedSpanContext, undefined); }); }); + + describe('fields', () => { + it('should return valid values', () => { + assert.deepStrictEqual(censusPropagator.fields(), ['grpc-trace-bin']); + }); + }); }); function getUnsampledSpanEncodedArray() { @@ -272,3 +282,29 @@ function getUnsampledSpanEncodedArray() { 0, ]); } + +function makeSetter(callback: (metadata: any, k: any, v: any) => void) { + const setter: TextMapSetter = { + set(carrier, key, value) { + callback(carrier, key, value); + }, + }; + return setter; +} + +function makeGetter() { + const getter: TextMapGetter = { + get(carrier, key) { + if (carrier) { + return carrier.get(key); + } + }, + keys(carrier) { + if (carrier == null) { + return []; + } + return Object.keys(carrier); + }, + }; + return getter; +} diff --git a/propagators/opentelemetry-propagator-jaeger/package.json b/propagators/opentelemetry-propagator-jaeger/package.json index 8371c11506..972f500590 100644 --- a/propagators/opentelemetry-propagator-jaeger/package.json +++ b/propagators/opentelemetry-propagator-jaeger/package.json @@ -57,7 +57,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", - "mocha": "6.2.3", + "mocha": "7.2.0", "nyc": "15.1.0", "rimraf": "3.0.2", "sinon": "9.0.2", @@ -70,7 +70,7 @@ "webpack": "4.43.0" }, "dependencies": { - "@opentelemetry/api": "^0.12.0", - "@opentelemetry/core": "^0.12.0" + "@opentelemetry/api": "^0.13.0", + "@opentelemetry/core": "^0.13.0" } } diff --git a/propagators/opentelemetry-propagator-jaeger/src/JaegerHttpTracePropagator.ts b/propagators/opentelemetry-propagator-jaeger/src/JaegerHttpTracePropagator.ts index 9b3138eb63..1e69dfefff 100644 --- a/propagators/opentelemetry-propagator-jaeger/src/JaegerHttpTracePropagator.ts +++ b/propagators/opentelemetry-propagator-jaeger/src/JaegerHttpTracePropagator.ts @@ -16,13 +16,13 @@ import { Context, - TextMapPropagator, - SpanContext, - TraceFlags, - SetterFunction, - GetterFunction, getParentSpanContext, setExtractedSpanContext, + SpanContext, + TraceFlags, + TextMapGetter, + TextMapPropagator, + TextMapSetter, } from '@opentelemetry/api'; export const UBER_TRACE_ID_HEADER = 'uber-trace-id'; @@ -52,7 +52,7 @@ export class JaegerHttpTracePropagator implements TextMapPropagator { this._jaegerTraceHeader = customTraceHeader || UBER_TRACE_ID_HEADER; } - inject(context: Context, carrier: unknown, setter: SetterFunction) { + inject(context: Context, carrier: unknown, setter: TextMapSetter) { const spanContext = getParentSpanContext(context); if (!spanContext) return; @@ -60,15 +60,15 @@ export class JaegerHttpTracePropagator implements TextMapPropagator { 16 )}`; - setter( + setter.set( carrier, this._jaegerTraceHeader, `${spanContext.traceId}:${spanContext.spanId}:0:${traceFlags}` ); } - extract(context: Context, carrier: unknown, getter: GetterFunction): Context { - const uberTraceIdHeader = getter(carrier, this._jaegerTraceHeader); + extract(context: Context, carrier: unknown, getter: TextMapGetter): Context { + const uberTraceIdHeader = getter.get(carrier, this._jaegerTraceHeader); const uberTraceId = Array.isArray(uberTraceIdHeader) ? uberTraceIdHeader[0] : uberTraceIdHeader; diff --git a/propagators/opentelemetry-propagator-jaeger/test/JaegerHttpTracePropagator.test.ts b/propagators/opentelemetry-propagator-jaeger/test/JaegerHttpTracePropagator.test.ts index 29503ba4c2..d7853a9d80 100644 --- a/propagators/opentelemetry-propagator-jaeger/test/JaegerHttpTracePropagator.test.ts +++ b/propagators/opentelemetry-propagator-jaeger/test/JaegerHttpTracePropagator.test.ts @@ -15,12 +15,13 @@ */ import { - defaultGetter, - defaultSetter, + defaultTextMapGetter, + defaultTextMapSetter, getParentSpanContext, ROOT_CONTEXT, setExtractedSpanContext, SpanContext, + TextMapGetter, TraceFlags, } from '@opentelemetry/api'; import * as assert from 'assert'; @@ -52,7 +53,7 @@ describe('JaegerHttpTracePropagator', () => { jaegerHttpTracePropagator.inject( setExtractedSpanContext(ROOT_CONTEXT, spanContext), carrier, - defaultSetter + defaultTextMapSetter ); assert.deepStrictEqual( carrier[UBER_TRACE_ID_HEADER], @@ -70,7 +71,7 @@ describe('JaegerHttpTracePropagator', () => { customJaegerHttpTracePropagator.inject( setExtractedSpanContext(ROOT_CONTEXT, spanContext), carrier, - defaultSetter + defaultTextMapSetter ); assert.deepStrictEqual( carrier[customHeader], @@ -84,7 +85,11 @@ describe('JaegerHttpTracePropagator', () => { carrier[UBER_TRACE_ID_HEADER] = 'd4cda95b652f4a1592b449d5929fda1b:6e0c63257de34c92:0:01'; const extractedSpanContext = getParentSpanContext( - jaegerHttpTracePropagator.extract(ROOT_CONTEXT, carrier, defaultGetter) + jaegerHttpTracePropagator.extract( + ROOT_CONTEXT, + carrier, + defaultTextMapGetter + ) ); assert.deepStrictEqual(extractedSpanContext, { @@ -99,7 +104,11 @@ describe('JaegerHttpTracePropagator', () => { carrier[UBER_TRACE_ID_HEADER] = '9c41e35aeb6d1272:45fd2a9709dadcf1:a13699e3fb724f40:1'; const extractedSpanContext = getParentSpanContext( - jaegerHttpTracePropagator.extract(ROOT_CONTEXT, carrier, defaultGetter) + jaegerHttpTracePropagator.extract( + ROOT_CONTEXT, + carrier, + defaultTextMapGetter + ) ); assert.deepStrictEqual(extractedSpanContext, { @@ -114,7 +123,11 @@ describe('JaegerHttpTracePropagator', () => { carrier[UBER_TRACE_ID_HEADER] = 'ac1f3dc3c2c0b06e%3A5ac292c4a11a163e%3Ac086aaa825821068%3A1'; const extractedSpanContext = getParentSpanContext( - jaegerHttpTracePropagator.extract(ROOT_CONTEXT, carrier, defaultGetter) + jaegerHttpTracePropagator.extract( + ROOT_CONTEXT, + carrier, + defaultTextMapGetter + ) ); assert.deepStrictEqual(extractedSpanContext, { @@ -132,7 +145,7 @@ describe('JaegerHttpTracePropagator', () => { customJaegerHttpTracePropagator.extract( ROOT_CONTEXT, carrier, - defaultGetter + defaultTextMapGetter ) ); @@ -150,7 +163,7 @@ describe('JaegerHttpTracePropagator', () => { jaegerHttpTracePropagator.extract( ROOT_CONTEXT, carrier, - defaultGetter + defaultTextMapGetter ) ), undefined @@ -164,7 +177,7 @@ describe('JaegerHttpTracePropagator', () => { jaegerHttpTracePropagator.extract( ROOT_CONTEXT, carrier, - defaultGetter + defaultTextMapGetter ) ), undefined @@ -189,17 +202,17 @@ describe('JaegerHttpTracePropagator', () => { const ctx1 = jaegerHttpTracePropagator.extract( ROOT_CONTEXT, carrier, - (c, k) => 1 // not a number + makeGetter(1) // not a number ); const ctx2 = jaegerHttpTracePropagator.extract( ROOT_CONTEXT, carrier, - (c, k) => [] // empty array + makeGetter([]) // empty array ); const ctx3 = jaegerHttpTracePropagator.extract( ROOT_CONTEXT, carrier, - (c, k) => undefined // missing value + makeGetter(undefined) // missing value ); assert.ok(ctx1 === ROOT_CONTEXT); @@ -207,3 +220,18 @@ describe('JaegerHttpTracePropagator', () => { assert.ok(ctx3 === ROOT_CONTEXT); }); }); + +function makeGetter(value: any) { + const getter: TextMapGetter = { + get(carrier, key) { + return value; + }, + keys(carrier) { + if (carrier == null) { + return []; + } + return Object.keys(carrier); + }, + }; + return getter; +}