in dashboards-observability/public/components/trace_analytics/components/common/helper_functions.tsx [104:169]
export function getServiceMapGraph(
map: ServiceObject,
idSelected: 'latency' | 'error_rate' | 'throughput',
ticks: number[],
currService?: string,
relatedServices?: string[]
) {
if (!relatedServices) relatedServices = Object.keys(map);
const nodes = Object.keys(map).map((service) => {
const value = map[service][idSelected];
let styleOptions;
if (value || value === 0) {
const percent = (value - ticks[0]) / (ticks[ticks.length - 1] - ticks[0]);
const color = getServiceMapScaleColor(percent, idSelected);
styleOptions = {
borderWidth: 0,
color: relatedServices!.indexOf(service) >= 0 ? `rgba(${color}, 1)` : `rgba(${color}, 0.3)`,
};
} else {
// service nodes that are not matched under traceGroup filter
styleOptions = {
borderWidth: 1.5,
chosen: false,
color: {
border: '#DADADC',
background: '#FFFFFF',
},
shapeProperties: {
borderDashes: [2, 2],
},
};
}
const message =
{ latency: 'Average latency: ', error_rate: 'Error rate: ', throughput: 'Throughput: ' }[
idSelected
] +
(value! >= 0
? value + (idSelected === 'latency' ? 'ms' : idSelected === 'error_rate' ? '%' : '')
: 'N/A');
return {
id: map[service].id,
label: service,
size: service === currService ? 30 : 15,
title: `${service}\n\n${message}`,
...styleOptions,
};
});
const edges: Array<{ from: number; to: number; color: string }> = [];
const edgeColor = uiSettingsService.get('theme:darkMode') ? '255, 255, 255' : '0, 0, 0';
Object.keys(map).map((service) => {
map[service].targetServices.map((target) => {
edges.push({
from: map[service].id,
to: map[target].id,
color:
relatedServices!.indexOf(service) >= 0 && relatedServices!.indexOf(target) >= 0
? `rgba(${edgeColor}, 1)`
: `rgba(${edgeColor}, 0.3)`,
});
});
});
return { graph: { nodes, edges } };
}