import { Aggregation } from './types'; import * as _ from 'lodash'; export function filterMetricListByAlias(list: any[], alias: string | undefined, option: string): any[] { const filteredSeries = _.filter(list, (serie) => serie.alias === alias); if (filteredSeries.length === 0) { throw new Error(`${option}: Can't find metric for ${alias} name.`); } if (filteredSeries.length > 1) { throw new Error(`${option}: Get ${filteredSeries.length} metrics for ${alias} name. Please choose one.`); } return filteredSeries; } export function getAggregatedValueFromSerie( serie: any, aggregation = Aggregation.LAST, valueIdx: 0 | 1 = 0 ): number | null { // series types { datapoints: [number, number][]} // valueIdx === 0 for Grafana series, valueIdx === 1 for Chartwerk series if (serie === undefined) { return null; } if (serie.datapoints.length === 0) { return null; } switch (aggregation) { case Aggregation.LAST: const lastRow = _.last(serie.datapoints as Array<[number, number]>); // @ts-ignore return !_.isEmpty(lastRow) ? lastRow[valueIdx] : null; default: throw new Error(`Unknown aggregation type: ${aggregation}`); } }