Files
Gilles De Mey b94fceddad Alerting: Make Loki & Prometheus instant vector by default (#66797)
Co-authored-by: Konrad Lalik <konrad.lalik@grafana.com>
2023-04-27 17:38:22 +03:00

47 lines
1.3 KiB
TypeScript

import { DataFrame, Labels, roundDecimals } from '@grafana/data';
/**
* ⚠️ `frame.fields` could be an empty array ⚠️
*
* TypeScript will NOT complain about it when accessing items via index signatures.
* Make sure to check for empty array or use optional chaining!
*
* see https://github.com/Microsoft/TypeScript/issues/13778
*/
const getSeriesName = (frame: DataFrame): string | undefined => {
const firstField = frame.fields[0];
const displayNameFromDS = firstField?.config?.displayNameFromDS;
return displayNameFromDS ?? frame.name ?? firstField?.labels?.__name__;
};
const getSeriesValue = (frame: DataFrame) => {
const value = frame.fields[0]?.values[0];
if (Number.isFinite(value)) {
return roundDecimals(value, 5);
}
return value;
};
const getSeriesLabels = (frame: DataFrame): Record<string, string> => {
const firstField = frame.fields[0];
return firstField?.labels ?? {};
};
const formatLabels = (labels: Labels): string => {
return Object.entries(labels)
.map(([key, value]) => key + '=' + value)
.join(', ');
};
const isEmptySeries = (series: DataFrame[]): boolean => {
const isEmpty = series.every((serie) => serie.fields.every((field) => field.values.every((value) => value == null)));
return isEmpty;
};
export { getSeriesName, getSeriesValue, getSeriesLabels, formatLabels, isEmptySeries };