diff --git a/package-lock.json b/package-lock.json index ce6cac21c8..8f485eb274 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32330,6 +32330,23 @@ "@opentelemetry/core": "^2.0.0" } }, + "packages/auto-instrumentations-node/node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.51.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.51.0.tgz", + "integrity": "sha512-XNLWeMTMG1/EkQBbgPYzCeBD0cwOrfnn8ao4hWgLv0fNCFQu1kCsJYygz2cvKuCs340RlnG4i321hX7R8gj3Rg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.203.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, "packages/auto-instrumentations-node/node_modules/@types/node": { "version": "18.18.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.14.tgz", @@ -32789,7 +32806,7 @@ "@aws-sdk/client-kinesis": "^3.85.0", "@aws-sdk/client-lambda": "^3.85.0", "@aws-sdk/client-s3": "^3.85.0", - "@aws-sdk/client-secrets-manager": "3.85.0", + "@aws-sdk/client-secrets-manager": "^3.85.0", "@aws-sdk/client-sns": "^3.85.0", "@aws-sdk/client-sqs": "^3.85.0", "@aws-sdk/types": "^3.370.0", @@ -33637,16 +33654,16 @@ }, "packages/instrumentation-koa": { "name": "@opentelemetry/instrumentation-koa", - "version": "0.51.0", + "version": "0.52.0", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.203.0", - "@opentelemetry/semantic-conventions": "^1.27.0" + "@opentelemetry/semantic-conventions": "^1.36.0" }, "devDependencies": { "@koa/router": "13.1.1", - "@opentelemetry/api": "^1.3.0", + "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^2.0.0", "@opentelemetry/contrib-test-utils": "^0.49.0", "@opentelemetry/instrumentation-http": "^0.203.0", @@ -33657,7 +33674,7 @@ "@types/mocha": "10.0.10", "@types/node": "18.18.14", "@types/sinon": "17.0.4", - "koa": "2.16.1", + "koa": "3.0.1", "nyc": "17.1.0", "rimraf": "5.0.10", "semver": "7.7.2", @@ -33669,7 +33686,7 @@ "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api": "^1.9.0" } }, "packages/instrumentation-koa/node_modules/@types/node": { @@ -33681,6 +33698,147 @@ "undici-types": "~5.26.4" } }, + "packages/instrumentation-koa/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/instrumentation-koa/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" + } + }, + "packages/instrumentation-koa/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" + } + }, + "packages/instrumentation-koa/node_modules/koa": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/koa/-/koa-3.0.1.tgz", + "integrity": "sha512-oDxVkRwPOHhGlxKIDiDB2h+/l05QPtefD7nSqRgDfZt8P+QVYFWjfeK8jANf5O2YXjk8egd7KntvXKYx82wOag==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^1.3.8", + "content-disposition": "~0.5.4", + "content-type": "^1.0.5", + "cookies": "~0.9.1", + "delegates": "^1.0.0", + "destroy": "^1.2.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.5.0", + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "packages/instrumentation-koa/node_modules/koa/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/instrumentation-koa/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/instrumentation-koa/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/instrumentation-koa/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/instrumentation-koa/node_modules/type-is/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/instrumentation-koa/node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, "packages/instrumentation-koa/node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -42705,6 +42863,16 @@ "typescript": "5.0.4" }, "dependencies": { + "@opentelemetry/instrumentation-koa": { + "version": "0.51.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.51.0.tgz", + "integrity": "sha512-XNLWeMTMG1/EkQBbgPYzCeBD0cwOrfnn8ao4hWgLv0fNCFQu1kCsJYygz2cvKuCs340RlnG4i321hX7R8gj3Rg==", + "requires": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.203.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + } + }, "@types/node": { "version": "18.18.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.14.tgz", @@ -43257,7 +43425,7 @@ "@aws-sdk/client-kinesis": "^3.85.0", "@aws-sdk/client-lambda": "^3.85.0", "@aws-sdk/client-s3": "^3.85.0", - "@aws-sdk/client-secrets-manager": "3.85.0", + "@aws-sdk/client-secrets-manager": "^3.85.0", "@aws-sdk/client-sns": "^3.85.0", "@aws-sdk/client-sqs": "^3.85.0", "@aws-sdk/types": "^3.370.0", @@ -43990,7 +44158,7 @@ "version": "file:packages/instrumentation-koa", "requires": { "@koa/router": "13.1.1", - "@opentelemetry/api": "^1.3.0", + "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^2.0.0", "@opentelemetry/contrib-test-utils": "^0.49.0", "@opentelemetry/core": "^2.0.0", @@ -43998,13 +44166,13 @@ "@opentelemetry/instrumentation-http": "^0.203.0", "@opentelemetry/sdk-trace-base": "^2.0.0", "@opentelemetry/sdk-trace-node": "^2.0.0", - "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/semantic-conventions": "^1.36.0", "@types/koa": "2.15.0", "@types/koa__router": "12.0.4", "@types/mocha": "10.0.10", "@types/node": "18.18.14", "@types/sinon": "17.0.4", - "koa": "2.16.1", + "koa": "3.0.1", "nyc": "17.1.0", "rimraf": "5.0.10", "semver": "7.7.2", @@ -44022,6 +44190,108 @@ "undici-types": "~5.26.4" } }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "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, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "koa": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/koa/-/koa-3.0.1.tgz", + "integrity": "sha512-oDxVkRwPOHhGlxKIDiDB2h+/l05QPtefD7nSqRgDfZt8P+QVYFWjfeK8jANf5O2YXjk8egd7KntvXKYx82wOag==", + "dev": true, + "requires": { + "accepts": "^1.3.8", + "content-disposition": "~0.5.4", + "content-type": "^1.0.5", + "cookies": "~0.9.1", + "delegates": "^1.0.0", + "destroy": "^1.2.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.5.0", + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "dependencies": { + "mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "requires": { + "mime-db": "^1.54.0" + } + } + } + }, + "media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "requires": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "dependencies": { + "mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "requires": { + "mime-db": "^1.54.0" + } + } + } + }, + "typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true + }, "undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", diff --git a/packages/instrumentation-koa/.tav.yml b/packages/instrumentation-koa/.tav.yml index d329351f69..fb4111e906 100644 --- a/packages/instrumentation-koa/.tav.yml +++ b/packages/instrumentation-koa/.tav.yml @@ -13,6 +13,6 @@ koa: # Testing ^2.7.0 covers at least 97% of the downloaded koa versions versions: - include: "^2.7.0" + include: "^3.0.1" mode: latest-minors commands: npm run test diff --git a/packages/instrumentation-koa/README.md b/packages/instrumentation-koa/README.md index 86e5a36484..72a08fa87b 100644 --- a/packages/instrumentation-koa/README.md +++ b/packages/instrumentation-koa/README.md @@ -23,7 +23,7 @@ npm install --save @opentelemetry/instrumentation-koa ### Supported Versions -- [`koa`](https://www.npmjs.com/package/koa) versions `>=2.0.0 <3` +- [`koa`](https://www.npmjs.com/package/koa) versions `>=2.0.0 <4` - [`@koa/router`](https://www.npmjs.com/package/@koa/router) versions `>=8.0.0` ## Usage diff --git a/packages/instrumentation-koa/package.json b/packages/instrumentation-koa/package.json index c160c42c5b..18f170bec4 100644 --- a/packages/instrumentation-koa/package.json +++ b/packages/instrumentation-koa/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-koa", - "version": "0.51.0", + "version": "0.52.0", "description": "OpenTelemetry instrumentation for `koa` http web application framework", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -46,11 +46,11 @@ "access": "public" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api": "^1.9.0" }, "devDependencies": { "@koa/router": "13.1.1", - "@opentelemetry/api": "^1.3.0", + "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^2.0.0", "@opentelemetry/contrib-test-utils": "^0.49.0", "@opentelemetry/instrumentation-http": "^0.203.0", @@ -61,7 +61,7 @@ "@types/mocha": "10.0.10", "@types/node": "18.18.14", "@types/sinon": "17.0.4", - "koa": "2.16.1", + "koa": "3.0.1", "nyc": "17.1.0", "rimraf": "5.0.10", "semver": "7.7.2", @@ -72,7 +72,7 @@ "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.203.0", - "@opentelemetry/semantic-conventions": "^1.27.0" + "@opentelemetry/semantic-conventions": "^1.36.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-koa#readme" } diff --git a/packages/instrumentation-koa/src/instrumentation.ts b/packages/instrumentation-koa/src/instrumentation.ts index 3d7eb864a4..b23f26c82c 100644 --- a/packages/instrumentation-koa/src/instrumentation.ts +++ b/packages/instrumentation-koa/src/instrumentation.ts @@ -44,7 +44,7 @@ export class KoaInstrumentation extends InstrumentationBase=2.0.0 <3'], + ['>=2.0.0 <4'], (module: any) => { const moduleExports: typeof koa = module[Symbol.toStringTag] === 'Module' diff --git a/packages/instrumentation-koa/src/utils.ts b/packages/instrumentation-koa/src/utils.ts index 2bbfd027ef..cbce88c61d 100644 --- a/packages/instrumentation-koa/src/utils.ts +++ b/packages/instrumentation-koa/src/utils.ts @@ -17,7 +17,9 @@ import { KoaLayerType, KoaInstrumentationConfig } from './types'; import { KoaContext, KoaMiddleware } from './internal-types'; import { AttributeNames } from './enums/AttributeNames'; import { Attributes } from '@opentelemetry/api'; -import { SEMATTRS_HTTP_ROUTE } from '@opentelemetry/semantic-conventions'; +import { + ATTR_HTTP_ROUTE, +} from '@opentelemetry/semantic-conventions'; export const getMiddlewareMetadata = ( context: KoaContext, @@ -33,7 +35,7 @@ export const getMiddlewareMetadata = ( attributes: { [AttributeNames.KOA_NAME]: layerPath?.toString(), [AttributeNames.KOA_TYPE]: KoaLayerType.ROUTER, - [SEMATTRS_HTTP_ROUTE]: layerPath?.toString(), + [ATTR_HTTP_ROUTE]: layerPath?.toString(), }, name: context._matchedRouteName || `router - ${layerPath}`, }; diff --git a/packages/instrumentation-koa/test/koa.test.ts b/packages/instrumentation-koa/test/koa.test.ts index cbb5917b7e..6889f105cd 100644 --- a/packages/instrumentation-koa/test/koa.test.ts +++ b/packages/instrumentation-koa/test/koa.test.ts @@ -26,9 +26,9 @@ import { SimpleSpanProcessor, } from '@opentelemetry/sdk-trace-base'; import { + ATTR_HTTP_ROUTE, SEMATTRS_EXCEPTION_MESSAGE, SEMATTRS_HTTP_METHOD, - SEMATTRS_HTTP_ROUTE, } from '@opentelemetry/semantic-conventions'; type KoaContext = ParameterizedContext; @@ -144,11 +144,6 @@ describe('Koa Instrumentation', function () { throw new Error('I failed!'); }; - const generatorMiddleware: () => koa.Middleware = () => - function* generatorMiddleware(next) { - yield next; - }; - describe('Instrumenting @koa/router calls', function () { before(function () { if (!isrouterCompat) { @@ -198,7 +193,7 @@ describe('Koa Instrumentation', function () { ); assert.strictEqual( - requestHandlerSpan?.attributes[SEMATTRS_HTTP_ROUTE], + requestHandlerSpan?.attributes[ATTR_HTTP_ROUTE], '/post/:id' ); @@ -249,7 +244,7 @@ describe('Koa Instrumentation', function () { ); assert.strictEqual( - requestHandlerSpan?.attributes[SEMATTRS_HTTP_ROUTE], + requestHandlerSpan?.attributes[ATTR_HTTP_ROUTE], '/^\\/post/' ); @@ -296,7 +291,7 @@ describe('Koa Instrumentation', function () { ); assert.strictEqual( - requestHandlerSpan?.attributes[SEMATTRS_HTTP_ROUTE], + requestHandlerSpan?.attributes[ATTR_HTTP_ROUTE], '/post/:id' ); @@ -345,7 +340,7 @@ describe('Koa Instrumentation', function () { ); assert.strictEqual( - requestHandlerSpan?.attributes[SEMATTRS_HTTP_ROUTE], + requestHandlerSpan?.attributes[ATTR_HTTP_ROUTE], '/:first/post/:id' ); @@ -392,7 +387,7 @@ describe('Koa Instrumentation', function () { ); assert.strictEqual( - requestHandlerSpan?.attributes[SEMATTRS_HTTP_ROUTE], + requestHandlerSpan?.attributes[ATTR_HTTP_ROUTE], '/:first/post/:id' ); @@ -502,35 +497,6 @@ describe('Koa Instrumentation', function () { ); }); - it('should not instrument generator middleware functions', async () => { - const rootSpan = tracer.startSpan('rootSpan'); - app.use((_ctx, next) => - context.with(trace.setSpan(context.active(), rootSpan), next) - ); - - app.use(generatorMiddleware()); - app.use(simpleResponse()); - - await context.with( - trace.setSpan(context.active(), rootSpan), - async () => { - await httpRequest.get(`http://localhost:${port}`); - rootSpan.end(); - assert.deepStrictEqual(memoryExporter.getFinishedSpans().length, 2); - - const simpleResponseSpan = memoryExporter - .getFinishedSpans() - .find(span => span.name.includes('simpleResponse')); - assert.notStrictEqual(simpleResponseSpan, undefined); - - const exportedRootSpan = memoryExporter - .getFinishedSpans() - .find(span => span.name === 'rootSpan'); - assert.notStrictEqual(exportedRootSpan, undefined); - } - ); - }); - it('should not instrument the same middleware more than once', async () => { const sameAsyncMiddleware = asyncMiddleware();