'use strict'; const { ATTR_SERVICE_NAME } = require('@opentelemetry/semantic-conventions'); const { resourceFromAttributes } = require('@opentelemetry/resources'); const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node'); const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base'); const { JaegerExporter } = require('@opentelemetry/exporter-jaeger'); const { ZipkinExporter } = require('@opentelemetry/exporter-zipkin'); const { TracerShim } = require('@opentelemetry/shim-opentracing'); function shim(serviceName) { const provider = new NodeTracerProvider({ resource: resourceFromAttributes({ [ATTR_SERVICE_NAME]: serviceName }), spanProcessors: [new SimpleSpanProcessor(getExporter(serviceName))], }); // Initialize the OpenTelemetry APIs to use the NodeTracerProvider bindings provider.register(); return new TracerShim(provider.getTracer('opentracing-shim')); } function getExporter() { const type = process.env.EXPORTER.toLowerCase() || 'jaeger'; if (type.startsWith('z')) { return new ZipkinExporter(); } return new JaegerExporter(); } exports.shim = shim;