31 lines
858 B
TypeScript
31 lines
858 B
TypeScript
import { buildVisualQueryFromString, QueryBuilderLabelFilter } from '@grafana/prometheus';
|
|
|
|
import { isEquals } from './utils';
|
|
|
|
/** An identified metric and its label for a query */
|
|
export type QueryMetric = {
|
|
metric: string;
|
|
labelFilters: QueryBuilderLabelFilter[];
|
|
query: string;
|
|
};
|
|
|
|
export function getQueryMetrics(queries: string[]) {
|
|
const queryMetrics: QueryMetric[] = [];
|
|
|
|
queries.forEach((query) => {
|
|
const struct = buildVisualQueryFromString(query);
|
|
if (struct.errors.length > 0) {
|
|
return;
|
|
}
|
|
|
|
const { metric, labels } = struct.query;
|
|
|
|
queryMetrics.push({ metric, labelFilters: labels.filter(isEquals), query });
|
|
struct.query.binaryQueries?.forEach(({ query: { metric, labels } }) => {
|
|
queryMetrics.push({ metric, labelFilters: labels.filter(isEquals), query });
|
|
});
|
|
});
|
|
|
|
return queryMetrics;
|
|
}
|