export function getServiceMapGraph()

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 } };
}