{"version":3,"file":"AlertRuleList.127ffbe22c8c11985cdc.js","mappings":"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","sources":["webpack://grafana/./public/app/features/alerting/AlertHowToModal.tsx","webpack://grafana/./public/app/features/alerting/AlertRuleItem.tsx","webpack://grafana/./public/app/features/alerting/components/DeprecationNotice.tsx","webpack://grafana/./public/app/features/alerting/state/selectors.ts","webpack://grafana/./public/app/features/alerting/AlertRuleList.tsx","webpack://grafana/./public/app/features/alerting/state/actions.ts"],"sourcesContent":["import React from 'react';\n\nimport { Modal, VerticalGroup } from '@grafana/ui';\n\nexport interface AlertHowToModalProps {\n onDismiss: () => void;\n}\n\nexport function AlertHowToModal({ onDismiss }: AlertHowToModalProps): JSX.Element {\n return (\n \n \n \"link\n

\n Alerts are added and configured in the Alert tab of any dashboard graph panel, letting you build and visualize\n an alert using existing queries.\n

\n

Remember to save the dashboard to persist your alert rule changes.

\n
\n
\n );\n}\n","import React, { useCallback } from 'react';\n// @ts-ignore\nimport Highlighter from 'react-highlight-words';\n\nimport { Icon, IconName, Button, LinkButton, Card } from '@grafana/ui';\n\nimport { AlertRule } from '../../types';\n\nexport interface Props {\n rule: AlertRule;\n search: string;\n onTogglePause: () => void;\n}\n\nconst AlertRuleItem = ({ rule, search, onTogglePause }: Props) => {\n const ruleUrl = `${rule.url}?editPanel=${rule.panelId}&tab=alert`;\n const renderText = useCallback(\n (text) => (\n \n ),\n [search]\n );\n\n return (\n \n {renderText(rule.name)}\n \n \n \n \n \n \n {renderText(rule.stateText)}{' '}\n \n for {rule.stateAge}\n \n {rule.info ? renderText(rule.info) : null}\n \n \n \n {rule.state === 'paused' ? 'Resume' : 'Pause'}\n \n \n Edit alert\n \n \n \n );\n};\n\nexport default AlertRuleItem;\n","import React, { FC } from 'react';\n\nimport { Alert } from '@grafana/ui';\n\nexport const LOCAL_STORAGE_KEY = 'grafana.legacyalerting.unifiedalertingpromo';\n\nconst DeprecationNotice: FC<{}> = () => (\n \n

\n You are using Grafana legacy alerting, it has been deprecated and will be removed in the next major version of\n Grafana.\n
\n We encourage you to upgrade to the new Grafana alerting experience.\n

\n

\n See{' '}\n \n What’s New with Grafana alerting\n {' '}\n to learn more about what‘s new or learn{' '}\n \n how to enable the new Grafana alerting feature\n \n .\n

\n
\n);\n\nexport { DeprecationNotice };\n","import { AlertRule, AlertRulesState, NotificationChannelState, StoreState } from 'app/types';\n\nexport const getSearchQuery = (state: AlertRulesState) => state.searchQuery;\n\nexport const getAlertRuleItems = (state: StoreState): AlertRule[] => {\n const regex = new RegExp(state.alertRules.searchQuery, 'i');\n\n return state.alertRules.items.filter((item) => {\n return regex.test(item.name) || regex.test(item.stateText) || regex.test(item.info!);\n });\n};\n\nexport const getNotificationChannel = (state: NotificationChannelState, channelId: number) => {\n if (state.notificationChannel.id === channelId) {\n return state.notificationChannel;\n }\n\n return null;\n};\n","import React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { SelectableValue } from '@grafana/data';\nimport { config, locationService } from '@grafana/runtime';\nimport { Button, FilterInput, LinkButton, Select, VerticalGroup } from '@grafana/ui';\nimport appEvents from 'app/core/app_events';\nimport Page from 'app/core/components/Page/Page';\nimport { GrafanaRouteComponentProps } from 'app/core/navigation/types';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { AlertRule, StoreState } from 'app/types';\n\nimport { ShowModalReactEvent } from '../../types/events';\n\nimport { AlertHowToModal } from './AlertHowToModal';\nimport AlertRuleItem from './AlertRuleItem';\nimport { DeprecationNotice } from './components/DeprecationNotice';\nimport { getAlertRulesAsync, togglePauseAlertRule } from './state/actions';\nimport { setSearchQuery } from './state/reducers';\nimport { getAlertRuleItems, getSearchQuery } from './state/selectors';\n\nfunction mapStateToProps(state: StoreState) {\n return {\n navModel: getNavModel(state.navIndex, 'alert-list'),\n alertRules: getAlertRuleItems(state),\n search: getSearchQuery(state.alertRules),\n isLoading: state.alertRules.isLoading,\n };\n}\n\nconst mapDispatchToProps = {\n getAlertRulesAsync,\n setSearchQuery,\n togglePauseAlertRule,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface OwnProps extends GrafanaRouteComponentProps<{}, { state: string }> {}\n\nexport type Props = OwnProps & ConnectedProps;\n\nexport class AlertRuleListUnconnected extends PureComponent {\n stateFilters = [\n { label: 'All', value: 'all' },\n { label: 'OK', value: 'ok' },\n { label: 'Not OK', value: 'not_ok' },\n { label: 'Alerting', value: 'alerting' },\n { label: 'No data', value: 'no_data' },\n { label: 'Paused', value: 'paused' },\n { label: 'Pending', value: 'pending' },\n ];\n\n componentDidMount() {\n this.fetchRules();\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.queryParams.state !== this.props.queryParams.state) {\n this.fetchRules();\n }\n }\n\n async fetchRules() {\n await this.props.getAlertRulesAsync({ state: this.getStateFilter() });\n }\n\n getStateFilter(): string {\n return this.props.queryParams.state ?? 'all';\n }\n\n onStateFilterChanged = (option: SelectableValue) => {\n locationService.partial({ state: option.value });\n };\n\n onOpenHowTo = () => {\n appEvents.publish(new ShowModalReactEvent({ component: AlertHowToModal }));\n };\n\n onSearchQueryChange = (value: string) => {\n this.props.setSearchQuery(value);\n };\n\n onTogglePause = (rule: AlertRule) => {\n this.props.togglePauseAlertRule(rule.id, { paused: rule.state !== 'paused' });\n };\n\n alertStateFilterOption = ({ text, value }: { text: string; value: string }) => {\n return (\n \n );\n };\n\n render() {\n const { navModel, alertRules, search, isLoading } = this.props;\n\n return (\n \n \n
\n
\n \n
\n
\n \n\n
\n \n
\n
\n
\n {config.unifiedAlertingEnabled && (\n \n Add NG Alert\n \n )}\n \n
\n \n \n {alertRules.map((rule) => {\n return (\n this.onTogglePause(rule as AlertRule)}\n />\n );\n })}\n \n \n \n );\n }\n}\n\nexport default connector(AlertRuleListUnconnected);\n","import { getBackendSrv, locationService } from '@grafana/runtime';\nimport { notifyApp } from 'app/core/actions';\nimport { createErrorNotification, createSuccessNotification } from 'app/core/copy/appNotification';\nimport { AlertRuleDTO, NotifierDTO, ThunkResult } from 'app/types';\n\nimport { loadAlertRules, loadedAlertRules, notificationChannelLoaded, setNotificationChannels } from './reducers';\n\nexport function getAlertRulesAsync(options: { state: string }): ThunkResult {\n return async (dispatch) => {\n dispatch(loadAlertRules());\n const rules: AlertRuleDTO[] = await getBackendSrv().get('/api/alerts', options);\n dispatch(loadedAlertRules(rules));\n };\n}\n\nexport function togglePauseAlertRule(id: number, options: { paused: boolean }): ThunkResult {\n return async (dispatch) => {\n await getBackendSrv().post(`/api/alerts/${id}/pause`, options);\n const stateFilter = locationService.getSearchObject().state || 'all';\n dispatch(getAlertRulesAsync({ state: stateFilter.toString() }));\n };\n}\n\nexport function createNotificationChannel(data: any): ThunkResult> {\n return async (dispatch) => {\n try {\n await getBackendSrv().post(`/api/alert-notifications`, data);\n dispatch(notifyApp(createSuccessNotification('Notification created')));\n locationService.push('/alerting/notifications');\n } catch (error) {\n dispatch(notifyApp(createErrorNotification(error.data.error)));\n }\n };\n}\n\nexport function updateNotificationChannel(data: any): ThunkResult {\n return async (dispatch) => {\n try {\n await getBackendSrv().put(`/api/alert-notifications/${data.id}`, data);\n dispatch(notifyApp(createSuccessNotification('Notification updated')));\n } catch (error) {\n dispatch(notifyApp(createErrorNotification(error.data.error)));\n }\n };\n}\n\nexport function testNotificationChannel(data: any): ThunkResult {\n return async (dispatch, getState) => {\n const channel = getState().notificationChannel.notificationChannel;\n await getBackendSrv().post('/api/alert-notifications/test', { id: channel.id, ...data });\n };\n}\n\nexport function loadNotificationTypes(): ThunkResult {\n return async (dispatch) => {\n const alertNotifiers: NotifierDTO[] = await getBackendSrv().get(`/api/alert-notifiers`);\n\n const notificationTypes = alertNotifiers.sort((o1, o2) => {\n if (o1.name > o2.name) {\n return 1;\n }\n return -1;\n });\n\n dispatch(setNotificationChannels(notificationTypes));\n };\n}\n\nexport function loadNotificationChannel(id: number): ThunkResult {\n return async (dispatch) => {\n await dispatch(loadNotificationTypes());\n const notificationChannel = await getBackendSrv().get(`/api/alert-notifications/${id}`);\n dispatch(notificationChannelLoaded(notificationChannel));\n };\n}\n"],"names":["AlertHowToModal","onDismiss","Modal","title","isOpen","onClickBackdrop","VerticalGroup","spacing","src","alt","rule","search","onTogglePause","ruleUrl","url","panelId","renderText","useCallback","text","highlightClassName","textToHighlight","searchWords","Card","name","Icon","size","stateIcon","className","stateClass","stateText","stateAge","info","Button","variant","icon","state","onClick","LinkButton","href","DeprecationNotice","Alert","severity","getSearchQuery","searchQuery","getAlertRuleItems","regex","RegExp","alertRules","items","filter","item","test","mapDispatchToProps","getAlertRulesAsync","setSearchQuery","togglePauseAlertRule","connector","connect","navModel","getNavModel","navIndex","isLoading","AlertRuleListUnconnected","PureComponent","label","value","option","locationService","appEvents","ShowModalReactEvent","component","this","props","id","paused","componentDidMount","fetchRules","componentDidUpdate","prevProps","queryParams","getStateFilter","render","Page","FilterInput","placeholder","onChange","onSearchQueryChange","htmlFor","Select","inputId","options","stateFilters","onStateFilterChanged","config","onOpenHowTo","map","async","dispatch","loadAlertRules","rules","getBackendSrv","get","loadedAlertRules","post","toString","createNotificationChannel","data","notifyApp","createSuccessNotification","error","createErrorNotification","updateNotificationChannel","put","testNotificationChannel","getState","channel","notificationChannel","loadNotificationTypes","notificationTypes","sort","o1","o2","setNotificationChannels","loadNotificationChannel","notificationChannelLoaded"],"sourceRoot":""}