import { Provider } from '@nestjs/common/interfaces/modules/provider.interface'; import { Injector } from './Trace/Injectors/Injector'; import { NodeSDKConfiguration } from '@opentelemetry/sdk-node'; import { ControllerInjector } from './Trace/Injectors/ControllerInjector'; import { GuardInjector } from './Trace/Injectors/GuardInjector'; import { EventEmitterInjector } from './Trace/Injectors/EventEmitterInjector'; import { ScheduleInjector } from './Trace/Injectors/ScheduleInjector'; import { PipeInjector } from './Trace/Injectors/PipeInjector'; import { LoggerInjector } from './Trace/Injectors/LoggerInjector'; import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; import { Resource } from '@opentelemetry/resources'; import { NoopSpanProcessor } from '@opentelemetry/sdk-trace-base'; import { CompositePropagator } from '@opentelemetry/core'; import { JaegerPropagator } from '@opentelemetry/propagator-jaeger'; import { B3InjectEncoding, B3Propagator } from '@opentelemetry/propagator-b3'; import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; import { alibabaCloudEcsDetector } from '@opentelemetry/resource-detector-alibaba-cloud'; import { awsEc2Detector } from '@opentelemetry/resource-detector-aws'; import { containerDetector } from '@opentelemetry/resource-detector-container'; import { gcpDetector } from '@opentelemetry/resource-detector-gcp'; import { instanaAgentDetector } from '@opentelemetry/resource-detector-instana'; export interface OpenTelemetryModuleConfig extends Partial { traceAutoInjectors?: Provider[]; } export const OpenTelemetryModuleDefaultConfig = { serviceName: 'UNKNOWN', traceAutoInjectors: [ ControllerInjector, GuardInjector, EventEmitterInjector, ScheduleInjector, PipeInjector, LoggerInjector, ], autoDetectResources: false, resourceDetectors: [ alibabaCloudEcsDetector, awsEc2Detector, containerDetector, gcpDetector, instanaAgentDetector, ], contextManager: new AsyncLocalStorageContextManager(), resource: new Resource({ lib: '@metinseylan/nestjs-opentelemetry', }), instrumentations: [getNodeAutoInstrumentations()], spanProcessor: new NoopSpanProcessor(), textMapPropagator: new CompositePropagator({ propagators: [ new JaegerPropagator(), new B3Propagator(), new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER, }), ], }), } as OpenTelemetryModuleConfig;