Skip to content

Commit

Permalink
fix: node 14.17 breaks due to undici instrumentation
Browse files Browse the repository at this point in the history
  • Loading branch information
blumamir committed Jul 30, 2024
1 parent a3d0ad4 commit a0c3468
Show file tree
Hide file tree
Showing 5 changed files with 495 additions and 821 deletions.
55 changes: 46 additions & 9 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@odigos/opentelemetry-node",
"version": "0.0.1",
"description": "Odigos distribution of OpenTelemetry for Node.js",
"main": "build/src/index.js",
"main": "build/src/autoinstrumentation.js",
"repository": "https://github.com/odigos-io/opentelemetry-node",
"author": "Odigos Authors",
"license": "Apache-2.0",
Expand All @@ -11,14 +11,51 @@
},
"dependencies": {
"@bufbuild/protobuf": "^1.10.0",
"@opentelemetry/api": "1.8.0",
"@opentelemetry/auto-instrumentations-node": "0.46.1",
"@opentelemetry/context-async-hooks": "1.25.0",
"@opentelemetry/core": "1.25.0",
"@opentelemetry/exporter-trace-otlp-grpc": "0.51.1",
"@opentelemetry/resources": "1.25.0",
"@opentelemetry/sdk-trace-node": "1.25.0",
"@opentelemetry/semantic-conventions": "1.25.0",
"@opentelemetry/api": "1.9.0",
"@opentelemetry/context-async-hooks": "1.25.1",
"@opentelemetry/core": "1.25.1",
"@opentelemetry/exporter-trace-otlp-grpc": "0.52.1",
"@opentelemetry/instrumentation": "0.52.1",
"@opentelemetry/resources": "1.25.1",
"@opentelemetry/sdk-trace-node": "1.25.1",
"@opentelemetry/semantic-conventions": "1.25.1",
"@opentelemetry/instrumentation-amqplib": "0.40.0",
"@opentelemetry/instrumentation-aws-sdk": "0.43.1",
"@opentelemetry/instrumentation-bunyan": "0.40.0",
"@opentelemetry/instrumentation-cassandra-driver": "0.40.0",
"@opentelemetry/instrumentation-connect": "0.38.0",
"@opentelemetry/instrumentation-dataloader": "0.11.0",
"@opentelemetry/instrumentation-dns": "0.38.0",
"@opentelemetry/instrumentation-express": "0.41.1",
"@opentelemetry/instrumentation-fastify": "0.38.0",
"@opentelemetry/instrumentation-fs": "0.14.0",
"@opentelemetry/instrumentation-generic-pool": "0.38.0",
"@opentelemetry/instrumentation-graphql": "0.42.0",
"@opentelemetry/instrumentation-grpc": "0.52.1",
"@opentelemetry/instrumentation-hapi": "0.40.0",
"@opentelemetry/instrumentation-http": "0.52.1",
"@opentelemetry/instrumentation-ioredis": "0.42.0",
"@opentelemetry/instrumentation-kafkajs": "0.2.0",
"@opentelemetry/instrumentation-knex": "0.39.0",
"@opentelemetry/instrumentation-koa": "0.42.0",
"@opentelemetry/instrumentation-lru-memoizer": "0.39.0",
"@opentelemetry/instrumentation-memcached": "0.38.0",
"@opentelemetry/instrumentation-mongodb": "0.46.0",
"@opentelemetry/instrumentation-mongoose": "0.40.0",
"@opentelemetry/instrumentation-mysql": "0.40.0",
"@opentelemetry/instrumentation-mysql2": "0.40.0",
"@opentelemetry/instrumentation-nestjs-core": "0.39.0",
"@opentelemetry/instrumentation-net": "0.38.0",
"@opentelemetry/instrumentation-pg": "0.43.0",
"@opentelemetry/instrumentation-pino": "0.41.0",
"@opentelemetry/instrumentation-redis": "0.41.0",
"@opentelemetry/instrumentation-redis-4": "0.41.0",
"@opentelemetry/instrumentation-restify": "0.40.0",
"@opentelemetry/instrumentation-router": "0.39.0",
"@opentelemetry/instrumentation-socket.io": "0.41.0",
"@opentelemetry/instrumentation-tedious": "0.12.0",
"@opentelemetry/instrumentation-undici": "0.4.0",
"@opentelemetry/instrumentation-winston": "0.39.0",
"axios": "^1.7.2",
"semver": "^7.6.2",
"uuidv7": "^1.0.1"
Expand Down
78 changes: 78 additions & 0 deletions src/components.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { Instrumentation } from "@opentelemetry/instrumentation";
import { diag } from "@opentelemetry/api";

const instrumentations = [
["@opentelemetry/instrumentation-amqplib", "AmqplibInstrumentation"],
["@opentelemetry/instrumentation-aws-sdk", "AwsInstrumentation"],
["@opentelemetry/instrumentation-bunyan", "BunyanInstrumentation"],
[
"@opentelemetry/instrumentation-cassandra-driver",
"CassandraDriverInstrumentation",
],
["@opentelemetry/instrumentation-connect", "ConnectInstrumentation"],
["@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"],
["@opentelemetry/instrumentation-grpc", "GrpcInstrumentation"],
["@opentelemetry/instrumentation-hapi", "HapiInstrumentation"],
["@opentelemetry/instrumentation-http", "HttpInstrumentation"],
["@opentelemetry/instrumentation-ioredis", "IORedisInstrumentation"],
["@opentelemetry/instrumentation-kafkajs", "KafkaJsInstrumentation"],
["@opentelemetry/instrumentation-knex", "KnexInstrumentation"],
["@opentelemetry/instrumentation-koa", "KoaInstrumentation"],
["@opentelemetry/instrumentation-lru-memoizer", "LruMemoizerInstrumentation"],
["@opentelemetry/instrumentation-memcached", "MemcachedInstrumentation"],
["@opentelemetry/instrumentation-mongodb", "MongoDBInstrumentation"],
["@opentelemetry/instrumentation-mongoose", "MongooseInstrumentation"],
["@opentelemetry/instrumentation-mysql2", "MySQL2Instrumentation"],
["@opentelemetry/instrumentation-mysql", "MySQLInstrumentation"],
["@opentelemetry/instrumentation-nestjs-core", "NestInstrumentation"],
["@opentelemetry/instrumentation-net", "NetInstrumentation"],
["@opentelemetry/instrumentation-pg", "PgInstrumentation"],
["@opentelemetry/instrumentation-pino", "PinoInstrumentation"],
["@opentelemetry/instrumentation-redis", "RedisInstrumentation"],
["@opentelemetry/instrumentation-redis-4", "RedisInstrumentation"],
["@opentelemetry/instrumentation-restify", "RestifyInstrumentation"],
["@opentelemetry/instrumentation-router", "RouterInstrumentation"],
["@opentelemetry/instrumentation-socket.io", "SocketIoInstrumentation"],
["@opentelemetry/instrumentation-tedious", "TediousInstrumentation"],
["@opentelemetry/instrumentation-undici", "UndiciInstrumentation"],
["@opentelemetry/instrumentation-winston", "WinstonInstrumentation"],
];

const safeRequire = (
npmPackageName: string,
importName: string
): Instrumentation | undefined => {
try {
const moduleExports = require(npmPackageName);
const instrumentationClass = moduleExports[importName];
if (!instrumentationClass) {
diag.warn(
"Failed to require instrumentation class. this might be ok for EOF node versions",
{ npmPackageName, importName }
);
return undefined;
}
const instrumentation = new instrumentationClass();
return instrumentation;
} catch (e) {
diag.error("Failed to require and instantiate an instrumentation class", {
npmPackageName,
importName,
});
return undefined;
}
};

export const getNodeAutoInstrumentations = (): Instrumentation[] => {
return instrumentations
.map(([npmPackageName, importName]) =>
safeRequire(npmPackageName, importName)
)
.filter((instrumentations) => !!instrumentations);
};
11 changes: 0 additions & 11 deletions src/index.ts

This file was deleted.

2 changes: 1 addition & 1 deletion src/instrumentation-libraries.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { Instrumentation } from "@opentelemetry/instrumentation";
import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";
import { ProxyTracerProvider, TracerProvider, diag, trace } from "@opentelemetry/api";
import {
InstrumentationLibraryConfiguration,
TraceSignalGeneralConfig,
} from "./opamp";
import { PackageStatus } from "./opamp/generated/opamp_pb";
import { PartialMessage } from "@bufbuild/protobuf";
import { getNodeAutoInstrumentations } from "./components";

type OdigosInstrumentation = {
otelInstrumentation: Instrumentation;
Expand Down
Loading

0 comments on commit a0c3468

Please sign in to comment.