UNPKG

@rysujana/nuxt-plugins-signoz

Version:

Kompas.id reusable plugin to implement signoz on Nuxt project

71 lines (70 loc) 3.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createSpan = exports.initTracer = void 0; const exporter_trace_otlp_http_1 = require("@opentelemetry/exporter-trace-otlp-http"); const sdk_trace_web_1 = require("@opentelemetry/sdk-trace-web"); const resources_1 = require("@opentelemetry/resources"); const semantic_conventions_1 = require("@opentelemetry/semantic-conventions"); const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base"); const context_zone_1 = require("@opentelemetry/context-zone"); const propagator_b3_1 = require("@opentelemetry/propagator-b3"); const instrumentation_1 = require("@opentelemetry/instrumentation"); const auto_instrumentations_web_1 = require("@opentelemetry/auto-instrumentations-web"); const initTracer = ({ serviceName, exporterUrl, attributes }) => { const exporter = new exporter_trace_otlp_http_1.OTLPTraceExporter({ url: exporterUrl, }); const provider = new sdk_trace_web_1.WebTracerProvider({ resource: new resources_1.Resource({ [semantic_conventions_1.SemanticResourceAttributes.SERVICE_NAME]: serviceName, }), }); provider.addSpanProcessor(new sdk_trace_base_1.BatchSpanProcessor(exporter)); provider.register({ contextManager: new context_zone_1.ZoneContextManager(), propagator: new propagator_b3_1.B3Propagator(), }); const customAttributesDocumentLoad = (span) => { span.setAttribute('http.path', attributes.path); span.setAttribute('user.uuid', attributes.uuid); }; (0, instrumentation_1.registerInstrumentations)({ instrumentations: [ (0, auto_instrumentations_web_1.getWebAutoInstrumentations)({ '@opentelemetry/instrumentation-document-load': { applyCustomAttributesOnSpan: { documentLoad: customAttributesDocumentLoad, }, }, '@opentelemetry/instrumentation-xml-http-request': { propagateTraceHeaderCorsUrls: [/.+/g], clearTimingResources: true, }, '@opentelemetry/instrumentation-fetch': { propagateTraceHeaderCorsUrls: [/.+/g], clearTimingResources: true, }, }), ], }); return provider.getTracer(serviceName); }; exports.initTracer = initTracer; const createSpan = ({ tracer, name, func = () => { }, attributes, events }) => { tracer.startActiveSpan(name, (span) => { if (span.isRecording() && attributes) { for (const key in attributes) { if (attributes.hasOwnProperty(key)) { const value = attributes[key]; span.setAttribute(key, value); } } } if (events) { span.addEvent(events.name, events.keyValue); } func(); span.end(); }); }; exports.createSpan = createSpan;