mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 16:50:39 +00:00
verbhook on ws connection should be ended in next redirect command (#616)
* verbhook on ws connection should be ended in next redirect command * wip * wip * minor change for readability --------- Co-authored-by: Dave Horton <daveh@beachdognet.com>
This commit is contained in:
@@ -828,6 +828,10 @@ class CallSession extends Emitter {
|
|||||||
const task = this.tasks.shift();
|
const task = this.tasks.shift();
|
||||||
this.logger.info(`CallSession:exec starting task #${stackNum}:${taskNum}: ${task.name}`);
|
this.logger.info(`CallSession:exec starting task #${stackNum}:${taskNum}: ${task.name}`);
|
||||||
this._notifyTaskStatus(task, {event: 'starting'});
|
this._notifyTaskStatus(task, {event: 'starting'});
|
||||||
|
// Register verbhook span wait for end
|
||||||
|
task.on('VerbHookSpanWaitForEnd', ({span}) => {
|
||||||
|
this.verbHookSpan = span;
|
||||||
|
});
|
||||||
try {
|
try {
|
||||||
const resources = await this._evaluatePreconditions(task);
|
const resources = await this._evaluatePreconditions(task);
|
||||||
let skip = false;
|
let skip = false;
|
||||||
@@ -1035,6 +1039,7 @@ class CallSession extends Emitter {
|
|||||||
/* we started a new app on the child leg, but nothing given for parent so hang him up */
|
/* we started a new app on the child leg, but nothing given for parent so hang him up */
|
||||||
this.currentTask.kill(this);
|
this.currentTask.kill(this);
|
||||||
}
|
}
|
||||||
|
this._endVerbHookSpan();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1306,6 +1311,7 @@ Duration=${duration} `
|
|||||||
kill(onBackgroundGatherBargein = false) {
|
kill(onBackgroundGatherBargein = false) {
|
||||||
if (this.isConfirmCallSession) this.logger.debug('CallSession:kill (ConfirmSession)');
|
if (this.isConfirmCallSession) this.logger.debug('CallSession:kill (ConfirmSession)');
|
||||||
else this.logger.info('CallSession:kill');
|
else this.logger.info('CallSession:kill');
|
||||||
|
this._endVerbHookSpan();
|
||||||
if (this.currentTask) {
|
if (this.currentTask) {
|
||||||
this.currentTask.kill(this);
|
this.currentTask.kill(this);
|
||||||
this.currentTask = null;
|
this.currentTask = null;
|
||||||
@@ -1410,6 +1416,7 @@ Duration=${duration} `
|
|||||||
switch (command) {
|
switch (command) {
|
||||||
case 'redirect':
|
case 'redirect':
|
||||||
if (Array.isArray(data)) {
|
if (Array.isArray(data)) {
|
||||||
|
this._endVerbHookSpan();
|
||||||
const t = normalizeJambones(this.logger, data)
|
const t = normalizeJambones(this.logger, data)
|
||||||
.map((tdata) => makeTask(this.logger, tdata));
|
.map((tdata) => makeTask(this.logger, tdata));
|
||||||
if (!queueCommand) {
|
if (!queueCommand) {
|
||||||
@@ -2073,6 +2080,13 @@ Duration=${duration} `
|
|||||||
stopBackgroundTask(type) {
|
stopBackgroundTask(type) {
|
||||||
this.backgroundTaskManager.stop(type);
|
this.backgroundTaskManager.stop(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_endVerbHookSpan() {
|
||||||
|
if (this.verbHookSpan) {
|
||||||
|
this.verbHookSpan.end();
|
||||||
|
this.verbHookSpan = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = CallSession;
|
module.exports = CallSession;
|
||||||
|
|||||||
@@ -162,7 +162,17 @@ class Task extends Emitter {
|
|||||||
try {
|
try {
|
||||||
const json = await this.cs.requestor.request(type, this.actionHook, params, httpHeaders);
|
const json = await this.cs.requestor.request(type, this.actionHook, params, httpHeaders);
|
||||||
span.setAttributes({'http.statusCode': 200});
|
span.setAttributes({'http.statusCode': 200});
|
||||||
span.end();
|
const isWsConnection = this.cs.requestor instanceof WsRequestor;
|
||||||
|
if (!isWsConnection || (expectResponse && json && Array.isArray(json) && json.length)) {
|
||||||
|
span.end();
|
||||||
|
} else {
|
||||||
|
/** we use this span to measure application response latency,
|
||||||
|
* and with websocket connections we generally get the application's response
|
||||||
|
* in a subsequent message from the far end, so we terminate the span when the
|
||||||
|
* first new set of verbs arrive after sending a transcript
|
||||||
|
* */
|
||||||
|
this.emit('VerbHookSpanWaitForEnd', {span});
|
||||||
|
}
|
||||||
if (expectResponse && json && Array.isArray(json)) {
|
if (expectResponse && json && Array.isArray(json)) {
|
||||||
const makeTask = require('./make_task');
|
const makeTask = require('./make_task');
|
||||||
const tasks = normalizeJambones(this.logger, json).map((tdata) => makeTask(this.logger, tdata));
|
const tasks = normalizeJambones(this.logger, json).map((tdata) => makeTask(this.logger, tdata));
|
||||||
|
|||||||
Reference in New Issue
Block a user