mirror of https://github.com/grafana/grafana.git
29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import { uniqBy } from 'lodash';
|
|
|
|
import { Labels } from '@grafana/data';
|
|
import { Matcher } from 'app/plugins/datasource/alertmanager/types';
|
|
|
|
import { parseMatcher } from './alertmanager';
|
|
|
|
// Parses a list of entries like like "['foo=bar', 'baz=~bad*']" into SilenceMatcher[]
|
|
export function parseQueryParamMatchers(matcherPairs: string[]): Matcher[] {
|
|
const parsedMatchers = matcherPairs.filter((x) => !!x.trim()).map((x) => parseMatcher(x.trim()));
|
|
|
|
// Due to migration, old alert rules might have a duplicated alertname label
|
|
// To handle that case want to filter out duplicates and make sure there are only unique labels
|
|
return uniqBy(parsedMatchers, (matcher) => matcher.name);
|
|
}
|
|
|
|
export const getMatcherQueryParams = (labels: Labels) => {
|
|
const validMatcherLabels = Object.entries(labels).filter(
|
|
([labelKey]) => !(labelKey.startsWith('__') && labelKey.endsWith('__'))
|
|
);
|
|
|
|
const matcherUrlParams = new URLSearchParams();
|
|
validMatcherLabels.forEach(([labelKey, labelValue]) =>
|
|
matcherUrlParams.append('matcher', `${labelKey}=${labelValue}`)
|
|
);
|
|
|
|
return matcherUrlParams;
|
|
};
|