Skip to content

Commit c495a96

Browse files
committed
feat: upgrade to express5 and modernize OTLP infrastructure
1 parent 31312a3 commit c495a96

File tree

4 files changed

+1194
-1057
lines changed

4 files changed

+1194
-1057
lines changed

package.json

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -60,64 +60,64 @@
6060
"dependencies": {
6161
"@godaddy/terminus": "^4.12.1",
6262
"@opentelemetry/api": "^1.9.0",
63-
"@opentelemetry/exporter-prometheus": "^0.52.1",
64-
"@opentelemetry/instrumentation-dns": "^0.38.0",
65-
"@opentelemetry/instrumentation-express": "^0.41.1",
66-
"@opentelemetry/instrumentation-generic-pool": "^0.38.0",
67-
"@opentelemetry/instrumentation-graphql": "^0.42.0",
68-
"@opentelemetry/instrumentation-http": "^0.52.1",
69-
"@opentelemetry/instrumentation-ioredis": "^0.42.0",
70-
"@opentelemetry/instrumentation-net": "^0.38.0",
71-
"@opentelemetry/instrumentation-pg": "^0.43.0",
72-
"@opentelemetry/instrumentation-pino": "^0.41.0",
73-
"@opentelemetry/instrumentation-undici": "^0.4.0",
74-
"@opentelemetry/resource-detector-container": "^0.3.11",
75-
"@opentelemetry/resource-detector-gcp": "^0.29.10",
76-
"@opentelemetry/sdk-node": "^0.52.1",
77-
"@opentelemetry/semantic-conventions": "^1.25.1",
63+
"@opentelemetry/exporter-prometheus": "^0.53.0",
64+
"@opentelemetry/instrumentation-dns": "^0.39.0",
65+
"@opentelemetry/instrumentation-express": "^0.42.0",
66+
"@opentelemetry/instrumentation-generic-pool": "^0.39.0",
67+
"@opentelemetry/instrumentation-graphql": "^0.43.0",
68+
"@opentelemetry/instrumentation-http": "^0.53.0",
69+
"@opentelemetry/instrumentation-ioredis": "^0.43.0",
70+
"@opentelemetry/instrumentation-net": "^0.39.0",
71+
"@opentelemetry/instrumentation-pg": "^0.44.0",
72+
"@opentelemetry/instrumentation-pino": "^0.42.0",
73+
"@opentelemetry/instrumentation-undici": "^0.6.0",
74+
"@opentelemetry/resource-detector-container": "^0.4.1",
75+
"@opentelemetry/resource-detector-gcp": "^0.29.11",
76+
"@opentelemetry/sdk-node": "^0.53.0",
77+
"@opentelemetry/semantic-conventions": "^1.27.0",
7878
"@sesamecare-oss/confit": "^2.2.1",
79-
"@sesamecare-oss/opentelemetry-node-metrics": "^1.0.1",
79+
"@sesamecare-oss/opentelemetry-node-metrics": "^1.1.0",
8080
"ajv": "^8.17.1",
8181
"cookie-parser": "^1.4.6",
8282
"dotenv": "^16.4.5",
83-
"express": "^5.0.0-beta.3",
84-
"express-openapi-validator": "^5.2.0",
83+
"express": "^5.0.0",
84+
"express-openapi-validator": "^5.3.7",
8585
"glob": "^8.1.0",
8686
"lodash": "^4.17.21",
8787
"minimist": "^1.2.8",
88-
"pino": "^9.3.2",
88+
"pino": "^9.4.0",
8989
"read-pkg-up": "^7.0.1",
9090
"request-ip": "^3.3.0"
9191
},
9292
"devDependencies": {
93-
"@commitlint/cli": "^19.4.0",
94-
"@commitlint/config-conventional": "^19.2.2",
93+
"@commitlint/cli": "^19.5.0",
94+
"@commitlint/config-conventional": "^19.5.0",
9595
"@openapi-typescript-infra/coconfig": "^4.4.0",
9696
"@semantic-release/commit-analyzer": "^13.0.0",
9797
"@semantic-release/exec": "^6.0.3",
98-
"@semantic-release/github": "^10.1.3",
98+
"@semantic-release/github": "^10.3.5",
9999
"@semantic-release/release-notes-generator": "^14.0.1",
100100
"@types/cookie-parser": "^1.4.7",
101101
"@types/express": "^4.17.21",
102102
"@types/glob": "^8.1.0",
103103
"@types/lodash": "^4.17.7",
104104
"@types/minimist": "^1.2.5",
105-
"@types/node": "^20.14.14",
105+
"@types/node": "^20.16.5",
106106
"@types/request-ip": "^0.0.41",
107107
"@types/supertest": "^6.0.2",
108108
"@typescript-eslint/eslint-plugin": "^6.21.0",
109109
"@typescript-eslint/parser": "^6.21.0",
110110
"coconfig": "^1.5.2",
111-
"eslint": "^8.57.0",
111+
"eslint": "^8.57.1",
112112
"eslint-config-prettier": "^9.1.0",
113-
"eslint-plugin-import": "^2.29.1",
113+
"eslint-plugin-import": "^2.30.0",
114114
"pino-pretty": "^11.2.2",
115115
"pinst": "^3.0.0",
116116
"supertest": "^7.0.0",
117117
"ts-node": "^10.9.2",
118118
"tsconfig-paths": "^4.2.0",
119-
"typescript": "^5.5.4",
120-
"vitest": "^2.0.5"
119+
"typescript": "^5.6.2",
120+
"vitest": "^2.1.1"
121121
},
122122
"resolutions": {
123123
"qs": "^6.11.0"

src/telemetry/index.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
2+
import {
3+
envDetectorSync,
4+
hostDetectorSync,
5+
osDetectorSync,
6+
processDetectorSync,
7+
} from '@opentelemetry/resources';
8+
import { containerDetector } from '@opentelemetry/resource-detector-container';
9+
import { gcpDetector } from '@opentelemetry/resource-detector-gcp';
210
import * as opentelemetry from '@opentelemetry/sdk-node';
311
import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
412

@@ -12,7 +20,7 @@ import type {
1220
import type { ListenFn, StartAppFn } from '../express-app/index';
1321
import type { ConfigurationSchema } from '../config/schema';
1422

15-
import { getAutoInstrumentations, getResource } from './instrumentations';
23+
import { getAutoInstrumentations } from './instrumentations';
1624
import { DummySpanExporter } from './DummyExporter';
1725

1826
// For troubleshooting, set the log level to DiagLogLevel.DEBUG
@@ -53,9 +61,17 @@ export async function startGlobalTelemetry(serviceName: string) {
5361
serviceName,
5462
autoDetectResources: false,
5563
traceExporter: getExporter(),
56-
resource: await getResource(),
64+
resourceDetectors: [
65+
envDetectorSync,
66+
hostDetectorSync,
67+
osDetectorSync,
68+
processDetectorSync,
69+
containerDetector,
70+
gcpDetector,
71+
],
5772
metricReader: prometheusExporter,
5873
instrumentations,
74+
logRecordProcessors: [],
5975
views: [
6076
new opentelemetry.metrics.View({
6177
instrumentName: 'http_request_duration_seconds',

src/telemetry/instrumentations.ts

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,6 @@ import { IORedisInstrumentation } from '@opentelemetry/instrumentation-ioredis';
88
import { NetInstrumentation } from '@opentelemetry/instrumentation-net';
99
import { PgInstrumentation } from '@opentelemetry/instrumentation-pg';
1010
import { PinoInstrumentation } from '@opentelemetry/instrumentation-pino';
11-
import { containerDetector } from '@opentelemetry/resource-detector-container';
12-
import { gcpDetector } from '@opentelemetry/resource-detector-gcp';
13-
import {
14-
Resource,
15-
detectResources,
16-
detectResourcesSync,
17-
envDetectorSync,
18-
hostDetectorSync,
19-
osDetectorSync,
20-
processDetectorSync,
21-
} from '@opentelemetry/resources';
2211

2312
const InstrumentationMap = {
2413
'@opentelemetry/instrumentation-http': HttpInstrumentation,
@@ -58,23 +47,3 @@ export function getAutoInstrumentations(
5847
})
5948
.filter((i) => !!i) as Instrumentation[];
6049
}
61-
62-
// Async function to get combined resources
63-
export async function getResource(): Promise<Resource> {
64-
const syncDetectors = [
65-
envDetectorSync,
66-
hostDetectorSync,
67-
osDetectorSync,
68-
processDetectorSync,
69-
];
70-
const asyncDetectors = [
71-
containerDetector,
72-
gcpDetector,
73-
];
74-
75-
const asyncResources = await detectResources({ detectors: asyncDetectors });
76-
const syncResources = detectResourcesSync({ detectors: syncDetectors });
77-
78-
// Combine async and sync resources
79-
return syncResources.merge(asyncResources);
80-
}

0 commit comments

Comments
 (0)