autotel
Version:
Write Once, Observe Anywhere
199 lines (196 loc) • 6.75 kB
JavaScript
;
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