UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

152 lines 6.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = init; exports.shutdown = shutdown; exports.disableInstrumentations = disableInstrumentations; exports.getTracerProvider = getTracerProvider; exports.instrument = instrument; const tslib_1 = require("tslib"); const node_http_1 = require("node:http"); const api = tslib_1.__importStar(require("@opentelemetry/api")); const api_1 = require("@opentelemetry/api"); const context_async_hooks_1 = require("@opentelemetry/context-async-hooks"); const exporter_trace_otlp_http_1 = require("@opentelemetry/exporter-trace-otlp-http"); const instrumentation_1 = require("@opentelemetry/instrumentation"); const instrumentation_bunyan_1 = require("@opentelemetry/instrumentation-bunyan"); const instrumentation_http_1 = require("@opentelemetry/instrumentation-http"); const resource_detector_aws_1 = require("@opentelemetry/resource-detector-aws"); const resource_detector_azure_1 = require("@opentelemetry/resource-detector-azure"); const resource_detector_gcp_1 = require("@opentelemetry/resource-detector-gcp"); const resource_detector_github_1 = require("@opentelemetry/resource-detector-github"); const resources_1 = require("@opentelemetry/resources"); const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base"); const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node"); const semantic_conventions_1 = require("@opentelemetry/semantic-conventions"); const expose_cjs_1 = require("../expose.cjs"); const env_1 = require("../util/env"); const utils_1 = require("./utils"); let instrumentations = []; init(); function init() { if (!(0, utils_1.isTracingEnabled)()) { return; } const spanProcessors = []; // add processors if ((0, utils_1.isTraceDebuggingEnabled)()) { spanProcessors.push(new sdk_trace_base_1.SimpleSpanProcessor(new sdk_trace_base_1.ConsoleSpanExporter())); } // OTEL specification environment variable if ((0, utils_1.isTraceSendingEnabled)()) { const exporter = new exporter_trace_otlp_http_1.OTLPTraceExporter(); spanProcessors.push(new sdk_trace_base_1.BatchSpanProcessor(exporter)); } const env = (0, env_1.getEnv)(); const baseResource = (0, resources_1.resourceFromAttributes)({ // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/semantic_conventions/README.md#semantic-attributes-with-sdk-provided-default-value [semantic_conventions_1.ATTR_SERVICE_NAME]: env.OTEL_SERVICE_NAME ?? 'renovate', // https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv // https://github.com/open-telemetry/opentelemetry-js/blob/e9d3c71918635d490b6a9ac9f8259265b38394d0/semantic-conventions/src/experimental_attributes.ts#L7688 ['service.namespace']: env.OTEL_SERVICE_NAMESPACE ?? 'renovatebot.com', [semantic_conventions_1.ATTR_SERVICE_VERSION]: env.OTEL_SERVICE_VERSION ?? expose_cjs_1.pkg.version, }); const detectedResource = (0, resources_1.detectResources)({ detectors: [ resource_detector_aws_1.awsBeanstalkDetector, resource_detector_aws_1.awsEc2Detector, resource_detector_aws_1.awsEcsDetector, resource_detector_aws_1.awsEksDetector, resource_detector_aws_1.awsLambdaDetector, resource_detector_azure_1.azureAppServiceDetector, resource_detector_azure_1.azureFunctionsDetector, resource_detector_azure_1.azureVmDetector, resource_detector_gcp_1.gcpDetector, resource_detector_github_1.gitHubDetector, resources_1.envDetector, ], }); const traceProvider = new sdk_trace_node_1.NodeTracerProvider({ resource: baseResource.merge(detectedResource), spanProcessors, }); const contextManager = new context_async_hooks_1.AsyncLocalStorageContextManager(); traceProvider.register({ contextManager, }); instrumentations = [ new instrumentation_http_1.HttpInstrumentation({ /* v8 ignore start -- not easily testable */ applyCustomAttributesOnSpan: (span, request, response) => { // ignore 404 errors when the branch protection of Github could not be found. This is expected if no rules are configured if (request instanceof node_http_1.ClientRequest && request.host === `api.github.com` && request.path.endsWith(`/protection`) && response.statusCode === 404) { span.setStatus({ code: api_1.SpanStatusCode.OK }); } }, /* v8 ignore stop */ }), new instrumentation_bunyan_1.BunyanInstrumentation(), ]; (0, instrumentation_1.registerInstrumentations)({ instrumentations, }); } /* v8 ignore start -- not easily testable */ // https://github.com/open-telemetry/opentelemetry-js-api/issues/34 async function shutdown() { const traceProvider = getTracerProvider(); if (traceProvider instanceof sdk_trace_node_1.NodeTracerProvider) { await traceProvider.shutdown(); } else if (traceProvider instanceof api_1.ProxyTracerProvider) { const delegateProvider = traceProvider.getDelegate(); if (delegateProvider instanceof sdk_trace_node_1.NodeTracerProvider) { await delegateProvider.shutdown(); } } } /* v8 ignore stop */ function disableInstrumentations() { for (const instrumentation of instrumentations) { instrumentation.disable(); } } function getTracerProvider() { return api.trace.getTracerProvider(); } function getTracer() { return getTracerProvider().getTracer('renovate'); } function instrument(name, fn, options = {}, context = api.context.active()) { return getTracer().startActiveSpan(name, options, context, (span) => { try { const ret = fn(); if (ret instanceof Promise) { return ret .catch((e) => { span.recordException(e); span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: (0, utils_1.massageThrowable)(e), }); throw e; }) .finally(() => span.end()); } span.end(); return ret; } catch (e) { span.recordException(e); span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: (0, utils_1.massageThrowable)(e), }); span.end(); throw e; } }); } //# sourceMappingURL=index.js.map