mirror of
https://github.com/grafana/grafana.git
synced 2025-09-20 13:28:42 +08:00

* WIP * Add instance totals to combined rule. Use totals to display instances stats in the UI * WIP * add global summaries, fix TS errors * fix useCombined test * fix test * use activeAt from rule when available * Fix NaN in global stats * Add no data total to global summary * Add totals recalculation for filtered rules * Fix instances totals, remove instances filtering from alert list view * Update tests * Fetch alerts considering filtering label matchers * WIP - Fetch alerts appending state filter to endpoint * Fix multiple values for state in request being applyied * fix test * Calculate hidden by for grafana managed alerts * Use INSTANCES_DISPLAY_LIMIT constant for limiting alert instances instead of 1 * Rename matchers parameter according to API changes * Fix calculating total number of grafana instances * Rename matcher prop after previous change * Display button to remove max instances limit * Change matcher query param to be an array of strings * Add test for paramsWithMatcherAndState method * Refactor matcher to be an string array to be consistent with state * Use matcher query string as matcher object type (encoded JSON) * Avoind encoding matcher parameters twice * fix tests * Enable toggle for the limit/show all button and restore limit and filters when we come back from custom view * Move getMatcherListFromString method to utils/alertmanager.ts * Fix limit toggle button being shown when it's not necessary * Use filteredTotals from be response to calculate hidden by count * Fix variables not being replaced correctly * Fix total shown to be all the instances filtered without limits * Adress some PR review comments * Move paramsWithMatcherAndState inside prometheusUrlBuilder method --------- Co-authored-by: Gilles De Mey <gilles.de.mey@gmail.com> Co-authored-by: Konrad Lalik <konrad.lalik@grafana.com> Co-authored-by: Virginia Cepeda <virginia.cepeda@grafana.com>
39 lines
1.8 KiB
TypeScript
39 lines
1.8 KiB
TypeScript
import { paramsWithMatcherAndState } from './prometheus';
|
|
|
|
const matcher = [{ name: 'severity', isRegex: false, isEqual: true, value: 'critical' }];
|
|
const matcherToJson = matcher.map((m) => JSON.stringify(m));
|
|
const matchers = [...matcher, { name: 'label1', isRegex: false, isEqual: true, value: 'hello there' }];
|
|
const matchersToJson = matchers.map((m) => JSON.stringify(m));
|
|
|
|
describe('paramsWithMatcherAndState method', () => {
|
|
it('Should return same params object with no changes if there are no states nor matchers', () => {
|
|
const params: Record<string, string | string[]> = { hello: 'there', bye: 'bye' };
|
|
expect(paramsWithMatcherAndState(params)).toStrictEqual(params);
|
|
});
|
|
it('Should return params object with state if there are states and no matchers', () => {
|
|
const params: Record<string, string | string[]> = { hello: 'there', bye: 'bye' };
|
|
const state: string[] = ['firing', 'pending'];
|
|
expect(paramsWithMatcherAndState(params, state)).toStrictEqual({ ...params, state: state });
|
|
});
|
|
it('Should return params object with state if there are matchers and no states', () => {
|
|
const params: Record<string, string | string[]> = { hello: 'there', bye: 'bye' };
|
|
expect(paramsWithMatcherAndState(params, undefined, matcher)).toStrictEqual({
|
|
...params,
|
|
matcher: matcherToJson,
|
|
});
|
|
expect(paramsWithMatcherAndState(params, undefined, matchers)).toStrictEqual({
|
|
...params,
|
|
matcher: matchersToJson,
|
|
});
|
|
});
|
|
it('Should return params object with stateand matchers if there are states and matchers', () => {
|
|
const params: Record<string, string | string[]> = { hello: 'there', bye: 'bye' };
|
|
const state: string[] = ['firing', 'pending'];
|
|
expect(paramsWithMatcherAndState(params, state, matchers)).toStrictEqual({
|
|
...params,
|
|
state: state,
|
|
matcher: matchersToJson,
|
|
});
|
|
});
|
|
});
|