mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 16:50:39 +00:00
* add b3 header for trace propagation on initial webhook * logging * add tracing context to all webhooks * Add span parameter to Task.getTracingPropagation. Pass proper span to getTracingPropagation calls in Task methods to propagate the proper spanId (#91) * some tracing cleanup * bugfix: azure stt results need to be ordered by confidence level before processing (#92) * fix assertion * bugfix: vad was not enabled on config verb, restart STT on empty transcript in gather * gather: dont send webhook if call is gone * rest outdial: handle 302 redirect so we can later cancel request if needed (#95) * gather: restart if we get an empty transcript (looking at you, Azure) Co-authored-by: javibookline <98887695+javibookline@users.noreply.github.com>
79 lines
1.8 KiB
JavaScript
79 lines
1.8 KiB
JavaScript
const {context, trace} = require('@opentelemetry/api');
|
|
const {Dialog} = require('drachtio-srf');
|
|
class RootSpan {
|
|
constructor(callType, req) {
|
|
let tracer, callSid, linkedSpanId;
|
|
|
|
if (req instanceof Dialog) {
|
|
const dlg = req;
|
|
tracer = dlg.srf.locals.otel.tracer;
|
|
callSid = dlg.callSid;
|
|
linkedSpanId = dlg.linkedSpanId;
|
|
}
|
|
else {
|
|
tracer = req.srf.locals.otel.tracer;
|
|
callSid = req.locals.callSid;
|
|
}
|
|
this._span = tracer.startSpan(callType || 'incoming-call');
|
|
if (req instanceof Dialog) {
|
|
const dlg = req;
|
|
this._span.setAttributes({
|
|
linkedSpanId,
|
|
callId: dlg.sip.callId
|
|
});
|
|
}
|
|
else {
|
|
this._span.setAttributes({
|
|
callSid,
|
|
accountSid: req.get('X-Account-Sid'),
|
|
applicationSid: req.locals.application_sid,
|
|
callId: req.get('Call-ID'),
|
|
externalCallId: req.get('X-CID')
|
|
});
|
|
}
|
|
|
|
this._ctx = trace.setSpan(context.active(), this._span);
|
|
this.tracer = tracer;
|
|
}
|
|
|
|
get context() {
|
|
return this._ctx;
|
|
}
|
|
|
|
get traceId() {
|
|
return this._span.spanContext().traceId;
|
|
}
|
|
|
|
get spanId() {
|
|
return this._span.spanContext().spanId;
|
|
}
|
|
|
|
get traceFlags() {
|
|
return this._span.spanContext().traceFlags;
|
|
}
|
|
|
|
getTracingPropagation(encoding) {
|
|
// TODO: support encodings beyond b3 https://github.com/openzipkin/b3-propagation
|
|
if (this._span && this.traceId !== '00000000000000000000000000000000') {
|
|
return `${this.traceId}-${this.spanId}-1`;
|
|
}
|
|
}
|
|
|
|
setAttributes(attrs) {
|
|
this._span.setAttributes(attrs);
|
|
}
|
|
|
|
end() {
|
|
this._span.end();
|
|
}
|
|
|
|
startChildSpan(name, attributes) {
|
|
const span = this.tracer.startSpan(name, attributes, this._ctx);
|
|
const ctx = trace.setSpan(context.active(), span);
|
|
return {span, ctx};
|
|
}
|
|
}
|
|
|
|
module.exports = RootSpan;
|
|
|