@rysujana/nuxt-plugins-signoz
Version:
Kompas.id reusable plugin to implement signoz on Nuxt project
71 lines (70 loc) • 3.1 kB
JavaScript
;
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;