function configureWithQueryProducers()

in dashboard/new-dashboard/src/configurators/PredefinedGroupingMeasureConfigurator.ts [76:133]


function configureWithQueryProducers(dataList: (string | number)[][][], configuration: DataQueryExecutorConfiguration, chartStyle: ChartStyle): Promise<BarChartOptions> {
  let useDurationFormatter = true

  const dimensionNameSet = new Set<string>()
  const source: Record<string, string | number>[] = []

  // outer cycle over measures to group it together (e.g. if several machines are selected)
  for (let measureIndex = 0; measureIndex < configuration.measures.length; measureIndex++) {
    for (let dataIndex = 0, n = dataList.length; dataIndex < n; dataIndex++) {
      if (useDurationFormatter && !isDurationFormatterApplicable(configuration.measureNames[dataIndex])) {
        useDurationFormatter = false
      }

      const measure = configuration.measures[measureIndex]
      const classifier = configuration.seriesNames[dataIndex]
      let dimension = measure
      if (classifier.length > 0) {
        dimension += ` | ${classifier}`
      }
      const column: Record<string, string | number> = { dimension }
      source.push(column)
      const result = dataList[dataIndex]
      for (let i = 0; i < result[0].length; i++) {
        const valueKey = result[0][i] as string
        dimensionNameSet.add(valueKey)
        column[valueKey] = result[measureIndex + 1][i]
      }
    }
  }

  // https://echarts.apache.org/examples/en/editor.html?c=dataset-simple1
  const dimensions: DimensionDefinition[] = []
  dimensions.push({ name: "dimension", type: "ordinal" })
  for (const name of dimensionNameSet) {
    dimensions.push({ name, type: "number" })
  }

  const series = new Array<BarSeriesOption>(dimensions.length - 1)
  const formatter = getSeriesLabelFormatter(useDurationFormatter, chartStyle.valueUnit)
  for (let i = 0; i < series.length; i++) {
    series[i] = {
      type: "bar",
      label: {
        show: true,
        formatter,
        position: chartStyle.barSeriesLabelPosition,
      },
    }
  }

  return Promise.resolve({
    dataset: {
      dimensions,
      source,
    },
    series,
  })
}