getEdgeTypes()

in src/datasource.ts [260:304]


  getEdgeTypes(calls: Call[], metrics: Recordable) {
    const idField = { name: NodeGraphDataFrameFieldNames.id, type: FieldType.string, values: new ArrayVector(), config: {}};
    const targetField = { name: NodeGraphDataFrameFieldNames.target, type: FieldType.string, values: new ArrayVector(), config: {}};
    const sourceField = { name: NodeGraphDataFrameFieldNames.source, type: FieldType.string, values: new ArrayVector(), config: {}};
    const mainStatField = { name: NodeGraphDataFrameFieldNames.mainStat, type: FieldType.number, values: new ArrayVector(), config: {}};
    const secondaryStatField = { name: NodeGraphDataFrameFieldNames.secondaryStat, type: FieldType.number, values: new ArrayVector(), config: {}};
    const detailsFields: any = [];
    for (const [index, k] of Object.keys(metrics.data).entries()) {
      const c = metrics.config.find((d: MetricData) => d.name === k) || {};
      const config = {displayName: c.label, unit: c.unit};
      if (index === 0) {
        mainStatField.config = config;
      }
      else if (index === 1) {
        secondaryStatField.config = config;
      } else {
        detailsFields.push({
          name: `${NodeGraphDataFrameFieldNames.detail}${k}`,
          type: FieldType.number,
          values: new ArrayVector(),
          config: {displayName: `${c.label || k } ${c.unit || ''}`}
        });
      }
    }
    for (const call of calls) {
      idField.values.add(call.id);
      targetField.values.add(call.target);
      sourceField.values.add(call.source);
      for (let i = 0; i < metrics.config.length; i++) {
        const item = metrics.config[i];
        const m = (metrics.data[item.name].values).find((v: {id: string}) => v.id === call.id) || {isEmptyValue: true};
        const value = m.isEmptyValue ? NaN : this.expression(Number(m.value), item.calculation);

        if (i === 0) {
          mainStatField.values.add(Number(value));
        } else if (i === 1) {
          secondaryStatField.values.add(Number(value));
        } else {
          detailsFields[i - 2]?.values.add(Number(value));
        }
      }
    }

    return [idField, targetField, sourceField, mainStatField, secondaryStatField, ...detailsFields];
  }