UNPKG

autotel

Version:
199 lines (196 loc) 6.75 kB
'use strict'; var chunk563EL6O6_cjs = require('./chunk-563EL6O6.cjs'); require('./chunk-OC6X2VIN.cjs'); var chunkCEAQK2QY_cjs = require('./chunk-CEAQK2QY.cjs'); require('./chunk-ZNMBW67B.cjs'); require('./chunk-IOYFAFHJ.cjs'); require('./chunk-CMNGGTQL.cjs'); require('./chunk-CU6IDACR.cjs'); require('./chunk-6S5RUKU3.cjs'); var chunkYS6C2YJE_cjs = require('./chunk-YS6C2YJE.cjs'); require('./chunk-VH77IPJN.cjs'); require('./chunk-FU6R566Y.cjs'); require('./chunk-ESLWRGAG.cjs'); require('./chunk-YREV3LGG.cjs'); require('./chunk-JEQ2X3Z6.cjs'); var sdkNode = require('@opentelemetry/sdk-node'); var exporterTraceOtlpHttp = require('@opentelemetry/exporter-trace-otlp-http'); var exporterLogsOtlpHttp = require('@opentelemetry/exporter-logs-otlp-http'); var sdkLogs = require('@opentelemetry/sdk-logs'); var sdkTraceBase = require('@opentelemetry/sdk-trace-base'); var resources = require('@opentelemetry/resources'); var incubating = require('@opentelemetry/semantic-conventions/incubating'); var exporterMetricsOtlpHttp = require('@opentelemetry/exporter-metrics-otlp-http'); var sdkMetrics = require('@opentelemetry/sdk-metrics'); function parseOtlpHeaders(headersString) { if (!headersString) return {}; const headers = {}; const pairs = headersString.split(","); for (const pair of pairs) { const [key, ...valueParts] = pair.split("="); if (key && valueParts.length > 0) { headers[key.trim()] = valueParts.join("=").trim(); } } return headers; } function parseResourceAttributes(attributesString) { if (!attributesString) return {}; const attributes = {}; const pairs = attributesString.split(","); for (const pair of pairs) { const [key, ...valueParts] = pair.split("="); if (key && valueParts.length > 0) { attributes[key.trim()] = valueParts.join("=").trim(); } } return attributes; } var currentSDK = null; var shutdownHandlerRegistered = false; async function shutdownInstrumentation(sdk) { const sdkToShutdown = sdk || currentSDK; if (!sdkToShutdown) { chunk563EL6O6_cjs.getLogger().warn({}, "No SDK to shutdown"); return; } try { await sdkToShutdown.shutdown(); chunk563EL6O6_cjs.getLogger().info({}, "OpenTelemetry terminated successfully"); if (sdkToShutdown === currentSDK) { currentSDK = null; } } catch (error) { chunk563EL6O6_cjs.getLogger().error( { err: error instanceof Error ? error : void 0 }, "Error terminating OpenTelemetry" ); throw error; } } async function initInstrumentation(config) { if (currentSDK) { chunk563EL6O6_cjs.getLogger().info( {}, "Shutting down existing OpenTelemetry SDK before reinitializing..." ); await shutdownInstrumentation(currentSDK); } const otlpHeaders = parseOtlpHeaders(config.headers); const customResourceAttributes = parseResourceAttributes( config.resourceAttributes ); let resource; const detectors = [resources.processDetector, resources.hostDetector]; try { const awsDetectors = await import('@opentelemetry/resource-detector-aws'); detectors.push( awsDetectors.awsEc2Detector, awsDetectors.awsEcsDetector, awsDetectors.awsEksDetector ); } catch { } try { const gcpDetectors = await import('@opentelemetry/resource-detector-gcp'); detectors.push(gcpDetectors.gcpDetector); } catch { } try { const containerDetectors = await import('@opentelemetry/resource-detector-container'); detectors.push(containerDetectors.containerDetector); } catch { } if (config.detectResources) { const detectedResource = await resources.detectResources({ detectors }); resource = detectedResource.merge( resources.resourceFromAttributes({ [incubating.ATTR_SERVICE_NAME]: config.serviceName, [incubating.ATTR_SERVICE_VERSION]: config.serviceVersion || "1.0.0", "deployment.environment": config.deploymentEnvironment || "development", ...customResourceAttributes // Merge custom resource attributes }) ); } else { resource = resources.resourceFromAttributes({ [incubating.ATTR_SERVICE_NAME]: config.serviceName, [incubating.ATTR_SERVICE_VERSION]: config.serviceVersion || "1.0.0", "deployment.environment": config.deploymentEnvironment || "development", ...customResourceAttributes // Merge custom resource attributes }); } let instrumentations = config.instrumentations || []; if (config.selectiveInstrumentation === false) { const mod = chunkYS6C2YJE_cjs.requireModule("@opentelemetry/auto-instrumentations-node"); instrumentations = [mod.getNodeAutoInstrumentations()]; } const traceExporter = new exporterTraceOtlpHttp.OTLPTraceExporter({ url: `${config.otlpEndpoint || "http://localhost:4318"}/v1/traces`, headers: otlpHeaders }); const spanProcessor = new chunkCEAQK2QY_cjs.TailSamplingSpanProcessor( new sdkTraceBase.BatchSpanProcessor(traceExporter) ); const sdk = new sdkNode.NodeSDK({ resource, spanProcessor, // Use our wrapped processor instead of traceExporter directly metricReader: new sdkMetrics.PeriodicExportingMetricReader({ exporter: new exporterMetricsOtlpHttp.OTLPMetricExporter({ url: `${config.otlpEndpoint || "http://localhost:4318"}/v1/metrics`, headers: otlpHeaders }) }), logRecordProcessors: [ new sdkLogs.BatchLogRecordProcessor( new exporterLogsOtlpHttp.OTLPLogExporter({ url: `${config.otlpEndpoint || "http://localhost:4318"}/v1/logs`, headers: otlpHeaders }) ) ], instrumentations }); try { await sdk.start(); chunk563EL6O6_cjs.getLogger().info({}, "OpenTelemetry instrumentation started successfully"); } catch (error) { chunk563EL6O6_cjs.getLogger().error( { err: error instanceof Error ? error : void 0 }, "Failed to start OpenTelemetry SDK" ); throw error; } currentSDK = sdk; if (!shutdownHandlerRegistered) { shutdownHandlerRegistered = true; const shutdownHandler = () => { shutdownInstrumentation().then(() => { process.exit(0); }).catch((error) => { chunk563EL6O6_cjs.getLogger().error( { err: error instanceof Error ? error : void 0 }, "Shutdown error" ); process.exit(1); }); }; process.on("SIGTERM", shutdownHandler); process.on("SIGINT", shutdownHandler); } return sdk; } exports.initInstrumentation = initInstrumentation; exports.shutdownInstrumentation = shutdownInstrumentation; //# sourceMappingURL=instrumentation.cjs.map //# sourceMappingURL=instrumentation.cjs.map