import { css } from '@emotion/css'; import React, { FC } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { LinkButton, useStyles2 } from '@grafana/ui'; import { contextSrv } from 'app/core/services/context_srv'; import { AlertmanagerAlert, AlertState } from 'app/plugins/datasource/alertmanager/types'; import { AccessControlAction } from 'app/types'; import { getInstancesPermissions } from '../../utils/access-control'; import { isGrafanaRulesSource } from '../../utils/datasource'; import { makeAMLink, makeLabelBasedSilenceLink } from '../../utils/misc'; import { AnnotationDetailsField } from '../AnnotationDetailsField'; import { Authorize } from '../Authorize'; interface AmNotificationsAlertDetailsProps { alertManagerSourceName: string; alert: AlertmanagerAlert; } export const AlertDetails: FC = ({ alert, alertManagerSourceName }) => { const styles = useStyles2(getStyles); const instancePermissions = getInstancesPermissions(alertManagerSourceName); // For Grafana Managed alerts the Generator URL redirects to the alert rule edit page, so update permission is required // For external alert manager the Generator URL redirects to an external service which we don't control const isGrafanaSource = isGrafanaRulesSource(alertManagerSourceName); const isSeeSourceButtonEnabled = isGrafanaSource ? contextSrv.hasPermission(AccessControlAction.AlertingRuleRead) : true; return ( <>
{alert.status.state === AlertState.Suppressed && ( Manage silences )} {alert.status.state === AlertState.Active && ( Silence )} {isSeeSourceButtonEnabled && alert.generatorURL && ( See source )}
{Object.entries(alert.annotations).map(([annotationKey, annotationValue]) => ( ))}
Receivers:{' '} {alert.receivers .map(({ name }) => name) .filter((name) => !!name) .join(', ')}
); }; const getStyles = (theme: GrafanaTheme2) => ({ button: css` & + & { margin-left: ${theme.spacing(1)}; } `, actionsRow: css` padding: ${theme.spacing(2, 0)} !important; border-bottom: 1px solid ${theme.colors.border.medium}; `, receivers: css` padding: ${theme.spacing(1, 0)}; `, });