From a00f390977a3091b068cf1485e7596b4133ea5d8 Mon Sep 17 00:00:00 2001 From: Rauno Viskus Date: Fri, 30 Sep 2022 14:32:24 +0300 Subject: [PATCH] feat: add new instrumentations into `auto-instrumentations-node` (#981) * feat: add new instrumentations into auto-instrumentations-node * test: test to make sure all installed instrumentations are added * fix: register the added instrumentations * test: remove the redundant test * fix: add fs instrumentation back I missed during conflict resolution * fix: add config argument to RouterInstrumentation * style: lint it --- .../auto-instrumentations-node/package.json | 3 ++ .../auto-instrumentations-node/src/utils.ts | 7 +++ .../test/utils.test.ts | 54 ++++--------------- .../src/instrumentation.ts | 9 +++- 4 files changed, 28 insertions(+), 45 deletions(-) diff --git a/metapackages/auto-instrumentations-node/package.json b/metapackages/auto-instrumentations-node/package.json index 112ac785ac7..443e3badc96 100644 --- a/metapackages/auto-instrumentations-node/package.json +++ b/metapackages/auto-instrumentations-node/package.json @@ -56,6 +56,7 @@ "@opentelemetry/instrumentation-dataloader": "^0.2.0", "@opentelemetry/instrumentation-dns": "^0.30.0", "@opentelemetry/instrumentation-express": "^0.31.2", + "@opentelemetry/instrumentation-fs": "^0.5.0", "@opentelemetry/instrumentation-fastify": "^0.30.0", "@opentelemetry/instrumentation-generic-pool": "^0.30.0", "@opentelemetry/instrumentation-graphql": "^0.31.0", @@ -78,6 +79,8 @@ "@opentelemetry/instrumentation-redis": "^0.33.0", "@opentelemetry/instrumentation-redis-4": "^0.33.0", "@opentelemetry/instrumentation-restify": "^0.30.0", + "@opentelemetry/instrumentation-router": "^0.30.0", + "@opentelemetry/instrumentation-tedious": "^0.4.0", "@opentelemetry/instrumentation-winston": "^0.30.0" } } diff --git a/metapackages/auto-instrumentations-node/src/utils.ts b/metapackages/auto-instrumentations-node/src/utils.ts index 826dd302214..2daba2146d7 100644 --- a/metapackages/auto-instrumentations-node/src/utils.ts +++ b/metapackages/auto-instrumentations-node/src/utils.ts @@ -16,6 +16,7 @@ import { diag } from '@opentelemetry/api'; import { Instrumentation } from '@opentelemetry/instrumentation'; + import { AmqplibInstrumentation } from '@opentelemetry/instrumentation-amqplib'; import { AwsLambdaInstrumentation } from '@opentelemetry/instrumentation-aws-lambda'; import { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk'; @@ -26,6 +27,7 @@ import { DataloaderInstrumentation } from '@opentelemetry/instrumentation-datalo 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'; import { GrpcInstrumentation } from '@opentelemetry/instrumentation-grpc'; @@ -47,6 +49,8 @@ import { PinoInstrumentation } from '@opentelemetry/instrumentation-pino'; import { RedisInstrumentation as RedisInstrumentationV2 } from '@opentelemetry/instrumentation-redis'; import { RedisInstrumentation as RedisInstrumentationV4 } from '@opentelemetry/instrumentation-redis-4'; import { RestifyInstrumentation } from '@opentelemetry/instrumentation-restify'; +import { RouterInstrumentation } from '@opentelemetry/instrumentation-router'; +import { TediousInstrumentation } from '@opentelemetry/instrumentation-tedious'; import { WinstonInstrumentation } from '@opentelemetry/instrumentation-winston'; const InstrumentationMap = { @@ -61,6 +65,7 @@ const InstrumentationMap = { '@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, '@opentelemetry/instrumentation-grpc': GrpcInstrumentation, @@ -82,6 +87,8 @@ const InstrumentationMap = { '@opentelemetry/instrumentation-redis': RedisInstrumentationV2, '@opentelemetry/instrumentation-redis-4': RedisInstrumentationV4, '@opentelemetry/instrumentation-restify': RestifyInstrumentation, + '@opentelemetry/instrumentation-router': RouterInstrumentation, + '@opentelemetry/instrumentation-tedious': TediousInstrumentation, '@opentelemetry/instrumentation-winston': WinstonInstrumentation, }; diff --git a/metapackages/auto-instrumentations-node/test/utils.test.ts b/metapackages/auto-instrumentations-node/test/utils.test.ts index aaef8784eeb..5707eed8f35 100644 --- a/metapackages/auto-instrumentations-node/test/utils.test.ts +++ b/metapackages/auto-instrumentations-node/test/utils.test.ts @@ -22,50 +22,18 @@ import { getNodeAutoInstrumentations } from '../src'; describe('utils', () => { describe('getNodeAutoInstrumentations', () => { - it('should load default instrumentations', () => { + it('should include all installed instrumentations', () => { const instrumentations = getNodeAutoInstrumentations(); - const expectedInstrumentations = [ - '@opentelemetry/instrumentation-amqplib', - '@opentelemetry/instrumentation-aws-lambda', - '@opentelemetry/instrumentation-aws-sdk', - '@opentelemetry/instrumentation-bunyan', - '@opentelemetry/instrumentation-cassandra-driver', - '@opentelemetry/instrumentation-connect', - '@opentelemetry/instrumentation-dataloader', - '@opentelemetry/instrumentation-dns', - '@opentelemetry/instrumentation-express', - '@opentelemetry/instrumentation-fastify', - '@opentelemetry/instrumentation-generic-pool', - '@opentelemetry/instrumentation-graphql', - '@opentelemetry/instrumentation-grpc', - '@opentelemetry/instrumentation-hapi', - '@opentelemetry/instrumentation-http', - '@opentelemetry/instrumentation-ioredis', - '@opentelemetry/instrumentation-knex', - '@opentelemetry/instrumentation-koa', - '@opentelemetry/instrumentation-lru-memoizer', - '@opentelemetry/instrumentation-memcached', - '@opentelemetry/instrumentation-mongodb', - '@opentelemetry/instrumentation-mongoose', - '@opentelemetry/instrumentation-mysql2', - '@opentelemetry/instrumentation-mysql', - '@opentelemetry/instrumentation-nestjs-core', - '@opentelemetry/instrumentation-net', - '@opentelemetry/instrumentation-pg', - '@opentelemetry/instrumentation-pino', - '@opentelemetry/instrumentation-redis', - '@opentelemetry/instrumentation-redis-4', - '@opentelemetry/instrumentation-restify', - '@opentelemetry/instrumentation-winston', - ]; - assert.strictEqual(instrumentations.length, 32); - for (let i = 0, j = instrumentations.length; i < j; i++) { - assert.strictEqual( - instrumentations[i].instrumentationName, - expectedInstrumentations[i], - `Instrumentation ${expectedInstrumentations[i]}, not loaded` - ); - } + const installedInstrumentations = Object.keys( + require('../package.json').dependencies + ).filter(depName => { + return depName.startsWith('@opentelemetry/instrumentation-'); + }); + + assert.deepStrictEqual( + new Set(instrumentations.map(i => i.instrumentationName)), + new Set(installedInstrumentations) + ); }); it('should use user config', () => { diff --git a/plugins/node/opentelemetry-instrumentation-router/src/instrumentation.ts b/plugins/node/opentelemetry-instrumentation-router/src/instrumentation.ts index 125f2e28a82..7de5eeea617 100644 --- a/plugins/node/opentelemetry-instrumentation-router/src/instrumentation.ts +++ b/plugins/node/opentelemetry-instrumentation-router/src/instrumentation.ts @@ -16,6 +16,7 @@ import * as api from '@opentelemetry/api'; import { + InstrumentationConfig, InstrumentationBase, InstrumentationNodeModuleDefinition, InstrumentationNodeModuleFile, @@ -34,8 +35,12 @@ import AttributeNames from './enums/AttributeNames'; import LayerType from './enums/LayerType'; export default class RouterInstrumentation extends InstrumentationBase { - constructor() { - super(`@opentelemetry/instrumentation-${constants.MODULE_NAME}`, VERSION); + constructor(config?: InstrumentationConfig) { + super( + `@opentelemetry/instrumentation-${constants.MODULE_NAME}`, + VERSION, + config + ); } private _moduleVersion?: string;