@envelop/sentry
Version:
This plugin collects errors and performance tracing for your execution flow, and reports it to [Sentry](https://sentry.io).
31 lines (30 loc) • 1.34 kB
JavaScript
import { useOpenTelemetry } from '@envelop/opentelemetry';
import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
import * as Sentry from '@sentry/node';
import { SentryPropagator, SentrySampler, SentrySpanProcessor } from '@sentry/opentelemetry';
export const useSentry = ({ otel = {}, tracingProvider, spanKind, spanAdditionalAttributes, serviceName, spanPrefix, } = {}) => {
const client = Sentry.getClient();
if (!client) {
throw new Error("Sentry is not initialized. This plugin doesn't initialize Sentry automatically" +
'Please call `Sentry.init` as describe in Sentry documentation');
}
if (!tracingProvider) {
const provider = new BasicTracerProvider({
sampler: new SentrySampler(client),
});
provider.addSpanProcessor(new SentrySpanProcessor());
provider.register({
propagator: new SentryPropagator(),
contextManager: new Sentry.SentryContextManager(),
});
Sentry.validateOpenTelemetrySetup();
tracingProvider = provider;
}
return {
onPluginInit({ addPlugin }) {
addPlugin(
// @ts-expect-error TODO: fix types
useOpenTelemetry(otel ?? {}, tracingProvider, spanKind, spanAdditionalAttributes, serviceName, spanPrefix));
},
};
};