UNPKG

@redocly/cli

Version:

[@Redocly](https://redocly.com) CLI is your all-in-one OpenAPI utility. It builds, manages, improves, and quality-checks your OpenAPI descriptions, all of which comes in handy for various phases of the API Lifecycle. Create your own rulesets to make API g

42 lines 1.82 kB
import { resourceFromAttributes } from '@opentelemetry/resources'; import { NodeTracerProvider, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions'; import { version } from './package.js'; import { OTEL_TRACES_URL, DEFAULT_FETCH_TIMEOUT } from './constants.js'; export class OtelServerTelemetry { send(event, data) { const nodeTracerProvider = new NodeTracerProvider({ resource: resourceFromAttributes({ [ATTR_SERVICE_NAME]: `redocly-cli`, [ATTR_SERVICE_VERSION]: `@redocly/cli@${version}`, }), spanProcessors: [ new SimpleSpanProcessor(new OTLPTraceExporter({ url: OTEL_TRACES_URL, headers: {}, timeoutMillis: DEFAULT_FETCH_TIMEOUT, })), ], }); const time = new Date(); const eventId = crypto.randomUUID(); const tracer = nodeTracerProvider.getTracer('CliTelemetry'); const span = tracer.startSpan(`event.${event}`, { attributes: { 'cloudevents.event_client.id': eventId, 'cloudevents.event_client.type': event, }, startTime: time, }); for (const [key, value] of Object.entries(data)) { const keySnakeCase = key.replace(/([A-Z])/g, '_$1').toLowerCase(); if (value !== undefined) { span.setAttribute(`cloudevents.event_data.${keySnakeCase}`, value); } } span.end(time); } } export const otelTelemetry = new OtelServerTelemetry(); //# sourceMappingURL=otel.js.map