From 3df811154402b398932f8fb38806dff56840a619 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Mon, 2 Mar 2026 13:17:17 -0800 Subject: [PATCH 1/4] feat(auto-instrumentations-node, instrumentation-fastify)!: remove instrumentation-fastify In favor of "@fastify/otel". instr-fastify had been deprecated back in Jan 2025 and planned for removal in Jun 2025. Refs: https://github.com/open-telemetry/opentelemetry-js-contrib/pull/2651 --- archive/instrumentation-fastify/README.md | 13 + package-lock.json | 539 ---------------- packages/auto-instrumentations-node/README.md | 9 +- .../auto-instrumentations-node/package.json | 1 - .../auto-instrumentations-node/src/utils.ts | 3 - .../test/utils.test.ts | 3 +- packages/instrumentation-fastify/.tav.yml | 15 - packages/instrumentation-fastify/CHANGELOG.md | 596 ------------------ packages/instrumentation-fastify/LICENSE | 201 ------ packages/instrumentation-fastify/README.md | 101 --- packages/instrumentation-fastify/package.json | 63 -- .../instrumentation-fastify/src/constants.ts | 35 - .../src/enums/AttributeNames.ts | 32 - packages/instrumentation-fastify/src/index.ts | 27 - .../src/instrumentation.ts | 304 --------- .../src/internal-types.ts | 25 - packages/instrumentation-fastify/src/types.ts | 39 -- packages/instrumentation-fastify/src/utils.ts | 134 ---- .../test/fixtures/use-fastify.mjs | 51 -- .../test/instrumentation.test.ts | 595 ----------------- .../instrumentation-fastify/tsconfig.json | 11 - scripts/lint-readme.js | 3 - 22 files changed, 19 insertions(+), 2781 deletions(-) create mode 100644 archive/instrumentation-fastify/README.md delete mode 100644 packages/instrumentation-fastify/.tav.yml delete mode 100644 packages/instrumentation-fastify/CHANGELOG.md delete mode 100644 packages/instrumentation-fastify/LICENSE delete mode 100644 packages/instrumentation-fastify/README.md delete mode 100644 packages/instrumentation-fastify/package.json delete mode 100644 packages/instrumentation-fastify/src/constants.ts delete mode 100644 packages/instrumentation-fastify/src/enums/AttributeNames.ts delete mode 100644 packages/instrumentation-fastify/src/index.ts delete mode 100644 packages/instrumentation-fastify/src/instrumentation.ts delete mode 100644 packages/instrumentation-fastify/src/internal-types.ts delete mode 100644 packages/instrumentation-fastify/src/types.ts delete mode 100644 packages/instrumentation-fastify/src/utils.ts delete mode 100644 packages/instrumentation-fastify/test/fixtures/use-fastify.mjs delete mode 100644 packages/instrumentation-fastify/test/instrumentation.test.ts delete mode 100644 packages/instrumentation-fastify/tsconfig.json diff --git a/archive/instrumentation-fastify/README.md b/archive/instrumentation-fastify/README.md new file mode 100644 index 0000000000..32511ae036 --- /dev/null +++ b/archive/instrumentation-fastify/README.md @@ -0,0 +1,13 @@ +# OpenTelemetry Fastify Instrumentation for Node.js + +> [!IMPORTANT] +> The `@opentelemetry/instrumentation-fastify` package has been **removed** (Mar 2026), +> both from this git repository and from the `@opentelemetry/auto-instrumentations-node` package. +> It had been [deprecated](https://github.com/open-telemetry/opentelemetry-js-contrib/pull/2651) Jan 2025, in favor of the [`@fastify/otel`](https://www.npmjs.com/package/@fastify/otel) package, maintained by the Fastify authors. +> Please check [the offical Fastify plugin's README.md](https://github.com/fastify/otel?tab=readme-ov-file#usage) for instructions on how to use `@fastify/otel`. +> +> The last published version of `@opentelemetry/instrumentation-fastify` was version v0.56.0 (29 Jan 2026). +> For reference, the [source code for the last version can be found here][last-code]. + +[last-code]: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-fastify-v0.56.0/packages/instrumentation-fastify/ + diff --git a/package-lock.json b/package-lock.json index ea6e0cc4c3..dae0c99704 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5228,315 +5228,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@fastify/ajv-compiler": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz", - "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "fast-uri": "^2.0.0" - } - }, - "node_modules/@fastify/ajv-compiler/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@fastify/ajv-compiler/node_modules/ajv/node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/@fastify/ajv-compiler/node_modules/fast-uri": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", - "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/@fastify/error": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@fastify/express": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@fastify/express/-/express-3.0.0.tgz", - "integrity": "sha512-Ug6aulXCUiHgMyrHVYQqnQbGdsAV0aTad6nZxbOr6w3QjKn1mdQS3Kyzvc+I0xMjZ9yIyMUWHSooHgZ0l7nOng==", - "dev": true, - "license": "MIT", - "dependencies": { - "express": "^4.17.1", - "fastify-plugin": "^4.0.0" - } - }, - "node_modules/@fastify/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@fastify/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@fastify/express/node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@fastify/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@fastify/express/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@fastify/express/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@fastify/express/node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/@fastify/express/node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "statuses": "~2.0.2", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@fastify/express/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@fastify/express/node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@fastify/express/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@fastify/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@fastify/express/node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/@fastify/express/node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/@fastify/express/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@fastify/fast-json-stringify-compiler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-json-stringify": "^5.7.0" - } - }, - "node_modules/@fastify/merge-json-schemas": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", - "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - } - }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -9528,10 +9219,6 @@ "resolved": "packages/instrumentation-express", "link": true }, - "node_modules/@opentelemetry/instrumentation-fastify": { - "resolved": "packages/instrumentation-fastify", - "link": true - }, "node_modules/@opentelemetry/instrumentation-fetch": { "version": "0.212.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fetch/-/instrumentation-fetch-0.212.0.tgz", @@ -13849,13 +13536,6 @@ "node": ">=6.5" } }, - "node_modules/abstract-logging": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", - "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", - "dev": true, - "license": "MIT" - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -14649,17 +14329,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/avvio": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz", - "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@fastify/error": "^3.3.0", - "fastq": "^1.17.1" - } - }, "node_modules/aws-ssl-profiles": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", @@ -18898,13 +18567,6 @@ "node": "> 0.1.90" } }, - "node_modules/fast-content-type-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==", - "dev": true, - "license": "MIT" - }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", @@ -18963,88 +18625,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-json-stringify": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", - "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@fastify/merge-json-schemas": "^0.1.0", - "ajv": "^8.10.0", - "ajv-formats": "^3.0.1", - "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.1.0", - "json-schema-ref-resolver": "^1.0.1", - "rfdc": "^1.2.0" - } - }, - "node_modules/fast-json-stringify/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fast-json-stringify/node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/fast-json-stringify/node_modules/ajv/node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fast-json-stringify/node_modules/fast-uri": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", - "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", @@ -19125,38 +18705,6 @@ "node": ">= 4.9.1" } }, - "node_modules/fastify": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.18.0.tgz", - "integrity": "sha512-L5o/2GEkBastQ3HV0dtKo7SUZ497Z1+q4fcqAoPyq6JCQ/8zdk1JQEoTQwnBWCp+EmA7AQa6mxNqSAEhzP0RwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@fastify/ajv-compiler": "^3.5.0", - "@fastify/error": "^3.2.0", - "@fastify/fast-json-stringify-compiler": "^4.3.0", - "abstract-logging": "^2.0.1", - "avvio": "^8.2.1", - "fast-content-type-parse": "^1.0.0", - "fast-json-stringify": "^5.7.0", - "find-my-way": "^7.6.0", - "light-my-request": "^5.9.1", - "pino": "^8.12.0", - "process-warning": "^2.2.0", - "proxy-addr": "^2.0.7", - "rfdc": "^1.3.0", - "secure-json-parse": "^2.5.0", - "semver": "^7.5.0", - "tiny-lru": "^11.0.1" - } - }, - "node_modules/fastify-plugin": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", - "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", @@ -22506,16 +22054,6 @@ "dev": true, "license": "(AFL-2.1 OR BSD-3-Clause)" }, - "node_modules/json-schema-ref-resolver": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", - "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - } - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -24134,25 +23672,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/light-my-request": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.14.0.tgz", - "integrity": "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "cookie": "^0.7.0", - "process-warning": "^3.0.0", - "set-cookie-parser": "^2.4.1" - } - }, - "node_modules/light-my-request/node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", - "dev": true, - "license": "MIT" - }, "node_modules/lighthouse-logger": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", @@ -29687,13 +29206,6 @@ "node": ">=8" } }, - "node_modules/process-warning": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz", - "integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==", - "dev": true, - "license": "MIT" - }, "node_modules/proggy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proggy/-/proggy-3.0.0.tgz", @@ -31629,13 +31141,6 @@ "dev": true, "license": "MIT" }, - "node_modules/secure-json-parse": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/seed-random": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", @@ -31873,13 +31378,6 @@ "dev": true, "license": "ISC" }, - "node_modules/set-cookie-parser": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", - "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", - "dev": true, - "license": "MIT" - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -34286,16 +33784,6 @@ "dev": true, "license": "MIT" }, - "node_modules/tiny-lru": { - "version": "11.4.7", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.4.7.tgz", - "integrity": "sha512-w/Te7uMUVeH0CR8vZIjr+XiN41V+30lkDdK+NRIDCUYKKuL9VcmaUEmaPISuwGhLlrTGh5yu18lENtR9axSxYw==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -36684,7 +36172,6 @@ "@opentelemetry/instrumentation-dataloader": "^0.29.0", "@opentelemetry/instrumentation-dns": "^0.55.0", "@opentelemetry/instrumentation-express": "^0.60.0", - "@opentelemetry/instrumentation-fastify": "^0.56.0", "@opentelemetry/instrumentation-fs": "^0.31.0", "@opentelemetry/instrumentation-generic-pool": "^0.55.0", "@opentelemetry/instrumentation-graphql": "^0.60.0", @@ -37150,32 +36637,6 @@ "@opentelemetry/api": "^1.3.0" } }, - "packages/instrumentation-fastify": { - "name": "@opentelemetry/instrumentation-fastify", - "version": "0.56.0", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.212.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "devDependencies": { - "@fastify/express": "^3.0.0", - "@opentelemetry/api": "^1.3.0", - "@opentelemetry/context-async-hooks": "^2.0.0", - "@opentelemetry/contrib-test-utils": "^0.59.0", - "@opentelemetry/instrumentation-http": "^0.212.0", - "@opentelemetry/sdk-trace-base": "^2.0.0", - "@opentelemetry/sdk-trace-node": "^2.0.0", - "fastify": "4.18.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, "packages/instrumentation-fs": { "name": "@opentelemetry/instrumentation-fs", "version": "0.31.0", diff --git a/packages/auto-instrumentations-node/README.md b/packages/auto-instrumentations-node/README.md index b7da0a441d..c7cfb4b526 100644 --- a/packages/auto-instrumentations-node/README.md +++ b/packages/auto-instrumentations-node/README.md @@ -177,10 +177,6 @@ registerInstrumentations({ - [@opentelemetry/instrumentation-dataloader](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-dataloader) - [@opentelemetry/instrumentation-dns](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-dns) - [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-express) -- [@opentelemetry/instrumentation-fastify](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-fastify) (deprecated, default disabled) - - This component is **deprecated** in favor of the official instrumentation package [`@fastify/otel`](https://www.npmjs.com/package/@fastify/otel), maintained by the Fastify authors. - - Please see [the offical plugin's README.md](https://github.com/fastify/otel?tab=readme-ov-file#usage) for instructions on how to use `@fastify/otel`. - - This component will be removed on June 30, 2025 - [@opentelemetry/instrumentation-fs](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-fs) (default disabled) - [@opentelemetry/instrumentation-generic-pool](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-generic-pool) - [@opentelemetry/instrumentation-graphql](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-graphql) @@ -210,6 +206,11 @@ registerInstrumentations({ - [@opentelemetry/instrumentation-undici](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-undici) - [@opentelemetry/instrumentation-winston](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-winston) +### Removed instrumentations + +- [`@opentelemetry/instrumentation-fastify`](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/archive/instrumentation-fastify) was removed Mar 2026. It had been deprecated (and default disabled) Jan 2025, in favor of the [`@fastify/otel`](https://www.npmjs.com/package/@fastify/otel) instrumentation package, maintained by the Fastify authors. + - Please see [the offical plugin's README.md](https://github.com/fastify/otel?tab=readme-ov-file#usage) for instructions on how to use `@fastify/otel`. + ## Useful links - For more information on OpenTelemetry, visit: diff --git a/packages/auto-instrumentations-node/package.json b/packages/auto-instrumentations-node/package.json index 4394582caf..0c3906fb2c 100644 --- a/packages/auto-instrumentations-node/package.json +++ b/packages/auto-instrumentations-node/package.json @@ -54,7 +54,6 @@ "@opentelemetry/instrumentation-dataloader": "^0.29.0", "@opentelemetry/instrumentation-dns": "^0.55.0", "@opentelemetry/instrumentation-express": "^0.60.0", - "@opentelemetry/instrumentation-fastify": "^0.56.0", "@opentelemetry/instrumentation-fs": "^0.31.0", "@opentelemetry/instrumentation-generic-pool": "^0.55.0", "@opentelemetry/instrumentation-graphql": "^0.60.0", diff --git a/packages/auto-instrumentations-node/src/utils.ts b/packages/auto-instrumentations-node/src/utils.ts index 8d99113eb4..0aa1079849 100644 --- a/packages/auto-instrumentations-node/src/utils.ts +++ b/packages/auto-instrumentations-node/src/utils.ts @@ -27,7 +27,6 @@ import { CucumberInstrumentation } from '@opentelemetry/instrumentation-cucumber import { DataloaderInstrumentation } from '@opentelemetry/instrumentation-dataloader'; import { DnsInstrumentation } from '@opentelemetry/instrumentation-dns'; import { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'; -import { FastifyInstrumentation } from '@opentelemetry/instrumentation-fastify'; import { FsInstrumentation } from '@opentelemetry/instrumentation-fs'; import { GenericPoolInstrumentation } from '@opentelemetry/instrumentation-generic-pool'; import { GraphQLInstrumentation } from '@opentelemetry/instrumentation-graphql'; @@ -106,7 +105,6 @@ const InstrumentationMap = { '@opentelemetry/instrumentation-dataloader': DataloaderInstrumentation, '@opentelemetry/instrumentation-dns': DnsInstrumentation, '@opentelemetry/instrumentation-express': ExpressInstrumentation, - '@opentelemetry/instrumentation-fastify': FastifyInstrumentation, '@opentelemetry/instrumentation-fs': FsInstrumentation, '@opentelemetry/instrumentation-generic-pool': GenericPoolInstrumentation, '@opentelemetry/instrumentation-graphql': GraphQLInstrumentation, @@ -141,7 +139,6 @@ const InstrumentationMap = { const defaultExcludedInstrumentations = [ '@opentelemetry/instrumentation-fs', - '@opentelemetry/instrumentation-fastify', ]; // Config types inferred automatically from the first argument of the constructor diff --git a/packages/auto-instrumentations-node/test/utils.test.ts b/packages/auto-instrumentations-node/test/utils.test.ts index c83fc520c0..b0f6aaf2f4 100644 --- a/packages/auto-instrumentations-node/test/utils.test.ts +++ b/packages/auto-instrumentations-node/test/utils.test.ts @@ -30,8 +30,7 @@ describe('utils', () => { ).filter(depName => { return ( depName.startsWith('@opentelemetry/instrumentation-') && - depName !== '@opentelemetry/instrumentation-fs' && - depName !== '@opentelemetry/instrumentation-fastify' + depName !== '@opentelemetry/instrumentation-fs' ); }); diff --git a/packages/instrumentation-fastify/.tav.yml b/packages/instrumentation-fastify/.tav.yml deleted file mode 100644 index 608eb2dbf8..0000000000 --- a/packages/instrumentation-fastify/.tav.yml +++ /dev/null @@ -1,15 +0,0 @@ -"fastify": - - versions: - include: "^4.0.0" - mode: max-7 - commands: npm run test - - versions: - include: ">=5 <6" - mode: max-7 - commands: npm run test - peerDependencies: "@fastify/express@4.0.1" - node: '>=20' - -# Fastify versions after 4.18.0 require a typescript greater than 4.4.4. -"typescript": - - versions: "4.7.4" diff --git a/packages/instrumentation-fastify/CHANGELOG.md b/packages/instrumentation-fastify/CHANGELOG.md deleted file mode 100644 index c810c9a62e..0000000000 --- a/packages/instrumentation-fastify/CHANGELOG.md +++ /dev/null @@ -1,596 +0,0 @@ - -# Changelog - -## [0.56.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.55.0...instrumentation-fastify-v0.56.0) (2026-02-16) - - -### Features - -* **deps:** update deps matching "@opentelemetry/*" ([#3383](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3383)) ([d3ac785](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d3ac7851d69d0781c2c631012937a73998b744e1)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.58.0 to ^0.59.0 - -## [0.55.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.54.0...instrumentation-fastify-v0.55.0) (2026-01-21) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#3353](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3353)) ([a56bbdc](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/a56bbdc34a5015b0a5fdcb7522f168cfc90ba95c)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.57.0 to ^0.58.0 - -## [0.54.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.53.1...instrumentation-fastify-v0.54.0) (2026-01-14) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#3332](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3332)) ([925a150](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/925a1501ce0d082c6845d36e7c964e625ee3de0c)) -* **deps:** update deps matching '@opentelemetry/*' ([#3340](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3340)) ([2954943](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/29549434e7204b03d58635eb20352efee0e797d4)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.56.0 to ^0.57.0 - -## [0.53.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.53.0...instrumentation-fastify-v0.53.1) (2025-12-17) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.55.0 to ^0.56.0 - -## [0.53.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.52.0...instrumentation-fastify-v0.53.0) (2025-11-06) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#3210](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3210)) ([2d675d3](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/2d675d368a1b8df0599bc5f6462db535a225c0b6)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.54.0 to ^0.55.0 - -## [0.52.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.51.0...instrumentation-fastify-v0.52.0) (2025-10-21) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#3187](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3187)) ([ab96334](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/ab9633455794de79964e60775c804791d19259bc)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.53.0 to ^0.54.0 - -## [0.51.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.50.3...instrumentation-fastify-v0.51.0) (2025-10-06) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#3145](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3145)) ([704c716](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/704c7161f782590d7b644ab607b5f9c29cdfd63f)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.52.2 to ^0.53.0 - -## [0.50.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.50.2...instrumentation-fastify-v0.50.3) (2025-09-29) - - -### Bug Fixes - -* force new release-please PR ([#3123](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3123)) ([0dab838](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/0dab8383b5349e21a968fe2cedd8a6e2243f86d0)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.52.1 to ^0.52.2 - -## [0.50.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.50.1...instrumentation-fastify-v0.50.2) (2025-09-25) - - -### Bug Fixes - -* force new release-please PR ([#3098](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3098)) ([13c58e9](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/13c58e9ad77b266a03e34ffd4b61ab18c86f9d73)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.52.0 to ^0.52.1 - -## [0.50.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.50.0...instrumentation-fastify-v0.50.1) (2025-09-24) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.51.0 to ^0.52.0 - -## [0.50.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.49.0...instrumentation-fastify-v0.50.0) (2025-09-10) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#3034](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3034)) ([bee0a66](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/bee0a66ef825145fb1a9b172c3468ccf0c97a820)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.50.0 to ^0.51.0 - -## [0.49.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.48.0...instrumentation-fastify-v0.49.0) (2025-09-08) - - -### Features - -* **deps:** update otel deps ([#3027](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3027)) ([fd9e262](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/fd9e262fabf4e8fd8e246b8967892fa26442968a)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.49.0 to ^0.50.0 - -## [0.48.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.47.1...instrumentation-fastify-v0.48.0) (2025-07-09) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#2930](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2930)) ([e4ab2a9](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/e4ab2a932084016f9750bd09d3f9a469c44628ea)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.48.0 to ^0.49.0 - -## [0.47.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.47.0...instrumentation-fastify-v0.47.1) (2025-07-04) - - -### Bug Fixes - -* **deps:** update all patch versions ([#2832](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2832)) ([e45605d](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/e45605d0e70158b0ea868bc3c8acb65095d6d4d1)) - -## [0.47.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.46.0...instrumentation-fastify-v0.47.0) (2025-06-02) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#2871](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2871)) ([d33c6f2](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d33c6f232a3c5673e618fa62692d2d3bbfe4c0fc)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.47.0 to ^0.48.0 - -## [0.46.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.45.0...instrumentation-fastify-v0.46.0) (2025-05-15) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#2828](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2828)) ([59c2a4c](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/59c2a4c002992518da2d91b4ceb24f8479ad2346)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.46.0 to ^0.47.0 - -## [0.45.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.44.2...instrumentation-fastify-v0.45.0) (2025-03-18) - - -### ⚠ BREAKING CHANGES - -* chore!: Update to 2.x and 0.200.x @opentelemetry/* packages from opentelemetry-js.git per [2.x upgrade guide](https://github.com/open-telemetry/opentelemetry-js/blob/main/doc/upgrade-to-2.x.md) - * The minimum supported Node.js has been raised to ^18.19.0 || >=20.6.0. This means that support for Node.js 14 and 16 has been dropped. - * The minimum supported TypeScript version has been raised to 5.0.4. - * The compilation target for transpiled TypeScript has been raised to ES2022 (from ES2017). - -### Bug Fixes - -* **deps:** update otel core experimental to ^0.57.2 ([#2716](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2716)) ([d2a9a20](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d2a9a20f1cd8c46c842e18490a4eba36fd71c2da)) - - -### Miscellaneous Chores - -* update to JS SDK 2.x ([#2738](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2738)) ([7fb4ba3](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/7fb4ba3bc36dc616bd86375cfd225722b850d0d5)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.45.1 to ^0.46.0 - -## [0.44.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.44.1...instrumentation-fastify-v0.44.2) (2025-02-19) - - -### Bug Fixes - -* **deps:** update otel core experimental to ^0.57.1 ([#2687](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2687)) ([5e20fe2](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/5e20fe2f450a1be4ea100e8a6d196e33ccff0cda)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.45.0 to ^0.45.1 - -## [0.44.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.44.0...instrumentation-fastify-v0.44.1) (2025-01-20) - - -### Bug Fixes - -* **instrumentation-fastify:** add missing module export ([#2633](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2633)) ([1a6839b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/1a6839b00bfb116528e620c19f118d0a920c987f)) - -## [0.44.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.43.0...instrumentation-fastify-v0.44.0) (2024-12-18) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#2608](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2608)) ([aa46705](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/aa46705d2fd1bd5ee6d763ac8cd73a7630889d34)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.44.0 to ^0.45.0 - -## [0.43.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.42.0...instrumentation-fastify-v0.43.0) (2024-12-04) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#2582](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2582)) ([5df02cb](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/5df02cbb35681d2b5cce359dda7b023d7bf339f2)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.43.0 to ^0.44.0 - -## [0.42.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.41.0...instrumentation-fastify-v0.42.0) (2024-11-18) - - -### Features - -* **deps:** update deps matching '@opentelemetry/*' ([#2535](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2535)) ([5223a6c](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/5223a6ca10c5930cf2753271e1e670ae682d6d9c)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.42.0 to ^0.43.0 - -## [0.41.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.40.0...instrumentation-fastify-v0.41.0) (2024-10-25) - - -### Features - -* update "@opentelemetry/*" dependencies to 1.27.0/0.54.0 ([2822511](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/2822511a8acffb875ebd67ff2cf95980a9ddc01e)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.41.0 to ^0.42.0 - -## [0.40.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.39.0...instrumentation-fastify-v0.40.0) (2024-10-08) - - -### Features - -* **instrumentation-fastify:** Enable Fastify v5 ([#2460](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2460)) ([02a9fdb](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/02a9fdb60ce9cb05f77bb431811cd40b348c45f1)) - -## [0.39.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.38.0...instrumentation-fastify-v0.39.0) (2024-09-02) - - -### Features - -* update deps matching "@opentelemetry/" ([9fa058e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/9fa058ebb919de4e2a4e1af95b3c792c6ea962ac)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.40.0 to ^0.41.0 - -## [0.38.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.37.0...instrumentation-fastify-v0.38.0) (2024-07-03) - - -### ⚠ BREAKING CHANGES - -* standardize supported versions and set upper bound limit ([#2196](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2196)) - -### Bug Fixes - -* standardize supported versions and set upper bound limit ([#2196](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2196)) ([01c28ae](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/01c28ae016ed32f9968e52bc91e3e3700dcef82e)) - -## [0.37.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.36.1...instrumentation-fastify-v0.37.0) (2024-06-06) - - -### Features - -* update otel core dependencies ([#2257](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2257)) ([71c15d5](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/71c15d597276773c19c16c1117b8d151892e5366)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.39.0 to ^0.40.0 - -## [0.36.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.36.0...instrumentation-fastify-v0.36.1) (2024-05-02) - - -### Bug Fixes - -* remove unuseful patch message from instrumentations ([#2161](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2161)) ([34f56e0](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/34f56e0e28a0873b69a499c9e91798b19fea8e96)) - -## [0.36.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.35.0...instrumentation-fastify-v0.36.0) (2024-04-25) - - -### Features - -* **deps:** update otel-js to 0.51.0 ([80cbee7](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/80cbee73130c65c8ccd78384485a7be8d2a4a84b)) -* remove generic type from instrumentations ([80cbee7](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/80cbee73130c65c8ccd78384485a7be8d2a4a84b)) - - -### Bug Fixes - -* revert modifications to Apache license ([#2105](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2105)) ([4590c8d](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4590c8df184bbcb9bd67ce1111df9f25f865ccf2)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.38.0 to ^0.39.0 - -## [0.35.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.34.0...instrumentation-fastify-v0.35.0) (2024-04-03) - - -### Features - -* **deps:** update otel-js to 1.23.0/0.50.0 ([#2076](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2076)) ([d5f079b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d5f079b3992395dcfb3b791c9fdaeefd6d6526f8)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.37.0 to ^0.38.0 - -## [0.34.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.33.0...instrumentation-fastify-v0.34.0) (2024-03-06) - - -### Features - -* **deps:** update otel-js to 1.22.0/0.49.1 ([edc426b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/edc426b348bc5f45ff6816bcd5ea7473251a05df)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.36.0 to ^0.37.0 - -## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.6...instrumentation-fastify-v0.33.0) (2024-01-29) - - -### Features - -* **deps:** update otel-js to 1.21.0/0.48.0 ([9624486](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/96244869d0fe22e6006fa6ef5e54839e06afb99d)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.35.1 to ^0.36.0 - -## [0.32.6](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.5...instrumentation-fastify-v0.32.6) (2024-01-04) - - -### Bug Fixes - -* **deps:** update otel core experimental ([#1866](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1866)) ([9366543](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/9366543f5572e1e976ce176ddeb0b438f6c16c45)) - - -### Dependencies - -* The following workspace dependencies were updated - * devDependencies - * @opentelemetry/contrib-test-utils bumped from ^0.35.0 to ^0.35.1 - -## [0.32.5](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.4...instrumentation-fastify-v0.32.5) (2023-12-07) - - -### Bug Fixes - -* **instrumentation-fastify:** fix span attributes and avoid FSTDEP017 FastifyDeprecation warning for 404 request ([#1763](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1763)) ([18ae75c](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/18ae75c6004d66744ee99be68469843372c19d1e)) - -## [0.32.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.3...instrumentation-fastify-v0.32.4) (2023-11-13) - - -### Bug Fixes - -* **deps:** update otel core experimental to v0.45.0 ([#1779](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1779)) ([7348635](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/734863562c25cd0497aa3f51eccb2bf8bbd5e711)) -* **deps:** update otel core experimental to v0.45.1 ([#1781](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1781)) ([7f420e2](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/7f420e25a8d396c83fd38101088434210705e365)) -* **instrumentation-fastify:** do not wrap preClose and onRequestAbort hooks ([#1764](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1764)) ([de6156a](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/de6156aea1db7a7a018ad34f08cfc9f7ff7752b8)) - -## [0.32.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.2...instrumentation-fastify-v0.32.3) (2023-10-10) - - -### Bug Fixes - -* **deps:** update all patch versions ([#1687](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1687)) ([47301c0](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/47301c038e4dc7d24797cb0b8426033ecc0374e6)) -* **deps:** update otel core experimental to v0.43.0 ([#1676](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1676)) ([deb9aa4](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/deb9aa441dc7d2b0fd5ec11b41c934a1e93134fd)) -* **deps:** update otel core experimental to v0.44.0 ([#1725](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1725)) ([540a0d1](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/540a0d1ff5641522abba560d59a298084f786630)) -* **fastify:** Use plugin name for middleware span name ([#1680](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1680)) ([4503d3e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4503d3efe98c0b440582101df69a6df49a6cdb97)) -* **instrumentation-fastify:** add tav script ([#1710](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1710)) ([52dd42d](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/52dd42d4748f6aef43988e62f464d95b808a06a6)) -* Removed deprecated properties usage in Fastify instrumentation ([#1679](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1679)) ([d3328f8](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d3328f8f55c6e3e2e7405a8e499d50555e9bec1a)) - -## [0.32.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.1...instrumentation-fastify-v0.32.2) (2023-08-30) - - -### Bug Fixes - -* **fastify:** Make sure consturctor patching works with esm ([#1624](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1624)) ([67f66d2](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/67f66d2e0e8ea9f5d9b46819d4f736fa1e0666b6)) - -## [0.32.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.0...instrumentation-fastify-v0.32.1) (2023-08-14) - - -### Bug Fixes - -* **deps:** update otel core experimental to v0.41.2 ([#1628](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1628)) ([4f11245](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4f1124524aee565c3cfbf3975aa5d3d039377621)) -* **fastify:** readme option table format ([#1619](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1619)) ([3d6c7be](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/3d6c7beffd7c1cc0ef99c7560bc21e01db28b431)) -* Revert "feat(minification): Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545))" ([#1611](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1611)) ([e5bca5f](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/e5bca5fe5b27adc59c8de8fe4087d38b69d93bd4)) - -## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.4...instrumentation-fastify-v0.32.0) (2023-07-12) - - -### Features - -* **fastify:** Skip update HTTP's span name and update RpcMetadata's route instead ([#1569](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1569)) ([8d9687d](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/8d9687d89e4a80dbf2a5e8be6fb027ff20824593)) -* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) - - -### Bug Fixes - -* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) -* **instrumentation-fastify:** fix fastify typescript compilation issue ([#1556](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1556)) ([784a422](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/784a4225182037b4233aefb43c7a104eab1ac818)) - -## [0.31.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.3...instrumentation-fastify-v0.31.4) (2023-06-12) - - -### Bug Fixes - -* **deps:** update otel core experimental to ^0.40.0 ([#1527](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1527)) ([4e18a46](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4e18a46396eb2f06e86790dbbd68075c4c2dc83b)) - -## [0.31.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.2...instrumentation-fastify-v0.31.3) (2023-05-16) - - -### Bug Fixes - -* **deps:** update otel core experimental to ^0.39.1 ([#1493](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1493)) ([8ef95bc](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/8ef95bccc2d03302089f256f3d0ee091869b4c44)) -* **eslint-config:** replace gts with prettier and eslint ([#1439](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1439)) ([2571c37](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/2571c371be1b5738442200cab2415b6a04c32aab)) - -## [0.31.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.1...instrumentation-fastify-v0.31.2) (2023-04-25) - - -### Bug Fixes - -* **deps:** update otel core experimental to ^0.38.0 ([#1468](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1468)) ([565a2b2](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/565a2b2c6fde88af3f5401ef6a5a9643d0d66349)) - -## [0.31.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.0...instrumentation-fastify-v0.31.1) (2023-02-07) - - -### Bug Fixes - -* **deps:** update otel core experimental to ^0.35.1 ([#1358](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1358)) ([ff109b7](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/ff109b77928cc9a139a21c63d6b54399bb017fa4)) - -## [0.31.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.30.1...instrumentation-fastify-v0.31.0) (2022-11-16) - - -### Features - -* **fastify:** add requestHook support ([#1255](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1255)) ([c9923e3](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/c9923e3636649c67e5122531f164909b48dbb58d)) -* update experimental deps to `^0.34.0`, core deps to `^1.8.0`, api to `^1.3.0` ([#1278](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1278)) ([e9fe8e1](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/e9fe8e13e34f54e96c50525cadeb74ac048c5624)) - - -### Bug Fixes - -* **instrumentation-fastify:** stop using fastify types in public api ([#1267](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1267)) ([40515c3](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/40515c3dca81d1c177d71af2663fce3b8813bbf2)) - -## [0.30.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.30.0...instrumentation-fastify-v0.30.1) (2022-11-02) - - -### Bug Fixes - -* separate public and internal types for all instrumentations ([#1251](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1251)) ([e72ea58](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/e72ea58cfb888a90590970f63d3a042a8ea3aaf2)) - -## [0.30.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.29.0...instrumentation-fastify-v0.30.0) (2022-09-27) - - -### Features - -* **opentelemetry-instrumentation-fastify:** Support Fastify V4 also ([#1164](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1164)) ([d932d3e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d932d3edcbf41685ca0af546347450fa81444b4e)) - -## [0.29.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.28.0...instrumentation-fastify-v0.29.0) (2022-09-02) - - -### Features - -* update experimental Otel deps to ^0.31.0 ([#1096](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1096)) ([4c8843b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4c8843be14896d1159a622c07eb3a049401ccba1)) -* update experimental Otel deps to ^0.32.0 ([#1143](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1143)) ([6fb1911](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/6fb191139aed2ca763300dcf9adb51121a88f97e)) - -## [0.28.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.27.0...instrumentation-fastify-v0.28.0) (2022-06-08) - - -### Features - -* update core dependencies stable ^1.3.1 experimental ^0.29.2 ([141b155](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/141b155e344980b51264e26b26c117b2113bcef6)) - -## [0.27.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.26.0...instrumentation-fastify-v0.27.0) (2022-05-14) - - -### Features - -* add supported node versions for all packages ([#973](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/973)) ([baaacbd](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/baaacbdd35ca4baab0afae64647aa8c0380ee4b7)) -* use Otel SDK 1.2/0.28 ([#984](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/984)) ([098c2ed](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/098c2ed6f9c5ab7bd865685018c0777245aab3b7)) - -## [0.26.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.25.0...instrumentation-fastify-v0.26.0) (2022-03-02) - - -### Features - -* new fastify instrumentation ([#611](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/611)) ([77c215b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/77c215bdd7adb76c8934028458a2b7f28e041f37)) -* upstream mocha instrumentation testing plugin from ext-js [#621](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/621) ([#669](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/669)) ([a5170c4](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/a5170c494706a2bec3ba51e59966d0ca8a41d00e)) -* use latest instrumentation base ([#769](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/769)) ([7aff23e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/7aff23ebebbe209fa3b78c2e7f513c9cd2231be4)) - - -### Bug Fixes - -* fastify and browser autoinjection failed to compile ([#793](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/793)) ([c08efa8](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/c08efa82a38d3d5b4d0c51d712a39052317b9f74)) -* typo in fastify description ([#891](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/891)) ([adbd6dc](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/adbd6dcb0af6540a6d10b7e2ceaaf2c69a3e1146)) -* update some dev-deps in fastify instrumentation ([a20f77b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/a20f77b539d2a1eecc8a423d3b0381988e4734b8)) -* use localhost for services in CI ([#816](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/816)) ([f497313](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/f4973133e86549bbca301983085cc67788a10acd)) diff --git a/packages/instrumentation-fastify/LICENSE b/packages/instrumentation-fastify/LICENSE deleted file mode 100644 index 261eeb9e9f..0000000000 --- a/packages/instrumentation-fastify/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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 - - http://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. diff --git a/packages/instrumentation-fastify/README.md b/packages/instrumentation-fastify/README.md deleted file mode 100644 index 735a13c9f1..0000000000 --- a/packages/instrumentation-fastify/README.md +++ /dev/null @@ -1,101 +0,0 @@ -# OpenTelemetry Fastify Instrumentation for Node.js - -[![NPM Published Version][npm-img]][npm-url] -[![Apache License][license-image]][license-image] - -> [!IMPORTANT] -> This component is **deprecated** in favor of the official instrumentation package [`@fastify/otel`](https://www.npmjs.com/package/@fastify/otel), maintained by the Fastify authors. -> Please check [the offical Fastify plugin's README.md](https://github.com/fastify/otel?tab=readme-ov-file#usage) for instructions on how to use `@fastify/otel`. -> -> We will stop publishing new versions of `@opentelemetry/instrumentation-fastify` on June 30, 2025. - -This module provides automatic instrumentation for the [`fastify`](https://www.fastify.dev/) module, which may be loaded using the [`@opentelemetry/sdk-trace-node`](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node) package. - -Compatible with OpenTelemetry JS API and SDK `1.0+`. - -## Installation - -This instrumentation relies on HTTP calls to also be instrumented. Make sure you install and enable both, otherwise you will have spans that are not connected with each other. - -```bash -npm install --save @opentelemetry/instrumentation-http @opentelemetry/instrumentation-fastify -``` - -### Supported Versions - -- [`fastify`](https://www.npmjs.com/package/fastify) versions `>=3.0.0 <6` - -## Usage - -OpenTelemetry fastify Instrumentation allows the user to automatically collect trace data and export them to their backend of choice, to give observability to distributed systems. - -To load the instrumentation, specify it in the Node Tracer's configuration: - -```js -const { NodeTracerProvider } = require('@opentelemetry/node'); -const { registerInstrumentations } = require('@opentelemetry/instrumentation'); -const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http'); -const { FastifyInstrumentation } = require('@opentelemetry/instrumentation-fastify'); - -const provider = new NodeTracerProvider(); -provider.register(); - -registerInstrumentations({ - instrumentations: [ - // Fastify instrumentation expects HTTP layer to be instrumented - new HttpInstrumentation(), - new FastifyInstrumentation(), - ], -}); -``` - -See [examples/fastify](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/examples/fastify) for a short example. - -## Fastify Instrumentation Options - -| Options | Type | Example | Description | -|---------------|----------------------------------|-----------------------------|-------------------------------------------------------------------------------------------------------------| -| `requestHook` | `FastifyCustomAttributeFunction` | `(span, requestInfo) => {}` | Function for adding custom attributes to Fastify requests. Receives parameters: `Span, FastifyRequestInfo`. | - -### Using `requestHook` - -Instrumentation configuration accepts a custom "hook" function which will be called for every instrumented Fastify request. Custom attributes can be set on the span or run any custom logic per request. - -```javascript -import { FastifyInstrumentation } from "@opentelemetry/instrumentation-fastify" - -const fastifyInstrumentation = new FastifyInstrumentation({ - requestHook: function (span: Span, info: FastifyRequestInfo) { - span.setAttribute( - 'http.method', - info.request.method, - ) - } -}); -``` - -## Semantic Conventions - -This package uses `@opentelemetry/semantic-conventions` version `1.22+`, which implements Semantic Convention [Version 1.7.0](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.7.0/semantic_conventions/README.md) - -Attributes collected: - -| Attribute | Short Description | -|--------------|------------------------------------| -| `http.route` | The matched route (path template). | - -## Useful links - -- For more information on OpenTelemetry, visit: -- For more about OpenTelemetry JavaScript: -- For help or feedback on this project, join us in [GitHub Discussions][discussions-url] - -## License - -Apache 2.0 - See [LICENSE][license-url] for more information. - -[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions -[license-url]: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/LICENSE -[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat -[npm-url]: https://www.npmjs.com/package/@opentelemetry/instrumentation-fastify -[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Finstrumentation-fastify.svg diff --git a/packages/instrumentation-fastify/package.json b/packages/instrumentation-fastify/package.json deleted file mode 100644 index c2ec58ad31..0000000000 --- a/packages/instrumentation-fastify/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "@opentelemetry/instrumentation-fastify", - "version": "0.56.0", - "description": "OpenTelemetry instrumentation for `fastify` http web application framework", - "main": "build/src/index.js", - "types": "build/src/index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/open-telemetry/opentelemetry-js-contrib.git", - "directory": "packages/instrumentation-fastify" - }, - "scripts": { - "clean": "rimraf build/*", - "compile:with-dependencies": "nx run-many -t compile -p @opentelemetry/instrumentation-fastify", - "compile": "tsc -p .", - "lint:readme": "node ../../scripts/lint-readme.js", - "prepublishOnly": "npm run compile", - "test": "nyc --no-clean mocha 'test/**/*.test.ts'", - "test-all-versions": "tav", - "version:update": "node ../../scripts/version-update.js", - "watch": "tsc -w" - }, - "keywords": [ - "fastify", - "instrumentation", - "nodejs", - "opentelemetry", - "profiling", - "tracing" - ], - "author": "OpenTelemetry Authors", - "license": "Apache-2.0", - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "files": [ - "build/src/**/*.js", - "build/src/**/*.js.map", - "build/src/**/*.d.ts" - ], - "publishConfig": { - "access": "public" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - }, - "devDependencies": { - "@fastify/express": "^3.0.0", - "@opentelemetry/api": "^1.3.0", - "@opentelemetry/context-async-hooks": "^2.0.0", - "@opentelemetry/contrib-test-utils": "^0.59.0", - "@opentelemetry/instrumentation-http": "^0.212.0", - "@opentelemetry/sdk-trace-base": "^2.0.0", - "@opentelemetry/sdk-trace-node": "^2.0.0", - "fastify": "4.18.0" - }, - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.212.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-fastify#readme" -} diff --git a/packages/instrumentation-fastify/src/constants.ts b/packages/instrumentation-fastify/src/constants.ts deleted file mode 100644 index 4f2efd02d5..0000000000 --- a/packages/instrumentation-fastify/src/constants.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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. - */ - -export const spanRequestSymbol = Symbol( - 'opentelemetry.instrumentation.fastify.request_active_span' -); - -// The instrumentation creates a span for invocations of lifecycle hook handlers -// that take `(request, reply, ...[, done])` arguments. Currently this is all -// lifecycle hooks except `onRequestAbort`. -// https://fastify.dev/docs/latest/Reference/Hooks -export const hooksNamesToWrap = new Set([ - 'onTimeout', - 'onRequest', - 'preParsing', - 'preValidation', - 'preSerialization', - 'preHandler', - 'onSend', - 'onResponse', - 'onError', -]); diff --git a/packages/instrumentation-fastify/src/enums/AttributeNames.ts b/packages/instrumentation-fastify/src/enums/AttributeNames.ts deleted file mode 100644 index 3626fb8fab..0000000000 --- a/packages/instrumentation-fastify/src/enums/AttributeNames.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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. - */ - -export enum AttributeNames { - FASTIFY_NAME = 'fastify.name', - FASTIFY_TYPE = 'fastify.type', - HOOK_NAME = 'hook.name', - PLUGIN_NAME = 'plugin.name', -} - -export enum FastifyTypes { - MIDDLEWARE = 'middleware', - REQUEST_HANDLER = 'request_handler', -} - -export enum FastifyNames { - MIDDLEWARE = 'middleware', - REQUEST_HANDLER = 'request handler', -} diff --git a/packages/instrumentation-fastify/src/index.ts b/packages/instrumentation-fastify/src/index.ts deleted file mode 100644 index e4787dea25..0000000000 --- a/packages/instrumentation-fastify/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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. - */ - -export { FastifyInstrumentation } from './instrumentation'; -export { - AttributeNames, - FastifyNames, - FastifyTypes, -} from './enums/AttributeNames'; -export type { - FastifyCustomAttributeFunction, - FastifyInstrumentationConfig, - FastifyRequestInfo, -} from './types'; diff --git a/packages/instrumentation-fastify/src/instrumentation.ts b/packages/instrumentation-fastify/src/instrumentation.ts deleted file mode 100644 index 4ce655bcfd..0000000000 --- a/packages/instrumentation-fastify/src/instrumentation.ts +++ /dev/null @@ -1,304 +0,0 @@ -/* - * 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 { context, Attributes, SpanStatusCode, trace } from '@opentelemetry/api'; -import { getRPCMetadata, RPCType } from '@opentelemetry/core'; -import { - InstrumentationBase, - InstrumentationNodeModuleDefinition, - safeExecuteInTheMiddle, -} from '@opentelemetry/instrumentation'; -import { ATTR_HTTP_ROUTE } from '@opentelemetry/semantic-conventions'; -import type { - HookHandlerDoneFunction, - FastifyInstance, - FastifyRequest, - FastifyReply, - FastifyErrorCodes, -} from 'fastify'; -import { hooksNamesToWrap } from './constants'; -import { - AttributeNames, - FastifyNames, - FastifyTypes, -} from './enums/AttributeNames'; -import type { HandlerOriginal, PluginFastifyReply } from './internal-types'; -import type { FastifyInstrumentationConfig } from './types'; -import { - endSpan, - safeExecuteInTheMiddleMaybePromise, - startSpan, -} from './utils'; -/** @knipignore */ -import { PACKAGE_NAME, PACKAGE_VERSION } from './version'; - -export const ANONYMOUS_NAME = 'anonymous'; - -/** - * Fastify instrumentation for OpenTelemetry - * @deprecated This instrumentation is deprecated in favor of the official instrumentation package `@fastify/otel`, - * which is maintained by the fastify authors. - */ -export class FastifyInstrumentation extends InstrumentationBase { - constructor(config: FastifyInstrumentationConfig = {}) { - super(PACKAGE_NAME, PACKAGE_VERSION, config); - } - - init() { - return [ - new InstrumentationNodeModuleDefinition( - 'fastify', - ['>=3.0.0 <6'], - moduleExports => { - return this._patchConstructor(moduleExports); - } - ), - ]; - } - - private _hookOnRequest() { - const instrumentation = this; - return function onRequest( - request: FastifyRequest, - reply: FastifyReply, - done: HookHandlerDoneFunction - ) { - if (!instrumentation.isEnabled()) { - return done(); - } - instrumentation._wrap(reply, 'send', instrumentation._patchSend()); - - const anyRequest = request as any; - - const rpcMetadata = getRPCMetadata(context.active()); - const routeName = anyRequest.routeOptions - ? anyRequest.routeOptions.url // since fastify@4.10.0 - : request.routerPath; - if (routeName && rpcMetadata?.type === RPCType.HTTP) { - rpcMetadata.route = routeName; - } - done(); - }; - } - - private _wrapHandler( - pluginName: string, - hookName: string, - original: (...args: unknown[]) => Promise, - syncFunctionWithDone: boolean - ): () => Promise { - const instrumentation = this; - this._diag.debug('Patching fastify route.handler function'); - - return function (this: any, ...args: unknown[]): Promise { - if (!instrumentation.isEnabled()) { - return original.apply(this, args); - } - - const name = original.name || pluginName || ANONYMOUS_NAME; - const spanName = `${FastifyNames.MIDDLEWARE} - ${name}`; - - const reply = args[1] as PluginFastifyReply; - - const span = startSpan(reply, instrumentation.tracer, spanName, { - [AttributeNames.FASTIFY_TYPE]: FastifyTypes.MIDDLEWARE, - [AttributeNames.PLUGIN_NAME]: pluginName, - [AttributeNames.HOOK_NAME]: hookName, - }); - - const origDone = - syncFunctionWithDone && - (args[args.length - 1] as HookHandlerDoneFunction); - if (origDone) { - args[args.length - 1] = function ( - ...doneArgs: Parameters - ) { - endSpan(reply); - origDone.apply(this, doneArgs); - }; - } - - return context.with(trace.setSpan(context.active(), span), () => { - return safeExecuteInTheMiddleMaybePromise( - () => { - return original.apply(this, args); - }, - err => { - if (err instanceof Error) { - span.setStatus({ - code: SpanStatusCode.ERROR, - message: err.message, - }); - span.recordException(err); - } - // async hooks should end the span as soon as the promise is resolved - if (!syncFunctionWithDone) { - endSpan(reply); - } - } - ); - }); - }; - } - - private _wrapAddHook(): ( - original: FastifyInstance['addHook'] - ) => () => FastifyInstance { - const instrumentation = this; - this._diag.debug('Patching fastify server.addHook function'); - - return function ( - original: FastifyInstance['addHook'] - ): () => FastifyInstance { - return function wrappedAddHook(this: any, ...args: any) { - const name = args[0] as string; - const handler = args[1] as HandlerOriginal; - const pluginName = this.pluginName; - if (!hooksNamesToWrap.has(name)) { - return original.apply(this, args); - } - - const syncFunctionWithDone = - typeof args[args.length - 1] === 'function' && - handler.constructor.name !== 'AsyncFunction'; - - return original.apply(this, [ - name, - instrumentation._wrapHandler( - pluginName, - name, - handler, - syncFunctionWithDone - ), - ] as never); - }; - }; - } - - private _patchConstructor(moduleExports: { - fastify: () => FastifyInstance; - errorCodes: FastifyErrorCodes | undefined; - }): () => FastifyInstance { - const instrumentation = this; - - function fastify(this: FastifyInstance, ...args: any) { - const app: FastifyInstance = moduleExports.fastify.apply(this, args); - app.addHook('onRequest', instrumentation._hookOnRequest()); - app.addHook('preHandler', instrumentation._hookPreHandler()); - - instrumentation._wrap(app, 'addHook', instrumentation._wrapAddHook()); - - return app; - } - - if (moduleExports.errorCodes !== undefined) { - fastify.errorCodes = moduleExports.errorCodes; - } - fastify.fastify = fastify; - fastify.default = fastify; - return fastify; - } - - private _patchSend() { - const instrumentation = this; - this._diag.debug('Patching fastify reply.send function'); - - return function patchSend( - original: () => FastifyReply - ): () => FastifyReply { - return function send(this: FastifyReply, ...args: any) { - const maybeError: any = args[0]; - - if (!instrumentation.isEnabled()) { - return original.apply(this, args); - } - - return safeExecuteInTheMiddle( - () => { - return original.apply(this, args); - }, - err => { - if (!err && maybeError instanceof Error) { - err = maybeError; - } - endSpan(this, err); - } - ); - }; - }; - } - - private _hookPreHandler() { - const instrumentation = this; - this._diag.debug('Patching fastify preHandler function'); - - return function preHandler( - this: any, - request: FastifyRequest, - reply: FastifyReply, - done: HookHandlerDoneFunction - ) { - if (!instrumentation.isEnabled()) { - return done(); - } - const anyRequest = request as any; - - const handler = - anyRequest.routeOptions?.handler || anyRequest.context?.handler; - - const handlerName = handler?.name.startsWith('bound ') - ? handler.name.substring(6) - : handler?.name; - const spanName = `${FastifyNames.REQUEST_HANDLER} - ${ - handlerName || this.pluginName || ANONYMOUS_NAME - }`; - - const spanAttributes: Attributes = { - [AttributeNames.PLUGIN_NAME]: this.pluginName, - [AttributeNames.FASTIFY_TYPE]: FastifyTypes.REQUEST_HANDLER, - [ATTR_HTTP_ROUTE]: anyRequest.routeOptions - ? anyRequest.routeOptions.url // since fastify@4.10.0 - : request.routerPath, - }; - if (handlerName) { - spanAttributes[AttributeNames.FASTIFY_NAME] = handlerName; - } - const span = startSpan( - reply, - instrumentation.tracer, - spanName, - spanAttributes - ); - - const { requestHook } = instrumentation.getConfig(); - if (requestHook) { - safeExecuteInTheMiddle( - () => requestHook(span, { request }), - e => { - if (e) { - instrumentation._diag.error('request hook failed', e); - } - }, - true - ); - } - - return context.with(trace.setSpan(context.active(), span), () => { - done(); - }); - }; - } -} diff --git a/packages/instrumentation-fastify/src/internal-types.ts b/packages/instrumentation-fastify/src/internal-types.ts deleted file mode 100644 index 95521eed2f..0000000000 --- a/packages/instrumentation-fastify/src/internal-types.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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 { Span } from '@opentelemetry/api'; -import type { FastifyReply } from 'fastify'; -import { spanRequestSymbol } from './constants'; - -export type HandlerOriginal = (() => Promise) & (() => void); - -export type PluginFastifyReply = FastifyReply & { - [spanRequestSymbol]?: Span[]; -}; diff --git a/packages/instrumentation-fastify/src/types.ts b/packages/instrumentation-fastify/src/types.ts deleted file mode 100644 index 2deadc0598..0000000000 --- a/packages/instrumentation-fastify/src/types.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 { Span } from '@opentelemetry/api'; -import { InstrumentationConfig } from '@opentelemetry/instrumentation'; - -export interface FastifyRequestInfo { - request: any; // FastifyRequest object from fastify package -} - -/** - * Function that can be used to add custom attributes to the current span - * @param span - The Fastify handler span. - * @param info - The Fastify request info object. - */ -export interface FastifyCustomAttributeFunction { - (span: Span, info: FastifyRequestInfo): void; -} - -/** - * Options available for the Fastify Instrumentation - */ -export interface FastifyInstrumentationConfig extends InstrumentationConfig { - /** Function for adding custom attributes to each handler span */ - requestHook?: FastifyCustomAttributeFunction; -} diff --git a/packages/instrumentation-fastify/src/utils.ts b/packages/instrumentation-fastify/src/utils.ts deleted file mode 100644 index 225892c6bd..0000000000 --- a/packages/instrumentation-fastify/src/utils.ts +++ /dev/null @@ -1,134 +0,0 @@ -/* - * 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 { Attributes, Span, SpanStatusCode, Tracer } from '@opentelemetry/api'; -import { spanRequestSymbol } from './constants'; - -import type { PluginFastifyReply } from './internal-types'; - -/** - * Starts Span - * @param reply - reply function - * @param tracer - tracer - * @param spanName - span name - * @param spanAttributes - span attributes - */ -export function startSpan( - reply: PluginFastifyReply, - tracer: Tracer, - spanName: string, - spanAttributes: Attributes = {} -) { - const span = tracer.startSpan(spanName, { attributes: spanAttributes }); - - const spans: Span[] = reply[spanRequestSymbol] || []; - spans.push(span); - - Object.defineProperty(reply, spanRequestSymbol, { - enumerable: false, - configurable: true, - value: spans, - }); - - return span; -} - -/** - * Ends span - * @param reply - reply function - * @param err - error - */ -export function endSpan(reply: PluginFastifyReply, err?: any) { - const spans = reply[spanRequestSymbol] || []; - // there is no active span, or it has already ended - if (!spans.length) { - return; - } - spans.forEach(span => { - if (err) { - span.setStatus({ - code: SpanStatusCode.ERROR, - message: err.message, - }); - span.recordException(err); - } - span.end(); - }); - delete reply[spanRequestSymbol]; -} - -// @TODO after approve add this to instrumentation package and replace usage -// when it will be released - -/** - * This function handles the missing case from instrumentation package when - * execute can either return a promise or void. And using async is not an - * option as it is producing unwanted side effects. - * @param execute - function to be executed - * @param onFinish - function called when function executed - * @param preventThrowingError - prevent to throw error when execute - * function fails - */ -export function safeExecuteInTheMiddleMaybePromise( - execute: () => Promise, - onFinish: (e: unknown, result?: T) => void, - preventThrowingError?: boolean -): Promise; -export function safeExecuteInTheMiddleMaybePromise( - execute: () => T, - onFinish: (e: unknown, result?: T) => void, - preventThrowingError?: boolean -): T; -export function safeExecuteInTheMiddleMaybePromise( - execute: () => T | Promise, - onFinish: (e: unknown, result?: T) => void, - preventThrowingError?: boolean -): T | Promise | undefined { - let error: unknown; - let result: T | Promise | undefined = undefined; - try { - result = execute(); - - if (isPromise(result)) { - result.then( - res => onFinish(undefined, res), - err => onFinish(err) - ); - } - } catch (e) { - error = e; - } finally { - if (!isPromise(result)) { - onFinish(error, result); - if (error && !preventThrowingError) { - // eslint-disable-next-line no-unsafe-finally - throw error; - } - } - // eslint-disable-next-line no-unsafe-finally - return result; - } -} - -function isPromise(val: T | Promise): val is Promise { - return ( - (typeof val === 'object' && - val && - typeof Object.getOwnPropertyDescriptor(val, 'then')?.value === - 'function') || - false - ); -} diff --git a/packages/instrumentation-fastify/test/fixtures/use-fastify.mjs b/packages/instrumentation-fastify/test/fixtures/use-fastify.mjs deleted file mode 100644 index 99bd5bffb9..0000000000 --- a/packages/instrumentation-fastify/test/fixtures/use-fastify.mjs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 fastify from an ES module: -// node --experimental-loader=@opentelemetry/instrumentation/hook.mjs use-fastify.mjs - -import { createTestNodeSdk } from '@opentelemetry/contrib-test-utils'; - -import { FastifyInstrumentation } from '../../build/src/index.js'; - -const sdk = createTestNodeSdk({ - serviceName: 'use-fastify', - instrumentations: [new FastifyInstrumentation()], -}); -sdk.start(); - -import Fastify from 'fastify'; -import http from 'http'; - -// Start a fastify server. -const app = Fastify(); -app.get('/a-route', function aRoute(_request, reply) { - reply.send({ hello: 'world' }); -}); -const addr = await app.listen({ port: 0 }); - -// Make a single request to it. -await new Promise(resolve => { - http.get(addr + '/a-route', res => { - res.resume(); - res.on('end', () => { - resolve(); - }); - }); -}); - -await app.close(); -await sdk.shutdown(); diff --git a/packages/instrumentation-fastify/test/instrumentation.test.ts b/packages/instrumentation-fastify/test/instrumentation.test.ts deleted file mode 100644 index a890abf123..0000000000 --- a/packages/instrumentation-fastify/test/instrumentation.test.ts +++ /dev/null @@ -1,595 +0,0 @@ -/* - * 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 * as assert from 'assert'; -import { context, SpanStatusCode } from '@opentelemetry/api'; -import { ATTR_HTTP_ROUTE } from '@opentelemetry/semantic-conventions'; -import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; -import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'; -import { - InMemorySpanExporter, - ReadableSpan, - SimpleSpanProcessor, -} from '@opentelemetry/sdk-trace-base'; -import { Span } from '@opentelemetry/api'; -import { - getPackageVersion, - runTestFixture, - TestCollector, -} from '@opentelemetry/contrib-test-utils'; -import * as semver from 'semver'; -import * as http from 'http'; -import { HttpInstrumentation } from '@opentelemetry/instrumentation-http'; -import { AttributeNames, FastifyInstrumentation } from '../src'; -import { FastifyRequestInfo } from '../src/types'; - -const URL = require('url').URL; - -const fastifyVersion = getPackageVersion('fastify'); - -const httpRequest = { - get: (options: http.ClientRequestArgs | string) => { - return new Promise((resolve, reject) => { - return http.get(options, resp => { - let data = ''; - resp.on('data', chunk => { - data += chunk; - }); - resp.on('end', () => { - resolve(data); - }); - resp.on('error', err => { - reject(err); - }); - }); - }); - }, -}; - -const httpInstrumentation = new HttpInstrumentation(); -const instrumentation = new FastifyInstrumentation(); -const contextManager = new AsyncLocalStorageContextManager().enable(); -const memoryExporter = new InMemorySpanExporter(); -const spanProcessor = new SimpleSpanProcessor(memoryExporter); -const provider = new NodeTracerProvider({ - spanProcessors: [spanProcessor], -}); -instrumentation.setTracerProvider(provider); -httpInstrumentation.setTracerProvider(provider); -context.setGlobalContextManager(contextManager); - -instrumentation.enable(); -httpInstrumentation.enable(); - -import '@fastify/express'; -import { - FastifyInstance, - HookHandlerDoneFunction, - FastifyReply, - FastifyRequest, -} from 'fastify'; - -const Fastify = require('fastify'); - -const assertRootContextActive = () => { - // Asserting the context.active() to strictly equal ROOT_CONTEXT doesn't - // always work because of the linking and dep resolution. - // Specially in our CI environment there can be multiple instances to - // different @opentelemetry/api and thus ROOT_CONTEXTs in the tree. - assert.strictEqual((context.active() as any)['_currentContext'].size, 0); -}; - -function getSpans(): ReadableSpan[] { - const spans = memoryExporter.getFinishedSpans().filter(s => { - return ( - s.instrumentationScope.name === '@opentelemetry/instrumentation-fastify' - ); - }); - return spans; -} - -describe('fastify', () => { - let PORT: number; - let app: FastifyInstance; - - async function startServer(): Promise { - const address = await app.listen({ port: 0 }); - const url = new URL(address); - PORT = parseInt(url.port, 10); - } - - beforeEach(async () => { - instrumentation.enable(); - app = Fastify(); - app.register(require('@fastify/express')); - }); - - afterEach(async () => { - if (app.server.address()) { - await app.close(); - } - - contextManager.disable(); - contextManager.enable(); - memoryExporter.reset(); - instrumentation.disable(); - }); - - describe('when fastify is disabled', () => { - it('should not generate any spans', async () => { - instrumentation.disable(); - app.get('/test', (req, res) => { - res.send('OK'); - }); - - await startServer(); - await httpRequest.get(`http://localhost:${PORT}/test`); - - const spans = getSpans(); - assert.strictEqual(spans.length, 0); // http instrumentation only - }); - }); - - describe('when fastify is enabled', () => { - it('should generate span for anonymous middleware', async () => { - app.get('/test', (req, res) => { - res.send('OK'); - }); - - await startServer(); - await httpRequest.get(`http://localhost:${PORT}/test`); - - const spans = memoryExporter.getFinishedSpans(); - assert.strictEqual(spans.length, 5); - const span = spans[2]; - assert.deepStrictEqual(span.attributes, { - 'fastify.type': 'request_handler', - 'plugin.name': 'fastify -> @fastify/express', - [ATTR_HTTP_ROUTE]: '/test', - }); - assert.strictEqual( - span.name, - 'request handler - fastify -> @fastify/express' - ); - const baseSpan = spans[1]; - assert.strictEqual( - span.parentSpanContext?.spanId, - baseSpan.spanContext().spanId - ); - }); - - it('should generate span for named handler', async () => { - app.get('/test', function namedHandler(req, res) { - res.send('OK'); - }); - - await startServer(); - await httpRequest.get(`http://localhost:${PORT}/test`); - - const spans = memoryExporter.getFinishedSpans(); - assert.strictEqual(spans.length, 5); - const span = spans[2]; - assert.deepStrictEqual(span.attributes, { - 'fastify.type': 'request_handler', - 'fastify.name': 'namedHandler', - 'plugin.name': 'fastify -> @fastify/express', - [ATTR_HTTP_ROUTE]: '/test', - }); - assert.strictEqual(span.name, 'request handler - namedHandler'); - - const baseSpan = spans[1]; - assert.strictEqual( - span.parentSpanContext?.spanId, - baseSpan.spanContext().spanId - ); - }); - - it('should generate span for 404 request', async () => { - await startServer(); - await httpRequest.get(`http://localhost:${PORT}/no-such-route`); - - const spans = memoryExporter.getFinishedSpans(); - assert.strictEqual(spans.length, 5); - const span = spans[2]; - assert.deepStrictEqual(span.attributes, { - 'fastify.name': 'basic404', - 'fastify.type': 'request_handler', - 'plugin.name': 'fastify -> @fastify/express', - }); - assert.strictEqual(span.name, 'request handler - basic404'); - const baseSpan = spans[1]; - assert.strictEqual( - span.parentSpanContext?.spanId, - baseSpan.spanContext().spanId - ); - }); - - describe('when subsystem is registered', () => { - beforeEach(async () => { - httpInstrumentation.enable(); - - async function subsystem(fastify: FastifyInstance) { - fastify.addHook( - 'onRequest', - ( - req: FastifyRequest, - res: FastifyReply, - next: HookHandlerDoneFunction - ) => { - next(); - } - ); - fastify.use((req, res, next) => { - next(); - }); - - fastify.get('/test/:id', function foo(req, res) { - res.send('OK'); - }); - fastify.get('/test-error', () => { - throw Error('foo'); - }); - } - - app.register(subsystem); - - await startServer(); - await httpRequest.get(`http://localhost:${PORT}/test/1`); - - assert.strictEqual(getSpans().length, 4); - }); - - it('should change name for parent http route', async () => { - const spans = memoryExporter.getFinishedSpans(); - - assert.strictEqual(spans.length, 6); - const changedRootSpan = spans[4]; - const span = spans[3]; - assert.strictEqual(changedRootSpan.name, 'GET /test/:id'); - assert.strictEqual(span.name, 'request handler - foo'); - assert.strictEqual( - span.parentSpanContext?.spanId, - spans[2].spanContext().spanId - ); - }); - - it('should create span for fastify express runConnect', async () => { - const spans = memoryExporter.getFinishedSpans(); - - assert.strictEqual(spans.length, 6); - const baseSpan = spans[0]; - const span = spans[1]; - assert.strictEqual(span.name, 'middleware - runConnect'); - assert.deepStrictEqual(span.attributes, { - 'fastify.type': 'middleware', - 'plugin.name': 'fastify -> @fastify/express', - 'hook.name': 'onRequest', - }); - - assert.strictEqual( - span.parentSpanContext?.spanId, - baseSpan.spanContext().spanId - ); - }); - - it('should create span for fastify express for enhanceRequest', async () => { - const spans = memoryExporter.getFinishedSpans(); - - assert.strictEqual(spans.length, 6); - const baseSpan = spans[4]; - const span = spans[0]; - assert.strictEqual(span.name, 'middleware - enhanceRequest'); - assert.deepStrictEqual(span.attributes, { - 'fastify.type': 'middleware', - 'plugin.name': 'fastify -> @fastify/express', - 'hook.name': 'onRequest', - }); - - assert.strictEqual( - span.parentSpanContext?.spanId, - baseSpan.spanContext().spanId - ); - }); - - it('should create span for request', async () => { - const spans = memoryExporter.getFinishedSpans(); - - assert.strictEqual(spans.length, 6); - const baseSpan = spans[2]; - const span = spans[3]; - assert.strictEqual(span.name, 'request handler - foo'); - assert.deepStrictEqual(span.attributes, { - 'plugin.name': 'subsystem', - 'fastify.type': 'request_handler', - 'fastify.name': 'foo', - 'http.route': '/test/:id', - }); - - assert.strictEqual( - span.parentSpanContext?.spanId, - baseSpan.spanContext().spanId - ); - }); - - it('should update http.route for http span', async () => { - const spans = memoryExporter.getFinishedSpans(); - - assert.strictEqual(spans.length, 6); - const span = spans[4]; - assert.strictEqual(span.attributes['http.route'], '/test/:id'); - }); - - it('should create span for subsystem anonymous middleware', async () => { - const spans = memoryExporter.getFinishedSpans(); - - assert.strictEqual(spans.length, 6); - const baseSpan = spans[1]; - const span = spans[2]; - assert.strictEqual(span.name, 'middleware - subsystem'); - assert.deepStrictEqual(span.attributes, { - 'fastify.type': 'middleware', - 'plugin.name': 'subsystem', - 'hook.name': 'onRequest', - }); - - assert.strictEqual( - span.parentSpanContext?.spanId, - baseSpan.spanContext().spanId - ); - }); - - it('should update span with error that was raised', async () => { - memoryExporter.reset(); - await httpRequest.get(`http://localhost:${PORT}/test-error`); - const spans = memoryExporter.getFinishedSpans(); - - assert.strictEqual(spans.length, 6); - const span = spans[3]; - assert.strictEqual(span.name, 'request handler - subsystem'); - assert.deepStrictEqual(span.status, { - code: SpanStatusCode.ERROR, - message: 'foo', - }); - assert.deepStrictEqual(span.attributes, { - 'fastify.type': 'request_handler', - 'plugin.name': 'subsystem', - 'http.route': '/test-error', - }); - }); - }); - - describe('spans context', () => { - describe('hook callback', () => { - it('span should end upon done invocation', async () => { - let hookDone: HookHandlerDoneFunction; - const hookExecutedPromise = new Promise(resolve => { - app.addHook( - 'onRequest', - (_req, _reply, done: HookHandlerDoneFunction) => { - hookDone = done; - resolve(); - } - ); - }); - app.get('/test', (_req, reply: FastifyReply) => { - reply.send('request ended in handler'); - }); - await startServer(); - httpRequest.get(`http://localhost:${PORT}/test`); - await hookExecutedPromise; - - // done was not yet called from the hook, so it should not end the span - const preDoneSpans = getSpans().filter( - s => - !s.attributes[AttributeNames.PLUGIN_NAME] || - s.attributes[AttributeNames.PLUGIN_NAME] === 'fastify' - ); - assert.strictEqual(preDoneSpans.length, 0); - hookDone!(); - const postDoneSpans = getSpans().filter( - s => - !s.attributes[AttributeNames.PLUGIN_NAME] || - s.attributes[AttributeNames.PLUGIN_NAME] === 'fastify' - ); - assert.strictEqual(postDoneSpans.length, 1); - }); - - it('span should end when calling reply.send from hook', async () => { - app.addHook( - 'onRequest', - ( - _req: FastifyRequest, - reply: FastifyReply, - _done: HookHandlerDoneFunction - ) => { - reply.send('request ended prematurely in hook'); - } - ); - app.get('/test', (_req: FastifyRequest, _reply: FastifyReply) => { - throw Error( - 'handler should not be executed as request is ended in onRequest hook' - ); - }); - await startServer(); - await httpRequest.get(`http://localhost:${PORT}/test`); - const spans = getSpans().filter( - s => - !s.attributes[AttributeNames.PLUGIN_NAME] || - s.attributes[AttributeNames.PLUGIN_NAME] === 'fastify' - ); - assert.strictEqual(spans.length, 1); - }); - }); - }); - - describe('application hooks', () => { - afterEach(() => { - const spans = getSpans(); - assert.strictEqual(spans.length, 0); - }); - - it('onRoute not instrumented', async () => { - app.addHook('onRoute', () => { - assertRootContextActive(); - }); - // add a route to trigger the 'onRoute' hook - app.get('/test', (_req: FastifyRequest, reply: FastifyReply) => { - reply.send('OK'); - }); - - await startServer(); - }); - - it('onRegister is not instrumented', async () => { - app.addHook('onRegister', () => { - assertRootContextActive(); - }); - // register a plugin to trigger 'onRegister' hook - app.register((fastify, options, done) => { - done(); - }); - - await startServer(); - }); - - it('onReady is not instrumented', async () => { - app.addHook('onReady', () => { - assertRootContextActive(); - }); - - await startServer(); - }); - - it('preClose is not instrumented', async function () { - // 'preClose' was added in fastify@4.16.0. - if (semver.lt(fastifyVersion, '4.16.0')) { - this.skip(); - } else { - app.addHook('preClose', () => { - assertRootContextActive(); - }); - - await startServer(); - } - }); - - it('onClose is not instrumented', async () => { - app.addHook('onClose', () => { - assertRootContextActive(); - }); - - await startServer(); - }); - }); - - describe('using requestHook in config', () => { - it('calls requestHook provided function when set in config', async () => { - const requestHook = (span: Span, info: FastifyRequestInfo) => { - span.setAttribute('my.http.method', info.request.method); - }; - - instrumentation.setConfig({ - ...instrumentation.getConfig(), - requestHook, - }); - - app.get('/test', (req, res) => { - res.send('OK'); - }); - - await startServer(); - await httpRequest.get(`http://localhost:${PORT}/test`); - - const spans = memoryExporter.getFinishedSpans(); - assert.strictEqual(spans.length, 5); - const span = spans[2]; - assert.deepStrictEqual(span.attributes, { - 'fastify.type': 'request_handler', - 'plugin.name': 'fastify -> @fastify/express', - [ATTR_HTTP_ROUTE]: '/test', - 'my.http.method': 'GET', - }); - }); - - it('does not propagate an error from a requestHook that throws exception', async () => { - const requestHook = (span: Span, info: FastifyRequestInfo) => { - span.setAttribute('my.http.method', info.request.method); - - throw Error('error thrown in requestHook'); - }; - - instrumentation.setConfig({ - ...instrumentation.getConfig(), - requestHook, - }); - - app.get('/test', (req, res) => { - res.send('OK'); - }); - - await startServer(); - await httpRequest.get(`http://localhost:${PORT}/test`); - - const spans = memoryExporter.getFinishedSpans(); - assert.strictEqual(spans.length, 5); - const span = spans[2]; - assert.deepStrictEqual(span.attributes, { - 'fastify.type': 'request_handler', - 'plugin.name': 'fastify -> @fastify/express', - [ATTR_HTTP_ROUTE]: '/test', - 'my.http.method': 'GET', - }); - }); - }); - }); - - it('should work with ESM usage', async () => { - await runTestFixture({ - cwd: __dirname, - argv: ['fixtures/use-fastify.mjs'], - env: { - NODE_OPTIONS: - '--experimental-loader=@opentelemetry/instrumentation/hook.mjs', - NODE_NO_WARNINGS: '1', - }, - checkResult: (err, stdout, stderr) => { - assert.ifError(err); - }, - checkCollector: (collector: TestCollector) => { - const spans = collector.sortedSpans; - assert.strictEqual(spans.length, 1); - assert.strictEqual(spans[0].name, 'request handler - aRoute'); - assert.strictEqual( - spans[0].attributes.filter(a => a.key === 'plugin.name')[0]?.value - ?.stringValue, - 'fastify', - 'attribute plugin.name' - ); - }, - }); - }); - - it('should expose errorCodes', async function () { - // errorCodes was added in v4.8.0 - // ref: https://github.com/fastify/fastify/compare/v4.7.0...v4.8.0 - if (semver.lt(fastifyVersion, '4.8.0')) { - this.skip(); - } - assert.ok(Fastify.errorCodes); - assert.strictEqual(typeof Fastify.errorCodes, 'object'); - assert.ok('FST_ERR_NOT_FOUND' in Fastify.errorCodes); - }); -}); diff --git a/packages/instrumentation-fastify/tsconfig.json b/packages/instrumentation-fastify/tsconfig.json deleted file mode 100644 index 4078877ce6..0000000000 --- a/packages/instrumentation-fastify/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "rootDir": ".", - "outDir": "build" - }, - "include": [ - "src/**/*.ts", - "test/**/*.ts" - ] -} diff --git a/scripts/lint-readme.js b/scripts/lint-readme.js index 1a8654a3a1..d73d593616 100644 --- a/scripts/lint-readme.js +++ b/scripts/lint-readme.js @@ -27,9 +27,6 @@ const autoInstrumentationWebDeps = require( `${monorepoRoot}/packages/auto-instrumentations-web/package.json` ).dependencies; -// remove exempt instrumentations -delete autoInstrumentationNodeDeps['@opentelemetry/instrumentation-fastify']; - // extract info from package.json const packageJsonUrl = path.resolve(`${packageRoot}/package.json`); const pjson = require(packageJsonUrl); From a30516244fb9dfab8ec294910b516faacf48f820 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Mon, 2 Mar 2026 13:20:44 -0800 Subject: [PATCH 2/4] drop examples/fastify; remove entries from component-owners and release-please files --- .github/component-label-map.yml | 6 -- .release-please-manifest.json | 1 - CONTRIBUTING.md | 2 +- examples/fastify/.npmrc | 1 - examples/fastify/README.md | 65 ------------ examples/fastify/client.js | 48 --------- examples/fastify/docker/collector-config.yaml | 40 -------- examples/fastify/docker/docker-compose.yaml | 31 ------ examples/fastify/docker/prometheus.yaml | 9 -- examples/fastify/images/trace1.png | Bin 264288 -> 0 bytes examples/fastify/opentelemetry.js | 48 --------- examples/fastify/package.json | 59 ----------- examples/fastify/server.js | 93 ------------------ release-please-config.json | 1 - 14 files changed, 1 insertion(+), 403 deletions(-) delete mode 100644 examples/fastify/.npmrc delete mode 100644 examples/fastify/README.md delete mode 100644 examples/fastify/client.js delete mode 100644 examples/fastify/docker/collector-config.yaml delete mode 100644 examples/fastify/docker/docker-compose.yaml delete mode 100644 examples/fastify/docker/prometheus.yaml delete mode 100644 examples/fastify/images/trace1.png delete mode 100644 examples/fastify/opentelemetry.js delete mode 100644 examples/fastify/package.json delete mode 100644 examples/fastify/server.js diff --git a/.github/component-label-map.yml b/.github/component-label-map.yml index 0fd1ed4159..2db09c16a0 100644 --- a/.github/component-label-map.yml +++ b/.github/component-label-map.yml @@ -104,11 +104,6 @@ pkg:instrumentation-express: - changed-files: - any-glob-to-any-file: - packages/instrumentation-express/** -pkg:instrumentation-fastify: - - changed-files: - - any-glob-to-any-file: - - packages/instrumentation-fastify/** - - packages/contrib-test-utils/** pkg:instrumentation-fs: - changed-files: - any-glob-to-any-file: @@ -304,7 +299,6 @@ pkg-status:unmaintained: - packages/instrumentation-tedious/** - packages/instrumentation-connect/** - packages/instrumentation-dns/** - - packages/instrumentation-fastify/** - packages/instrumentation-generic-pool/** - packages/instrumentation-hapi/** - packages/instrumentation-knex/** diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 4ecd8ce5fe..1e28db2a55 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -39,7 +39,6 @@ "packages/instrumentation-connect": "0.55.0", "packages/instrumentation-dns": "0.55.0", "packages/instrumentation-express": "0.60.0", - "packages/instrumentation-fastify": "0.56.0", "packages/instrumentation-generic-pool": "0.55.0", "packages/instrumentation-graphql": "0.60.0", "packages/instrumentation-hapi": "0.58.0", diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5e2192a109..bd9e01cc65 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -195,7 +195,7 @@ Ways do to so may be by providing proof of: - current or prior involvement with a community that develops systems with similar concepts - **Example:** A person previously working on a MySQL requesting ownership of a instrumentation package that instruments another database client library instrumentation. - current or prior extensive use of the instrumented package in other project they are involved in - - **Example:** A person working at a company that makes extensive use of the `fastify` library requesting ownership of the `@opentelemetry/instrumentation-fastify` package. + - **Example:** A person working at a company that makes extensive use of the `Pino` library requesting ownership of the `@opentelemetry/instrumentation-pino` package. - a vested interest in the telemetry being emitted from that instrumentation - **Example:** A person employed at an observability vendor that relies on the continued maintenance of the instrumentation diff --git a/examples/fastify/.npmrc b/examples/fastify/.npmrc deleted file mode 100644 index 43c97e719a..0000000000 --- a/examples/fastify/.npmrc +++ /dev/null @@ -1 +0,0 @@ -package-lock=false diff --git a/examples/fastify/README.md b/examples/fastify/README.md deleted file mode 100644 index 1ebe0395fd..0000000000 --- a/examples/fastify/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# Overview - -OpenTelemetry Fastify Instrumentation allows the user to automatically collect trace data and export them to the backend of choice (Collector Exporter), to give observability to distributed systems. - -This is a simple example that demonstrates tracing calls made to Fastify API. The example shows key aspects of tracing such as - -- Root Span (on Client) -- Child Span (on Client) -- Span Events -- Span Attributes - -## Prerequisites - -Install [Docker Desktop](https://docs.docker.com/desktop), version 4.12.0 or later. - -If you have an existing Docker Engine installation, you can [install the docker-compose plugin](https://docs.docker.com/compose/install) instead. - -## Installation - -```sh -# from this directory -npm install -``` - -## Run the Application - -### Collector - docker container - -- Run docker container with collector - - ```sh - # from this directory - $ npm run docker:start - ``` - -### Server - -- Run the server - - ```sh - # from this directory - $ npm run server - ``` - -- Run the client - - ```sh - # from this directory - npm run client - ``` - -#### Zipkin UI - -Go to Zipkin with your browser - -

Zipkin UI with trace

- -## Useful links - -- For more information on OpenTelemetry, visit: -- For more information on OpenTelemetry for Node.js, visit: - -## LICENSE - -Apache License 2.0 diff --git a/examples/fastify/client.js b/examples/fastify/client.js deleted file mode 100644 index 4cf66f9d63..0000000000 --- a/examples/fastify/client.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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 api = require('@opentelemetry/api'); -const axios = require('axios').default; - -const tracer = api.trace.getTracer('fastify-client'); - -function makeRequest() { - console.log('starting'); - const span = tracer.startSpan('client.makeRequest()', { - kind: api.SpanKind.CLIENT, - }); - - api.context.with(api.trace.setSpan(api.ROOT_CONTEXT, span), async () => { - try { - const res = await axios.post('http://localhost:8080/run_test/1', { - headers: { - 'Content-Type': 'application/json', - }, - timeout: 3000, - }); - console.log('status:', res.statusText); - span.setStatus({ code: api.SpanStatusCode.OK }); - } catch (e) { - console.log('failed:', e.message); - span.setStatus({ code: api.SpanStatusCode.ERROR, message: e.message }); - } - span.end(); - }); -} - -makeRequest(); diff --git a/examples/fastify/docker/collector-config.yaml b/examples/fastify/docker/collector-config.yaml deleted file mode 100644 index 8f934ed80b..0000000000 --- a/examples/fastify/docker/collector-config.yaml +++ /dev/null @@ -1,40 +0,0 @@ -receivers: - otlp: - protocols: - grpc: - http: - cors: - allowed_origins: - - http://* - - https://* - -exporters: - otlp: - endpoint: "jaeger:4317" - tls: - insecure: true - prometheus: - endpoint: "0.0.0.0:9464" - zipkin: - endpoint: "http://zipkin:9411/api/v2/spans" - -processors: - batch: - -service: - pipelines: - traces: - receivers: - - otlp - exporters: - - otlp - - zipkin - processors: - - batch - metrics: - receivers: - - otlp - exporters: - - prometheus - processors: - - batch diff --git a/examples/fastify/docker/docker-compose.yaml b/examples/fastify/docker/docker-compose.yaml deleted file mode 100644 index 58fcc88163..0000000000 --- a/examples/fastify/docker/docker-compose.yaml +++ /dev/null @@ -1,31 +0,0 @@ -version: "3" -services: - collector: - image: otel/opentelemetry-collector:0.118.0 - command: ["--config=/conf/collector-config.yaml"] - volumes: - - ./collector-config.yaml:/conf/collector-config.yaml - ports: - - "4317:4317" # OTLP-grpc compatible endpoint (used by client/server) - - "4318:4318" # OTLP-http compatible endpoint (unused in this example) - depends_on: - - jaeger - - zipkin - - jaeger: - image: jaegertracing/all-in-one:1.52 - ports: - - "16686:16686" # frontend (to inspect traces) - - zipkin: - image: openzipkin/zipkin:3 - ports: - - "9411:9411" # frontend (to inspect traces) - - prometheus: - container_name: prometheus - image: prom/prometheus:v2.49.0 - volumes: - - ./prometheus.yaml:/etc/prometheus/prometheus.yml - ports: - - "9090:9090" diff --git a/examples/fastify/docker/prometheus.yaml b/examples/fastify/docker/prometheus.yaml deleted file mode 100644 index b027daf9a0..0000000000 --- a/examples/fastify/docker/prometheus.yaml +++ /dev/null @@ -1,9 +0,0 @@ -global: - scrape_interval: 15s # Default is every 1 minute. - -scrape_configs: - - job_name: 'collector' - # metrics_path defaults to '/metrics' - # scheme defaults to 'http'. - static_configs: - - targets: ['collector:9464'] diff --git a/examples/fastify/images/trace1.png b/examples/fastify/images/trace1.png deleted file mode 100644 index 6128ac96a5d430bc4361b1ba488e4cfbb11a5285..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264288 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

XJHmICnU`;43>=$4QoyzALFBTkrH|Y{n=*AyE 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 z zZanr{EqMH0IB2&87b+LEDK~w-;R)pQg*A}E3o-BP?h9v2A@XX$wE>ZDc9}VBiGn@m z?TqNR*l3TNU^i!X&b6XI%r(!kkLxZ_G6rqbKl0fUUdIChKT6EW8=F?o@^Fv=WPR7b zEXaH1YgbN}lCA5F1DU?e<%ZcvY%TXbz0FL)Ck-!UQ}n1y6d=xIWe6OLeHha_9I0aH zAhV`}1TsHa7X~l&fd_Mx)$^+{5+ij+Jr&cHPF~W1h1YU@(vc1(Iko6x|0*?lk4lWY zY`twoW@0$qGwHbNV+fUJ*mJP{wA;7-EVqNNFcR2%3?M z)+eHv5=*zIR5J@CU6IXlP*EIZX=#X`|LQ3Z@#e z`}F;qS;zLUFnZsE)v*RAuWM;#fsM;h7hUkDPpI5|W2WbpKqol#&1`8D1S+5}Lpihqs)nNXhf5Lv{97yKt`oQ3lDC3T<-Gm$) zG{S{_zR266%v?`gcUhUJp8Agerlnp7M2*nsv5}9p80@u`(aee4Y*X;aXBxQA7Co~E zsGA0J6l$>fUf;(P5(H#NoZGU6VlZ*if_twg)KpZTNlxnNl5tB;E?~OmpYmLDcVDXm zTFU{%hpt0my6t%)?c;_$El|bhx5>=BN7f{b;9*v9-y`Ukw_G`lUprJyMEN?E{jYTv z%D@^EvNn2`r+Oc(8laga_jXbUrsX&LoNJu+n zG=C4a`&1Poi8i}6g?-sUEWer}EX5Ju_qouOd zW=RW`Zu_Q8ZNHzk7EU@2_J>t$`EkpAoO#tG(|5d6NSe;qQMQ#e^*=OHnmc%5r_dlS z250(cm4+4^Z$b)M%?S0D4(K+x;=A|?+2;ur$CRJP%xF$`?IYis4jTj7AamB-`f5Dx zry{>UcULl9D_W$CgeU8|Z8066bEaBb55xe3`lFK74{Sk49hjPfm9qD($0_G$so~s| zmvM<(Y!d(U(;!npKILikIY^79azVIfiCcPl*S(Ho&ICRysL zy!YZ{n`)JxO{0J6IMF|KOxGcmh;CK5GO>}-kXR`U@^BQimraWK=8C+qlx0)-T%O92 z61UreH(NFK;dOq~qqzn8aP?d^NTgtwb7C8fYMV1%XT$@-FSvP*dz0%BF3-D-{PHh^ z*@f=pBl|t{Z%foWsMHhMQd;AZ3_s~EacW(Mdhkap$QT3S>*ss3`^rnaN$?hm!<6Nb z!$P^ZcjnFV`p08qjJ`8j%0rX_6lpVoX#x!V(B5uip1VJmxJjFt)}iEiPa54ZsQVWZ zfODW>n!o42Z)G5x4{)bf86EZ4)U|LpF@T#x)FNGd7-1P1Zo7I8Q0Ppqlz)ax2>x#R zrXp;Tef1F7^>h%SvXYgD#}_8`A>!IoV;k1f;?D>MeYZ|7{*?)Hol$b@BPcZ1j~_XK z8tA?%n_pw(q8M|vp8Fy>JF|@4t#g}zE(b36jz^AoCkX?fwJd+zvDHmbO`rv_)+^WM zTB84%M)AJ}ilnZa1Q|8|Fbqu{#G;oP9SS6>kZSPE{oZjl#y#86isqG%A&#})Ye`6X zF8dHm2Pl-2rwU>Zt^rUR^K)TaZAzAQ!BLRokD*F43{mdc*6%PsUF(Y6%*O8bL)ncb zur0cdF_f8> zsCe{TE=n39*Qlu~Ys5wuLQZ-nDnO3!S6!!?xPuelAQAohCmro8_m0M_4^hS!NC%~H zI9=p{sdRJ&h@!?Q$*=LqY6Eu+t58ZBO?{C5#+rn$K4z3BbXwfQ;NDL?xX&KBt}vv1 zE_i)X&Q1SpqH-^VRn2wwe>v8T+tjweIXY4jkshc)OJktUmJgCvc3AgDSF23jmkpYW z0!&Nz>N-NS_(2i$pe~eWGZ7oSb7rRKkPG;vU(Fp}D~;9)^GwaEQkB)c5f);M3=UH| z-Vi?AdP-!9`vWKYXFM=`%8%1wfI$upO$k8)=v}bWDJGVyLp1-(@w8p3=r`NM%ns?K z1Biut4FxwZcA|DEROEn@ZIw^4z#X0chrG9pimO@IMH5IM2^QQXkU(&EOM(Xt!QHKK zcL@Y{cS3M&+}#@M#vK}W=*C?xYn{FJUSGa_e%&$lxc8j-gE6Z{&q;Mv*ZWpI&->Oh zh3&BUS#v}FG;%m236{h~rgYWky7(VI245SUO1dX0rGWrsI2grYAs3#?D2A$FU#!UM zVx2GG?#<-hz(9P!@v%&>@F?P@g|zZt@n(sQYm*WVogt4yB~!TOjjPXhXJj~Ed??u4 zOmAFA=e^%F*t_IqcwDS&v?^RBHu($Lf6J)M$+@oM$~duKD?KA8`~CaVlV;9+!k(&` zDPz?8mWwoH7G*ov9hXu6ib(af;e0}CkF<@wH2aHnay{}Bu)_j>tD$@!mb~;y|=CzREEzaAVXsky0HcH zs%Kg&Pr{$9IlAf5yS=!Am@E5l|I<-~s-!1yO9&^_pE`8zMZ_nMh!S%7&MJ>2(iD0vM47SBOT)#sT78Y#SiN>SDgw zO%rc%-K&X%N6-RW>$VQ>T0OE!#@_8|l)q0hyEyp%$4nt4_sIq%??bQRmuVbM7S)kW zfKOZcK_`r1R-ZekI;#s$2=9gjuiHlHNXy;?uW3q4ijZ5Ovt@nr8ctZd?=r4MV1mFM&lh4Af% zOfDQB+}&O=j^{=jEkJ1(^s}^VZ_4Jj7c(Z#9IP|<>K~E}AFuTGoXt|JT!b&6X)~KW z)mieOES)$M?jPvRQ$89=P<_aDB z(CW`6D?qn@qYGiJ!5i%*N`;T+YBRhq~brI{2 zDN-~Mi2;ex&))exliFc?>u!dCpooJjTJh`xN=}S-K#B01^7pHcidYn9(6FU<`-I@;Dn;OTfaR|FURR3 z7mnNnIg}Bw=OYTKGL5gC%mdwQtf@)Kec~mVPZLHaT<$uWC*;SjvI}-#rj5s`b8?kC z>&!fht~i1Rs_Zt`)+F=7z4sAA(GK1;l_)9|><=U%yCz!nQ@^FQ$!buBNz>Yl-#n%m zXZt|!pVPm-O~fQ^PC+b)>#w`~Wv?ePFD8bi#l_rd#xHVEkX6aOVXg6=$ppF;mz$D) zT&k6Zr|t1Jre2QnnYw0DC0!9h2Hebx(@ZrVQ;`4q_p-kolb;r!7q)tMsG+=ahwLU|+3?7W*+<(CldY z(|6waMa<80ZuII^f@yV(2ajR&_%Ul{VLE?R`-;)*mz*7r(v>wmC&c)|zbw^GR#uc* zoAxq}2GfB9<-mXUeAcVxq-tf%mO@@=EKJXX;`G%RHci!vZ_0d3>+Vbmj*wh& zB{`Ch3N^F#wk8hd<7|ixsWR^QF=97y#a%gvWJ^;%?`1Bhw01{E7e03^KMbJVe|t(J zZ+h7Kh66U9kS2#${t()RrYL=tC0w)we%p z?%@ZP&|c0*(##*3zZHYGfy)Cz_S|*0RyK0d+brL%rO%)rq*nT>zB+G7s~F`7i_ zeCq~CrsboKI_FqNWIb);vLy?i@IgWHovI&4>Cqi=@=o zK9h^??y?p3)suE}T+>JNr1r}*XSqSm55BLAi7 z_s_dUx;m66`Ojc4J?t+-Temdspl3uuDiqslBs8HG{l>Z2E=N3E@YE{}tOnO(16bAz zcIA6|gLI+3kka-NNt7vK?mik_O(u!QEskQ;f~c*Rz9*5VXz01&yL*qS01t91B(CnE zc-i?)hjgBnFsHP2NyasjmmmZa<}Z8K(QYdk=*G{)v6|~h1BvtlT=6j3*cvglgr5x! zEFCmjK0`9Ub++%{lXmrglWb!Fmf^WU#$1WFxv3Izq$%w^#{ z|Ao{`*Q@hhtv1N18IC6YZ0X)IjeSX>f7V}nx4+CFH!cwg(pEl;f7KO`)=X?v5R+)^ z`+e1p_C3u)MW)(tk|Dk>Kd?9DY`C44(4=Z*YfF*kt&uZm0vy0dl_7I7$gXbdY{y`m zem-t(u+3yL;m4l)G~f*IpHXRzqqTT~c*Cwg16Ht`Lxs_e6$=KLoJndGN^G9O=?h4BjN++BS{TV|8y^Ws)sgrINc?E)urDrOQp)L#q z92E{FGKYbO!Fvi(p+A`hCFQA>SiVERwJT03T6Qj+hVS!Ztv{u-%#&uk(QTL1r(P6T zWLb!nl&SI?n$j~@QN%KDSk>7W(*FPps=wM2C53rWB%oD>JtqdOE3(?lReKE>9F>dg zvpgxc$|et;ujE|@j?n=%btOlVTY0546e zKeQQ`4sQ`R%m--1q}Y~^N0(o6hKAj;CZbQi7SE6&Ri9?a2CN82a zB5>6zo0I&&2@V_>Af&ICclS#JLKP{8*OzU> ze1lt7+Z9(x3blnTkppPUd$<*(a|4;Vp6lU8&XBtR44+xau4O!uYJ101Jjmt(9nby_ z5?2<-y5>{*)~fb5dx-5?_~*O|t^nmBv`fFwdvgxC@iklyFTd<5QyRkUy%#*OlA82i z;K59ivx-nZp92i=ACc3z4k#dP=xF|@O&AZV0F&spb(+35_K>MaP?Le2&>M z^_|!3_#a#1s*1wNAE37XXu#I(xVtk-T9jW@J2{huIW_mdJAv3l*tQyG>+YV)Op1p( zfyav=>KG2j-_2xdg^$Aq=zYDIE}J8tw}doM_%ER{i}+7kqDTszM)GP4i4A0$gTGr- zRD%}eD($a@EE7ZuznAX>O>aQMxmGVov`D)B=ry$qD&D!j#23)SBy^TtmczVG`@30S zG?X}3IV@_m;%b*q|7sxW<#`axQ{zoYjNKaCK#z)nt(VN2hBglAvAaq}N$_edTx>x+ z=ax6U=qXA!C;Fm{LA>o;X4DHo-9vrTS6xUVxAh!PPP22M*s8Jld)ZpI+jWWz0Sz9j z+gCcPt`fa0*I+dII@>w=A8q=XI12#~NDv*AI?*y*U%4?~$xdc_(GRT@>P*sIv3@r8 z{e2?v$E}mRb^aGgFFNMXtywpDjk996+AT_8Z-BG{qJ@UH!L=fLc?7H=aeb=sYmJGR zPWbDBV&!9*G>L^A+~E13s@?ES6(4*}%3r zL}1IMkm7whH=k5BlwGb)DSmVz%r%&?e$P)g zJPJd6We1dRkHJe6XEq*MODSd3`lwk%9dqgY+bLQzrjx%rwWmk~nb*kLRTk7}km6}3 z_=~g7ieCLwbyyh}k(yv*SRd=U202R&zi?yQg%dv{>;=PSerk$b*a< zQt9pcaMc9RuIGIK`PND2WLZsgT*~=tpf_iq!eVW5I$(lgG-jz;t8kgc_s*+Z=7Ur!=n>BVW1!k`Veq=C<0=+r0h$zMQe=16dA;7H9|r0Q5UIeMNRRkOcJvCg(TLy!h>d9jaoi8&SMIkOi2rnz&tlUYIeQjDpi*T2ZyJn zK^6Ty+V9YBFF_}VGeB1Q1;qB1K7p$#Y=KEA4f98{XirBJz_eOnoV}A-O8&?R7@w)- zdJHGiV~5Qd`p(hwfmo*jn1~?x)b9f$@pW zqS&#xS=fDiZ(Y<3=J=-%N># z88a^Nr<=mO-c}blD#3SeE_sWINjo*Utn$aZo{G6RiXBh?=+Eo_ztvUEOE3SrE((sP zej2&vr4RoYkw=jyA$e{=@jp8&#`9rNxGn7IBa3h5f2;o4AOA;n)Q0Y$q*`whbIag} zhl8~X?IW`>Jb4g>S;oLH)UH`N=8-mqL|4eqG)Q!etrWd>pW~PL0yO+?griQY20>5o zidPT;@ztvaXx98$8cr0WjSAH&xA-*h^Cz%vAA`*G>37H@Pr$Ez2==E>W#}#S-Jy2Y zL@vlL$4|rj)xrt|OecKIv`d(B46Dk$%>+mKihyjTrZ3P$e!ME5Ne(6xaWfyMlQVui zS7uYhz&xFsSR|eLQPEWU`i;5FMn)9N#f;#4{PRH~^BzW`ky8z|R#R|Vqz1b8OL__GZy zrs(8?tjSD_-LGF4ORJqmp81?vc`tfKrhfrtrrYD!BHpqcCzp*1AiV}ab3G&(iI&(? z1kHW&@ES=EtX-b}F_9ln!#U(&^S!*6dSC7rS?=i}R?&`*{I`lNg{t*$AdhBal#jY| zJggq5_nF#}w59lnStOC|nq1rKbrmZGGlVry!U!YoN$Ai+g8MrB*KUMN>uX>8qBMi^ z_P-0vR#`$lEc3sZUAH`PHM9t%a+;eQ$Vin&>WF;ZhBO#-mCdn0J?n21DD-X;ZQKCP z2xa7CBHMIst=+@cFO=E4!6qRQ(hOcjnXS zQ_#8!kX;Z4kH~6%O5x+Gw1x7c-k);^da}hNQMRHuOIM@(hNE1L^?$g88hywx7&+k` zc6Fi{s`nZ`yZrrh1aXIA7=ISIxZw-{z%_S`Wj`TR=6E6R5v~se*$*_cYI~rYelo^q z8-W>GoyoVb>ESs@$m`t|io5Dua?esYf$+m!pAO@HAw0;fi=G!bbRL;BF8a4Qz5tdq zfX6P+YITR*cv~+TO>c5#Ec9I;j@{ucr|&u89ARH;Zdk4_$R|aQpBdwMa=%!nXWr0W zbdY#^dEpu4(nj`a<5b`AKy!PLWua2k``U~(aTIp8ue&+VC>Sxs5T!0HKJ|cVQxP0e z@>@M_JOxs|f-@S}_FNT1wuWIXV@_qy@j&7+`bYb#zQ(j>62Ky=P=-_Ld=z9WiPg#O z?ljE%aum2q<>+%GD5O1>a5=vuIzQad^P4-89Yto?5J*xxL=#hC%4y$$DkP<`@g z=QE2<&3w!p@^@Rc`T`GgA9c!DgQA+;aGMhVTb<_NL=Ue$ikCnEKnZMEKKX$Uw$&K@ zA5();@eRR%L@+<1@|W%+#gA41-B#jzzNsGCYlb53MnFwWMfgrFq0*rvO?Pu`m!LWB z7(mfl;Hce5&^eGS;U{-oD=a<8ltt)<(uvG7EU5d9 z6Dg<1nEuA6A6Cu5I*vH>dRl57rppJNc@y;E^lzUM(Thf7X@uRw#pm`3AJ2)b8yw08 z5=LW~Sw^}2X36nwZ%jhl38xK*uXaq==rL9@DqV12T|Qq?NMHhb_aAkHFJl`T9AoY9T}Z?9C3_IxVk1kntEU%^D4zo z0CN}a=2y`mshieSe*8zfnWC-j3KaFI_(a99l(^t`bw+C{64hqiLUQko4D8M+DQeKP z`2yAsZJqMd!6H*ZeFclxBNnZl8$Y<-+LyGcdB zdv+JpUW;wtm;OT~hH7zpvdhi<-zt-r@xzugP_1uSqnNdO>PlZ}@ZoqZ;zpkDj`ju7 zwp;3H-Uuo&Im9J>L#X>Mt==&4^-uzq?`B7ONwUvk`^m7)n<}yQmb^e`=?+9V3t?Wb z)gQq!3|+e)08Vt?k{@Ew`(WQ6{xJjWQ3zkBT_2aEkl3RBR^Fags*>I~3dChd_WTjQ z8Z|n_oU9YI6tsQ${W?d(hs;bDQT{)m=1RU+J}{NXckqXZbxqaEqqH2YCL5eqgbZoh z6Qze_!4!4m!LbHym-z(Fm)H9e<&D`_Ho(ZdC$II*_lXDmZMnnm&U7b$k{x-jBv{VpKMDQb>v zlyiJ-hCb*d&r_J!A6eXmrsG{$4r^R;3tP5%|NLsESE_c2DvQ${ zFH$&>Xkiea;egLT+sn(SNQ#TvlyDfqP=PE}u-R0oN}0wu&n$9MdzETIOh?s@lhGAa zR!NY*q9)hS0Uxh4Twm70lyCWm?R*x46B29jEnMLImi|nQKjvuK%6zF9w@iaGM@M<4 zy@Iqcq5Bry@HG6lbKV+W_YeQmtoA5gk~t4wncKHrd%SoK0>1R;-3YAA(2+KFE{z*# zAv$~8^R{GmdE2{iT#F4aOa7rmx9UoIN>1}*Ye}V&JuP79ojv;D<}a{6Q}*+x=t6d# zb7F-A+5`S*BqtzLhRP0mos1Y96@=QA<&$nbg@b)tKc4ZY%`h${(Iy>gJ0LnE;tVh` zc0i=nM=RF9HpALag#DVjkFWzOpyTsn<0Vxo6|O|S^p{Scw9e{js!04;(in4ey>>1#&l7_3y|$*QU18LsFzC}tz~U(aBn|_fg=6 z1|CB$rs&j6_m0q^iFhQVH;^)qj*k|Xw{g4p_>vYOte zi2(X9i1){38zN6$UdJVQpjD_CLzpxc&K>S_}X+$EZ3ClN^h zA#F=gn*pRYIVg5o8^fn!NoUwNh@yh-iIwy{Xg#F?$TU{;O=_|DQ%NxCpE_-rEvg^w ze?7IhP~CPpDliuzpJu*4^*lZhP8XZ2*yEwm-WX);M1CBkz5s#Z%&rtwWbZcGO(c46 z1PRpJk*O+UJw0jmRr}cB+gT~Xu+Mdw=^cypl(g#IlK#>|ztxj=KR@Momul28Tz&_L z6(?h<6IKUK%4IbC#1v-nP;8!1(And_u{2MgtBz5Y#y=X8Z$F(%29rS2hmyQJzY;{& z=ExAzNJ@X0LgKc5ZuUF8gg%!hF8$>!zKfRi+fkP0^;HuD>ob1S=*-MW@J4|2gX3?J z7x2=QF73_7TXF;sRaFuxYT8XC{M1;{Q2oA{rSm-^jS+|UWhn56D^?dHpOF7o@Vv*MjimW%-i;BGYnn)5 zW=bbf-HD+Ws@>PeSv`vt=ReRHXW^7O&RUG-m)RR29_|N$ljMq?6Oi_Ew$!0!rqs)yBsd%@XsEGMM97K9kxSAK|G z;U@lVXaQBtMjmG=U)EYO_#d6MH1LcS1XV5MA=9GunpGlM_4fQZy$ zt2rcbZ}Il{c5&Af19eq6s%Lb&+vRGcWy^DVLNi1B(fDbP@bBw8Ow2}Q83+%*i2GMM z-VJ!C(SLFQnB%OxYa3==LPl?asIT)HGCo8E5GUz5m&u*#Tu!tkC7gxP@Y>tblo;T% zp5vQly8hxd24*CjEw!^6L-dQC+tO%KUn-2vA&AqZ<+t=6$7;JhS6AnKd85Bnkslkd zAtT4b|5@B!yi-S0oM<~TlX_wTpWKw@AiVm00ntjP&G>(~bQW zV`LbLm7-I>qz7y0RSQjg*ehcyzd1fzD#pS28AA80uLE;_Z}y01uZDD^^ONgy$W^ZU zcW+bho3k6fvwK-&9brypfIRyh=th+;|Il}(4mxS|Z?xP_tS|#`!O*&j)VumJo+YmM zp+-3x!)KU}j`N3JF7xlJ<3*(PY?1i5U%Ua4vADUIPPW!cg?MKa8`5PZ&uAioeaRvJL(A>0zwJeAqk~;Asw1){M0UycNZD z__kdx**KVBJ2=~2wF6H6A;`)Es&)V)T~Pb4x~7Y41F+P_FstVRVjO>nJXyFRtpxkb zC$8GKg5HFhKB7;FP1oRYuh+80vP+4zUi7<^1sx{M52}T=X71EoY&1&E$^7&~)P*GA zO1i0G6EeTPGisjKDW{CaJt?*WrMX6T#=!)?TI0!E=g(f|%7Wa=N|olwU0gE8*YP2_ zwdOzC0eqnPQX`KhemS4=>Vdc;bXoOFFaou=LkM2>6s@V;O2_=BWs^dJ&UwvY-rXg` zgTLE#jM$TXHG}cYCqPNNj_9{PId`$vF{SsmWLS$vctrR09&)5**~M&*5%-tQrpc|& zptE?0jk6xePL~DiTWKKkE%MAEndl-3@TV`s?|(?-Twpty;^?_%L##@xb19!DJiR^{i=3HoGL5!K{5Hr@)SY0#Wr=-Mo@YrqkTNb^!>Ypi~+vp zsHxNK3QCBme-QPN%4I0`0o@(}+mA<7%^qLiL-)cr*{cc%Hz&&bBo@NJY?=JO;@@`w zQhsMtVd3@#?LH^tjJdww$+!o>{1X3*PBNb_qAx?xI{l*0o36o`0LLe#7#sKPWJagx zA+u+KnV6p`){zLvR;_-S`^ssKGZ!-bd9wmBJU}_zM>z51vSnDi)0x0L?fL>tNPx8-rSN7P~o~fG5H$ zD{?V44b(Uj`1>*y;mk%F)S;MOnUuEJDD2gyHw(I-QFz_jzpjVjN5S9HtT- zUkmguEl=|P zLLZ`2^*+INTvg>|sc6~gD|d9S z{Q2GywLODTDG&noWafy*R=DlOzO#5fx*Q3Q_pzreIdrdBLb6%c!yFNKWtS9QLT~zbzPv&iT z#4;*uU$%DrX}K2j5gVD{5PI*lA%R3+rtkx0WROoT9cE*KqJggQC^B(> zQ>Ps|IMd_?a7cR^rR0R7cFB6(Nproqf#$u+pu8(=jUWQRuNAAh1CHUf{uSvt0p>Hh zi;0SEJkp;YGJX0xnnWUf+c`;Dak@Jk&K+#CW>w!DOMJ^cqre-HoEYr?-$5?jO%G zt%3!dJFA{7-y)ayDslN%1lAUs`3%V&N741l|KV@`!LpL=`x%!q&LjrgKMuN*o2r&l z40Z7;N9j&9e3B@n{PkZc>4TzQ$w;yf3yE& zs-ec*e}+-^f;c9`Km6NH$V9r=We0n2wIGr=-Kr{7Qb!=kdx07z5Dj=j!v+^N= z|8~Aqx)IsJ|&_cbZ9;Lrxzc4KT&HQ7ov%xUNR8^^LRiPZhd{EKO; zuQL)f)ra;7nr+?z<+37A%w{|jM!4bT++B5ngKMXUz+^RUw$mQgbTKkU8+*`w(aUw+ zzRf8H;e~ML&c>L=(&Vv8G_Ua8u;ncXb?1vIbjq5;Ptf2 zZ>WTOTcf>P*~SnJ?6=qY+aC!2uK`p3tMK8?ql7zEE`YAJ_)^f8t-<q5n|Jh$nQCZAenKP15Ff$M%Pa;h`;Kfw7{=$R6J^0BX&26md=KtNgO491{SEu8q zl!crPEq{ls7z~FA+{L9>k9ZAVRZ_i{j@Z2a2Crh^v{@WT5#TzqYg^iu9if359MFrH zC$}ZLz}u5BxC=JZ=!5R#bc~7{$>B2T!^qwKQfgOB7>|p~$VkfFW|$+>De|(g6Fw=NaAdQ;;CknDreT6Vat_!!Ttnp+w|TG;myK~Ukk95w zcF#rb!!Y67n`Ma={m{&DwGf zB}PS)H-brvxLWoNv?v&@YM?Row)Lza3!CPA=O=Sp7u50L!2(5Ou^Jo=F$^Rju`@BR z9GY%Lld^_#FMIe)@HbQ%o)|9PA0R+BHz8FQvPM@cNy$lA5HH|UJTa(gwbp|Y1H(16 z(exx}qLk!*mA4O80_t9;X5Vc^F7n|`t&C~`$Kq7jToJH)6Nxmmq8u&aDISSB+(Qv{zDpc2!S9=jan6bMDvF;%a! z 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 l^Y1B`p*83w%m3U0UYwIYvY { - await sdk.shutdown(); -}); - -sdk.start(); diff --git a/examples/fastify/package.json b/examples/fastify/package.json deleted file mode 100644 index 7df877be80..0000000000 --- a/examples/fastify/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "example-fastify", - "private": true, - "version": "0.26.0", - "description": "Example of Fastify integration with OpenTelemetry", - "main": "index.js", - "scripts": { - "client": "cross-env OTEL_SERVICE_NAME=example-fastify-client node --require ./opentelemetry.js ./client.js", - "docker:start": "cd ./docker && docker compose down && docker compose up", - "docker:stop": "cd ./docker && docker compose down", - "server": "cross-env OTEL_SERVICE_NAME=example-fastify-server node --require ./opentelemetry.js ./server.js" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/open-telemetry/opentelemetry-js.git" - }, - "keywords": [ - "opentelemetry", - "express", - "tracing" - ], - "engines": { - "node": ">=8" - }, - "files": [ - "build/src/**/*.js", - "build/src/**/*.map", - "build/src/**/*.d.ts", - "doc", - "LICENSE", - "README.md" - ], - "author": "OpenTelemetry Authors", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/open-telemetry/opentelemetry-js/issues" - }, - "dependencies": { - "@opentelemetry/api": "1.7.0", - "@opentelemetry/sdk-node": "^0.46.0", - "@opentelemetry/exporter-trace-otlp-proto": "^0.46.0", - "@opentelemetry/exporter-metrics-otlp-proto": "^0.46.0", - "@opentelemetry/instrumentation": "^0.46.0", - "@opentelemetry/instrumentation-http": "^0.46.0", - "@opentelemetry/instrumentation-fastify": "^0.32.6", - "@opentelemetry/sdk-trace-node": "~1.19.0", - "@opentelemetry/resources": "~1.19.0", - "@opentelemetry/semantic-conventions": "^1.27.0", - "@opentelemetry/sdk-trace-base": "~1.19.0", - "cross-env": "^7.0.3", - "axios": "^1.6.4", - "fastify": "^4.25.2", - "fastify-cors": "^6.1.0", - "@fastify/express": "^2.3.0", - "middie": "^7.1.0" - }, - "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", - "devDependencies": {} -} diff --git a/examples/fastify/server.js b/examples/fastify/server.js deleted file mode 100644 index afad11a43a..0000000000 --- a/examples/fastify/server.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - * 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 api = require('@opentelemetry/api'); -const tracer = api.trace.getTracer('fastify-server'); -const Fastify = require('fastify'); -const axios = require('axios'); - -const PORT = 8080; -const app = Fastify({ logger: true }); -app.register(require('@fastify/express')).register(subsystem); - -async function subsystem(fastify) { - fastify.addHook('onRequest', async () => { - const span = api.trace.getSpan(api.context.active()); - span.setAttribute('order', 2); - }); - - fastify.addHook('onRequest', async function onRequestHook() { - const span = api.trace.getSpan(api.context.active()); - span.setAttribute('order', 3); - - const newSpan = tracer.startSpan('foo'); - newSpan.setAttribute('foo', 'bar'); - newSpan.end(); - }); - - fastify.use((req, res, next) => { - const span = api.trace.getSpan(api.context.active()); - span.setAttribute('order', 1); - next(); - }); - - fastify.post('/run_test2/:id', async (req, res) => { - const span = api.trace.getSpan(api.context.active()); - span.setAttribute('order', 4); - - const result = await axios.get( - 'https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/main/package.json' - ); - const result2 = await axios.get( - 'https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/main/package.json' - ); - - console.log('sending response'); - // throw Error('boom lala'); - res.send(`OK ${result.data.version} ${result2.data.version}`); - }); - - fastify.addHook('onRequest', (req, reply, done) => { - const span = api.trace.getSpan(api.context.active()); - console.log('first', span); - console.log('kuku1'); - span.setAttribute('kuku1', 'lala'); - - setTimeout(() => { - console.log('kuku2'); - span.setAttribute('kuku2', 'lala'); - const newSpan = api.trace.tracer.startSpan('tada'); - newSpan.end(); - - reply.send('foo'); - done(); - }, 2000); - }); -} - -app.post('/run_test/:id', async (req, res) => { - const result = await axios.get( - 'https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/main/package.json' - ); - console.log('sending response'); - res.send(`OK ${result.data.version}`); -}); - -app.listen({ - port: PORT, -}); diff --git a/release-please-config.json b/release-please-config.json index 18bd96821c..7233d8d054 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -46,7 +46,6 @@ "packages/instrumentation-connect": {}, "packages/instrumentation-dns": {}, "packages/instrumentation-express": {}, - "packages/instrumentation-fastify": {}, "packages/instrumentation-generic-pool": {}, "packages/instrumentation-graphql": {}, "packages/instrumentation-hapi": {}, From 899dede71471930a0eda845fd3611cbb572a5f6c Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Mon, 2 Mar 2026 13:29:34 -0800 Subject: [PATCH 3/4] lint:fix --- packages/auto-instrumentations-node/README.md | 2 +- packages/auto-instrumentations-node/src/utils.ts | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/auto-instrumentations-node/README.md b/packages/auto-instrumentations-node/README.md index c7cfb4b526..7500daa8be 100644 --- a/packages/auto-instrumentations-node/README.md +++ b/packages/auto-instrumentations-node/README.md @@ -209,7 +209,7 @@ registerInstrumentations({ ### Removed instrumentations - [`@opentelemetry/instrumentation-fastify`](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/archive/instrumentation-fastify) was removed Mar 2026. It had been deprecated (and default disabled) Jan 2025, in favor of the [`@fastify/otel`](https://www.npmjs.com/package/@fastify/otel) instrumentation package, maintained by the Fastify authors. - - Please see [the offical plugin's README.md](https://github.com/fastify/otel?tab=readme-ov-file#usage) for instructions on how to use `@fastify/otel`. + - Please see [the offical plugin's README.md](https://github.com/fastify/otel?tab=readme-ov-file#usage) for instructions on how to use `@fastify/otel`. ## Useful links diff --git a/packages/auto-instrumentations-node/src/utils.ts b/packages/auto-instrumentations-node/src/utils.ts index 0aa1079849..ee3fb68c09 100644 --- a/packages/auto-instrumentations-node/src/utils.ts +++ b/packages/auto-instrumentations-node/src/utils.ts @@ -137,9 +137,7 @@ const InstrumentationMap = { '@opentelemetry/instrumentation-winston': WinstonInstrumentation, }; -const defaultExcludedInstrumentations = [ - '@opentelemetry/instrumentation-fs', -]; +const defaultExcludedInstrumentations = ['@opentelemetry/instrumentation-fs']; // Config types inferred automatically from the first argument of the constructor type ConfigArg = T extends new (...args: infer U) => unknown ? U[0] : never; From 477ed20521a94d7a3985e5059915e600e7cb72d4 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Mon, 2 Mar 2026 13:56:03 -0800 Subject: [PATCH 4/4] remove some lingering refs --- .github/component_owners.yml | 2 -- GUIDELINES.md | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/component_owners.yml b/.github/component_owners.yml index 5f01a17b2c..a3c8c5558c 100644 --- a/.github/component_owners.yml +++ b/.github/component_owners.yml @@ -102,8 +102,6 @@ components: - JamieDanielson - pkanal - raphael-theriault-swi - packages/instrumentation-fastify: [] - # Unmaintained packages/instrumentation-generic-pool: [] # Unmaintained packages/instrumentation-graphql: diff --git a/GUIDELINES.md b/GUIDELINES.md index a3850fc6e3..3dd928b324 100644 --- a/GUIDELINES.md +++ b/GUIDELINES.md @@ -193,7 +193,7 @@ Instrumentation should not add additional debug messages for triggering the patc Instrumentation may add additional patch/unpatch messages for specific functions if it is expected to help in troubleshooting issues with the instrumentation. Few examples: - If the patch logic is conditional, and user can benefit from ensuring the condition is met and the patch happened. `koa` patching logic examine an object and branch between patching it as router vs middleware, which is applied at runtime. `aws-lambda` will abort patching if the environment is not configured properly. -- When the patch is not applied directly on a `moduleExports` object in the `InstrumentationBase` callbacks, but rather from an event in the package, like creating new client instance, registering a listener, etc. `fastify` instrumentation applies a patch when a hook is added to the fastify app instance, which is patched from `moduleExports`. +- When the patch is not applied directly on a `moduleExports` object in the `InstrumentationBase` callbacks, but rather from an event in the package, like creating new client instance, registering a listener, etc. - In situations where the patch logic is not trivial and it helps to specify patch events in the right context and nuances. `aws-lambda` logs additional properties extracted from the lambda framework and exposes them for troubleshooting. The cases above are not covered by the base class and offer additional context to the user troubleshooting an issue with the instrumentation.