mirror of
https://github.com/grafana/grafana.git
synced 2024-11-24 09:50:29 -06:00
Alerting: Warn about missing contact-point in notification policy (#60728)
* initial simplistic version still need to figure out what to do with child policies * adds test
This commit is contained in:
parent
1d12dda7db
commit
f72cbc16ad
@ -1,9 +1,13 @@
|
|||||||
|
import { render, screen } from '@testing-library/react';
|
||||||
|
import { noop } from 'lodash';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
import { MatcherOperator } from 'app/plugins/datasource/alertmanager/types';
|
import { MatcherOperator } from 'app/plugins/datasource/alertmanager/types';
|
||||||
|
|
||||||
import { FormAmRoute } from '../../types/amroutes';
|
import { FormAmRoute } from '../../types/amroutes';
|
||||||
import { MatcherFieldValue } from '../../types/silence-form';
|
import { MatcherFieldValue } from '../../types/silence-form';
|
||||||
|
|
||||||
import { deleteRoute, getFilteredRoutes, updatedRoute } from './AmRoutesTable';
|
import { AmRoutesTable, deleteRoute, getFilteredRoutes, updatedRoute } from './AmRoutesTable';
|
||||||
|
|
||||||
const defaultAmRoute: FormAmRoute = {
|
const defaultAmRoute: FormAmRoute = {
|
||||||
id: '',
|
id: '',
|
||||||
@ -189,4 +193,24 @@ describe('deleteRoute', () => {
|
|||||||
expect(updatedRoutes[1].id).toBe('2');
|
expect(updatedRoutes[1].id).toBe('2');
|
||||||
expect(updatedRoutes[2].id).toBe('3');
|
expect(updatedRoutes[2].id).toBe('3');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Should warn about policies with no contact point', () => {
|
||||||
|
const routes: FormAmRoute[] = [
|
||||||
|
buildAmRoute({ id: 'no-contact-point' }),
|
||||||
|
buildAmRoute({ id: 'with-contact-point', receiver: 'TestContactPoint' }),
|
||||||
|
];
|
||||||
|
|
||||||
|
render(
|
||||||
|
<AmRoutesTable
|
||||||
|
onChange={noop}
|
||||||
|
onCancelAdd={noop}
|
||||||
|
routes={routes}
|
||||||
|
isAddMode={false}
|
||||||
|
alertManagerSourceName={'grafana'}
|
||||||
|
receivers={[]}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
expect(screen.getByText('None')).toBeInTheDocument();
|
||||||
|
expect(screen.getByText('TestContactPoint')).toBeInTheDocument();
|
||||||
|
});
|
||||||
});
|
});
|
@ -1,7 +1,7 @@
|
|||||||
import { intersectionWith, isEqual } from 'lodash';
|
import { intersectionWith, isEqual } from 'lodash';
|
||||||
import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';
|
import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';
|
||||||
|
|
||||||
import { Button, ConfirmModal, HorizontalGroup, IconButton } from '@grafana/ui';
|
import { Badge, Button, ConfirmModal, HorizontalGroup, IconButton, Tooltip } from '@grafana/ui';
|
||||||
import { contextSrv } from 'app/core/services/context_srv';
|
import { contextSrv } from 'app/core/services/context_srv';
|
||||||
|
|
||||||
import { FormAmRoute } from '../../types/amroutes';
|
import { FormAmRoute } from '../../types/amroutes';
|
||||||
@ -95,6 +95,10 @@ export const AmRoutesTable: FC<AmRoutesTableProps> = ({
|
|||||||
const expandItem = useCallback((item: RouteTableItemProps) => setExpandedId(item.id), []);
|
const expandItem = useCallback((item: RouteTableItemProps) => setExpandedId(item.id), []);
|
||||||
const collapseItem = useCallback(() => setExpandedId(undefined), []);
|
const collapseItem = useCallback(() => setExpandedId(undefined), []);
|
||||||
|
|
||||||
|
const missingReceiver = (route: FormAmRoute) => {
|
||||||
|
return Boolean(route.receiver) === false;
|
||||||
|
};
|
||||||
|
|
||||||
const cols: RouteTableColumnProps[] = [
|
const cols: RouteTableColumnProps[] = [
|
||||||
{
|
{
|
||||||
id: 'matchingCriteria',
|
id: 'matchingCriteria',
|
||||||
@ -120,12 +124,24 @@ export const AmRoutesTable: FC<AmRoutesTableProps> = ({
|
|||||||
label: 'Contact point',
|
label: 'Contact point',
|
||||||
renderCell: (item) => {
|
renderCell: (item) => {
|
||||||
const type = getGrafanaAppReceiverType(receivers, item.data.receiver);
|
const type = getGrafanaAppReceiverType(receivers, item.data.receiver);
|
||||||
return item.data.receiver ? (
|
|
||||||
<>
|
if (!missingReceiver(item.data)) {
|
||||||
{item.data.receiver} {type && <GrafanaAppBadge grafanaAppType={type} />}
|
return (
|
||||||
</>
|
<>
|
||||||
) : (
|
{item.data.receiver} {type && <GrafanaAppBadge grafanaAppType={type} />}
|
||||||
'-'
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Tooltip
|
||||||
|
content={'No notifications will be delivered for this policy until a contact point is configured.'}
|
||||||
|
placement="top"
|
||||||
|
>
|
||||||
|
<span>
|
||||||
|
<Badge color="orange" icon="exclamation-triangle" text="None" />
|
||||||
|
</span>
|
||||||
|
</Tooltip>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
size: 5,
|
size: 5,
|
||||||
|
Loading…
Reference in New Issue
Block a user