Added handling for OUTBOUND and fractional links.

Also removed filtering (too complex for now)
This commit is contained in:
Peter Morton 2023-08-07 20:53:08 -05:00
parent 3f788733c8
commit 6c1b3f8b20

View File

@ -14,11 +14,19 @@ router.get("/", (req, res) => {
const filter = req.query.filter; const filter = req.query.filter;
var chain = {}; var chain = {
var filterNames = filter.split(","); "Direction-Channel": true,
for (let index = 0; index < filterNames.length - 1; index++) { "Channel-SubChannel": true,
chain[filterNames[index] + "-" + filterNames[index + 1]] = true; "Channel-Queue": true,
} "SubChannel-Queue": true,
"Queue-Outcome": true,
"Channel-Outcome": true, // special case for outbound that does not go throught queue
};
// TODO: Chain will be hardcoded until I can work out filter logic
// var filterNames = filter.split(",");
// for (let index = 0; index < filterNames.length - 1; index++) {
// chain[filterNames[index] + "-" + filterNames[index + 1]] = true;
// }
const startTime = new Date( const startTime = new Date(
new Date().setFullYear(new Date().getFullYear() - 2) new Date().setFullYear(new Date().getFullYear() - 2)
@ -61,7 +69,15 @@ router.get("/", (req, res) => {
result.data.data.findContactsCompletedBetween.edges.forEach((value) => { result.data.data.findContactsCompletedBetween.edges.forEach((value) => {
// TODO: Should add INBOUND and OUTBOUND Nodes before Channel // TODO: Should add INBOUND and OUTBOUND Nodes before Channel
addNode(filter, "Direction", value.node.direction, data);
addNode(filter, "Channel", value.node.interaction.__typename, data); addNode(filter, "Channel", value.node.interaction.__typename, data);
if (chain["Direction-Channel"]) {
addLink(
data,
value.node.direction,
value.node.interaction.__typename
);
}
if (value.node.interaction.subChannel) { if (value.node.interaction.subChannel) {
addNode( addNode(
@ -82,47 +98,40 @@ router.get("/", (req, res) => {
if (value.node.queue) { if (value.node.queue) {
const queueName = `${value.node.queue.name}(${value.node.queue.orgScope})`; const queueName = `${value.node.queue.name}(${value.node.queue.orgScope})`;
addNode(filter, "Queue", queueName, data); addNode(filter, "Queue", queueName, data);
if (chain["Channel-Queue"]) { if (
chain["SubChannel-Queue"] &&
!!value.node.interaction.subChannel
) {
addLink(data, value.node.interaction.subChannel, queueName);
} else if (chain["Channel-Queue"]) {
addLink(data, value.node.interaction.__typename, queueName); addLink(data, value.node.interaction.__typename, queueName);
} }
if (chain["SubChannel-Queue"]) {
addSubChannelLink(queueName);
}
} }
if (value.node.outcome) { if (value.node.outcome) {
value.node.outcome.edges.forEach((element) => { value.node.outcome.edges.forEach((element) => {
addNode(filter, "Outcome", element.node.text, data); addNode(filter, "Outcome", element.node.text, data);
if (chain["Channel-Outcome"]) { if (chain["Queue-Outcome"] && !!value.node.queue) {
const queueName = `${value.node.queue.name}(${value.node.queue.orgScope})`;
addLink( addLink(
data, data,
value.node.interaction.__typename, queueName,
element.node.text element.node.text,
1 / value.node.outcome.edges.length
); );
} }
if (chain["SubChannel-Outcome"]) { if (chain["Channel-Outcome"] && !value.node.queue) {
addSubChannelLink(element.node.text); addLink(
} data,
value.node.interaction.__typename,
if (chain["Queue-Outcome"] && !!value.node.queue) { element.node.text,
const queueName = `${value.node.queue.name}(${value.node.queue.orgScope})`; 1 / value.node.outcome.edges.length
addLink(data, queueName, element.node.text); );
} }
}); });
} }
function addSubChannelLink(target) {
if (value.node.interaction.subChannel) {
addLink(data, value.node.interaction.subChannel, target);
} else {
// SubChannel does not exist, revert to Channel if in chain
if (chain["Channel-SubChannel"]) {
addLink(data, value.node.interaction.__typename, target);
}
}
}
}); });
logger.debug(`Sending data: ${JSON.stringify(data, null, 2)}`); logger.debug(`Sending data: ${JSON.stringify(data, null, 2)}`);
@ -136,7 +145,8 @@ router.get("/", (req, res) => {
} }
}); });
function addLink(data, source, target) { function addLink(data, source, target, _fraction) {
var fraction = _fraction ? _fraction : 1;
var index = data.links.findIndex((i) => { var index = data.links.findIndex((i) => {
return i.source == source && i.target == target; return i.source == source && i.target == target;
}); });
@ -146,7 +156,7 @@ function addLink(data, source, target) {
data.links.push({ data.links.push({
source: source, source: source,
target: target, target: target,
value: 1, value: fraction,
}); });
} }
} }