|
|
|
|
@ -2,6 +2,7 @@ import { context, propagation, SpanStatusCode, trace } from '@opentelemetry/api' |
|
|
|
|
import type { Span, SpanOptions, Tracer } from '@opentelemetry/api'; |
|
|
|
|
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'; |
|
|
|
|
import { NodeSDK } from '@opentelemetry/sdk-node'; |
|
|
|
|
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'; |
|
|
|
|
import type { MongoClient } from 'mongodb'; |
|
|
|
|
|
|
|
|
|
import { initDatabaseTracing } from './traceDatabaseCalls'; |
|
|
|
|
@ -23,6 +24,7 @@ export const startTracing = ({ service, db }: { service: string; db: MongoClient |
|
|
|
|
traceExporter: exporter, |
|
|
|
|
instrumentations: [], |
|
|
|
|
serviceName: service, |
|
|
|
|
spanProcessors: [new BatchSpanProcessor(exporter)], |
|
|
|
|
}); |
|
|
|
|
sdk.start(); |
|
|
|
|
|
|
|
|
|
@ -49,16 +51,20 @@ export function tracerSpan<F extends (span?: Span) => ReturnType<F>>( |
|
|
|
|
try { |
|
|
|
|
const result = fn(span); |
|
|
|
|
if (result instanceof Promise) { |
|
|
|
|
result.catch((err) => { |
|
|
|
|
span.recordException(err); |
|
|
|
|
span.setStatus({ |
|
|
|
|
code: SpanStatusCode.ERROR, |
|
|
|
|
message: err.message, |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
result |
|
|
|
|
.catch((err) => { |
|
|
|
|
span.recordException(err); |
|
|
|
|
span.setStatus({ |
|
|
|
|
code: SpanStatusCode.ERROR, |
|
|
|
|
message: err.message, |
|
|
|
|
}); |
|
|
|
|
}) |
|
|
|
|
.finally(() => span.end()); |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
span.end(); |
|
|
|
|
return result; |
|
|
|
|
} catch (err: any) { |
|
|
|
|
span.recordException(err); |
|
|
|
|
@ -66,9 +72,8 @@ export function tracerSpan<F extends (span?: Span) => ReturnType<F>>( |
|
|
|
|
code: SpanStatusCode.ERROR, |
|
|
|
|
message: err.message, |
|
|
|
|
}); |
|
|
|
|
throw err; |
|
|
|
|
} finally { |
|
|
|
|
span.end(); |
|
|
|
|
throw err; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|