@zerosuxx/opentelemetry-nestjs
Version:
OpenTelemetry module for Nestjs with auto instrumentation and resource detection. Initially forked from https://github.com/overbit/opentelemetry-nestjs.git
77 lines • 3.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OpenTelemetryModule = void 0;
const TraceService_1 = require("./Trace/TraceService");
const Constants_1 = require("./Constants");
const OpenTelemetryModuleConfigDefault_1 = require("./OpenTelemetryModuleConfigDefault");
const DecoratorInjector_1 = require("./Trace/Injectors/DecoratorInjector");
const core_1 = require("@nestjs/core");
const event_emitter_1 = require("@nestjs/event-emitter");
class OpenTelemetryModule {
static forRoot(traceAutoInjectors) {
const injectors = traceAutoInjectors ?? OpenTelemetryModuleConfigDefault_1.OpenTelemetryModuleDefaultConfig;
return {
global: true,
module: OpenTelemetryModule,
imports: [event_emitter_1.EventEmitterModule.forRoot()],
providers: [
...injectors,
TraceService_1.TraceService,
DecoratorInjector_1.DecoratorInjector,
this.buildInjectors(injectors),
],
exports: [TraceService_1.TraceService],
};
}
static buildInjectors(injectors = []) {
return {
provide: Constants_1.Constants.SDK_INJECTORS,
useFactory: async (...injectors) => {
for await (const injector of injectors) {
if (injector['inject'])
await injector.inject();
}
},
inject: [
DecoratorInjector_1.DecoratorInjector,
...injectors,
],
};
}
static async forRootAsync(configuration = {}) {
return {
global: true,
module: OpenTelemetryModule,
imports: [...configuration?.imports, event_emitter_1.EventEmitterModule.forRoot()],
providers: [
TraceService_1.TraceService,
this.buildAsyncInjectors(),
{
provide: Constants_1.Constants.SDK_CONFIG,
useFactory: configuration.useFactory,
inject: configuration.inject,
},
],
exports: [TraceService_1.TraceService],
};
}
static buildAsyncInjectors() {
return {
provide: Constants_1.Constants.SDK_INJECTORS,
useFactory: async (traceAutoInjectors, moduleRef) => {
const injectors = traceAutoInjectors ?? OpenTelemetryModuleConfigDefault_1.OpenTelemetryModuleDefaultConfig;
const decoratorInjector = await moduleRef.create(DecoratorInjector_1.DecoratorInjector);
await decoratorInjector.inject();
for await (const injector of injectors) {
const created = await moduleRef.create(injector);
if (created['inject'])
await created.inject();
}
return {};
},
inject: [Constants_1.Constants.SDK_CONFIG, core_1.ModuleRef],
};
}
}
exports.OpenTelemetryModule = OpenTelemetryModule;
//# sourceMappingURL=OpenTelemetryModule.js.map