From 37e6a49652116d504cd461d4bf7ab519c22ef8f4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 19:14:15 +0000 Subject: [PATCH] fix(deps): update dependency nestjs-otel to v8 (#27863) * fix(deps): update dependency nestjs-otel to v8 * fix: apiMetrics --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jason Rasmussen --- pnpm-lock.yaml | 44 +++++++------------ server/package.json | 2 +- server/src/repositories/config.repository.ts | 6 +-- .../src/repositories/telemetry.repository.ts | 10 ++++- .../repositories/config.repository.mock.ts | 4 -- 5 files changed, 27 insertions(+), 39 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c3f970ca51..6efa2b7984 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -507,8 +507,8 @@ importers: specifier: 3.1.2 version: 3.1.2(@nestjs/common@11.1.19(class-transformer@0.5.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.19)(kysely@0.28.16)(reflect-metadata@0.2.2) nestjs-otel: - specifier: ^7.0.0 - version: 7.0.1(@nestjs/common@11.1.19(class-transformer@0.5.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.19) + specifier: ^8.0.0 + version: 8.0.2(@nestjs/common@11.1.19(class-transformer@0.5.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.19) nestjs-zod: specifier: ^5.3.0 version: 5.3.0(@nestjs/common@11.1.19(class-transformer@0.5.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/swagger@11.4.2(@nestjs/common@11.1.19(class-transformer@0.5.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.19)(class-transformer@0.5.1)(reflect-metadata@0.2.2))(rxjs@7.8.2)(zod@4.3.6) @@ -3785,8 +3785,8 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/host-metrics@0.36.2': - resolution: {integrity: sha512-eMdea86cfIqx3cdFpcKU3StrjqFkQDIVp7NANVnVWO8O6hDw/DBwGwu4Gi1wJCuoQ2JVwKNWQxUTSRheB6O29Q==} + '@opentelemetry/host-metrics@0.38.3': + resolution: {integrity: sha512-8iSOA8VPGoB5p/RIC8n/dcSe4cluCEWoznWENZfXR8sWQOQvergFu7v798xp7S5WQlZo1zfn1nVXx8dbyQ9m6Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -9525,9 +9525,9 @@ packages: kysely: 0.x reflect-metadata: ^0.1.13 || ^0.2.2 - nestjs-otel@7.0.1: - resolution: {integrity: sha512-NKce9aAJ263rcqaj3etHmv5KE+VALBqjGkPmZYvaesIb7AT7WBA3YXiEXmkJdKsnF2ZwmNFUJXCQWPn91Hrc8A==} - engines: {node: '>= 20'} + nestjs-otel@8.0.2: + resolution: {integrity: sha512-IQZ4MRb54WqRPooFPWrbqdOt+RckwaBjPoQy+axm9Jtri0DlOM6B3mSfzKHAJOwjj6YFaq10DXLOcYrqI8IsXA==} + engines: {node: '>= 22'} peerDependencies: '@nestjs/common': '>= 11 < 12' '@nestjs/core': '>= 11 < 12' @@ -10900,10 +10900,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - response-time@2.3.4: - resolution: {integrity: sha512-fiyq1RvW5/Br6iAtT8jN1XrNY8WPu2+yEypLbaijWry8WDZmn12azG9p/+c+qpEebURLlQmqCB8BNSu7ji+xQQ==} - engines: {node: '>= 0.8.0'} - responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} @@ -11579,8 +11575,8 @@ packages: resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} engines: {node: ^14.18.0 || >=16.0.0} - systeminformation@5.23.8: - resolution: {integrity: sha512-Osd24mNKe6jr/YoXLLK3k8TMdzaxDffhpCxgkfgBHcapykIkd50HXThM3TCEuHO2pPuCsSx2ms/SunqhU5MmsQ==} + systeminformation@5.31.5: + resolution: {integrity: sha512-5SyLdip4/3alxD4Kh+63bUQTJmu7YMfYQTC+koZy7X73HgNqZSD2P4wOZQWtUncvPvcEmnfIjCoygN4MRoEejQ==} engines: {node: '>=8.0.0'} os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true @@ -16297,10 +16293,10 @@ snapshots: '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/host-metrics@0.36.2(@opentelemetry/api@1.9.1)': + '@opentelemetry/host-metrics@0.38.3(@opentelemetry/api@1.9.0)': dependencies: - '@opentelemetry/api': 1.9.1 - systeminformation: 5.23.8 + '@opentelemetry/api': 1.9.0 + systeminformation: 5.31.5 '@opentelemetry/instrumentation-http@0.215.0(@opentelemetry/api@1.9.1)': dependencies: @@ -17985,7 +17981,7 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(happy-dom@20.9.0)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(happy-dom@20.9.0)(jsdom@26.1.0(canvas@2.11.2))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/expect@3.2.4': dependencies: @@ -22789,13 +22785,12 @@ snapshots: reflect-metadata: 0.2.2 tslib: 2.8.1 - nestjs-otel@7.0.1(@nestjs/common@11.1.19(class-transformer@0.5.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.19): + nestjs-otel@8.0.2(@nestjs/common@11.1.19(class-transformer@0.5.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.19): dependencies: '@nestjs/common': 11.1.19(class-transformer@0.5.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.19(@nestjs/common@11.1.19(class-transformer@0.5.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.19)(@nestjs/websockets@11.1.19)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@opentelemetry/api': 1.9.1 - '@opentelemetry/host-metrics': 0.36.2(@opentelemetry/api@1.9.1) - response-time: 2.3.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/host-metrics': 0.38.3(@opentelemetry/api@1.9.0) tslib: 2.8.1 nestjs-zod@5.3.0(@nestjs/common@11.1.19(class-transformer@0.5.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/swagger@11.4.2(@nestjs/common@11.1.19(class-transformer@0.5.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.19)(class-transformer@0.5.1)(reflect-metadata@0.2.2))(rxjs@7.8.2)(zod@4.3.6): @@ -24322,11 +24317,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - response-time@2.3.4: - dependencies: - depd: 2.0.0 - on-headers: 1.1.0 - responselike@3.0.0: dependencies: lowercase-keys: 3.0.0 @@ -25238,7 +25228,7 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 - systeminformation@5.23.8: {} + systeminformation@5.31.5: {} tabbable@6.4.0: {} diff --git a/server/package.json b/server/package.json index c0291dcada..22ada9e487 100644 --- a/server/package.json +++ b/server/package.json @@ -93,7 +93,7 @@ "nest-commander": "^3.16.0", "nestjs-cls": "^6.0.0", "nestjs-kysely": "3.1.2", - "nestjs-otel": "^7.0.0", + "nestjs-otel": "^8.0.0", "nestjs-zod": "^5.3.0", "nodemailer": "^8.0.0", "openid-client": "^6.3.3", diff --git a/server/src/repositories/config.repository.ts b/server/src/repositories/config.repository.ts index ddbdb2a856..240197e9ab 100644 --- a/server/src/repositories/config.repository.ts +++ b/server/src/repositories/config.repository.ts @@ -9,7 +9,7 @@ import { CLS_ID, ClsModuleOptions } from 'nestjs-cls'; import { OpenTelemetryModuleOptions } from 'nestjs-otel/lib/interfaces'; import { readFileSync } from 'node:fs'; import { join } from 'node:path'; -import { citiesFile, excludePaths, IWorker } from 'src/constants'; +import { citiesFile, IWorker } from 'src/constants'; import { Telemetry } from 'src/decorators'; import { EnvSchema } from 'src/dtos/env.dto'; import { @@ -328,10 +328,6 @@ const getEnv = (): EnvData => { otel: { metrics: { hostMetrics: telemetries.has(ImmichTelemetry.Host), - apiMetrics: { - enable: telemetries.has(ImmichTelemetry.Api), - ignoreRoutes: excludePaths, - }, }, }, diff --git a/server/src/repositories/telemetry.repository.ts b/server/src/repositories/telemetry.repository.ts index d87c0acf5a..036a1f9fab 100644 --- a/server/src/repositories/telemetry.repository.ts +++ b/server/src/repositories/telemetry.repository.ts @@ -14,7 +14,7 @@ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic import { snakeCase, startCase } from 'lodash'; import { MetricService } from 'nestjs-otel'; import { copyMetadataFromFunctionToFunction } from 'nestjs-otel/lib/opentelemetry.utils'; -import { serverVersion } from 'src/constants'; +import { excludePaths, serverVersion } from 'src/constants'; import { ImmichTelemetry, MetadataKey } from 'src/enum'; import { ConfigRepository } from 'src/repositories/config.repository'; import { LoggingRepository } from 'src/repositories/logging.repository'; @@ -60,6 +60,9 @@ export const bootstrapTelemetry = (port: number) => { if (instance) { throw new Error('OpenTelemetry SDK already started'); } + + const { telemetry } = new ConfigRepository().getEnv(); + instance = new NodeSDK({ resource: resourceFromAttributes({ [ATTR_SERVICE_NAME]: `immich`, @@ -68,7 +71,10 @@ export const bootstrapTelemetry = (port: number) => { metricReader: new PrometheusExporter({ port }), contextManager: new AsyncLocalStorageContextManager(), instrumentations: [ - new HttpInstrumentation(), + new HttpInstrumentation({ + enabled: telemetry.metrics.has(ImmichTelemetry.Api), + ignoreIncomingRequestHook: (request) => excludePaths.some((item) => request.url?.startsWith(item)), + }), new IORedisInstrumentation(), new NestInstrumentation(), new PgInstrumentation(), diff --git a/server/test/repositories/config.repository.mock.ts b/server/test/repositories/config.repository.mock.ts index 9dd92603c8..a78b01df35 100644 --- a/server/test/repositories/config.repository.mock.ts +++ b/server/test/repositories/config.repository.mock.ts @@ -54,10 +54,6 @@ export const envData: EnvData = { otel: { metrics: { hostMetrics: false, - apiMetrics: { - enable: false, - ignoreRoutes: [], - }, }, },