From 9f455b6e6a679b324b4511a89f66fafc5a3723b2 Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Thu, 21 Dec 2023 15:03:18 +0300 Subject: [PATCH 01/17] feat(pkg): otel for novu --- .husky/commit-msg | 1 + apps/api/src/app.module.ts | 2 ++ .../integrations/integrations.controller.ts | 3 +- .../api/src/app/layouts/layouts.controller.ts | 3 +- apps/api/src/bootstrap.ts | 14 +++++++- apps/webhook/src/app.module.ts | 3 +- apps/webhook/src/bootstrap.ts | 19 ++++++++-- apps/ws/src/app.module.ts | 3 +- apps/ws/src/bootstrap.ts | 15 +++++++- packages/application-generic/package.json | 16 +++++++++ packages/application-generic/src/index.ts | 1 + .../application-generic/src/tracing/index.ts | 31 ++++++++++++++++ .../src/tracing/tracing.ts | 35 +++++++++++++++++++ 13 files changed, 137 insertions(+), 9 deletions(-) create mode 100644 packages/application-generic/src/tracing/index.ts create mode 100644 packages/application-generic/src/tracing/tracing.ts diff --git a/.husky/commit-msg b/.husky/commit-msg index 0bd658f4962..0d7473ca638 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -2,3 +2,4 @@ . "$(dirname "$0")/_/husky.sh" npx --no-install commitlint --edit "$1" +npx --no -- commitlint --edit diff --git a/apps/api/src/app.module.ts b/apps/api/src/app.module.ts index b7ef016abd7..04dde8f309c 100644 --- a/apps/api/src/app.module.ts +++ b/apps/api/src/app.module.ts @@ -3,6 +3,7 @@ import { RavenInterceptor, RavenModule } from 'nest-raven'; import { APP_INTERCEPTOR } from '@nestjs/core'; import { Type } from '@nestjs/common/interfaces/type.interface'; import { ForwardReference } from '@nestjs/common/interfaces/modules/forward-reference.interface'; +import { otelModule } from '@novu/application-generic'; import { SharedModule } from './app/shared/shared.module'; import { UserModule } from './app/user/user.module'; @@ -83,6 +84,7 @@ const baseModules: Array | Forward TenantModule, WorkflowOverridesModule, RateLimitingModule, + otelModule, ]; const enterpriseModules = enterpriseImports(); diff --git a/apps/api/src/app/integrations/integrations.controller.ts b/apps/api/src/app/integrations/integrations.controller.ts index 69bf20cf00e..cefe34642a9 100644 --- a/apps/api/src/app/integrations/integrations.controller.ts +++ b/apps/api/src/app/integrations/integrations.controller.ts @@ -12,7 +12,7 @@ import { UseInterceptors, } from '@nestjs/common'; import { ChannelTypeEnum, IJwtPayload, MemberRoleEnum } from '@novu/shared'; -import { CalculateLimitNovuIntegration, CalculateLimitNovuIntegrationCommand } from '@novu/application-generic'; +import { CalculateLimitNovuIntegration, CalculateLimitNovuIntegrationCommand, Span } from '@novu/application-generic'; import { ApiExcludeEndpoint, ApiOperation, ApiTags } from '@nestjs/swagger'; import { UserAuthGuard } from '../auth/framework/user.auth.guard'; @@ -253,6 +253,7 @@ export class IntegrationsController { @Get('/:channelType/limit') @ApiExcludeEndpoint() + @Span() async getProviderLimit( @UserSession() user: IJwtPayload, @Param('channelType') channelType: ChannelTypeEnum diff --git a/apps/api/src/app/layouts/layouts.controller.ts b/apps/api/src/app/layouts/layouts.controller.ts index 662e0da1a31..695d4ce2532 100644 --- a/apps/api/src/app/layouts/layouts.controller.ts +++ b/apps/api/src/app/layouts/layouts.controller.ts @@ -24,7 +24,7 @@ import { ApiOkResponse, } from '../shared/framework/response.decorator'; import { IJwtPayload } from '@novu/shared'; -import { GetLayoutCommand, GetLayoutUseCase } from '@novu/application-generic'; +import { GetLayoutCommand, GetLayoutUseCase, Span } from '@novu/application-generic'; import { CreateLayoutRequestDto, @@ -71,6 +71,7 @@ export class LayoutsController { @ExternalApiAccessible() @ApiResponse(CreateLayoutResponseDto, 201) @ApiOperation({ summary: 'Layout creation', description: 'Create a layout' }) + @Span() async createLayout( @UserSession() user: IJwtPayload, @Body() body: CreateLayoutRequestDto diff --git a/apps/api/src/bootstrap.ts b/apps/api/src/bootstrap.ts index 68bc007c52c..8131507a03e 100644 --- a/apps/api/src/bootstrap.ts +++ b/apps/api/src/bootstrap.ts @@ -9,7 +9,7 @@ import * as compression from 'compression'; import { NestFactory, Reflector } from '@nestjs/core'; import * as bodyParser from 'body-parser'; import * as Sentry from '@sentry/node'; -import { BullMqService, getErrorInterceptor, Logger as PinoLogger } from '@novu/application-generic'; +import { BullMqService, getErrorInterceptor, Logger as PinoLogger, getOTELSDK } from '@novu/application-generic'; import { ExpressAdapter } from '@nestjs/platform-express'; import { AppModule } from './app.module'; @@ -39,9 +39,11 @@ if (process.env.SENTRY_DSN) { // Validate the ENV variables after launching SENTRY, so missing variables will report to sentry validateEnv(); +const otelSDK = getOTELSDK(packageJson.name); export async function bootstrap(expressApp?): Promise { BullMqService.haveProInstalled(); + await otelSDK.start(); let app: INestApplication; if (expressApp) { @@ -137,3 +139,13 @@ function isWidgetRoute(url: string) { function isBlueprintRoute(url: string) { return url.startsWith('/v1/blueprints'); } + +process.on('SIGTERM', () => { + otelSDK + .shutdown() + .then( + () => console.log('SDK shut down successfully'), + (err) => console.log('Error shutting down SDK', err) + ) + .finally(() => process.exit(0)); +}); diff --git a/apps/webhook/src/app.module.ts b/apps/webhook/src/app.module.ts index d2ac3958f16..644958ab636 100644 --- a/apps/webhook/src/app.module.ts +++ b/apps/webhook/src/app.module.ts @@ -7,13 +7,14 @@ import { AppService } from './app.service'; import { SharedModule } from './shared/shared.module'; import { HealthModule } from './health/health.module'; import { WebhooksModule } from './webhooks/webhooks.module'; -import { createNestLoggingModuleOptions, LoggerModule } from '@novu/application-generic'; +import { createNestLoggingModuleOptions, LoggerModule, otelModule } from '@novu/application-generic'; const packageJson = require('../package.json'); const modules = [ SharedModule, HealthModule, WebhooksModule, + otelModule, LoggerModule.forRoot( createNestLoggingModuleOptions({ serviceName: packageJson.name, diff --git a/apps/webhook/src/bootstrap.ts b/apps/webhook/src/bootstrap.ts index 051abe99f92..de1320fbe88 100644 --- a/apps/webhook/src/bootstrap.ts +++ b/apps/webhook/src/bootstrap.ts @@ -2,8 +2,8 @@ import './config'; import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import * as Sentry from '@sentry/node'; -import { version } from '../package.json'; -import { getErrorInterceptor, Logger } from '@novu/application-generic'; +import { getErrorInterceptor, Logger, getOTELSDK } from '@novu/application-generic'; +import * as packageJson from '../package.json'; import { AppModule } from './app.module'; @@ -11,12 +11,15 @@ if (process.env.SENTRY_DSN) { Sentry.init({ dsn: process.env.SENTRY_DSN, environment: process.env.NODE_ENV, - release: `v${version}`, + release: `v${packageJson.version}`, }); } +const otelSDK = getOTELSDK(packageJson.name); + export async function bootstrap(): Promise { const app = await NestFactory.create(AppModule, { bufferLogs: true }); + await otelSDK.start(); app.useLogger(app.get(Logger)); app.flushLogs(); @@ -34,3 +37,13 @@ export async function bootstrap(): Promise { return app; } + +process.on('SIGTERM', () => { + otelSDK + .shutdown() + .then( + () => console.log('SDK shut down successfully'), + (err) => console.log('Error shutting down SDK', err) + ) + .finally(() => process.exit(0)); +}); diff --git a/apps/ws/src/app.module.ts b/apps/ws/src/app.module.ts index fd953ff36bf..d5821536242 100644 --- a/apps/ws/src/app.module.ts +++ b/apps/ws/src/app.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { RavenInterceptor, RavenModule } from 'nest-raven'; import { APP_INTERCEPTOR } from '@nestjs/core'; -import { createNestLoggingModuleOptions, LoggerModule } from '@novu/application-generic'; +import { createNestLoggingModuleOptions, LoggerModule, otelModule } from '@novu/application-generic'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @@ -14,6 +14,7 @@ const packageJson = require('../package.json'); const modules = [ SharedModule, HealthModule, + otelModule, SocketModule, LoggerModule.forRoot( createNestLoggingModuleOptions({ diff --git a/apps/ws/src/bootstrap.ts b/apps/ws/src/bootstrap.ts index 96ebde19d11..5115eb84ec6 100644 --- a/apps/ws/src/bootstrap.ts +++ b/apps/ws/src/bootstrap.ts @@ -3,7 +3,8 @@ import 'newrelic'; import helmet from 'helmet'; import { NestFactory } from '@nestjs/core'; import * as Sentry from '@sentry/node'; -import { BullMqService, getErrorInterceptor, Logger } from '@novu/application-generic'; +import { BullMqService, getErrorInterceptor, Logger, getOTELSDK } from '@novu/application-generic'; +import * as packageJson from '../package.json'; import { AppModule } from './app.module'; import { CONTEXT_PATH } from './config'; @@ -19,9 +20,11 @@ if (process.env.SENTRY_DSN) { release: `v${version}`, }); } +const otelSDK = getOTELSDK(packageJson.name); export async function bootstrap() { BullMqService.haveProInstalled(); + await otelSDK.start(); const app = await NestFactory.create(AppModule, { bufferLogs: true }); const inMemoryAdapter = new InMemoryIoAdapter(app); @@ -59,3 +62,13 @@ export async function bootstrap() { await app.listen(process.env.PORT as string); } + +process.on('SIGTERM', () => { + otelSDK + .shutdown() + .then( + () => console.log('SDK shut down successfully'), + (err) => console.log('Error shutting down SDK', err) + ) + .finally(() => process.exit(0)); +}); diff --git a/packages/application-generic/package.json b/packages/application-generic/package.json index c276de0a0bc..32627a83a13 100644 --- a/packages/application-generic/package.json +++ b/packages/application-generic/package.json @@ -114,6 +114,21 @@ "@novu/twilio": "^0.22.0", "@novu/zulip": "^0.22.0", "@novu/nexmo": "^0.22.0", + "@opentelemetry/api": "^1.7.0", + "@opentelemetry/auto-instrumentations-node": "^0.40.2", + "@opentelemetry/context-async-hooks": "^1.19.0", + "@opentelemetry/core": "^1.19.0", + "@opentelemetry/exporter-collector": "^0.25.0", + "@opentelemetry/exporter-jaeger": "^1.19.0", + "@opentelemetry/exporter-prometheus": "^0.46.0", + "@opentelemetry/instrumentation": "^0.46.0", + "@opentelemetry/propagator-b3": "^1.19.0", + "@opentelemetry/propagator-jaeger": "^1.19.0", + "@opentelemetry/resources": "^1.19.0", + "@opentelemetry/sdk-node": "^0.46.0", + "@opentelemetry/sdk-trace-base": "^1.19.0", + "@opentelemetry/sdk-trace-node": "^1.19.0", + "@opentelemetry/semantic-conventions": "^1.19.0", "@sentry/node": "^7.12.1", "@segment/analytics-node": "^1.1.4", "axios": "^1.6.2", @@ -126,6 +141,7 @@ "launchdarkly-node-server-sdk": "^7.0.1", "lodash": "^4.17.15", "mixpanel": "^0.17.0", + "nestjs-otel": "^5.1.5", "nestjs-pino": "^3.4.0", "node-fetch": "^3.2.10", "pino-http": "^8.3.3", diff --git a/packages/application-generic/src/index.ts b/packages/application-generic/src/index.ts index 7f2cceea977..d35e617fbca 100644 --- a/packages/application-generic/src/index.ts +++ b/packages/application-generic/src/index.ts @@ -19,3 +19,4 @@ export * from './utils/digest'; export * from './utils/object'; export * from './decorators/external-api.decorator'; export * from './decorators/user-session.decorator'; +export * from './tracing'; diff --git a/packages/application-generic/src/tracing/index.ts b/packages/application-generic/src/tracing/index.ts new file mode 100644 index 00000000000..0f7d66c0009 --- /dev/null +++ b/packages/application-generic/src/tracing/index.ts @@ -0,0 +1,31 @@ +import { OpenTelemetryModule } from 'nestjs-otel'; +export * from './tracing'; + +export { + TraceService, + MetricService, + OtelInstanceCounter, + OtelUpDownCounter, + OtelHistogram, + OtelObservableGauge, + OtelObservableCounter, + OtelObservableUpDownCounter, + OtelCounter, + Span, +} from 'nestjs-otel'; +export { Counter } from '@opentelemetry/api'; + +export const otelModule = OpenTelemetryModule.forRoot({ + metrics: { + hostMetrics: true, + apiMetrics: { + enable: true, + defaultAttributes: { + custom: 'label', + }, + ignoreRoutes: ['/favicon.ico', '/v1/health-check'], + //Records metrics for all URLs, even undefined ones + ignoreUndefinedRoutes: true, + }, + }, +}); diff --git a/packages/application-generic/src/tracing/tracing.ts b/packages/application-generic/src/tracing/tracing.ts new file mode 100644 index 00000000000..884034199a6 --- /dev/null +++ b/packages/application-generic/src/tracing/tracing.ts @@ -0,0 +1,35 @@ +import { + CompositePropagator, + W3CTraceContextPropagator, + W3CBaggagePropagator, +} from '@opentelemetry/core'; +import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'; +import { JaegerExporter } from '@opentelemetry/exporter-jaeger'; +import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; +import { JaegerPropagator } from '@opentelemetry/propagator-jaeger'; +import { B3InjectEncoding, B3Propagator } from '@opentelemetry/propagator-b3'; +import { PrometheusExporter } from '@opentelemetry/exporter-prometheus'; +import { NodeSDK } from '@opentelemetry/sdk-node'; +import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; + +export function getOTELSDK(serviceName: string) { + return new NodeSDK({ + metricReader: new PrometheusExporter({ + port: 9464, + }), + spanProcessor: new BatchSpanProcessor(new JaegerExporter()), + contextManager: new AsyncLocalStorageContextManager(), + textMapPropagator: new CompositePropagator({ + propagators: [ + new JaegerPropagator(), + new W3CTraceContextPropagator(), + new W3CBaggagePropagator(), + new B3Propagator(), + new B3Propagator({ + injectEncoding: B3InjectEncoding.MULTI_HEADER, + }), + ], + }), + instrumentations: [getNodeAutoInstrumentations()], + }); +} From e5c8264bb0803bc96c081dc895d166804afa0077 Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Fri, 22 Dec 2023 09:29:21 +0300 Subject: [PATCH 02/17] feat(pkg): servicename added into metrics exporter --- packages/application-generic/src/tracing/tracing.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/application-generic/src/tracing/tracing.ts b/packages/application-generic/src/tracing/tracing.ts index 884034199a6..0ff3ae8aa7d 100644 --- a/packages/application-generic/src/tracing/tracing.ts +++ b/packages/application-generic/src/tracing/tracing.ts @@ -19,6 +19,7 @@ export function getOTELSDK(serviceName: string) { }), spanProcessor: new BatchSpanProcessor(new JaegerExporter()), contextManager: new AsyncLocalStorageContextManager(), + serviceName: serviceName, textMapPropagator: new CompositePropagator({ propagators: [ new JaegerPropagator(), From 262cd56b8f7acb22b83250beb6a16cd907371d0c Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Tue, 26 Dec 2023 16:54:57 +0300 Subject: [PATCH 03/17] fix(pkg): Extra changes has been deleted --- .husky/commit-msg | 1 - 1 file changed, 1 deletion(-) diff --git a/.husky/commit-msg b/.husky/commit-msg index 0d7473ca638..0bd658f4962 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -2,4 +2,3 @@ . "$(dirname "$0")/_/husky.sh" npx --no-install commitlint --edit "$1" -npx --no -- commitlint --edit From 5c0c4ff4d269817d8699f01e9ca0c33c0eb0f2fb Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Tue, 26 Dec 2023 17:02:00 +0300 Subject: [PATCH 04/17] fix(pkg): PascalCased module name --- apps/api/src/app.module.ts | 4 ++-- apps/webhook/src/app.module.ts | 4 ++-- apps/ws/src/app.module.ts | 4 ++-- packages/application-generic/src/tracing/index.ts | 3 ++- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/api/src/app.module.ts b/apps/api/src/app.module.ts index 04dde8f309c..3607125b003 100644 --- a/apps/api/src/app.module.ts +++ b/apps/api/src/app.module.ts @@ -3,7 +3,7 @@ import { RavenInterceptor, RavenModule } from 'nest-raven'; import { APP_INTERCEPTOR } from '@nestjs/core'; import { Type } from '@nestjs/common/interfaces/type.interface'; import { ForwardReference } from '@nestjs/common/interfaces/modules/forward-reference.interface'; -import { otelModule } from '@novu/application-generic'; +import { OtelModule } from '@novu/application-generic'; import { SharedModule } from './app/shared/shared.module'; import { UserModule } from './app/user/user.module'; @@ -84,7 +84,7 @@ const baseModules: Array | Forward TenantModule, WorkflowOverridesModule, RateLimitingModule, - otelModule, + OtelModule, ]; const enterpriseModules = enterpriseImports(); diff --git a/apps/webhook/src/app.module.ts b/apps/webhook/src/app.module.ts index 644958ab636..c1586d993a0 100644 --- a/apps/webhook/src/app.module.ts +++ b/apps/webhook/src/app.module.ts @@ -7,14 +7,14 @@ import { AppService } from './app.service'; import { SharedModule } from './shared/shared.module'; import { HealthModule } from './health/health.module'; import { WebhooksModule } from './webhooks/webhooks.module'; -import { createNestLoggingModuleOptions, LoggerModule, otelModule } from '@novu/application-generic'; +import { createNestLoggingModuleOptions, LoggerModule, OtelModule } from '@novu/application-generic'; const packageJson = require('../package.json'); const modules = [ SharedModule, HealthModule, WebhooksModule, - otelModule, + OtelModule, LoggerModule.forRoot( createNestLoggingModuleOptions({ serviceName: packageJson.name, diff --git a/apps/ws/src/app.module.ts b/apps/ws/src/app.module.ts index d5821536242..fadaada573d 100644 --- a/apps/ws/src/app.module.ts +++ b/apps/ws/src/app.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { RavenInterceptor, RavenModule } from 'nest-raven'; import { APP_INTERCEPTOR } from '@nestjs/core'; -import { createNestLoggingModuleOptions, LoggerModule, otelModule } from '@novu/application-generic'; +import { createNestLoggingModuleOptions, LoggerModule, OtelModule } from '@novu/application-generic'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @@ -14,7 +14,7 @@ const packageJson = require('../package.json'); const modules = [ SharedModule, HealthModule, - otelModule, + OtelModule, SocketModule, LoggerModule.forRoot( createNestLoggingModuleOptions({ diff --git a/packages/application-generic/src/tracing/index.ts b/packages/application-generic/src/tracing/index.ts index 0f7d66c0009..1640184bc5e 100644 --- a/packages/application-generic/src/tracing/index.ts +++ b/packages/application-generic/src/tracing/index.ts @@ -15,7 +15,8 @@ export { } from 'nestjs-otel'; export { Counter } from '@opentelemetry/api'; -export const otelModule = OpenTelemetryModule.forRoot({ +// eslint-disable-next-line @typescript-eslint/naming-convention +export const OtelModule = OpenTelemetryModule.forRoot({ metrics: { hostMetrics: true, apiMetrics: { From 113e2679c6e8ca5a7e56cddeb97ada429f208b9e Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Wed, 27 Dec 2023 10:06:54 +0300 Subject: [PATCH 05/17] fix(pkg): Function has been renamed --- apps/api/src/bootstrap.ts | 4 ++-- apps/webhook/src/bootstrap.ts | 4 ++-- apps/ws/src/bootstrap.ts | 4 ++-- packages/application-generic/src/tracing/tracing.ts | 3 ++- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/api/src/bootstrap.ts b/apps/api/src/bootstrap.ts index 8131507a03e..62e459e8fb0 100644 --- a/apps/api/src/bootstrap.ts +++ b/apps/api/src/bootstrap.ts @@ -9,7 +9,7 @@ import * as compression from 'compression'; import { NestFactory, Reflector } from '@nestjs/core'; import * as bodyParser from 'body-parser'; import * as Sentry from '@sentry/node'; -import { BullMqService, getErrorInterceptor, Logger as PinoLogger, getOTELSDK } from '@novu/application-generic'; +import { BullMqService, getErrorInterceptor, Logger as PinoLogger, initializeOtelSdk } from '@novu/application-generic'; import { ExpressAdapter } from '@nestjs/platform-express'; import { AppModule } from './app.module'; @@ -39,7 +39,7 @@ if (process.env.SENTRY_DSN) { // Validate the ENV variables after launching SENTRY, so missing variables will report to sentry validateEnv(); -const otelSDK = getOTELSDK(packageJson.name); +const otelSDK = initializeOtelSdk(packageJson.name); export async function bootstrap(expressApp?): Promise { BullMqService.haveProInstalled(); diff --git a/apps/webhook/src/bootstrap.ts b/apps/webhook/src/bootstrap.ts index de1320fbe88..21c4652b3ac 100644 --- a/apps/webhook/src/bootstrap.ts +++ b/apps/webhook/src/bootstrap.ts @@ -2,7 +2,7 @@ import './config'; import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import * as Sentry from '@sentry/node'; -import { getErrorInterceptor, Logger, getOTELSDK } from '@novu/application-generic'; +import { getErrorInterceptor, Logger, initializeOtelSdk } from '@novu/application-generic'; import * as packageJson from '../package.json'; import { AppModule } from './app.module'; @@ -15,7 +15,7 @@ if (process.env.SENTRY_DSN) { }); } -const otelSDK = getOTELSDK(packageJson.name); +const otelSDK = initializeOtelSdk(packageJson.name); export async function bootstrap(): Promise { const app = await NestFactory.create(AppModule, { bufferLogs: true }); diff --git a/apps/ws/src/bootstrap.ts b/apps/ws/src/bootstrap.ts index 5115eb84ec6..8cd2744b8af 100644 --- a/apps/ws/src/bootstrap.ts +++ b/apps/ws/src/bootstrap.ts @@ -3,7 +3,7 @@ import 'newrelic'; import helmet from 'helmet'; import { NestFactory } from '@nestjs/core'; import * as Sentry from '@sentry/node'; -import { BullMqService, getErrorInterceptor, Logger, getOTELSDK } from '@novu/application-generic'; +import { BullMqService, getErrorInterceptor, Logger, initializeOtelSdk } from '@novu/application-generic'; import * as packageJson from '../package.json'; import { AppModule } from './app.module'; @@ -20,7 +20,7 @@ if (process.env.SENTRY_DSN) { release: `v${version}`, }); } -const otelSDK = getOTELSDK(packageJson.name); +const otelSDK = initializeOtelSdk(packageJson.name); export async function bootstrap() { BullMqService.haveProInstalled(); diff --git a/packages/application-generic/src/tracing/tracing.ts b/packages/application-generic/src/tracing/tracing.ts index 0ff3ae8aa7d..f902615e189 100644 --- a/packages/application-generic/src/tracing/tracing.ts +++ b/packages/application-generic/src/tracing/tracing.ts @@ -12,7 +12,8 @@ import { PrometheusExporter } from '@opentelemetry/exporter-prometheus'; import { NodeSDK } from '@opentelemetry/sdk-node'; import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; -export function getOTELSDK(serviceName: string) { +// eslint-disable-next-line @typescript-eslint/naming-convention +export function initializeOtelSdk(serviceName: string) { return new NodeSDK({ metricReader: new PrometheusExporter({ port: 9464, From bc06e607793c35919bdada5842772ebe9ad85a1c Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Wed, 27 Dec 2023 10:21:39 +0300 Subject: [PATCH 06/17] fix(pkg): Call of otelSDK method before NestFactory.create --- apps/webhook/src/bootstrap.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/webhook/src/bootstrap.ts b/apps/webhook/src/bootstrap.ts index 21c4652b3ac..dae4d0640bb 100644 --- a/apps/webhook/src/bootstrap.ts +++ b/apps/webhook/src/bootstrap.ts @@ -18,8 +18,8 @@ if (process.env.SENTRY_DSN) { const otelSDK = initializeOtelSdk(packageJson.name); export async function bootstrap(): Promise { - const app = await NestFactory.create(AppModule, { bufferLogs: true }); await otelSDK.start(); + const app = await NestFactory.create(AppModule, { bufferLogs: true }); app.useLogger(app.get(Logger)); app.flushLogs(); From 9dd7ba47037b01661fd7ecfe934b104347cd5947 Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Thu, 28 Dec 2023 17:44:39 +0300 Subject: [PATCH 07/17] fix(pkg): ENV variable ENABLE_OTEL_SDK indicating enabled OTEL or NOT --- apps/api/src/bootstrap.ts | 4 +++- apps/api/src/config/env-validator.ts | 4 ++++ apps/webhook/src/bootstrap.ts | 4 +++- apps/ws/src/bootstrap.ts | 4 +++- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/api/src/bootstrap.ts b/apps/api/src/bootstrap.ts index 62e459e8fb0..4cd0ca1a8cc 100644 --- a/apps/api/src/bootstrap.ts +++ b/apps/api/src/bootstrap.ts @@ -43,7 +43,9 @@ const otelSDK = initializeOtelSdk(packageJson.name); export async function bootstrap(expressApp?): Promise { BullMqService.haveProInstalled(); - await otelSDK.start(); + if (process.env.ENABLE_OTEL_SDK === 'true') { + await otelSDK.start(); + } let app: INestApplication; if (expressApp) { diff --git a/apps/api/src/config/env-validator.ts b/apps/api/src/config/env-validator.ts index 641ae7b9e45..1180180fe74 100644 --- a/apps/api/src/config/env-validator.ts +++ b/apps/api/src/config/env-validator.ts @@ -78,6 +78,10 @@ const validators: { [K in keyof any]: ValidatorSpec } = { WORKER_DEFAULT_LOCK_DURATION: num({ default: undefined, }), + ENABLE_OTEL_SDK: str({ + default: 'false', + choices: ['false', 'true'], + }), }; if (process.env.STORAGE_SERVICE === 'AZURE') { diff --git a/apps/webhook/src/bootstrap.ts b/apps/webhook/src/bootstrap.ts index dae4d0640bb..cf07ed388fd 100644 --- a/apps/webhook/src/bootstrap.ts +++ b/apps/webhook/src/bootstrap.ts @@ -18,7 +18,9 @@ if (process.env.SENTRY_DSN) { const otelSDK = initializeOtelSdk(packageJson.name); export async function bootstrap(): Promise { - await otelSDK.start(); + if (process.env.ENABLE_OTEL_SDK === 'true') { + await otelSDK.start(); + } const app = await NestFactory.create(AppModule, { bufferLogs: true }); app.useLogger(app.get(Logger)); diff --git a/apps/ws/src/bootstrap.ts b/apps/ws/src/bootstrap.ts index 8cd2744b8af..d99a736072b 100644 --- a/apps/ws/src/bootstrap.ts +++ b/apps/ws/src/bootstrap.ts @@ -24,7 +24,9 @@ const otelSDK = initializeOtelSdk(packageJson.name); export async function bootstrap() { BullMqService.haveProInstalled(); - await otelSDK.start(); + if (process.env.ENABLE_OTEL_SDK === 'true') { + await otelSDK.start(); + } const app = await NestFactory.create(AppModule, { bufferLogs: true }); const inMemoryAdapter = new InMemoryIoAdapter(app); From efe85e2028ad8d7b23dd4644752512fc8f938bfc Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Fri, 29 Dec 2023 12:48:04 +0300 Subject: [PATCH 08/17] fix(pkg): Variable has been renamed --- apps/api/src/bootstrap.ts | 2 +- apps/api/src/config/env-validator.ts | 2 +- apps/webhook/src/bootstrap.ts | 2 +- apps/ws/src/bootstrap.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/api/src/bootstrap.ts b/apps/api/src/bootstrap.ts index 4cd0ca1a8cc..930f3345c5e 100644 --- a/apps/api/src/bootstrap.ts +++ b/apps/api/src/bootstrap.ts @@ -43,7 +43,7 @@ const otelSDK = initializeOtelSdk(packageJson.name); export async function bootstrap(expressApp?): Promise { BullMqService.haveProInstalled(); - if (process.env.ENABLE_OTEL_SDK === 'true') { + if (process.env.ENABLE_OTEL === 'true') { await otelSDK.start(); } diff --git a/apps/api/src/config/env-validator.ts b/apps/api/src/config/env-validator.ts index 1180180fe74..e8652e2c49f 100644 --- a/apps/api/src/config/env-validator.ts +++ b/apps/api/src/config/env-validator.ts @@ -78,7 +78,7 @@ const validators: { [K in keyof any]: ValidatorSpec } = { WORKER_DEFAULT_LOCK_DURATION: num({ default: undefined, }), - ENABLE_OTEL_SDK: str({ + ENABLE_OTEL: str({ default: 'false', choices: ['false', 'true'], }), diff --git a/apps/webhook/src/bootstrap.ts b/apps/webhook/src/bootstrap.ts index cf07ed388fd..b91019afd58 100644 --- a/apps/webhook/src/bootstrap.ts +++ b/apps/webhook/src/bootstrap.ts @@ -18,7 +18,7 @@ if (process.env.SENTRY_DSN) { const otelSDK = initializeOtelSdk(packageJson.name); export async function bootstrap(): Promise { - if (process.env.ENABLE_OTEL_SDK === 'true') { + if (process.env.ENABLE_OTEL === 'true') { await otelSDK.start(); } const app = await NestFactory.create(AppModule, { bufferLogs: true }); diff --git a/apps/ws/src/bootstrap.ts b/apps/ws/src/bootstrap.ts index d99a736072b..f9d5c903324 100644 --- a/apps/ws/src/bootstrap.ts +++ b/apps/ws/src/bootstrap.ts @@ -24,7 +24,7 @@ const otelSDK = initializeOtelSdk(packageJson.name); export async function bootstrap() { BullMqService.haveProInstalled(); - if (process.env.ENABLE_OTEL_SDK === 'true') { + if (process.env.ENABLE_OTEL === 'true') { await otelSDK.start(); } const app = await NestFactory.create(AppModule, { bufferLogs: true }); From 8eb0ac1a9debe629e945d5d05640a81791b057d2 Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Wed, 3 Jan 2024 19:37:09 +0300 Subject: [PATCH 09/17] fix(pkg): Initializing the SDK without adding a listener separately in each bootstrap --- apps/api/src/bootstrap.ts | 10 ---------- apps/webhook/src/bootstrap.ts | 10 ---------- apps/ws/src/bootstrap.ts | 10 ---------- packages/application-generic/src/tracing/tracing.ts | 13 ++++++++++++- 4 files changed, 12 insertions(+), 31 deletions(-) diff --git a/apps/api/src/bootstrap.ts b/apps/api/src/bootstrap.ts index 930f3345c5e..14d1f4dac05 100644 --- a/apps/api/src/bootstrap.ts +++ b/apps/api/src/bootstrap.ts @@ -141,13 +141,3 @@ function isWidgetRoute(url: string) { function isBlueprintRoute(url: string) { return url.startsWith('/v1/blueprints'); } - -process.on('SIGTERM', () => { - otelSDK - .shutdown() - .then( - () => console.log('SDK shut down successfully'), - (err) => console.log('Error shutting down SDK', err) - ) - .finally(() => process.exit(0)); -}); diff --git a/apps/webhook/src/bootstrap.ts b/apps/webhook/src/bootstrap.ts index b91019afd58..6543bee6fd4 100644 --- a/apps/webhook/src/bootstrap.ts +++ b/apps/webhook/src/bootstrap.ts @@ -39,13 +39,3 @@ export async function bootstrap(): Promise { return app; } - -process.on('SIGTERM', () => { - otelSDK - .shutdown() - .then( - () => console.log('SDK shut down successfully'), - (err) => console.log('Error shutting down SDK', err) - ) - .finally(() => process.exit(0)); -}); diff --git a/apps/ws/src/bootstrap.ts b/apps/ws/src/bootstrap.ts index f9d5c903324..bbfccd487c3 100644 --- a/apps/ws/src/bootstrap.ts +++ b/apps/ws/src/bootstrap.ts @@ -64,13 +64,3 @@ export async function bootstrap() { await app.listen(process.env.PORT as string); } - -process.on('SIGTERM', () => { - otelSDK - .shutdown() - .then( - () => console.log('SDK shut down successfully'), - (err) => console.log('Error shutting down SDK', err) - ) - .finally(() => process.exit(0)); -}); diff --git a/packages/application-generic/src/tracing/tracing.ts b/packages/application-generic/src/tracing/tracing.ts index f902615e189..b098f33cedc 100644 --- a/packages/application-generic/src/tracing/tracing.ts +++ b/packages/application-generic/src/tracing/tracing.ts @@ -14,7 +14,7 @@ import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-ho // eslint-disable-next-line @typescript-eslint/naming-convention export function initializeOtelSdk(serviceName: string) { - return new NodeSDK({ + const instance = new NodeSDK({ metricReader: new PrometheusExporter({ port: 9464, }), @@ -34,4 +34,15 @@ export function initializeOtelSdk(serviceName: string) { }), instrumentations: [getNodeAutoInstrumentations()], }); + process.on('SIGTERM', () => { + instance + .shutdown() + .then( + () => console.log('SDK shut down successfully'), + (err) => console.log('Error shutting down SDK', err) + ) + .finally(() => process.exit(0)); + }); + + return instance; } From eddd7c7c362890f07b017c3f91797673c67a6abc Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Fri, 5 Jan 2024 16:01:49 +0300 Subject: [PATCH 10/17] fix(pkg): One piece of functions was wrapped --- .../application-generic/src/tracing/index.ts | 16 +----- .../src/tracing/otel-wrapper.ts | 52 +++++++++++++++++++ 2 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 packages/application-generic/src/tracing/otel-wrapper.ts diff --git a/packages/application-generic/src/tracing/index.ts b/packages/application-generic/src/tracing/index.ts index 1640184bc5e..7ca6795276e 100644 --- a/packages/application-generic/src/tracing/index.ts +++ b/packages/application-generic/src/tracing/index.ts @@ -1,20 +1,8 @@ import { OpenTelemetryModule } from 'nestjs-otel'; -export * from './tracing'; -export { - TraceService, - MetricService, - OtelInstanceCounter, - OtelUpDownCounter, - OtelHistogram, - OtelObservableGauge, - OtelObservableCounter, - OtelObservableUpDownCounter, - OtelCounter, - Span, -} from 'nestjs-otel'; +export * from './tracing'; +export * from './otel-wrapper'; export { Counter } from '@opentelemetry/api'; - // eslint-disable-next-line @typescript-eslint/naming-convention export const OtelModule = OpenTelemetryModule.forRoot({ metrics: { diff --git a/packages/application-generic/src/tracing/otel-wrapper.ts b/packages/application-generic/src/tracing/otel-wrapper.ts new file mode 100644 index 00000000000..74f33f0ae48 --- /dev/null +++ b/packages/application-generic/src/tracing/otel-wrapper.ts @@ -0,0 +1,52 @@ +import { Span as OtelSpan } from 'nestjs-otel'; +import { TraceService as OtelTraceService } from 'nestjs-otel'; +import { MetricService as OtelMetricService } from 'nestjs-otel'; +import { SpanOptions } from '@opentelemetry/api'; +import { Injectable } from '@nestjs/common'; + +// eslint-disable-next-line @typescript-eslint/naming-convention +export function Span(name?: string, options?: SpanOptions) { + return OtelSpan(name, options); +} + +@Injectable() +export class TraceService extends OtelTraceService { + getTracer() { + return super.getTracer(); + } + + getSpan() { + return super.getSpan(); + } + + startSpan(name: string) { + return super.startSpan(name); + } +} + +@Injectable() +export class MetricService extends OtelMetricService { + getCounter(name, options) { + return super.getCounter(name, options); + } + + getUpDownCounter(name, options) { + return super.getUpDownCounter(name, options); + } + + getHistogram(name, options) { + return super.getHistogram(name, options); + } + + getObservableCounter(name, options) { + return super.getObservableCounter(name, options); + } + + getObservableGauge(name, options) { + return super.getObservableGauge(name, options); + } + + getObservableUpDownCounter(name, options) { + return super.getObservableUpDownCounter(name, options); + } +} From 9d675cc5fe43f070fee8e236bed796ccdc57471c Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Mon, 8 Jan 2024 16:51:31 +0300 Subject: [PATCH 11/17] fix(pkg): Dependencies lock file has been updated --- pnpm-lock.yaml | 1480 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1476 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fbd9d0a143f..5a3a25d0036 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2654,6 +2654,51 @@ importers: '@novu/zulip': specifier: ^0.22.0 version: link:../../providers/zulip + '@opentelemetry/api': + specifier: ^1.7.0 + version: 1.7.0 + '@opentelemetry/auto-instrumentations-node': + specifier: ^0.40.2 + version: 0.40.3(@opentelemetry/api@1.7.0) + '@opentelemetry/context-async-hooks': + specifier: ^1.19.0 + version: 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/core': + specifier: ^1.19.0 + version: 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/exporter-collector': + specifier: ^0.25.0 + version: 0.25.0(@opentelemetry/api@1.7.0) + '@opentelemetry/exporter-jaeger': + specifier: ^1.19.0 + version: 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/exporter-prometheus': + specifier: ^0.46.0 + version: 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': + specifier: ^0.46.0 + version: 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/propagator-b3': + specifier: ^1.19.0 + version: 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/propagator-jaeger': + specifier: ^1.19.0 + version: 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': + specifier: ^1.19.0 + version: 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-node': + specifier: ^0.46.0 + version: 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': + specifier: ^1.19.0 + version: 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-node': + specifier: ^1.19.0 + version: 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': + specifier: ^1.19.0 + version: 1.19.0 '@segment/analytics-node': specifier: ^1.1.4 version: 1.1.4 @@ -2696,6 +2741,9 @@ importers: mixpanel: specifier: ^0.17.0 version: 0.17.0 + nestjs-otel: + specifier: ^5.1.5 + version: 5.1.5(@nestjs/common@10.2.2)(@nestjs/core@10.2.2) nestjs-pino: specifier: ^3.4.0 version: 3.4.0(@nestjs/common@10.2.2)(pino-http@8.3.3) @@ -8647,7 +8695,7 @@ packages: resolution: {integrity: sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==} engines: {node: '>=12.0.0'} dependencies: - '@opentelemetry/api': 1.4.1 + '@opentelemetry/api': 1.7.0 tslib: 2.6.2 dev: false @@ -14827,6 +14875,29 @@ packages: deprecated: Moved to 'npm install @sideway/address' dev: false + /@hapi/b64@5.0.0: + resolution: {integrity: sha512-ngu0tSEmrezoiIaNGG6rRvKOUkUuDdf4XTPnONHGYfSGRmDqPZX5oJL6HAdKTo1UQHECbdB4OzhWrfgVppjHUw==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: false + + /@hapi/boom@9.1.4: + resolution: {integrity: sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: false + + /@hapi/bourne@2.1.0: + resolution: {integrity: sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q==} + dev: false + + /@hapi/cryptiles@5.1.0: + resolution: {integrity: sha512-fo9+d1Ba5/FIoMySfMqPBR/7Pa29J2RsiPrl7bkwo5W5o+AN1dAYQRi4SPrPwwVxVGKjgLOEWrsvt1BonJSfLA==} + engines: {node: '>=12.0.0'} + dependencies: + '@hapi/boom': 9.1.4 + dev: false + /@hapi/formula@1.2.0: resolution: {integrity: sha512-UFbtbGPjstz0eWHb+ga/GM3Z9EzqKXFWIbSOFURU0A/Gku0Bky4bCk9/h//K2Xr3IrCfjFNhMm4jyZ5dbCewGA==} deprecated: Moved to 'npm install @sideway/formula' @@ -14841,6 +14912,16 @@ packages: resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} dev: false + /@hapi/iron@6.0.0: + resolution: {integrity: sha512-zvGvWDufiTGpTJPG1Y/McN8UqWBu0k/xs/7l++HVU535NLHXsHhy54cfEMdW7EjwKfbBfM9Xy25FmTiobb7Hvw==} + dependencies: + '@hapi/b64': 5.0.0 + '@hapi/boom': 9.1.4 + '@hapi/bourne': 2.1.0 + '@hapi/cryptiles': 5.1.0 + '@hapi/hoek': 9.3.0 + dev: false + /@hapi/joi@16.1.8: resolution: {integrity: sha512-wAsVvTPe+FwSrsAurNt5vkg3zo+TblvC5Bb1zMVK6SJzZqw9UrJnexxR+76cpePmtUZKHAPxcQ2Bf7oVHyahhg==} deprecated: Switch to 'npm install joi' @@ -14857,6 +14938,19 @@ packages: deprecated: Moved to 'npm install @sideway/pinpoint' dev: false + /@hapi/podium@4.1.3: + resolution: {integrity: sha512-ljsKGQzLkFqnQxE7qeanvgGj4dejnciErYd30dbrYzUOF/FyS/DOF97qcrT3bhoVwCYmxa6PEMhxfCPlnUcD2g==} + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/teamwork': 5.1.1 + '@hapi/validate': 1.1.3 + dev: false + + /@hapi/teamwork@5.1.1: + resolution: {integrity: sha512-1oPx9AE5TIv+V6Ih54RP9lTZBso3rP8j4Xhb6iSVwPXtAM+sDopl5TFMv5Paw73UnpZJ9gjcrTE1BXrWt9eQrg==} + engines: {node: '>=12.0.0'} + dev: false + /@hapi/topo@3.1.6: resolution: {integrity: sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==} deprecated: This version has been deprecated and is no longer supported or maintained @@ -14870,6 +14964,13 @@ packages: '@hapi/hoek': 9.3.0 dev: false + /@hapi/validate@1.1.3: + resolution: {integrity: sha512-/XMR0N0wjw0Twzq2pQOzPBZlDzkekGcoCtzO314BpIEsbXdYGthQUbxgkGDf4nhk1+IPDAsXqWjMohRQYO06UA==} + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + dev: false + /@hookform/devtools@4.3.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-CrWxEoHQZaOXJZVQ8KBgOuAa8p2LI8M0DAN5GTRTmdCieRwFVjVDEmuTAVazWVRRkpEQSgSt3KYp7VmmqXdEnw==} peerDependencies: @@ -18236,6 +18337,23 @@ packages: engines: {node: '>=6.0'} dev: false + /@opentelemetry/api-logs@0.46.0: + resolution: {integrity: sha512-+9BcqfiEDGPXEIo+o3tso/aqGM5dGbGwAkGVp3FPpZ8GlkK1YlaKRd9gMVyPaeRATwvO5wYGGnCsAc/sMMM9Qw==} + engines: {node: '>=14'} + dependencies: + '@opentelemetry/api': 1.7.0 + dev: false + + /@opentelemetry/api-metrics@0.25.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-9T0c9NQAEGRujUC7HzPa2/qZ5px/UvB2sfSU5CAKFRrAlDl2gn25B0oUbDqSRHW/IG1X2rnQ3z2bBQkJyJvE4g==} + engines: {node: '>=8.0.0'} + deprecated: Please use @opentelemetry/api >= 1.3.0 + peerDependencies: + '@opentelemetry/api': ^1.0.2 + dependencies: + '@opentelemetry/api': 1.7.0 + dev: false + /@opentelemetry/api@0.10.2: resolution: {integrity: sha512-GtpMGd6vkzDMYcpu2t9LlhEgMy/SzBwRnz48EejlRArYqZzqSzAsKmegUK7zHgl+EOIaK9mKHhnRaQu3qw20cA==} engines: {node: '>=8.0.0'} @@ -18248,16 +18366,1026 @@ packages: engines: {node: '>=8.0.0'} dev: false - /@opentelemetry/api@1.4.1: - resolution: {integrity: sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==} + /@opentelemetry/api@1.7.0: + resolution: {integrity: sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==} engines: {node: '>=8.0.0'} dev: false + /@opentelemetry/auto-instrumentations-node@0.40.3(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-MgBCzpFU4FBQEsXPgt5driYzxErf2JGntQ8Amtc94sqrnvq+FKdEBa6vxOpZlPM+c4Xr6tPpAT1ecTBV8U87hw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.4.1 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-amqplib': 0.33.5(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-aws-lambda': 0.37.4(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-aws-sdk': 0.37.2(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-bunyan': 0.34.1(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-cassandra-driver': 0.34.2(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-connect': 0.32.4(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-cucumber': 0.2.1(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-dataloader': 0.5.4(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-dns': 0.32.5(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-express': 0.34.1(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-fastify': 0.32.6(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-fs': 0.8.4(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-generic-pool': 0.32.5(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-graphql': 0.36.1(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-grpc': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-hapi': 0.33.3(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-http': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-ioredis': 0.36.1(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-knex': 0.32.4(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-koa': 0.36.4(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.33.5(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-memcached': 0.32.5(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-mongodb': 0.38.1(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-mongoose': 0.34.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-mysql': 0.34.5(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-mysql2': 0.34.5(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-nestjs-core': 0.33.4(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-net': 0.32.5(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-pg': 0.37.2(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-pino': 0.34.5(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-redis': 0.35.5(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-redis-4': 0.35.6(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-restify': 0.34.3(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-router': 0.33.4(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-socket.io': 0.35.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-tedious': 0.6.5(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation-winston': 0.33.1(@opentelemetry/api@1.7.0) + '@opentelemetry/resource-detector-alibaba-cloud': 0.28.5(@opentelemetry/api@1.7.0) + '@opentelemetry/resource-detector-aws': 1.3.5(@opentelemetry/api@1.7.0) + '@opentelemetry/resource-detector-container': 0.3.5(@opentelemetry/api@1.7.0) + '@opentelemetry/resource-detector-gcp': 0.29.5(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-node': 0.46.0(@opentelemetry/api@1.7.0) + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@opentelemetry/context-async-hooks@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-0i1ECOc9daKK3rjUgDDXf0GDD5XfCou5lXnt2DALIc2qKoruPPcesobNKE54laSVUWnC3jX26RzuOa31g0V32A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.8.0' + dependencies: + '@opentelemetry/api': 1.7.0 + dev: false + /@opentelemetry/context-base@0.10.2: resolution: {integrity: sha512-hZNKjKOYsckoOEgBziGMnBcX0M7EtstnCmwz5jZUOUYwlZ+/xxX6z3jPu1XVO2Jivk0eLfuP9GP+vFD49CMetw==} engines: {node: '>=8.0.0'} dev: false + /@opentelemetry/core@0.25.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-8OTWF4vfCENU112XB5ElLqf0eq/FhsY0SBvvY65vB3+fbZ2Oi+CPsRASrUZWGtC9MJ5rK2lBlY+/jI4a/NPPBg==} + engines: {node: '>=8.5.0'} + peerDependencies: + '@opentelemetry/api': ^1.0.2 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/semantic-conventions': 0.25.0 + semver: 7.5.4 + dev: false + + /@opentelemetry/core@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-w42AukJh3TP8R0IZZOVJVM/kMWu8g+lm4LzT70WtuKqhwq7KVhcDzZZuZinWZa6TtQCl7Smt2wolEYzpHabOgw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.8.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/semantic-conventions': 1.19.0 + dev: false + + /@opentelemetry/exporter-collector@0.25.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-xZYstLt4hz1aTloJaepWdjMMf9305MqwqbUWjcU/X9pOxvgFWRlchO6x/HQTw7ow0i/S+ShzC+greKnb+1WvLA==} + engines: {node: '>=8.0.0'} + deprecated: Please use trace and metric specific exporters @opentelemetry/exporter-trace-otlp-http and @opentelemetry/exporter-metrics-otlp-http + peerDependencies: + '@opentelemetry/api': ^1.0.2 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/api-metrics': 0.25.0(@opentelemetry/api@1.7.0) + '@opentelemetry/core': 0.25.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 0.25.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-metrics-base': 0.25.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 0.25.0(@opentelemetry/api@1.7.0) + dev: false + + /@opentelemetry/exporter-jaeger@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-MExQskVNb824wRHGcfxx6eoXpdzIhaduMSm1OUcZpl97BrBMvIa0+KnlbKLvt3Qi7SxTc1/WXoPP01obSCwf+g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + jaeger-client: 3.19.0 + dev: false + + /@opentelemetry/exporter-prometheus@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-AXcoCHG31K2PLGizlJJWcfQqZsGfUZkT7ik6C8VJu7U2Cenk0Xhvd3rO+vVNSSjP1+LHkP4MQtqEXpIZttw5cw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-metrics': 1.19.0(@opentelemetry/api@1.7.0) + dev: false + + /@opentelemetry/exporter-trace-otlp-grpc@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-kR4kehnfIhv7v/2MuNYfrlh9A/ZtQofwCzurTIplornUjdzhKDGgjui1NkNTqTfM1QkqfCiavGsf5hwocx29bA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@grpc/grpc-js': 1.8.21 + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/otlp-transformer': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) + dev: false + + /@opentelemetry/exporter-trace-otlp-http@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-vZ2pYOB+qrQ+jnKPY6Gnd58y1k/Ti//Ny6/XsSX7/jED0X77crtSVgC6N5UA0JiGJOh6QB2KE9gaH99010XHzg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/otlp-exporter-base': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/otlp-transformer': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) + dev: false + + /@opentelemetry/exporter-trace-otlp-proto@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-A7PftDM57w1TLiirrhi8ceAnCpYkpUBObELdn239IyYF67zwngImGfBLf5Yo3TTAOA2Oj1TL76L8zWVL8W+Suw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/otlp-exporter-base': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/otlp-proto-exporter-base': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/otlp-transformer': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) + dev: false + + /@opentelemetry/exporter-zipkin@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-TY1fy4JiOBN5a8T9fknqTMcz0DXIeFBr6sklaLCgwtj+G699a5R4CekNwpeM7DHSwC44UMX7gljO2I6dYsTS3A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + dev: false + + /@opentelemetry/host-metrics@0.32.2(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-zrnls0CWMAYEUHQbdplY0M6v3L/cgEoiwpjAnHAaG7M3ICs7K4/Hms1UlVMDydEvNDkQilx63scpDcE1/M5V4A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/sdk-metrics': 1.19.0(@opentelemetry/api@1.7.0) + systeminformation: 5.21.22 + dev: false + + /@opentelemetry/instrumentation-amqplib@0.33.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-WQ/XPzNLOHL3fpsmgoQUkiKCkJ09hvPN8wGrGzzOHMiJ5/3LqvfvxsJ4Rcd6aWkA4il3hEfpl+V0VF0t/DP65A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-aws-lambda@0.37.4(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-/wdZwUalIWAbxeycvmE+25c1xCMhe5EUuj8bN0MWWN3L8N2SYvfv6DmiRgwrTIPXRgIyFugh2udNiF4MezZN4Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/propagator-aws-xray': 1.3.1(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + '@types/aws-lambda': 8.10.122 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-aws-sdk@0.37.2(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-eFHHOk0P9EFQ9Ho+2w7KH9R8cH7hut0/ePSsrk0nAM6Tiq2lBPeHn8ialCWESAA9jSjy+iuDelwmqAEXEe+jrg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/propagation-utils': 0.30.5(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-bunyan@0.34.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-+eshbCFr2dkUYO2jCpbYGFC5hs94UCOsQRK1XqNOjeiNvQRtqvKYqk8ARwJBYBX+aW4J02jOliAHQUh/d7gYPg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/api-logs': 0.46.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@types/bunyan': 1.8.9 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-cassandra-driver@0.34.2(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-wuzq7QQ9o7PJnzseblNfBcURtM+9AwO6e1m644QYtAb/6YRR6qg6gAmAipVeQu01H5BuHBFC/92svaAkdIV2WQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-connect@0.32.4(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-oUGph9idncdnHlQMwdIs6m6mii7Kdp9PpHkM9roOZy71h+2vvf6+cVn45bs2unBbE2Vxho2i/049QQbaYKDYlw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + '@types/connect': 3.4.36 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-cucumber@0.2.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-ydF0DpmE0D6wccAbxx1F+6kokzcSSRy3X78Bvgok/3fHUSSshGLErqNiQL1HV44OIcV6392P3tu/jtXtUq3UDQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-dataloader@0.5.4(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-l1qQvvygxZJw+S+4hgYgzvT4GArqBrar42wzB5LVsOy04+gmbDw/4y7IqxZYepFyXKuBownGS8pR4huRL/Tj/A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-dns@0.32.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-fHJqrbezpZSipo4O9nF9yGq6R8oyr1W2gSlyk1foJNXBaqdCODTlzIa7BP50vGtLBN/m+qO8pMOWCJmYSBX35g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-express@0.34.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-pQBQxXpkH6imvzwCdPcw2FKjB1cphoRpmWTiGi6vtBdKXCP0hpne613ycpwhGG7C17S+mbarVmukbJKR4rmh6Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-fastify@0.32.6(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-UkBu8rAqeVC034jsRMiEAmYhFQ03pvmE/MnoPKE9gAbgVtPILdekHYqAKM0MdqnEjW7pO45t4wWsbtIcN0eiBw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-fs@0.8.4(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-g99963nK8TuisUM3KH+ee5hOCHdCHSKiAdmy0RMdiKT7ITh3rXUct7fghQibViQA7FVPkdwM9+uRKkigJSFS9w==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-generic-pool@0.32.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-MNFloXa3SDg/rHh397JnWADr7iYQ6HHRwT7ZId5Vt0L1Xx+Qp3XSIILsXk5qTXVUIytEIVgn8iMT+kZILHzSqg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-graphql@0.36.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-EOvaS+d2909TOJJjNTsb0vHaLg8WdTLoQS8bRKdy3lMgdd7I4OL9/LSC7dp4M8CvJKz9B464Ix9PnARvhMkNOw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-grpc@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-KemIpB4jmywQv/+MbVoUIMVp3vr+rzra37TYbN7kTsbrn213YlzdXVamf6nq/yChI6q+9JlUnCdSZf86D6NO6g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-hapi@0.33.3(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-l14u1TFPXMUjfHqnrHtzuMyLq6V8BikwhYJO/hIgkbaPCxS38TloCtDLJvcs8S8AZlcQfkUqE/NFgXYETZRo+Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + '@types/hapi__hapi': 20.0.13 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-http@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-t5cxgqfV9AcxVP00/OL1ggkOSZM57VXDpvlWaOidYyyfLKcUJ9e2fGbNwoVsGFboRDeH0iFo7gLA3EEvX13wCA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-ioredis@0.36.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-xxab7n4TD5igCFR5N0j5PJFYVeOXm54ZtCARVS32xavwGyGf+Sb6VtuVCLdl0re4JENCg18FO97Dyb1ql2EBUA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/redis-common': 0.36.1 + '@opentelemetry/semantic-conventions': 1.19.0 + '@types/ioredis4': /@types/ioredis@4.28.10 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-knex@0.32.4(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-vqxK1wqhktQnBA7nGr6nqfhV5irSXK9v0R29hqlyTr/cB/86Hn3Z98zH58QvHo131FcE+d70QdiXu3P9S5vq4g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-koa@0.36.4(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-Qt6IF0mo3FZZ+x4NQhv/pViDtPSw/h/QYDvyIqMCuqUibqta619WLUCwAcanKnZWvzMuYh6lT0TnZ8ktjXo6jQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + '@types/koa': 2.13.9 + '@types/koa__router': 12.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-lru-memoizer@0.33.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-vbm9QPEYD3FZNGSa+7xQ7uOkgbJtskIwp1KnsCpmdBBiulhBaqqgeNLFo7gd8UxMrI2Vu3LTlZil2D0dVt8g/A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-memcached@0.32.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-1MS9LfgZruAsWOHVDTI+/Wy9mFFivUlpGUwYC4D+ho1I4NUyE33XHwL1BKcjMupkuRnE0JmbhdBfTG9Ai1vFkw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + '@types/memcached': 2.2.10 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mongodb@0.38.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-X6YjE8dOCf8lG8FGmoAvczZq7LtgYaRzZcLGthZSUJQ2rfp1JJRlJixc+COvhrn1HJj5ab+AsSdUQgTpfQgEHQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-metrics': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mongoose@0.34.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-/wGNK7qR/QXpcidXntKsnfACHETp8G/f2o/k8FPvJ2lukvdM9r7cHLys8QwkJkTN8Kt3qG1VIwarGKYtE/zOSw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mysql2@0.34.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-Ai3+cJ83b11kLypIVEPLHuYCiIQjf828hHJPpllr78EhmHiq4S1yTW34aP3BzCBY+5Adr5PS5Nnv7NLBI/YfaQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + '@opentelemetry/sql-common': 0.40.0(@opentelemetry/api@1.7.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mysql@0.34.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-cE8z1uJTeLcMj+R31t1pLkLqt3ryGMl1HApxsqqf8YCSHetrkVwGZOcyQ3phfgGSaNlC4/pdf3CQqfjhXbLWlA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + '@types/mysql': 2.15.22 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-nestjs-core@0.33.4(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-AynD6TesE0bZg9UzS4ZLG//6TmU8GkRrjubhxs7jYZ3JRAlJAq1In0zSwM082JOIs7wr286nhs1FmqK91cG1cg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-net@0.32.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-omBLTXyJeCtBy1MzVi+IzUcpXiup90k0z3AGhNKbzro4RhpsdMpN9O+3zZCXCIHMuyifhy7z8w99wmvvFO/FCQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-pg@0.37.2(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-MAiKqdtGItYjvD6rOCyGS27CdMaDnh2JuImIHXhrPjq/sb2JlBNm6m1e4BH4uik1VfcKt/I3pI3UkydSWIscCg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + '@opentelemetry/sql-common': 0.40.0(@opentelemetry/api@1.7.0) + '@types/pg': 8.6.1 + '@types/pg-pool': 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-pino@0.34.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-auYDSeFhkPFXayT/060mQRL7O88Bt5NKcV0qOfquNa9J5/qs5dlJYdTOraxPrjiGPM3tHaAJ+AvAhR0CPYgZew==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-redis-4@0.35.6(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-OVSUJZAuy6OX18X2TKPdPlpwM5t4FooJU9QXiUxezhdMvfIAu00Agchw+gRbszkM7nvQ9dkXFOZO3nTmJNcLcA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/redis-common': 0.36.1 + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-redis@0.35.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-UPYUncDlLqDPtyU11UhyZOUxAyPQS6yQGT0b96KjpqMhmuRb3b0WxzZh3SoIaAyprL5f9fxyeV2HfSulR0aWFQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/redis-common': 0.36.1 + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-restify@0.34.3(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-nUqf4RTcQyc/YTWMT0e/ZqvuQqhRH04MOoSwaH6ocmyrEhKdPDq9AbvSMerQ/AxNC9yju/PytgzFFWH45hh3KA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-router@0.33.4(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-4140BgILsL0H8tA0BBN2tjzajgjxlDqd4xPatk2i5q9ofy8wlB0BlDJ4m36U7G1z0v+a+LshQSNqPP2VHZ9ORw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-socket.io@0.35.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-ED1/Wco05H9fepKqX7n2kONq9EXxkBZTKS29nUH9vVL7wSIT8sBIDqpHz94CnQ8xuicaQQ7c5h9TVuhjtzV43Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-tedious@0.6.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-jjdrDegLUodz9np0yKCAa7sLxlAGTsxM7wU7l1mQ2NM6PHAGv4X3eSFClUk3fOipLx4+r5jTLnlsgu7g9CW+Qw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + '@types/tedious': 4.0.14 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-winston@0.33.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-4tSORoAY9f+yzqNVGcGr/3GydPMfgSiKK1OESc+qBwVTz0bmz4cOrhCruCngGzoqDCmPYpwqwR/8j4wRKgcUpw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-a9TijXZZbk0vI5TGLZl+0kxyFfrXHhX6Svtz7Pp2/VBlCSKrazuULEyoJQrOknJyFWNMEmbbJgOciHCCpQcisw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@types/shimmer': 1.0.5 + import-in-the-middle: 1.7.1 + require-in-the-middle: 7.2.0 + semver: 7.5.4 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/otlp-exporter-base@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-hfkh7cG17l77ZSLRAogz19SIJzr0KeC7xv5PDyTFbHFpwwoxV/bEViO49CqUFH6ckXB63NrltASP9R7po+ahTQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + dev: false + + /@opentelemetry/otlp-grpc-exporter-base@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-/KB/xfZZiWIY2JknvCoT/e9paIzQO3QCBN5gR6RyxpXM/AGx3YTAOKvB/Ts9Va19jo5aE74gB7emhFaCNy4Rmw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@grpc/grpc-js': 1.8.21 + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/otlp-exporter-base': 0.46.0(@opentelemetry/api@1.7.0) + protobufjs: 7.2.5 + dev: false + + /@opentelemetry/otlp-proto-exporter-base@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-rEJBA8U2AxfEzrdIUcyyjOweyVFkO6V1XAxwP161JkxpvNuVDdULHAfRVnGtoZhiVA1XsJKcpIIq2MEKAqq4cg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/otlp-exporter-base': 0.46.0(@opentelemetry/api@1.7.0) + protobufjs: 7.2.5 + dev: false + + /@opentelemetry/otlp-transformer@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-Fj9hZwr6xuqgsaERn667Uf6kuDG884puWhyrai2Jen2Fq+bGf4/5BzEJp/8xvty0VSU4EfXOto/ys3KpSz2UHg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.8.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/api-logs': 0.46.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-logs': 0.46.0(@opentelemetry/api-logs@0.46.0)(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-metrics': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) + dev: false + + /@opentelemetry/propagation-utils@0.30.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-9ENyx6ptmjyYzL7le3FXk/lJc3cFFTrh9Y/ubO9velQZ64BdjpF9kOMJN3Z8KLJFVt66HYoWy9xlWoSIfS/ICg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + dev: false + + /@opentelemetry/propagator-aws-xray@1.3.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-6fDMzFlt5r6VWv7MUd0eOpglXPFqykW8CnOuUxJ1VZyLy6mV1bzBlzpsqEmhx1bjvZYvH93vhGkQZqrm95mlrQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + dev: false + + /@opentelemetry/propagator-b3@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-v7y5IBOKBm0vP3yf0DHzlw4L2gL6tZ0KeeMTaxfO5IuomMffDbrGWcvYFp0Dt4LdZctTSK523rVLBB9FBHBciQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.8.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + dev: false + + /@opentelemetry/propagator-jaeger@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-dedkOoTzKg+nYoLWCMp0Im+wo+XkTRW6aXhi8VQRtMW/9SNJGOllCJSu8llToLxMDF0+6zu7OCrKkevAof2tew==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.8.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + dev: false + + /@opentelemetry/redis-common@0.36.1: + resolution: {integrity: sha512-YjfNEr7DK1Ymc5H0bzhmqVvMcCs+PUEUerzrpTFdHfZxj3HpnnjZTIFKx/gxiL/sajQ8dxycjlreoYTVYKBXlw==} + engines: {node: '>=14'} + dev: false + + /@opentelemetry/resource-detector-alibaba-cloud@0.28.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-cobe2I0c5a66d98nCBprEB5erN5S0PTRrs49qSOnuTT2dC90nwSo2WDcSBfeDSKZH/7sB686P7FyKefWjQzhoA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + dev: false + + /@opentelemetry/resource-detector-aws@1.3.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-0GZJi8m6czksDJwpndSYJpnaPaFe83nEQVg4UnTTwB0cxKtrjpaarWDI46X0BuCX4bGp0M8pvI7f0rBt+LsIhA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + dev: false + + /@opentelemetry/resource-detector-container@0.3.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-yLGLueH63DE9/WmDrizleqtT0uCOsslNqW+AcwzMHW7t8c2MtoJ7msgIsmi7tz5kxJgG8o54CnvXxobcwBhLCQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + dev: false + + /@opentelemetry/resource-detector-gcp@0.29.5(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-cYckfRDDNX/nhiMF7fFooOCb/EObydNXWi0HwuPELHYa7heBCkWgTtNxs/PzuP46+FqDjuBcJL6beS2Ef7MyWg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + gcp-metadata: 6.1.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@opentelemetry/resources@0.25.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-O46u53vDBlxCML8O9dIjsRcCC2VT5ri1upwhp02ITobgJ16aVD/iScCo1lPl/x2E7yq9uwzMINENiiYZRFb6XA==} + engines: {node: '>=8.0.0'} + peerDependencies: + '@opentelemetry/api': ^1.0.2 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 0.25.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 0.25.0 + dev: false + + /@opentelemetry/resources@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-RgxvKuuMOf7nctOeOvpDjt2BpZvZGr9Y0vf7eGtY5XYZPkh2p7e2qub1S2IArdBMf9kEbz0SfycqCviOu9isqg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.8.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + dev: false + + /@opentelemetry/sdk-logs@0.46.0(@opentelemetry/api-logs@0.46.0)(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-Knlyk4+G72uEzNh6GRN1Fhmrj+/rkATI5/lOrevN7zRDLgp4kfyZBGGoWk7w+qQjlYvwhIIdPVxlIcipivdZIg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.8.0' + '@opentelemetry/api-logs': '>=0.39.1' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/api-logs': 0.46.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + dev: false + + /@opentelemetry/sdk-metrics-base@0.25.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-7fwPlAFB5Xw8mnVQfq0wqKNw3RXiAMad9T1bk5Sza9LK/L6hz8RTuHWCsFMsj+1OOSAaiPFuUMYrK1J75+2IAg==} + engines: {node: '>=8.0.0'} + deprecated: Please use @opentelemetry/sdk-metrics + peerDependencies: + '@opentelemetry/api': ^1.0.2 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/api-metrics': 0.25.0(@opentelemetry/api@1.7.0) + '@opentelemetry/core': 0.25.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 0.25.0(@opentelemetry/api@1.7.0) + lodash.merge: 4.6.2 + dev: false + + /@opentelemetry/sdk-metrics@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-FiMii40zr0Fmys4F1i8gmuCvbinBnBsDeGBr4FQemOf0iPCLytYQm5AZJ/nn4xSc71IgKBQwTFQRAGJI7JvZ4Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.8.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + lodash.merge: 4.6.2 + dev: false + + /@opentelemetry/sdk-node@0.46.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-BQhzdCRZXchhKjZaFkgxlgoowjOt/QXekJ1CZgfvFO9Yg5GV15LyJFUEyQkDyD8XbshGo3Cnj0WZMBnDWtWY1A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.8.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/api-logs': 0.46.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/exporter-trace-otlp-http': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/exporter-zipkin': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-logs': 0.46.0(@opentelemetry/api-logs@0.46.0)(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-metrics': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-node': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/sdk-trace-base@0.25.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-TInkLSF/ThM3GNVM+9tgnCVjyNLnRxvAkG585Fhu0HNwaEtCTUwI0r7AvMRIREOreeRWttBG6kvT0LOKdo8yjw==} + engines: {node: '>=8.0.0'} + peerDependencies: + '@opentelemetry/api': ^1.0.2 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 0.25.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 0.25.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 0.25.0 + lodash.merge: 4.6.2 + dev: false + + /@opentelemetry/sdk-trace-base@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-+IRvUm+huJn2KqfFW3yW/cjvRwJ8Q7FzYHoUNx5Fr0Lws0LxjMJG1uVB8HDpLwm7mg5XXH2M5MF+0jj5cM8BpQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.8.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/semantic-conventions': 1.19.0 + dev: false + + /@opentelemetry/sdk-trace-node@1.19.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-TCiEq/cUjM15RFqBRwWomTVbOqzndWL4ILa7ZCu0zbjU1/XY6AgHkgrgAc7vGP6TjRqH4Xryuglol8tcIfbBUQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.8.0' + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/context-async-hooks': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/propagator-b3': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/propagator-jaeger': 1.19.0(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) + semver: 7.5.4 + dev: false + + /@opentelemetry/semantic-conventions@0.25.0: + resolution: {integrity: sha512-V3N+MDBiv0TUlorbgiSqk6CvcP876CYUk/41Tg6s8OIyvniTwprE6vPvFQayuABiVkGlHOxv1Mlvp0w4qNdnVg==} + engines: {node: '>=8.0.0'} + dev: false + + /@opentelemetry/semantic-conventions@1.19.0: + resolution: {integrity: sha512-14jRpC8f5c0gPSwoZ7SbEJni1PqI+AhAE8m1bMz6v+RPM4OlP1PT2UHBJj5Qh/ALLPjhVU/aZUK3YyjTUqqQVg==} + engines: {node: '>=14'} + dev: false + + /@opentelemetry/sql-common@0.40.0(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-vSqRJYUPJVjMFQpYkQS3ruexCPSZJ8esne3LazLwtCPaPRvzZ7WG3tX44RouAn7w4wMp8orKguBqtt+ng2UTnw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) + dev: false + /@parcel/watcher@2.0.4: resolution: {integrity: sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==} engines: {node: '>= 10.0.0'} @@ -24993,6 +26121,12 @@ packages: minimatch: 9.0.3 dev: true + /@types/accepts@1.3.7: + resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + dependencies: + '@types/node': 14.18.42 + dev: false + /@types/argparse@1.0.38: resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} dev: true @@ -25012,6 +26146,10 @@ packages: resolution: {integrity: sha512-/IsuXp3B9R//uRLi40VlIYoMp7OzhkunPe2fDu7jGfQXI9y3CDCx6FC4juRLSqrpmLst3vgsiK536AAGJFl4Ww==} dev: true + /@types/aws-lambda@8.10.122: + resolution: {integrity: sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==} + dev: false + /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: @@ -25075,6 +26213,12 @@ packages: - supports-color dev: true + /@types/bunyan@1.8.9: + resolution: {integrity: sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==} + dependencies: + '@types/node': 14.18.42 + dev: false + /@types/caseless@0.12.2: resolution: {integrity: sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==} dev: true @@ -25106,6 +26250,16 @@ packages: dependencies: '@types/node': 14.18.42 + /@types/connect@3.4.36: + resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + dependencies: + '@types/node': 14.18.42 + dev: false + + /@types/content-disposition@0.5.8: + resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} + dev: false + /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} @@ -25113,6 +26267,15 @@ packages: resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} dev: true + /@types/cookies@0.7.10: + resolution: {integrity: sha512-hmUCjAk2fwZVPPkkPBcI7jGLIR5mg4OVoNMBwU6aVsMm/iNPY7z9/R+x2fSwLt/ZXoGua6C5Zy2k5xOo9jUyhQ==} + dependencies: + '@types/connect': 3.4.35 + '@types/express': 4.17.17 + '@types/keygrip': 1.0.6 + '@types/node': 14.18.42 + dev: false + /@types/cors@2.8.13: resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} dependencies: @@ -25401,6 +26564,35 @@ packages: dependencies: '@types/node': 14.18.42 + /@types/hapi__catbox@10.2.6: + resolution: {integrity: sha512-qdMHk4fBlwRfnBBDJaoaxb+fU9Ewi2xqkXD3mNjSPl2v/G/8IJbDpVRBuIcF7oXrcE8YebU5M8cCeKh1NXEn0w==} + dev: false + + /@types/hapi__hapi@20.0.13: + resolution: {integrity: sha512-LP4IPfhIO5ZPVOrJo7H8c8Slc0WYTFAUNQX1U0LBPKyXioXhH5H2TawIgxKujIyOhbwoBbpvOsBf6o5+ToJIrQ==} + dependencies: + '@hapi/boom': 9.1.4 + '@hapi/iron': 6.0.0 + '@hapi/podium': 4.1.3 + '@types/hapi__catbox': 10.2.6 + '@types/hapi__mimos': 4.1.4 + '@types/hapi__shot': 4.1.6 + '@types/node': 14.18.42 + joi: 17.11.0 + dev: false + + /@types/hapi__mimos@4.1.4: + resolution: {integrity: sha512-i9hvJpFYTT/qzB5xKWvDYaSXrIiNqi4ephi+5Lo6+DoQdwqPXQgmVVOZR+s3MBiHoFqsCZCX9TmVWG3HczmTEQ==} + dependencies: + '@types/mime-db': 1.43.5 + dev: false + + /@types/hapi__shot@4.1.6: + resolution: {integrity: sha512-h33NBjx2WyOs/9JgcFeFhkxnioYWQAZxOHdmqDuoJ1Qjxpcs+JGvSjEEoDeWfcrF+1n47kKgqph5IpfmPOnzbg==} + dependencies: + '@types/node': 14.18.42 + dev: false + /@types/hast@2.3.4: resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} dependencies: @@ -25422,6 +26614,14 @@ packages: resolution: {integrity: sha512-sHu702QGb0SP2F0Zt+CxdCmGZIZ0gEaaCjqOh/V4iba1wTxPVntEPOM/vHm5bel08TILhB3+OxUTkDJWnr/zHQ==} dev: true + /@types/http-assert@1.5.5: + resolution: {integrity: sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==} + dev: false + + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: false + /@types/http-proxy@1.17.10: resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==} dependencies: @@ -25445,6 +26645,12 @@ packages: rxjs: 7.8.1 dev: true + /@types/ioredis@4.28.10: + resolution: {integrity: sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==} + dependencies: + '@types/node': 14.18.42 + dev: false + /@types/ioredis@5.0.0: resolution: {integrity: sha512-zJbJ3FVE17CNl5KXzdeSPtdltc4tMT3TzC6fxQS0sQngkbFZ6h+0uTafsRqu+eSLIugf6Yb0Ea0SUuRr42Nk9g==} deprecated: This is a stub types definition. ioredis provides its own type definitions, so you do not need this installed. @@ -25538,6 +26744,35 @@ packages: '@types/node': 14.18.42 dev: false + /@types/keygrip@1.0.6: + resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} + dev: false + + /@types/koa-compose@3.2.8: + resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} + dependencies: + '@types/koa': 2.13.9 + dev: false + + /@types/koa@2.13.9: + resolution: {integrity: sha512-tPX3cN1dGrMn+sjCDEiQqXH2AqlPoPd594S/8zxwUm/ZbPsQXKqHPUypr2gjCPhHUc+nDJLduhh5lXI/1olnGQ==} + dependencies: + '@types/accepts': 1.3.7 + '@types/content-disposition': 0.5.8 + '@types/cookies': 0.7.10 + '@types/http-assert': 1.5.5 + '@types/http-errors': 2.0.4 + '@types/keygrip': 1.0.6 + '@types/koa-compose': 3.2.8 + '@types/node': 14.18.42 + dev: false + + /@types/koa__router@12.0.3: + resolution: {integrity: sha512-5YUJVv6NwM1z7m6FuYpKfNLTZ932Z6EF6xy2BbtpJSyn13DKNQEkXVffFVSnJHxvwwWh2SAeumpjAYUELqgjyw==} + dependencies: + '@types/koa': 2.13.9 + dev: false + /@types/linkify-it@3.0.2: resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} requiresBuild: true @@ -25589,6 +26824,16 @@ packages: /@types/mdx@2.0.7: resolution: {integrity: sha512-BG4tyr+4amr3WsSEmHn/fXPqaCba/AYZ7dsaQTiavihQunHSIxk+uAtqsjvicNpyHN6cm+B9RVrUOtW9VzIKHw==} + /@types/memcached@2.2.10: + resolution: {integrity: sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==} + dependencies: + '@types/node': 14.18.42 + dev: false + + /@types/mime-db@1.43.5: + resolution: {integrity: sha512-/bfTiIUTNPUBnwnYvUxXAre5MhD88jgagLEQiQtIASjU+bwxd8kS/ASDA4a8ufd8m0Lheu6eeMJHEUpLHoJ28A==} + dev: false + /@types/mime-types@2.1.1: resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==} dev: true @@ -25627,6 +26872,12 @@ packages: '@types/express': 4.17.17 dev: true + /@types/mysql@2.15.22: + resolution: {integrity: sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==} + dependencies: + '@types/node': 14.18.42 + dev: false + /@types/newrelic@9.13.0: resolution: {integrity: sha512-Dj2fh+1SvR9KIZmk/ZcrzHmfF1f/2vSsIlYvKD49KtPcxRBKOWFRP9wyHtq+B6YCqIv+fHN97NtgJiq7OJaRzw==} dev: false @@ -25739,6 +26990,20 @@ packages: '@types/express': 4.17.17 dev: true + /@types/pg-pool@2.0.4: + resolution: {integrity: sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==} + dependencies: + '@types/pg': 8.6.1 + dev: false + + /@types/pg@8.6.1: + resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} + dependencies: + '@types/node': 14.18.42 + pg-protocol: 1.6.0 + pg-types: 2.2.0 + dev: false + /@types/prettier@2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true @@ -25874,6 +27139,10 @@ packages: '@types/mime': 3.0.1 '@types/node': 14.18.42 + /@types/shimmer@1.0.5: + resolution: {integrity: sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww==} + dev: false + /@types/sinon@9.0.11: resolution: {integrity: sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg==} dependencies: @@ -25951,6 +27220,12 @@ packages: resolution: {integrity: sha512-fOHIwZua0sRltqWzODGUM6b4ffZrf/vzGUmNXdR+4DzuJP42PMbM5dLKcdzlYvv8bMJ3GALOzkk1q7cDm2zPyA==} dev: false + /@types/tedious@4.0.14: + resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} + dependencies: + '@types/node': 14.18.42 + dev: false + /@types/testing-library__jest-dom@5.14.5: resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==} dependencies: @@ -27587,6 +28862,10 @@ packages: dependencies: string-width: 4.2.3 + /ansi-color@0.2.1: + resolution: {integrity: sha512-bF6xLaZBLpOQzgYUtYEhJx090nPSZk1BQ/q2oyBK9aMMcJHzx9uXGCjI2Y+LebsN4Jwoykr0V9whbPiogdyHoQ==} + dev: false + /ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} @@ -29315,6 +30594,16 @@ packages: ieee754: 1.2.1 dev: false + /bufrw@1.4.0: + resolution: {integrity: sha512-sWm8iPbqvL9+5SiYxXH73UOkyEbGQg7kyHQmReF89WJHQJw2eV4P/yZ0E+b71cczJ4pPobVhXxgQcmfSTgGHxQ==} + engines: {node: '>= 0.10.x'} + dependencies: + ansi-color: 0.2.1 + error: 7.0.2 + hexer: 1.5.0 + xtend: 4.0.2 + dev: false + /build-url@1.3.3: resolution: {integrity: sha512-uSC8d+d4SlbXTu/9nBhwEKi33CE0KQgCvfy8QwyrrO5vCuXr9hN021ZBh8ip5vxPbMOrZiPwgqcupuhezxiP3g==} deprecated: This package is no longer maintained @@ -29890,7 +31179,6 @@ packages: /cjs-module-lexer@1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} - dev: true /class-transformer@0.5.1: resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} @@ -32689,6 +33977,13 @@ packages: stackframe: 1.3.4 dev: true + /error@7.0.2: + resolution: {integrity: sha512-UtVv4l5MhijsYUxPJo4390gzfZvAnTHreNnDjnTZaKIiZ/SemXxAhBkYSKtWa5RtBXbLP8tMgn/n0RUa/H7jXw==} + dependencies: + string-template: 0.2.1 + xtend: 4.0.2 + dev: false + /es-abstract@1.22.2: resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} engines: {node: '>= 0.4'} @@ -34975,6 +36270,19 @@ packages: dev: false optional: true + /gaxios@6.1.1: + resolution: {integrity: sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==} + engines: {node: '>=14'} + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.1 + is-stream: 2.0.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /gcp-metadata@4.3.1: resolution: {integrity: sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==} engines: {node: '>=10'} @@ -35010,6 +36318,17 @@ packages: dev: false optional: true + /gcp-metadata@6.1.0: + resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} + engines: {node: '>=14'} + dependencies: + gaxios: 6.1.1 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /gensequence@3.1.1: resolution: {integrity: sha512-ys3h0hiteRwmY6BsvSttPmkhC0vEQHPJduANBRtH/dlDPZ0UBIb/dXy80IcckXyuQ6LKg+PloRqvGER9IS7F7g==} engines: {node: '>=10.0.0'} @@ -35956,6 +37275,17 @@ packages: readable-stream: 3.6.2 dev: false + /hexer@1.5.0: + resolution: {integrity: sha512-dyrPC8KzBzUJ19QTIo1gXNqIISRXQ0NwteW6OeQHRN4ZuZeHkdODfj0zHBdOlHbRY8GqbqK57C9oWSvQZizFsg==} + engines: {node: '>= 0.10.x'} + hasBin: true + dependencies: + ansi-color: 0.2.1 + minimist: 1.2.8 + process: 0.10.1 + xtend: 4.0.2 + dev: false + /hexoid@1.0.0: resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} engines: {node: '>=8'} @@ -36553,6 +37883,15 @@ packages: engines: {node: '>=12.2'} dev: true + /import-in-the-middle@1.7.1: + resolution: {integrity: sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==} + dependencies: + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + cjs-module-lexer: 1.2.2 + module-details-from-path: 1.0.3 + dev: false + /import-lazy@4.0.0: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} @@ -37507,6 +38846,17 @@ packages: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + /jaeger-client@3.19.0: + resolution: {integrity: sha512-M0c7cKHmdyEUtjemnJyx/y9uX16XHocL46yQvyqDlPdvAcwPDbHrIbKjQdBqtiE4apQ/9dmr+ZLJYYPGnurgpw==} + engines: {node: '>=10'} + dependencies: + node-int64: 0.4.0 + opentracing: 0.14.7 + thriftrw: 3.11.4 + uuid: 8.3.2 + xorshift: 1.2.0 + dev: false + /jake@10.8.5: resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} engines: {node: '>=10'} @@ -39958,6 +41308,11 @@ packages: safe-stable-stringify: 2.4.3 triple-beam: 1.3.0 + /long@2.4.0: + resolution: {integrity: sha512-ijUtjmO/n2A5PaosNG9ZGDsQ3vxJg7ZW8vsY8Kp0f2yIZWhSJvjmegV7t+9RPQKxKrvj8yKGehhS+po14hPLGQ==} + engines: {node: '>=0.6'} + dev: false + /long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} @@ -41322,6 +42677,10 @@ packages: resolution: {integrity: sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==} dev: true + /module-details-from-path@1.0.3: + resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + dev: false + /moment@2.29.4: resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} dev: false @@ -41656,6 +43015,19 @@ packages: resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==} dev: true + /nestjs-otel@5.1.5(@nestjs/common@10.2.2)(@nestjs/core@10.2.2): + resolution: {integrity: sha512-4u87aSy/GpbwuYvb5OAm0Zk3CP/q9QATI2bb9DQNpLYC5uYsqNkLHL3AdLBMVueNIMqp8rZui67XW0WTM8rr6g==} + peerDependencies: + '@nestjs/common': ^9.0.0 || ^10.0.0 + '@nestjs/core': ^9.0.0 || ^10.0.0 + dependencies: + '@nestjs/common': 10.2.2(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/core': 10.2.2(@nestjs/common@10.2.2)(@nestjs/platform-express@10.2.2)(@nestjs/websockets@10.2.2)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@opentelemetry/api': 1.7.0 + '@opentelemetry/host-metrics': 0.32.2(@opentelemetry/api@1.7.0) + response-time: 2.3.2 + dev: false + /nestjs-pino@3.4.0(@nestjs/common@10.2.2)(pino-http@8.3.3): resolution: {integrity: sha512-L79tk+WqVJApGxD4K40srSHopwlBX8WVPoIJtVhWaxJUfk9ND6eZp7kmgdgwQw8PpYUeoeOhS1g2j0Ep3c0NJA==} engines: {node: '>= 14'} @@ -42868,6 +44240,11 @@ packages: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true + /opentracing@0.14.7: + resolution: {integrity: sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==} + engines: {node: '>=0.10'} + dev: false + /optimism@0.10.3: resolution: {integrity: sha512-9A5pqGoQk49H6Vhjb9kPgAeeECfUDF6aIICbMDL23kDLStBn1MWk3YvcZ4xWF9CsSf6XEgvRLkXy4xof/56vVw==} dependencies: @@ -43627,6 +45004,26 @@ packages: /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + /pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + dev: false + + /pg-protocol@1.6.0: + resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + dev: false + + /pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + dev: false + /phone@3.1.37: resolution: {integrity: sha512-DV7+e8TkH1SHITfzayRVa4X6hRzIOX/Ptr7S2NhoetbeaZ6Sw330UO2gtyP8+TWj+KpoCfRJn2d6cFUO2jH5jw==} engines: {node: '>=12'} @@ -44702,6 +46099,28 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + dev: false + + /postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + dependencies: + xtend: 4.0.2 + dev: false + /postmark@4.0.2: resolution: {integrity: sha512-2zlCv+KVVQ0KoamXZHE7d+gXzLlr8tPE+PxQmtUaIZhbHzZAq4D6yH2b+ykhA8wYCc5ISodcx8U1aNLenXBs9g==} dependencies: @@ -44866,6 +46285,11 @@ packages: resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==} dev: false + /process@0.10.1: + resolution: {integrity: sha512-dyIett8dgGIZ/TXKUzeYExt7WA6ldDzys9vTDU/cCA9L17Ypme+KzS+NjQCjpn9xsvi/shbMC+yP/BcFMBz0NA==} + engines: {node: '>= 0.6.0'} + dev: false + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -47137,6 +48561,17 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + /require-in-the-middle@7.2.0: + resolution: {integrity: sha512-3TLx5TGyAY6AOqLBoXmHkNql0HIf2RGbuMgCDT2WO/uGVAPJs6h7Kl+bN6TIZGd9bWhWPwnDnTHGtW8Iu77sdw==} + engines: {node: '>=8.6.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + module-details-from-path: 1.0.3 + resolve: 1.22.2 + transitivePeerDependencies: + - supports-color + dev: false + /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true @@ -47299,6 +48734,14 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /response-time@2.3.2: + resolution: {integrity: sha512-MUIDaDQf+CVqflfTdQ5yam+aYCkXj1PY8fjlPDQ6ppxJlmgZb864pHtA750mayywNg8tx4rS7qH9JXd/OF+3gw==} + engines: {node: '>= 0.8.0'} + dependencies: + depd: 1.1.2 + on-headers: 1.0.2 + dev: false + /restore-cursor@2.0.0: resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} engines: {node: '>=4'} @@ -48051,6 +49494,10 @@ packages: vscode-textmate: 8.0.0 dev: true + /shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + dev: false + /shortid@2.2.16: resolution: {integrity: sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==} dependencies: @@ -48811,6 +50258,10 @@ packages: resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} dev: true + /string-template@0.2.1: + resolution: {integrity: sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==} + dev: false + /string-width@1.0.2: resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} engines: {node: '>=0.10.0'} @@ -49358,6 +50809,13 @@ packages: tslib: 2.6.2 dev: true + /systeminformation@5.21.22: + resolution: {integrity: sha512-gNHloAJSyS+sKWkwvmvozZ1eHrdVTEsynWMTY6lvLGBB70gflkBQFw8drXXr1oEXY84+Vr9tOOrN8xHZLJSycA==} + engines: {node: '>=8.0.0'} + os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] + hasBin: true + dev: false + /tabbable@6.1.1: resolution: {integrity: sha512-4kl5w+nCB44EVRdO0g/UGoOp3vlwgycUVtkk/7DPyeLZUCuNFFKCFG6/t/DgHLrUPHjrZg6s5tNm+56Q2B0xyg==} dev: false @@ -49808,6 +51266,16 @@ packages: real-require: 0.2.0 dev: false + /thriftrw@3.11.4: + resolution: {integrity: sha512-UcuBd3eanB3T10nXWRRMwfwoaC6VMk7qe3/5YIWP2Jtw+EbHqJ0p1/K3x8ixiR5dozKSSfcg1W+0e33G1Di3XA==} + engines: {node: '>= 0.10.x'} + hasBin: true + dependencies: + bufrw: 1.4.0 + error: 7.0.2 + long: 2.4.0 + dev: false + /throat@6.0.2: resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} dev: true @@ -52816,6 +54284,10 @@ packages: engines: {node: '>=0.4.0'} dev: false + /xorshift@1.2.0: + resolution: {integrity: sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g==} + dev: false + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} From 1fd08d4f746f5005a53e1f03e8b5312f80832957 Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Mon, 8 Jan 2024 17:30:14 +0300 Subject: [PATCH 12/17] fix(pkg): Add spelling for Otel to cpsell dictionary --- .cspell.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.cspell.json b/.cspell.json index f7fe6dbda0a..74e3b57e2bc 100644 --- a/.cspell.json +++ b/.cspell.json @@ -544,7 +544,8 @@ "Stdev", "openapi", "headerapikey", - "isend" + "isend", + "Otel" ], "flagWords": [], "patterns": [ From 8396bab2f59a01c8d19aa5ea50ae3a8f1088104b Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Mon, 8 Jan 2024 17:32:11 +0300 Subject: [PATCH 13/17] fix(pkg): Add spelling for opentelemetry to cpsell dictionary --- .cspell.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.cspell.json b/.cspell.json index 74e3b57e2bc..099c148d443 100644 --- a/.cspell.json +++ b/.cspell.json @@ -545,7 +545,8 @@ "openapi", "headerapikey", "isend", - "Otel" + "Otel", + "opentelemetry" ], "flagWords": [], "patterns": [ From c2475081053cfb3c18461ed0cdaf64a50a145b11 Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Tue, 9 Jan 2024 16:42:31 +0300 Subject: [PATCH 14/17] fix(pkg): Last piece of functions was wrapped --- .../src/tracing/otel-wrapper.ts | 94 +++++++++++++++++-- 1 file changed, 88 insertions(+), 6 deletions(-) diff --git a/packages/application-generic/src/tracing/otel-wrapper.ts b/packages/application-generic/src/tracing/otel-wrapper.ts index 74f33f0ae48..fa15bfcbe45 100644 --- a/packages/application-generic/src/tracing/otel-wrapper.ts +++ b/packages/application-generic/src/tracing/otel-wrapper.ts @@ -1,16 +1,98 @@ import { Span as OtelSpan } from 'nestjs-otel'; -import { TraceService as OtelTraceService } from 'nestjs-otel'; -import { MetricService as OtelMetricService } from 'nestjs-otel'; -import { SpanOptions } from '@opentelemetry/api'; +import { TraceService as setTraceService } from 'nestjs-otel'; +import { MetricService as setMetricService } from 'nestjs-otel'; +import { OtelInstanceCounter as setOtelInstanceCounter } from 'nestjs-otel'; +import { OtelUpDownCounter as setOtelUpDownCounter } from 'nestjs-otel'; +import { OtelHistogram as setOtelHistogram } from 'nestjs-otel'; +import { OtelObservableGauge as setOtelObservableGauge } from 'nestjs-otel'; +import { OtelObservableCounter as setOtelObservableCounter } from 'nestjs-otel'; +import { OtelObservableUpDownCounter as setOtelObservableUpDownCounter } from 'nestjs-otel'; +import { OtelCounter as setOtelCounter } from 'nestjs-otel'; +import { MetricOptions, SpanOptions } from '@opentelemetry/api'; import { Injectable } from '@nestjs/common'; // eslint-disable-next-line @typescript-eslint/naming-convention export function Span(name?: string, options?: SpanOptions) { return OtelSpan(name, options); } - +// eslint-disable-next-line @typescript-eslint/naming-convention +export function OtelInstanceCounter(options?: MetricOptions) { + return setOtelInstanceCounter(options); +} +// eslint-disable-next-line @typescript-eslint/naming-convention +export function OtelUpDownCounter( + ...dataOrPipes: ( + | string + | import('@nestjs/common').PipeTransform + | import('@nestjs/common').Type< + import('@nestjs/common').PipeTransform + > + )[] +) { + return setOtelUpDownCounter(...dataOrPipes); +} +// eslint-disable-next-line @typescript-eslint/naming-convention +export function OtelHistogram( + ...dataOrPipes: ( + | string + | import('@nestjs/common').PipeTransform + | import('@nestjs/common').Type< + import('@nestjs/common').PipeTransform + > + )[] +) { + return setOtelHistogram(); +} +// eslint-disable-next-line @typescript-eslint/naming-convention +export function OtelObservableGauge( + ...dataOrPipes: ( + | string + | import('@nestjs/common').PipeTransform + | import('@nestjs/common').Type< + import('@nestjs/common').PipeTransform + > + )[] +) { + return setOtelObservableGauge(); +} +// eslint-disable-next-line @typescript-eslint/naming-convention +export function OtelObservableCounter( + ...dataOrPipes: ( + | string + | import('@nestjs/common').PipeTransform + | import('@nestjs/common').Type< + import('@nestjs/common').PipeTransform + > + )[] +) { + return setOtelObservableCounter(); +} +// eslint-disable-next-line @typescript-eslint/naming-convention +export function OtelObservableUpDownCounter( + ...dataOrPipes: ( + | string + | import('@nestjs/common').PipeTransform + | import('@nestjs/common').Type< + import('@nestjs/common').PipeTransform + > + )[] +) { + return setOtelObservableUpDownCounter(); +} +// eslint-disable-next-line @typescript-eslint/naming-convention +export function OtelCounter( + ...dataOrPipes: ( + | string + | import('@nestjs/common').PipeTransform + | import('@nestjs/common').Type< + import('@nestjs/common').PipeTransform + > + )[] +) { + return setOtelCounter(); +} @Injectable() -export class TraceService extends OtelTraceService { +export class TraceService extends setTraceService { getTracer() { return super.getTracer(); } @@ -25,7 +107,7 @@ export class TraceService extends OtelTraceService { } @Injectable() -export class MetricService extends OtelMetricService { +export class MetricService extends setMetricService { getCounter(name, options) { return super.getCounter(name, options); } From e3952a821d1f5a7b6a9c9f3497aa5bcea923978c Mon Sep 17 00:00:00 2001 From: Alex Ryzhou <141645418+AliaksandrRyzhou@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:13:56 +0300 Subject: [PATCH 15/17] Update packages/application-generic/src/tracing/index.ts Co-authored-by: Richard Fontein <32132657+rifont@users.noreply.github.com> --- packages/application-generic/src/tracing/index.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/application-generic/src/tracing/index.ts b/packages/application-generic/src/tracing/index.ts index 7ca6795276e..4ec76abbc79 100644 --- a/packages/application-generic/src/tracing/index.ts +++ b/packages/application-generic/src/tracing/index.ts @@ -9,9 +9,6 @@ export const OtelModule = OpenTelemetryModule.forRoot({ hostMetrics: true, apiMetrics: { enable: true, - defaultAttributes: { - custom: 'label', - }, ignoreRoutes: ['/favicon.ico', '/v1/health-check'], //Records metrics for all URLs, even undefined ones ignoreUndefinedRoutes: true, From 3e0b7216108f34e3ecf1cb9efe7186a882c44e8c Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Thu, 11 Jan 2024 17:33:05 +0300 Subject: [PATCH 16/17] fix(pkg): Comments resolving --- .../integrations/integrations.controller.ts | 8 +- .../api/src/app/layouts/layouts.controller.ts | 4 +- .../src/tracing/otel-wrapper.ts | 90 ++++++------------- 3 files changed, 36 insertions(+), 66 deletions(-) diff --git a/apps/api/src/app/integrations/integrations.controller.ts b/apps/api/src/app/integrations/integrations.controller.ts index 895ddd8ee2c..3744527c2be 100644 --- a/apps/api/src/app/integrations/integrations.controller.ts +++ b/apps/api/src/app/integrations/integrations.controller.ts @@ -12,7 +12,11 @@ import { UseInterceptors, } from '@nestjs/common'; import { ChannelTypeEnum, IJwtPayload, MemberRoleEnum } from '@novu/shared'; -import { CalculateLimitNovuIntegration, CalculateLimitNovuIntegrationCommand, Span } from '@novu/application-generic'; +import { + CalculateLimitNovuIntegration, + CalculateLimitNovuIntegrationCommand, + OtelSpan, +} from '@novu/application-generic'; import { ApiExcludeEndpoint, ApiOperation, ApiTags } from '@nestjs/swagger'; import { UserAuthGuard } from '../auth/framework/user.auth.guard'; @@ -253,7 +257,7 @@ export class IntegrationsController { @Get('/:channelType/limit') @ApiExcludeEndpoint() - @Span() + @OtelSpan() async getProviderLimit( @UserSession() user: IJwtPayload, @Param('channelType') channelType: ChannelTypeEnum diff --git a/apps/api/src/app/layouts/layouts.controller.ts b/apps/api/src/app/layouts/layouts.controller.ts index 695d4ce2532..c79d2f40e4a 100644 --- a/apps/api/src/app/layouts/layouts.controller.ts +++ b/apps/api/src/app/layouts/layouts.controller.ts @@ -24,7 +24,7 @@ import { ApiOkResponse, } from '../shared/framework/response.decorator'; import { IJwtPayload } from '@novu/shared'; -import { GetLayoutCommand, GetLayoutUseCase, Span } from '@novu/application-generic'; +import { GetLayoutCommand, GetLayoutUseCase, OtelSpan } from '@novu/application-generic'; import { CreateLayoutRequestDto, @@ -71,7 +71,7 @@ export class LayoutsController { @ExternalApiAccessible() @ApiResponse(CreateLayoutResponseDto, 201) @ApiOperation({ summary: 'Layout creation', description: 'Create a layout' }) - @Span() + @OtelSpan() async createLayout( @UserSession() user: IJwtPayload, @Body() body: CreateLayoutRequestDto diff --git a/packages/application-generic/src/tracing/otel-wrapper.ts b/packages/application-generic/src/tracing/otel-wrapper.ts index fa15bfcbe45..3d0b0bce95a 100644 --- a/packages/application-generic/src/tracing/otel-wrapper.ts +++ b/packages/application-generic/src/tracing/otel-wrapper.ts @@ -1,4 +1,4 @@ -import { Span as OtelSpan } from 'nestjs-otel'; +import { Span } from 'nestjs-otel'; import { TraceService as setTraceService } from 'nestjs-otel'; import { MetricService as setMetricService } from 'nestjs-otel'; import { OtelInstanceCounter as setOtelInstanceCounter } from 'nestjs-otel'; @@ -10,87 +10,53 @@ import { OtelObservableUpDownCounter as setOtelObservableUpDownCounter } from 'n import { OtelCounter as setOtelCounter } from 'nestjs-otel'; import { MetricOptions, SpanOptions } from '@opentelemetry/api'; import { Injectable } from '@nestjs/common'; +import { PipeTransform, Type } from '@nestjs/common'; + +export type OtelDataOrPipe = + | string + | PipeTransform + | Type>; // eslint-disable-next-line @typescript-eslint/naming-convention -export function Span(name?: string, options?: SpanOptions) { - return OtelSpan(name, options); +export function OtelSpan(name?: string, options?: SpanOptions) { + return Span(name, options); } + // eslint-disable-next-line @typescript-eslint/naming-convention export function OtelInstanceCounter(options?: MetricOptions) { return setOtelInstanceCounter(options); } + // eslint-disable-next-line @typescript-eslint/naming-convention -export function OtelUpDownCounter( - ...dataOrPipes: ( - | string - | import('@nestjs/common').PipeTransform - | import('@nestjs/common').Type< - import('@nestjs/common').PipeTransform - > - )[] -) { +export function OtelUpDownCounter(...dataOrPipes: OtelDataOrPipe[]) { return setOtelUpDownCounter(...dataOrPipes); } + // eslint-disable-next-line @typescript-eslint/naming-convention -export function OtelHistogram( - ...dataOrPipes: ( - | string - | import('@nestjs/common').PipeTransform - | import('@nestjs/common').Type< - import('@nestjs/common').PipeTransform - > - )[] -) { - return setOtelHistogram(); +export function OtelHistogram(...dataOrPipes: OtelDataOrPipe[]) { + return setOtelHistogram(...dataOrPipes); } + // eslint-disable-next-line @typescript-eslint/naming-convention -export function OtelObservableGauge( - ...dataOrPipes: ( - | string - | import('@nestjs/common').PipeTransform - | import('@nestjs/common').Type< - import('@nestjs/common').PipeTransform - > - )[] -) { - return setOtelObservableGauge(); +export function OtelObservableGauge(...dataOrPipes: OtelDataOrPipe[]) { + return setOtelObservableGauge(...dataOrPipes); } + // eslint-disable-next-line @typescript-eslint/naming-convention -export function OtelObservableCounter( - ...dataOrPipes: ( - | string - | import('@nestjs/common').PipeTransform - | import('@nestjs/common').Type< - import('@nestjs/common').PipeTransform - > - )[] -) { - return setOtelObservableCounter(); +export function OtelObservableCounter(...dataOrPipes: OtelDataOrPipe[]) { + return setOtelObservableCounter(...dataOrPipes); } + // eslint-disable-next-line @typescript-eslint/naming-convention -export function OtelObservableUpDownCounter( - ...dataOrPipes: ( - | string - | import('@nestjs/common').PipeTransform - | import('@nestjs/common').Type< - import('@nestjs/common').PipeTransform - > - )[] -) { - return setOtelObservableUpDownCounter(); +export function OtelObservableUpDownCounter(...dataOrPipes: OtelDataOrPipe[]) { + return setOtelObservableUpDownCounter(...dataOrPipes); } + // eslint-disable-next-line @typescript-eslint/naming-convention -export function OtelCounter( - ...dataOrPipes: ( - | string - | import('@nestjs/common').PipeTransform - | import('@nestjs/common').Type< - import('@nestjs/common').PipeTransform - > - )[] -) { - return setOtelCounter(); +export function OtelCounter(...dataOrPipes: OtelDataOrPipe[]) { + return setOtelCounter(...dataOrPipes); } + @Injectable() export class TraceService extends setTraceService { getTracer() { From e9a15fe420978320711a7b6503cd02a974674ed5 Mon Sep 17 00:00:00 2001 From: aliaksandrryzhou Date: Mon, 15 Jan 2024 19:57:48 +0300 Subject: [PATCH 17/17] fix(ci): Comments resolving --- apps/api/src/app.module.ts | 5 +-- apps/api/src/bootstrap.ts | 6 +--- apps/webhook/src/app.module.ts | 4 +-- apps/webhook/src/bootstrap.ts | 7 +--- apps/ws/src/app.module.ts | 4 +-- apps/ws/src/bootstrap.ts | 7 +--- .../application-generic/src/tracing/index.ts | 17 +--------- .../src/tracing/tracing.module.ts | 34 +++++++++++++++++++ .../src/tracing/tracing.service.ts | 34 +++++++++++++++++++ .../src/tracing/tracing.ts | 15 ++------ 10 files changed, 81 insertions(+), 52 deletions(-) create mode 100644 packages/application-generic/src/tracing/tracing.module.ts create mode 100644 packages/application-generic/src/tracing/tracing.service.ts diff --git a/apps/api/src/app.module.ts b/apps/api/src/app.module.ts index 3607125b003..2065fc626c2 100644 --- a/apps/api/src/app.module.ts +++ b/apps/api/src/app.module.ts @@ -3,7 +3,8 @@ import { RavenInterceptor, RavenModule } from 'nest-raven'; import { APP_INTERCEPTOR } from '@nestjs/core'; import { Type } from '@nestjs/common/interfaces/type.interface'; import { ForwardReference } from '@nestjs/common/interfaces/modules/forward-reference.interface'; -import { OtelModule } from '@novu/application-generic'; +import * as packageJson from '../package.json'; +import { TracingModule } from '@novu/application-generic'; import { SharedModule } from './app/shared/shared.module'; import { UserModule } from './app/user/user.module'; @@ -84,7 +85,7 @@ const baseModules: Array | Forward TenantModule, WorkflowOverridesModule, RateLimitingModule, - OtelModule, + TracingModule.register(packageJson.name), ]; const enterpriseModules = enterpriseImports(); diff --git a/apps/api/src/bootstrap.ts b/apps/api/src/bootstrap.ts index 14d1f4dac05..68bc007c52c 100644 --- a/apps/api/src/bootstrap.ts +++ b/apps/api/src/bootstrap.ts @@ -9,7 +9,7 @@ import * as compression from 'compression'; import { NestFactory, Reflector } from '@nestjs/core'; import * as bodyParser from 'body-parser'; import * as Sentry from '@sentry/node'; -import { BullMqService, getErrorInterceptor, Logger as PinoLogger, initializeOtelSdk } from '@novu/application-generic'; +import { BullMqService, getErrorInterceptor, Logger as PinoLogger } from '@novu/application-generic'; import { ExpressAdapter } from '@nestjs/platform-express'; import { AppModule } from './app.module'; @@ -39,13 +39,9 @@ if (process.env.SENTRY_DSN) { // Validate the ENV variables after launching SENTRY, so missing variables will report to sentry validateEnv(); -const otelSDK = initializeOtelSdk(packageJson.name); export async function bootstrap(expressApp?): Promise { BullMqService.haveProInstalled(); - if (process.env.ENABLE_OTEL === 'true') { - await otelSDK.start(); - } let app: INestApplication; if (expressApp) { diff --git a/apps/webhook/src/app.module.ts b/apps/webhook/src/app.module.ts index c1586d993a0..d05b56874c4 100644 --- a/apps/webhook/src/app.module.ts +++ b/apps/webhook/src/app.module.ts @@ -7,14 +7,14 @@ import { AppService } from './app.service'; import { SharedModule } from './shared/shared.module'; import { HealthModule } from './health/health.module'; import { WebhooksModule } from './webhooks/webhooks.module'; -import { createNestLoggingModuleOptions, LoggerModule, OtelModule } from '@novu/application-generic'; +import { createNestLoggingModuleOptions, LoggerModule, TracingModule } from '@novu/application-generic'; const packageJson = require('../package.json'); const modules = [ SharedModule, HealthModule, WebhooksModule, - OtelModule, + TracingModule.register(packageJson.name), LoggerModule.forRoot( createNestLoggingModuleOptions({ serviceName: packageJson.name, diff --git a/apps/webhook/src/bootstrap.ts b/apps/webhook/src/bootstrap.ts index 6543bee6fd4..9abb45a1eb9 100644 --- a/apps/webhook/src/bootstrap.ts +++ b/apps/webhook/src/bootstrap.ts @@ -2,7 +2,7 @@ import './config'; import { INestApplication } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import * as Sentry from '@sentry/node'; -import { getErrorInterceptor, Logger, initializeOtelSdk } from '@novu/application-generic'; +import { getErrorInterceptor, Logger } from '@novu/application-generic'; import * as packageJson from '../package.json'; import { AppModule } from './app.module'; @@ -15,12 +15,7 @@ if (process.env.SENTRY_DSN) { }); } -const otelSDK = initializeOtelSdk(packageJson.name); - export async function bootstrap(): Promise { - if (process.env.ENABLE_OTEL === 'true') { - await otelSDK.start(); - } const app = await NestFactory.create(AppModule, { bufferLogs: true }); app.useLogger(app.get(Logger)); diff --git a/apps/ws/src/app.module.ts b/apps/ws/src/app.module.ts index fadaada573d..170fafd385a 100644 --- a/apps/ws/src/app.module.ts +++ b/apps/ws/src/app.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { RavenInterceptor, RavenModule } from 'nest-raven'; import { APP_INTERCEPTOR } from '@nestjs/core'; -import { createNestLoggingModuleOptions, LoggerModule, OtelModule } from '@novu/application-generic'; +import { createNestLoggingModuleOptions, LoggerModule, TracingModule } from '@novu/application-generic'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @@ -14,7 +14,7 @@ const packageJson = require('../package.json'); const modules = [ SharedModule, HealthModule, - OtelModule, + TracingModule.register(packageJson.name), SocketModule, LoggerModule.forRoot( createNestLoggingModuleOptions({ diff --git a/apps/ws/src/bootstrap.ts b/apps/ws/src/bootstrap.ts index bbfccd487c3..25058288809 100644 --- a/apps/ws/src/bootstrap.ts +++ b/apps/ws/src/bootstrap.ts @@ -3,7 +3,7 @@ import 'newrelic'; import helmet from 'helmet'; import { NestFactory } from '@nestjs/core'; import * as Sentry from '@sentry/node'; -import { BullMqService, getErrorInterceptor, Logger, initializeOtelSdk } from '@novu/application-generic'; +import { BullMqService, getErrorInterceptor, Logger } from '@novu/application-generic'; import * as packageJson from '../package.json'; import { AppModule } from './app.module'; @@ -20,13 +20,8 @@ if (process.env.SENTRY_DSN) { release: `v${version}`, }); } -const otelSDK = initializeOtelSdk(packageJson.name); - export async function bootstrap() { BullMqService.haveProInstalled(); - if (process.env.ENABLE_OTEL === 'true') { - await otelSDK.start(); - } const app = await NestFactory.create(AppModule, { bufferLogs: true }); const inMemoryAdapter = new InMemoryIoAdapter(app); diff --git a/packages/application-generic/src/tracing/index.ts b/packages/application-generic/src/tracing/index.ts index 4ec76abbc79..6aa203c88bb 100644 --- a/packages/application-generic/src/tracing/index.ts +++ b/packages/application-generic/src/tracing/index.ts @@ -1,17 +1,2 @@ -import { OpenTelemetryModule } from 'nestjs-otel'; - -export * from './tracing'; +export * from './tracing.module'; export * from './otel-wrapper'; -export { Counter } from '@opentelemetry/api'; -// eslint-disable-next-line @typescript-eslint/naming-convention -export const OtelModule = OpenTelemetryModule.forRoot({ - metrics: { - hostMetrics: true, - apiMetrics: { - enable: true, - ignoreRoutes: ['/favicon.ico', '/v1/health-check'], - //Records metrics for all URLs, even undefined ones - ignoreUndefinedRoutes: true, - }, - }, -}); diff --git a/packages/application-generic/src/tracing/tracing.module.ts b/packages/application-generic/src/tracing/tracing.module.ts new file mode 100644 index 00000000000..0938b5efe85 --- /dev/null +++ b/packages/application-generic/src/tracing/tracing.module.ts @@ -0,0 +1,34 @@ +import { DynamicModule, Module } from '@nestjs/common'; +import { TracingService } from './tracing.service'; +import { OpenTelemetryModule } from 'nestjs-otel'; + +// eslint-disable-next-line @typescript-eslint/naming-convention +const OtelModule = OpenTelemetryModule.forRoot({ + metrics: { + hostMetrics: true, + apiMetrics: { + enable: true, + ignoreRoutes: ['/favicon.ico', '/v1/health-check'], + //Records metrics for all URLs, even undefined ones + ignoreUndefinedRoutes: true, + }, + }, +}); + +@Module({}) +export class TracingModule { + static register(serviceName: string): DynamicModule { + return { + module: TracingModule, + imports: [OtelModule], + providers: [ + TracingService, + { provide: 'TRACING_SERVICE_NAME', useValue: serviceName }, + { + provide: 'TRACING_ENABLE_OTEL', + useValue: process.env.ENABLE_OTEL === 'true', + }, + ], + }; + } +} diff --git a/packages/application-generic/src/tracing/tracing.service.ts b/packages/application-generic/src/tracing/tracing.service.ts new file mode 100644 index 00000000000..97f64d9df9b --- /dev/null +++ b/packages/application-generic/src/tracing/tracing.service.ts @@ -0,0 +1,34 @@ +import { + Inject, + Injectable, + OnModuleDestroy, + OnModuleInit, +} from '@nestjs/common'; +import { initializeOtelSdk } from './tracing'; +import { NodeSDK } from '@opentelemetry/sdk-node'; + +@Injectable() +export class TracingService implements OnModuleInit, OnModuleDestroy { + private otelSDKInstance: NodeSDK; + + constructor( + @Inject('TRACING_SERVICE_NAME') private readonly serviceName: string, + @Inject('TRACING_ENABLE_OTEL') private readonly otelEnabled: boolean + ) {} + + async onModuleDestroy() { + if (this.otelSDKInstance) { + await this.otelSDKInstance.shutdown(); + } + } + onModuleInit() { + if (!this.hasValidParameters()) return; + + this.otelSDKInstance = initializeOtelSdk(this.serviceName); + this.otelSDKInstance.start(); + } + + private hasValidParameters() { + return this.serviceName && this.otelEnabled; + } +} diff --git a/packages/application-generic/src/tracing/tracing.ts b/packages/application-generic/src/tracing/tracing.ts index b098f33cedc..0cd9cf7852c 100644 --- a/packages/application-generic/src/tracing/tracing.ts +++ b/packages/application-generic/src/tracing/tracing.ts @@ -1,7 +1,7 @@ import { CompositePropagator, - W3CTraceContextPropagator, W3CBaggagePropagator, + W3CTraceContextPropagator, } from '@opentelemetry/core'; import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'; import { JaegerExporter } from '@opentelemetry/exporter-jaeger'; @@ -14,7 +14,7 @@ import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-ho // eslint-disable-next-line @typescript-eslint/naming-convention export function initializeOtelSdk(serviceName: string) { - const instance = new NodeSDK({ + return new NodeSDK({ metricReader: new PrometheusExporter({ port: 9464, }), @@ -34,15 +34,4 @@ export function initializeOtelSdk(serviceName: string) { }), instrumentations: [getNodeAutoInstrumentations()], }); - process.on('SIGTERM', () => { - instance - .shutdown() - .then( - () => console.log('SDK shut down successfully'), - (err) => console.log('Error shutting down SDK', err) - ) - .finally(() => process.exit(0)); - }); - - return instance; }