/* eslint-disable @typescript-eslint/naming-convention */
import '@api/sentry';
import { env } from '@api/env';
import { NodeSdk } from '@effect/opentelemetry';
import * as Resource from '@effect/opentelemetry/Resource';
import * as Tracer from '@effect/opentelemetry/Tracer';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
import { MySQL2Instrumentation } from '@opentelemetry/instrumentation-mysql2';
import { Resource as OtelResource } from '@opentelemetry/resources';
import { api, node, tracing } from '@opentelemetry/sdk-node';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
import { Layer } from 'effect';
const traceProvider = new node.NodeTracerProvider({
resource: new OtelResource({
[SemanticResourceAttributes.SERVICE_NAME]: 'api',
}),
});
const axiomExporter = new OTLPTraceExporter({
url: `${env.AXIOM_OTEL_EXPORTER_OTLP_ENDPOINT}/v1/traces`,
});
traceProvider.addSpanProcessor(new tracing.BatchSpanProcessor(axiomExporter));
api.trace.setGlobalTracerProvider(traceProvider);
const NodeSdkLive = NodeSdk.layer(() =>
NodeSdk.config({
traceExporter: axiomExporter,
instrumentations: [
new HttpInstrumentation(),
new MySQL2Instrumentation({
addSqlCommenterCommentToQueries: true,
}),
],
}),
);
export const TracingLive = Layer.provide(
Resource.layer({
serviceName: 'api',
attributes: {
environment: env.APP_ENV,
},
}),
Layer.merge(NodeSdkLive, Tracer.layer),
);
/* eslint-disable @typescript-eslint/naming-convention */
import '@api/sentry';
import { env } from '@api/env';
import { NodeSdk } from '@effect/opentelemetry';
import * as Resource from '@effect/opentelemetry/Resource';
import * as Tracer from '@effect/opentelemetry/Tracer';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
import { MySQL2Instrumentation } from '@opentelemetry/instrumentation-mysql2';
import { Resource as OtelResource } from '@opentelemetry/resources';
import { api, node, tracing } from '@opentelemetry/sdk-node';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
import { Layer } from 'effect';
const traceProvider = new node.NodeTracerProvider({
resource: new OtelResource({
[SemanticResourceAttributes.SERVICE_NAME]: 'api',
}),
});
const axiomExporter = new OTLPTraceExporter({
url: `${env.AXIOM_OTEL_EXPORTER_OTLP_ENDPOINT}/v1/traces`,
});
traceProvider.addSpanProcessor(new tracing.BatchSpanProcessor(axiomExporter));
api.trace.setGlobalTracerProvider(traceProvider);
const NodeSdkLive = NodeSdk.layer(() =>
NodeSdk.config({
traceExporter: axiomExporter,
instrumentations: [
new HttpInstrumentation(),
new MySQL2Instrumentation({
addSqlCommenterCommentToQueries: true,
}),
],
}),
);
export const TracingLive = Layer.provide(
Resource.layer({
serviceName: 'api',
attributes: {
environment: env.APP_ENV,
},
}),
Layer.merge(NodeSdkLive, Tracer.layer),
);