mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 16:50:39 +00:00
* initial adds for otel tracing * initial basic testing * basic tracing for incoming calls * linting * add traceId to the webhook params * trace webhook calls * tracing: add new commands as tags when receiving async commands over websocket * tracing new commands * add summary for config verb * trace async commands * bugfix: undefined ref * tracing: give time for final webhooks before closing root span * tracing bugfix: span for background gather was not ended * tracing - minor tag changes * tracing - add span atttribute for reason call ended * trace call status webhooks, add app version to trace output * config: add support for automatically re-enabling * env var to customize service name in tracing UI * config: change to use 'sticky' attribute to re-enable bargein automatically * fix warnings * when adulting create a new root span * when background gather triggers bargein via vad clear queue of tasks * additional trace attributes for dial and refer * fix dial tracing * add better summary for dial * fix prev commit * add exponential backoff to WsRequestor reconnection logic * add calling number to log metadata, as this will be frequently the key data given for troubleshooting * add accountSid to log metadata * make handshake timeout for ws connections configurable with default 1.5 secs * rename env var * fix bug prev checkin * logging fixes * consistent env naming
56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
const CallSession = require('./call-session');
|
|
const {CallStatus} = require('../utils/constants');
|
|
const moment = require('moment');
|
|
|
|
/**
|
|
* @classdesc Subclass of CallSession. This represents a CallSession that is
|
|
* created for an outbound call that is initiated via the REST API.
|
|
* @extends CallSession
|
|
*/
|
|
class RestCallSession extends CallSession {
|
|
constructor({logger, application, srf, req, ep, tasks, callInfo, accountInfo, rootSpan}) {
|
|
super({
|
|
logger,
|
|
application,
|
|
srf,
|
|
callSid: callInfo.callSid,
|
|
tasks,
|
|
callInfo,
|
|
accountInfo,
|
|
rootSpan
|
|
});
|
|
this.req = req;
|
|
this.ep = ep;
|
|
|
|
this.on('callStatusChange', this._notifyCallStatusChange.bind(this));
|
|
this._notifyCallStatusChange({
|
|
callStatus: CallStatus.Trying,
|
|
sipStatus: 100,
|
|
sipReason: 'Trying'
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Stores the sip dialog that is created when the far end answers.
|
|
* @param {Dialog} dlg - sip dialog
|
|
*/
|
|
setDialog(dlg) {
|
|
this.dlg = dlg;
|
|
dlg.on('destroy', this._callerHungup.bind(this));
|
|
this.wrapDialog(dlg);
|
|
}
|
|
|
|
/**
|
|
* This is invoked when the called party hangs up, in order to calculate the call duration.
|
|
*/
|
|
_callerHungup() {
|
|
const duration = moment().diff(this.dlg.connectTime, 'seconds');
|
|
this.emit('callStatusChange', {callStatus: CallStatus.Completed, duration});
|
|
this.logger.debug('RestCallSession: called party hung up');
|
|
this._callReleased();
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = RestCallSession;
|