Skip to content

Commit 099ce4a

Browse files
authored
chore: update to otel 1.27.0 / 0.54.0 (#969)
* chore: update to otel 1.27.0 / 0.54.0 * update node version for lint job * update grpc-js
1 parent da88406 commit 099ce4a

File tree

13 files changed

+1032
-1149
lines changed

13 files changed

+1032
-1149
lines changed

.eslintrc.js

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ module.exports = {
2929
],
3030
"@typescript-eslint/no-unused-vars": ["error", {"argsIgnorePattern": "^_", "args": "after-used"}],
3131
"@typescript-eslint/no-inferrable-types": ["error", { ignoreProperties: true }],
32+
"@typescript-eslint/no-unsafe-function-type": "off",
33+
"@typescript-eslint/no-require-imports": "off",
3234
"arrow-parens": ["error", "always"],
3335
"prettier/prettier": ["error", {
3436
"singleQuote": true,

.github/workflows/lint.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
run: git fetch origin ${{ github.base_ref }}
1313
- uses: actions/setup-node@v3
1414
with:
15-
node-version: 16
15+
node-version: 22
1616
- name: Install npm dependencies
1717
run: npm ci --ignore-scripts
1818
- name: Check version

package-lock.json

+896-1,046
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+60-62
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,15 @@
6464
"@elastic/elasticsearch": "^7.17.11",
6565
"@types/bunyan": "1.8.11",
6666
"@types/semver": "^7.5.0",
67-
"@types/sinon": "^17.0.3",
68-
"@typescript-eslint/eslint-plugin": "^7.18.0",
69-
"@typescript-eslint/parser": "^7.18.0",
67+
"@typescript-eslint/eslint-plugin": "^8.14.0",
68+
"@typescript-eslint/parser": "^8.14.0",
7069
"bunyan": "1.8.15",
7170
"cross-env": "^7.0.3",
7271
"eslint": "^8.57.0",
7372
"eslint-config-prettier": "^9.1.0",
7473
"eslint-plugin-header": "^3.1.1",
7574
"eslint-plugin-node": "^11.1.0",
76-
"eslint-plugin-prettier": "^5.1.3",
75+
"eslint-plugin-prettier": "^5.2.1",
7776
"gts": "^5.3.1",
7877
"mysql2": "^3.10.2",
7978
"nock": "^13.5.4",
@@ -82,73 +81,72 @@
8281
"pg": "^8.4.2",
8382
"pino": "^8.7.0",
8483
"prebuildify": "^6.0.1",
85-
"prettier": "^3.3.2",
84+
"prettier": "^3.3.3",
8685
"redis": "^3.1.2",
8786
"sequelize": "^6.32.1",
88-
"sinon": "^18.0.0",
8987
"ts-node": "^10.9.2",
9088
"typeorm": "^0.3.17",
91-
"typescript": "5.5.3",
89+
"typescript": "5.6.3",
9290
"winston": "3.10.0"
9391
},
9492
"dependencies": {
95-
"@grpc/grpc-js": "^1.11.1",
93+
"@grpc/grpc-js": "^1.12.2",
9694
"@opentelemetry/api": "^1.8.0",
97-
"@opentelemetry/api-logs": "^0.53.0",
98-
"@opentelemetry/context-async-hooks": "1.26.0",
99-
"@opentelemetry/core": "1.26.0",
100-
"@opentelemetry/exporter-logs-otlp-http": "0.53.0",
101-
"@opentelemetry/exporter-logs-otlp-proto": "0.53.0",
102-
"@opentelemetry/exporter-metrics-otlp-grpc": "0.53.0",
103-
"@opentelemetry/exporter-metrics-otlp-proto": "0.53.0",
104-
"@opentelemetry/exporter-trace-otlp-grpc": "0.53.0",
105-
"@opentelemetry/exporter-trace-otlp-proto": "0.53.0",
106-
"@opentelemetry/instrumentation": "0.53.0",
107-
"@opentelemetry/instrumentation-amqplib": "0.42.0",
108-
"@opentelemetry/instrumentation-aws-sdk": "0.44.0",
109-
"@opentelemetry/instrumentation-bunyan": "0.41.0",
110-
"@opentelemetry/instrumentation-cassandra-driver": "0.41.0",
111-
"@opentelemetry/instrumentation-connect": "0.39.0",
112-
"@opentelemetry/instrumentation-dataloader": "0.12.0",
113-
"@opentelemetry/instrumentation-dns": "0.39.0",
114-
"@opentelemetry/instrumentation-express": "0.42.0",
115-
"@opentelemetry/instrumentation-fastify": "0.39.0",
116-
"@opentelemetry/instrumentation-generic-pool": "0.39.0",
117-
"@opentelemetry/instrumentation-graphql": "0.43.0",
118-
"@opentelemetry/instrumentation-grpc": "0.53.0",
119-
"@opentelemetry/instrumentation-hapi": "0.41.0",
120-
"@opentelemetry/instrumentation-http": "0.53.0",
121-
"@opentelemetry/instrumentation-ioredis": "0.43.0",
122-
"@opentelemetry/instrumentation-kafkajs": "0.3.0",
123-
"@opentelemetry/instrumentation-knex": "0.40.0",
124-
"@opentelemetry/instrumentation-koa": "0.43.0",
125-
"@opentelemetry/instrumentation-lru-memoizer": "0.40.0",
126-
"@opentelemetry/instrumentation-memcached": "0.39.0",
127-
"@opentelemetry/instrumentation-mongodb": "0.47.0",
128-
"@opentelemetry/instrumentation-mongoose": "0.42.0",
129-
"@opentelemetry/instrumentation-mysql": "0.41.0",
130-
"@opentelemetry/instrumentation-mysql2": "0.41.0",
131-
"@opentelemetry/instrumentation-nestjs-core": "0.40.0",
132-
"@opentelemetry/instrumentation-net": "0.39.0",
133-
"@opentelemetry/instrumentation-pg": "0.44.0",
134-
"@opentelemetry/instrumentation-pino": "0.42.0",
135-
"@opentelemetry/instrumentation-redis": "0.42.0",
136-
"@opentelemetry/instrumentation-redis-4": "0.42.0",
137-
"@opentelemetry/instrumentation-restify": "0.41.0",
138-
"@opentelemetry/instrumentation-router": "0.40.0",
139-
"@opentelemetry/instrumentation-socket.io": "0.42.0",
140-
"@opentelemetry/instrumentation-tedious": "0.14.0",
141-
"@opentelemetry/instrumentation-undici": "0.6.0",
142-
"@opentelemetry/instrumentation-winston": "0.40.0",
143-
"@opentelemetry/propagator-b3": "1.26.0",
144-
"@opentelemetry/resource-detector-container": "0.4.1",
145-
"@opentelemetry/resources": "1.26.0",
146-
"@opentelemetry/sdk-logs": "^0.53.0",
147-
"@opentelemetry/sdk-metrics": "1.26.0",
148-
"@opentelemetry/sdk-trace-base": "1.26.0",
149-
"@opentelemetry/sdk-trace-node": "1.26.0",
95+
"@opentelemetry/api-logs": "^0.54.2",
96+
"@opentelemetry/context-async-hooks": "1.27.0",
97+
"@opentelemetry/core": "1.27.0",
98+
"@opentelemetry/exporter-logs-otlp-http": "0.54.2",
99+
"@opentelemetry/exporter-logs-otlp-proto": "0.54.2",
100+
"@opentelemetry/exporter-metrics-otlp-grpc": "0.54.2",
101+
"@opentelemetry/exporter-metrics-otlp-proto": "0.54.2",
102+
"@opentelemetry/exporter-trace-otlp-grpc": "0.54.2",
103+
"@opentelemetry/exporter-trace-otlp-proto": "0.54.2",
104+
"@opentelemetry/instrumentation": "0.54.2",
105+
"@opentelemetry/instrumentation-amqplib": "0.43.0",
106+
"@opentelemetry/instrumentation-aws-sdk": "0.46.0",
107+
"@opentelemetry/instrumentation-bunyan": "0.42.0",
108+
"@opentelemetry/instrumentation-cassandra-driver": "0.42.0",
109+
"@opentelemetry/instrumentation-connect": "0.40.0",
110+
"@opentelemetry/instrumentation-dataloader": "0.13.0",
111+
"@opentelemetry/instrumentation-dns": "0.40.0",
112+
"@opentelemetry/instrumentation-express": "0.44.0",
113+
"@opentelemetry/instrumentation-fastify": "0.41.0",
114+
"@opentelemetry/instrumentation-generic-pool": "0.40.0",
115+
"@opentelemetry/instrumentation-graphql": "0.44.0",
116+
"@opentelemetry/instrumentation-grpc": "0.54.2",
117+
"@opentelemetry/instrumentation-hapi": "0.42.0",
118+
"@opentelemetry/instrumentation-http": "0.54.2",
119+
"@opentelemetry/instrumentation-ioredis": "0.44.0",
120+
"@opentelemetry/instrumentation-kafkajs": "0.4.0",
121+
"@opentelemetry/instrumentation-knex": "0.41.0",
122+
"@opentelemetry/instrumentation-koa": "0.44.0",
123+
"@opentelemetry/instrumentation-lru-memoizer": "0.41.0",
124+
"@opentelemetry/instrumentation-memcached": "0.40.0",
125+
"@opentelemetry/instrumentation-mongodb": "0.48.0",
126+
"@opentelemetry/instrumentation-mongoose": "0.43.0",
127+
"@opentelemetry/instrumentation-mysql": "0.42.0",
128+
"@opentelemetry/instrumentation-mysql2": "0.42.1",
129+
"@opentelemetry/instrumentation-nestjs-core": "0.41.0",
130+
"@opentelemetry/instrumentation-net": "0.40.0",
131+
"@opentelemetry/instrumentation-pg": "0.47.1",
132+
"@opentelemetry/instrumentation-pino": "0.43.0",
133+
"@opentelemetry/instrumentation-redis": "0.43.0",
134+
"@opentelemetry/instrumentation-redis-4": "0.43.0",
135+
"@opentelemetry/instrumentation-restify": "0.42.0",
136+
"@opentelemetry/instrumentation-router": "0.41.0",
137+
"@opentelemetry/instrumentation-socket.io": "0.43.0",
138+
"@opentelemetry/instrumentation-tedious": "0.15.0",
139+
"@opentelemetry/instrumentation-undici": "0.7.1",
140+
"@opentelemetry/instrumentation-winston": "0.41.0",
141+
"@opentelemetry/propagator-b3": "1.27.0",
142+
"@opentelemetry/resource-detector-container": "0.5.0",
143+
"@opentelemetry/resources": "1.27.0",
144+
"@opentelemetry/sdk-logs": "0.54.2",
145+
"@opentelemetry/sdk-metrics": "1.27.0",
146+
"@opentelemetry/sdk-trace-base": "1.27.0",
147+
"@opentelemetry/sdk-trace-node": "1.27.0",
150148
"@opentelemetry/semantic-conventions": "1.27.0",
151-
"@opentelemetry/winston-transport": "0.6.0",
149+
"@opentelemetry/winston-transport": "0.7.0",
152150
"is-promise": "^4.0.0",
153151
"nan": "^2.22.0",
154152
"node-gyp-build": "^4.8.2",

src/instrumentations/external/typeorm/typeorm.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ export class TypeormInstrumentation extends InstrumentationBase<TypeormInstrumen
305305
try {
306306
attributes[ExtendedDatabaseAttribute.DB_STATEMENT_PARAMETERS] =
307307
JSON.stringify(parameters);
308-
} catch (err) {
308+
} catch {
309309
/* */
310310
}
311311
}
@@ -341,7 +341,7 @@ export class TypeormInstrumentation extends InstrumentationBase<TypeormInstrumen
341341
statement = statement.trim();
342342
try {
343343
operation = statement.split(' ')[0].toUpperCase();
344-
} catch (e) {
344+
} catch {
345345
/* */
346346
}
347347
}
@@ -459,7 +459,7 @@ const buildStatement = (func: Function, args: any[]) => {
459459
statement[pName] = args[i];
460460
return;
461461
}
462-
} catch (_err) {
462+
} catch {
463463
/* */
464464
}
465465
if (value?.name) {

src/instrumentations/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ function setupLoggingOptions(
344344
return setDefaultLoggingOptions(opts);
345345
}
346346

347-
function signalStartOpt<T extends {}>(options: T | boolean | undefined): T {
347+
function signalStartOpt<T extends object>(options: T | boolean | undefined): T {
348348
if (typeof options === 'object') {
349349
return options;
350350
}

src/metrics/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ interface NativeCounters {
6868
};
6969
}
7070

71-
const typedKeys = <T extends {}>(obj: T): (keyof T)[] =>
71+
const typedKeys = <T extends object>(obj: T): (keyof T)[] =>
7272
Object.keys(obj) as (keyof T)[];
7373

7474
interface CountersExtension {
@@ -167,7 +167,7 @@ export function createOtlpExporter(options: MetricsOptions) {
167167
? {
168168
'X-SF-TOKEN': options.accessToken,
169169
}
170-
: {};
170+
: undefined;
171171
const url = ensureResourcePath(endpoint, '/v1/metrics');
172172
return new OTLPHttpProtoMetricExporter({
173173
url,

src/tracing/options.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ export function otlpSpanExporterFactory(options: TracingOptions): SpanExporter {
233233
? {
234234
'X-SF-TOKEN': accessToken,
235235
}
236-
: {};
236+
: undefined;
237237
const url = ensureResourcePath(endpoint, '/v1/traces');
238238
return new OTLPHttpTraceExporter({
239239
url,

test/common_options.test.ts

+18-11
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { describe, it } from 'node:test';
1818
import { strict as assert } from 'assert';
1919
import { parseOptionsAndConfigureInstrumentations } from '../src/instrumentations';
2020
import { Resource } from '@opentelemetry/resources';
21+
import { exporterUrl } from './utils';
2122

2223
describe('common options', () => {
2324
it('passes resource creation function to signals', () => {
@@ -118,19 +119,25 @@ describe('common options', () => {
118119
endpoint: 'http://localhost:4318',
119120
});
120121

121-
const traceUrl = tracingOptions.spanExporterFactory(tracingOptions)[0].url;
122-
assert.strictEqual(traceUrl, 'http://localhost:4318/v1/traces');
122+
const spanExporter = tracingOptions.spanExporterFactory(tracingOptions)[0];
123+
assert.strictEqual(
124+
exporterUrl(spanExporter),
125+
'http://localhost:4318/v1/traces'
126+
);
123127

124-
const metricsUrl =
125-
metricsOptions.metricReaderFactory(metricsOptions)[0]['_exporter'][
126-
'_otlpExporter'
127-
].url;
128-
assert.strictEqual(metricsUrl, 'http://localhost:4318/v1/metrics');
128+
const metricsExporter =
129+
metricsOptions.metricReaderFactory(metricsOptions)[0]['_exporter'];
130+
assert.strictEqual(
131+
exporterUrl(metricsExporter),
132+
'http://localhost:4318/v1/metrics'
133+
);
129134

130-
const logsUrl =
131-
loggingOptions.logRecordProcessorFactory(loggingOptions)[0]['_exporter']
132-
.url;
133-
assert.strictEqual(logsUrl, 'http://localhost:4318/v1/logs');
135+
const logsExporter =
136+
loggingOptions.logRecordProcessorFactory(loggingOptions)[0]['_exporter'];
137+
assert.strictEqual(
138+
exporterUrl(logsExporter),
139+
'http://localhost:4318/v1/logs'
140+
);
134141

135142
const profilingUrl =
136143
profilingOptions.exporterFactory(profilingOptions)[0]['_endpoint'];

test/metrics.options.test.ts

+5-7
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ describe('metrics options', () => {
106106
const exporter = reader['_exporter'];
107107
assert(exporter instanceof OTLPHttpProtoMetricExporter);
108108
assert.deepStrictEqual(
109-
exporter['_otlpExporter'].url,
109+
utils.exporterUrl(exporter),
110110
'http://foobar:4200/v1/metrics'
111111
);
112112
});
@@ -126,7 +126,7 @@ describe('metrics options', () => {
126126

127127
assert(exporter instanceof OTLPHttpProtoMetricExporter);
128128
assert.deepStrictEqual(
129-
exporter['_otlpExporter'].url,
129+
utils.exporterUrl(exporter),
130130
'https://ingest.us0.signalfx.com/v2/datapoint/otlp'
131131
);
132132
const msg = `OTLP metric exporter: defaulting protocol to 'http/protobuf' instead of 'grpc' due to realm being defined.`;
@@ -151,14 +151,12 @@ describe('metrics options', () => {
151151
assert(exporter instanceof OTLPHttpProtoMetricExporter);
152152

153153
assert.deepStrictEqual(
154-
exporter._otlpExporter['_transport']['_transport']['_parameters'][
155-
'headers'
156-
]['X-SF-TOKEN'],
154+
utils.exporterHeaders(exporter)['X-SF-TOKEN'],
157155
'abc'
158156
);
159157

160158
assert.deepStrictEqual(
161-
exporter['_otlpExporter'].url,
159+
utils.exporterUrl(exporter),
162160
'https://ingest.eu0.signalfx.com/v2/datapoint/otlp'
163161
);
164162
});
@@ -178,7 +176,7 @@ describe('metrics options', () => {
178176

179177
assert(exporter instanceof OTLPHttpProtoMetricExporter);
180178
assert.deepStrictEqual(
181-
exporter['_otlpExporter'].url,
179+
utils.exporterUrl(exporter),
182180
'http://localhost:4320/v1/metrics'
183181
);
184182
});

test/options.test.ts

+8-5
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ describe('options', () => {
358358
const [exporter] = exporters;
359359
assert(exporter instanceof OTLPTraceExporter);
360360
assert.deepStrictEqual(
361-
exporter.url,
361+
utils.exporterUrl(exporter),
362362
`https://ingest.us0.signalfx.com/v2/trace/otlp`
363363
);
364364
});
@@ -386,7 +386,7 @@ describe('options', () => {
386386
const [exporter] = exporters;
387387
assert(exporter instanceof OTLPTraceExporter);
388388
assert.deepStrictEqual(
389-
exporter.url,
389+
utils.exporterUrl(exporter),
390390
'https://ingest.us0.signalfx.com/v2/trace/otlp'
391391
);
392392
const oneLogMatches = logger.warn.mock.calls.some((call) =>
@@ -420,7 +420,7 @@ describe('options', () => {
420420
'Expected exporter to be instance of OTLPTraceExporter'
421421
);
422422
assert.deepStrictEqual(
423-
exporter.url,
423+
utils.exporterUrl(exporter),
424424
'http://myendpoint:4333/v1/my-traces'
425425
);
426426
});
@@ -463,7 +463,10 @@ describe('options', () => {
463463
assert(Array.isArray(exporters));
464464
const [exporter] = exporters;
465465
assert(exporter instanceof OTLPTraceExporter);
466-
assert.deepStrictEqual(exporter.url, 'foobar:4200/v1/traces');
466+
assert.deepStrictEqual(
467+
utils.exporterUrl(exporter),
468+
'foobar:4200/v1/traces'
469+
);
467470
});
468471

469472
it('prefers OTEL_EXPORTER_OTLP_TRACES_ENDPOINT over OTEL_EXPORTER_OTLP_ENDPOINT', () => {
@@ -474,7 +477,7 @@ describe('options', () => {
474477
assert(Array.isArray(exporters));
475478
const [exporter] = exporters;
476479
assert(exporter instanceof OTLPTraceExporter);
477-
assert.deepStrictEqual(exporter.url, 'barfoo:2400');
480+
assert.deepStrictEqual(utils.exporterUrl(exporter), 'barfoo:2400');
478481
});
479482
});
480483
});

test/tracing/common.ts

+3-7
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
2323
import { ProxyTracerProvider } from '@opentelemetry/api';
2424
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
2525
import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';
26+
import { exporterHeaders, exporterUrl } from '../utils';
2627

2728
export function setupMocks() {
2829
const addSpanProcessorMock = mock.method(
@@ -55,14 +56,9 @@ export function assertTracingPipeline(
5556
provider.resource.attributes[ATTR_SERVICE_NAME],
5657
serviceName
5758
);
58-
assert.strictEqual(exporter.url, exportURL);
59+
assert.strictEqual(exporterUrl(exporter), exportURL);
5960

6061
if (accessToken) {
61-
assert.equal(
62-
exporter['_transport']['_transport']['_parameters']['headers'][
63-
'X-SF-TOKEN'
64-
],
65-
accessToken
66-
);
62+
assert.equal(exporterHeaders(exporter)['X-SF-TOKEN'], accessToken);
6763
}
6864
}

0 commit comments

Comments
 (0)