{"version":3,"file":"AlertRuleListIndex.46e2a523269adb28edf0.js","mappings":"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","sources":["webpack://grafana/./public/app/core/hooks/useCleanup.ts","webpack://grafana/./public/app/features/alerting/unified/components/rules/NoRulesCTA.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleListErrors.tsx","webpack://grafana/./public/app/features/alerting/unified/components/export/GrafanaRuleFolderExporter.tsx","webpack://grafana/./public/app/features/alerting/unified/components/export/GrafanaRuleGroupExporter.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/ReorderRuleGroupModal.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RulesGroup.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/useCombinedGroupNamespace.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/CloudRules.tsx","webpack://grafana/./public/app/features/alerting/unified/components/export/GrafanaRulesExporter.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/GrafanaRules.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleListGroupView.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleListStateSection.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleListStateView.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useFilteredRules.ts","webpack://grafana/./public/app/features/alerting/unified/components/rules/MultipleDataSourcePicker.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RulesFilter.tsx","webpack://grafana/./public/app/features/alerting/unified/RuleList.tsx","webpack://grafana/./public/app/features/alerting/unified/components/Authorize.tsx","webpack://grafana/./public/app/features/alerting/unified/components/export/FileExportPreview.tsx","webpack://grafana/./public/app/features/alerting/unified/components/export/GrafanaExportDrawer.tsx","webpack://grafana/./public/app/features/alerting/unified/components/export/providers.ts","webpack://grafana/./public/app/features/alerting/unified/components/rule-editor/NeedHelpInfo.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-editor/RuleEditorSection.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-editor/RuleInspector.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/ActionIcon.tsx","webpack://grafana/./node_modules/react-use/esm/useInterval.js"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { useDispatch } from 'app/types';\n\nimport { cleanUpAction, CleanUpAction } from '../actions/cleanUp';\n\nexport function useCleanup(cleanupAction: CleanUpAction) {\n const dispatch = useDispatch();\n //bit of a hack to unburden user from having to wrap stateSelcetor in a useCallback. Otherwise cleanup would happen on every render\n const selectorRef = useRef(cleanupAction);\n selectorRef.current = cleanupAction;\n useEffect(() => {\n return () => {\n dispatch(cleanUpAction({ cleanupAction: selectorRef.current }));\n };\n }, [dispatch]);\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data/src/themes';\nimport { CallToActionCard, useStyles2, Stack } from '@grafana/ui';\nimport EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA';\n\nimport { logInfo, LogMessages } from '../../Analytics';\nimport { useRulesAccess } from '../../utils/accessControlHooks';\n\nexport const NoRulesSplash = () => {\n const { canCreateGrafanaRules, canCreateCloudRules } = useRulesAccess();\n const styles = useStyles2(getStyles);\n if (canCreateGrafanaRules || canCreateCloudRules) {\n return (\n
\n

{\"You haven't created any alert rules yet\"}

\n \n
\n logInfo(LogMessages.alertRuleFromScratch)}\n />\n
\n\n
\n logInfo(LogMessages.recordingRuleFromScratch)}\n />\n
\n
\n
\n );\n }\n return } />;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n newRuleCard: css`\n width: calc(50% - ${theme.spacing(1)});\n\n > div {\n height: 100%;\n }\n `,\n});\n","import { css } from '@emotion/css';\nimport { SerializedError } from '@reduxjs/toolkit';\nimport pluralize from 'pluralize';\nimport React, { useMemo, ReactElement, useState, FC } from 'react';\nimport { useLocalStorage } from 'react-use';\n\nimport { DataSourceInstanceSettings, GrafanaTheme2 } from '@grafana/data';\nimport { Alert, Button, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { useUnifiedAlertingSelector } from '../../hooks/useUnifiedAlertingSelector';\nimport { getRulesDataSources, GRAFANA_RULES_SOURCE_NAME } from '../../utils/datasource';\nimport { makeDataSourceLink } from '../../utils/misc';\nimport { isRulerNotSupportedResponse } from '../../utils/rules';\n\nexport function RuleListErrors(): ReactElement {\n const [expanded, setExpanded] = useState(false);\n const [closed, setClosed] = useLocalStorage('grafana.unifiedalerting.hideErrors', false);\n const dataSourceConfigRequests = useUnifiedAlertingSelector((state) => state.dataSources);\n const promRuleRequests = useUnifiedAlertingSelector((state) => state.promRules);\n const rulerRuleRequests = useUnifiedAlertingSelector((state) => state.rulerRules);\n const styles = useStyles2(getStyles);\n\n const errors = useMemo((): JSX.Element[] => {\n const [dataSourceConfigErrors, promRequestErrors, rulerRequestErrors] = [\n dataSourceConfigRequests,\n promRuleRequests,\n rulerRuleRequests,\n ].map((requests) =>\n getRulesDataSources().reduce>(\n (result, dataSource) => {\n const error = requests[dataSource.name]?.error;\n if (requests[dataSource.name] && error && !isRulerNotSupportedResponse(requests[dataSource.name])) {\n return [...result, { dataSource, error }];\n }\n return result;\n },\n []\n )\n );\n const grafanaPromError = promRuleRequests[GRAFANA_RULES_SOURCE_NAME]?.error;\n const grafanaRulerError = rulerRuleRequests[GRAFANA_RULES_SOURCE_NAME]?.error;\n\n const result: JSX.Element[] = [];\n\n if (grafanaPromError) {\n result.push(<>Failed to load Grafana rules state: {grafanaPromError.message || 'Unknown error.'});\n }\n if (grafanaRulerError) {\n result.push(<>Failed to load Grafana rules config: {grafanaRulerError.message || 'Unknown error.'});\n }\n\n dataSourceConfigErrors.forEach(({ dataSource, error }) => {\n result.push(\n <>\n Failed to load the data source configuration for{' '}\n \n {dataSource.name}\n \n : {error.message || 'Unknown error.'}\n \n );\n });\n\n promRequestErrors.forEach(({ dataSource, error }) =>\n result.push(\n <>\n Failed to load rules state from{' '}\n \n {dataSource.name}\n \n : {error.message || 'Unknown error.'}\n \n )\n );\n\n rulerRequestErrors.forEach(({ dataSource, error }) =>\n result.push(\n <>\n Failed to load rules config from{' '}\n \n {dataSource.name}\n \n : {error.message || 'Unknown error.'}\n \n )\n );\n\n return result;\n }, [dataSourceConfigRequests, promRuleRequests, rulerRuleRequests, styles.dsLink]);\n\n return (\n <>\n {!!errors.length && closed && (\n setClosed((closed) => !closed)} />\n )}\n {!!errors.length && !closed && (\n setClosed(true)}\n >\n {expanded && errors.map((item, idx) =>
{item}
)}\n {!expanded && (\n <>\n
{errors[0]}
\n {errors.length >= 2 && (\n setExpanded(true)}\n >\n {errors.length - 1} more {pluralize('error', errors.length - 1)}\n \n )}\n \n )}\n \n )}\n \n );\n}\n\ninterface ErrorSummaryProps {\n count: number;\n onClick: () => void;\n}\n\nconst ErrorSummaryButton: FC = ({ count, onClick }) => {\n const styles = useStyles2(getStyles);\n\n return (\n
\n \n \n \n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n moreButton: css`\n padding: 0;\n `,\n floatRight: css`\n display: flex;\n justify-content: flex-end;\n `,\n dsLink: css`\n font-weight: ${theme.typography.fontWeightBold};\n `,\n});\n","import React, { useState } from 'react';\n\nimport { LoadingPlaceholder } from '@grafana/ui';\n\nimport { FolderDTO } from '../../../../../types';\nimport { alertRuleApi } from '../../api/alertRuleApi';\n\nimport { FileExportPreview } from './FileExportPreview';\nimport { GrafanaExportDrawer } from './GrafanaExportDrawer';\nimport { allGrafanaExportProviders, ExportFormats } from './providers';\n\ninterface GrafanaRuleFolderExporterProps {\n folder: FolderDTO;\n onClose: () => void;\n}\n\nexport function GrafanaRuleFolderExporter({ folder, onClose }: GrafanaRuleFolderExporterProps) {\n const [activeTab, setActiveTab] = useState('yaml');\n\n return (\n \n \n \n );\n}\n\ninterface GrafanaRuleFolderExportPreviewProps {\n folder: FolderDTO;\n exportFormat: ExportFormats;\n onClose: () => void;\n}\n\nfunction GrafanaRuleFolderExportPreview({ folder, exportFormat, onClose }: GrafanaRuleFolderExportPreviewProps) {\n const { currentData: exportFolderDefinition = '', isFetching } = alertRuleApi.endpoints.exportRules.useQuery({\n folderUid: folder.uid,\n format: exportFormat,\n });\n\n if (isFetching) {\n return ;\n }\n\n const downloadFileName = `${folder.title}-${folder.uid}`;\n\n return (\n \n );\n}\n","import React, { useState } from 'react';\n\nimport { LoadingPlaceholder } from '@grafana/ui';\n\nimport { alertRuleApi } from '../../api/alertRuleApi';\n\nimport { FileExportPreview } from './FileExportPreview';\nimport { GrafanaExportDrawer } from './GrafanaExportDrawer';\nimport { allGrafanaExportProviders, ExportFormats } from './providers';\n\ninterface GrafanaRuleGroupExporterProps {\n folderUid: string;\n groupName: string;\n onClose: () => void;\n}\n\nexport function GrafanaRuleGroupExporter({ folderUid, groupName, onClose }: GrafanaRuleGroupExporterProps) {\n const [activeTab, setActiveTab] = useState('yaml');\n\n return (\n \n \n \n );\n}\n\ninterface GrafanaRuleGroupExportPreviewProps {\n folderUid: string;\n groupName: string;\n exportFormat: ExportFormats;\n onClose: () => void;\n}\n\nfunction GrafanaRuleGroupExportPreview({\n folderUid,\n groupName,\n exportFormat,\n onClose,\n}: GrafanaRuleGroupExportPreviewProps) {\n const { currentData: ruleGroupTextDefinition = '', isFetching } = alertRuleApi.endpoints.exportRules.useQuery({\n folderUid,\n group: groupName,\n format: exportFormat,\n });\n\n if (isFetching) {\n return ;\n }\n\n return (\n \n );\n}\n","import { css } from '@emotion/css';\nimport cx from 'classnames';\nimport { compact } from 'lodash';\nimport React, { useCallback, useState } from 'react';\nimport {\n DragDropContext,\n Draggable,\n DraggableProvided,\n Droppable,\n DroppableProvided,\n DropResult,\n} from 'react-beautiful-dnd';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Badge, Icon, Modal, Tooltip, useStyles2 } from '@grafana/ui';\nimport { dispatch } from 'app/store/store';\nimport { CombinedRule, CombinedRuleGroup, CombinedRuleNamespace } from 'app/types/unified-alerting';\n\nimport { updateRulesOrder } from '../../state/actions';\nimport { getRulesSourceName, isCloudRulesSource } from '../../utils/datasource';\nimport { hashRulerRule } from '../../utils/rule-id';\nimport { isAlertingRule, isRecordingRule } from '../../utils/rules';\n\nimport { AlertStateTag } from './AlertStateTag';\n\ninterface ModalProps {\n namespace: CombinedRuleNamespace;\n group: CombinedRuleGroup;\n onClose: () => void;\n folderUid?: string;\n}\n\ntype CombinedRuleWithUID = { uid: string } & CombinedRule;\n\nexport const ReorderCloudGroupModal = (props: ModalProps) => {\n const { group, namespace, onClose, folderUid } = props;\n const [pending, setPending] = useState(false);\n const [rulesList, setRulesList] = useState(group.rules);\n\n const styles = useStyles2(getStyles);\n\n const onDragEnd = useCallback(\n (result: DropResult) => {\n // check for no-ops so we don't update the group unless we have changes\n if (!result.destination) {\n return;\n }\n\n const sameIndex = result.destination.index === result.source.index;\n if (sameIndex) {\n return;\n }\n\n const newOrderedRules = reorder(rulesList, result.source.index, result.destination.index);\n setRulesList(newOrderedRules); // optimistically update the new rules list\n\n const rulesSourceName = getRulesSourceName(namespace.rulesSource);\n const rulerRules = compact(newOrderedRules.map((rule) => rule.rulerRule));\n\n setPending(true);\n dispatch(\n updateRulesOrder({\n namespaceName: namespace.name,\n groupName: group.name,\n rulesSourceName: rulesSourceName,\n newRules: rulerRules,\n folderUid: folderUid || namespace.name,\n })\n )\n .unwrap()\n .finally(() => {\n setPending(false);\n });\n },\n [group.name, namespace.name, namespace.rulesSource, rulesList, folderUid]\n );\n\n // assign unique but stable identifiers to each (alerting / recording) rule\n const rulesWithUID: CombinedRuleWithUID[] = rulesList.map((rule) => ({\n ...rule,\n uid: String(hashRulerRule(rule.rulerRule!)), // TODO fix this coercion?\n }));\n\n return (\n }\n onDismiss={onClose}\n onClickBackdrop={onClose}\n >\n \n (\n \n )}\n >\n {(droppableProvided: DroppableProvided) => (\n \n {rulesWithUID.map((rule, index) => (\n \n {(provided: DraggableProvided) => }\n \n ))}\n {droppableProvided.placeholder}\n \n )}\n \n \n \n );\n};\n\ninterface ListItemProps extends React.HTMLAttributes {\n provided: DraggableProvided;\n rule: CombinedRule;\n isClone?: boolean;\n isDragging?: boolean;\n}\n\nconst ListItem = ({ provided, rule, isClone = false, isDragging = false }: ListItemProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n \n {isAlertingRule(rule.promRule) && }\n {isRecordingRule(rule.promRule) && }\n
{rule.name}
\n \n \n );\n};\n\ninterface ModalHeaderProps {\n namespace: CombinedRuleNamespace;\n group: CombinedRuleGroup;\n}\n\nconst ModalHeader = ({ namespace, group }: ModalHeaderProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n
\n \n {isCloudRulesSource(namespace.rulesSource) && (\n \n \n \n )}\n {namespace.name}\n \n {group.name}\n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n modal: css`\n max-width: 640px;\n max-height: 80%;\n overflow: hidden;\n `,\n listItem: css`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n gap: ${theme.spacing()};\n\n background: ${theme.colors.background.primary};\n color: ${theme.colors.text.secondary};\n\n border-bottom: solid 1px ${theme.colors.border.medium};\n padding: ${theme.spacing(1)} ${theme.spacing(2)};\n\n &:last-child {\n border-bottom: none;\n }\n\n &.isClone {\n border: solid 1px ${theme.colors.primary.shade};\n }\n `,\n listContainer: css`\n user-select: none;\n border: solid 1px ${theme.colors.border.medium};\n `,\n disabled: css`\n opacity: 0.5;\n pointer-events: none;\n `,\n listItemName: css`\n flex: 1;\n\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n header: css`\n display: flex;\n align-items: center;\n\n gap: ${theme.spacing(1)};\n `,\n dataSourceIcon: css`\n width: ${theme.spacing(2)};\n height: ${theme.spacing(2)};\n `,\n});\n\nexport function reorder(rules: T[], startIndex: number, endIndex: number): T[] {\n const result = Array.from(rules);\n const [removed] = result.splice(startIndex, 1);\n result.splice(endIndex, 0, removed);\n\n return result;\n}\n","import { css } from '@emotion/css';\nimport pluralize from 'pluralize';\nimport React, { useEffect, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Badge, ConfirmModal, HorizontalGroup, Icon, Spinner, Stack, Tooltip, useStyles2 } from '@grafana/ui';\nimport { useDispatch } from 'app/types';\nimport { CombinedRuleGroup, CombinedRuleNamespace } from 'app/types/unified-alerting';\n\nimport { LogMessages, logInfo } from '../../Analytics';\nimport { useFolder } from '../../hooks/useFolder';\nimport { useHasRuler } from '../../hooks/useHasRuler';\nimport { deleteRulesGroupAction } from '../../state/actions';\nimport { useRulesAccess } from '../../utils/accessControlHooks';\nimport { GRAFANA_RULES_SOURCE_NAME, isCloudRulesSource } from '../../utils/datasource';\nimport { makeFolderLink, makeFolderSettingsLink } from '../../utils/misc';\nimport { isFederatedRuleGroup, isGrafanaRulerRule } from '../../utils/rules';\nimport { CollapseToggle } from '../CollapseToggle';\nimport { RuleLocation } from '../RuleLocation';\nimport { GrafanaRuleFolderExporter } from '../export/GrafanaRuleFolderExporter';\nimport { GrafanaRuleGroupExporter } from '../export/GrafanaRuleGroupExporter';\nimport { decodeGrafanaNamespace } from '../expressions/util';\n\nimport { ActionIcon } from './ActionIcon';\nimport { EditCloudGroupModal } from './EditRuleGroupModal';\nimport { ReorderCloudGroupModal } from './ReorderRuleGroupModal';\nimport { RuleGroupStats } from './RuleStats';\nimport { RulesTable } from './RulesTable';\n\ntype ViewMode = 'grouped' | 'list';\n\ninterface Props {\n namespace: CombinedRuleNamespace;\n group: CombinedRuleGroup;\n expandAll: boolean;\n viewMode: ViewMode;\n}\n\nexport const RulesGroup = React.memo(({ group, namespace, expandAll, viewMode }: Props) => {\n const { rulesSource } = namespace;\n const dispatch = useDispatch();\n const styles = useStyles2(getStyles);\n\n const [isEditingGroup, setIsEditingGroup] = useState(false);\n const [isDeletingGroup, setIsDeletingGroup] = useState(false);\n const [isReorderingGroup, setIsReorderingGroup] = useState(false);\n const [isExporting, setIsExporting] = useState<'group' | 'folder' | undefined>(undefined);\n const [isCollapsed, setIsCollapsed] = useState(!expandAll);\n\n const { canEditRules } = useRulesAccess();\n\n useEffect(() => {\n setIsCollapsed(!expandAll);\n }, [expandAll]);\n\n const { hasRuler, rulerRulesLoaded } = useHasRuler();\n const rulerRule = group.rules[0]?.rulerRule;\n const folderUID = (rulerRule && isGrafanaRulerRule(rulerRule) && rulerRule.grafana_alert.namespace_uid) || undefined;\n const { folder } = useFolder(folderUID);\n\n // group \"is deleting\" if rules source has ruler, but this group has no rules that are in ruler\n const isDeleting =\n hasRuler(rulesSource) && rulerRulesLoaded(rulesSource) && !group.rules.find((rule) => !!rule.rulerRule);\n const isFederated = isFederatedRuleGroup(group);\n\n // check if group has provisioned items\n const isProvisioned = group.rules.some((rule) => {\n return isGrafanaRulerRule(rule.rulerRule) && rule.rulerRule.grafana_alert.provenance;\n });\n\n // check what view mode we are in\n const isListView = viewMode === 'list';\n const isGroupView = viewMode === 'grouped';\n\n const deleteGroup = () => {\n dispatch(deleteRulesGroupAction(namespace, group));\n setIsDeletingGroup(false);\n };\n\n const actionIcons: React.ReactNode[] = [];\n\n // for grafana, link to folder views\n if (isDeleting) {\n actionIcons.push(\n \n \n deleting\n \n );\n } else if (rulesSource === GRAFANA_RULES_SOURCE_NAME) {\n if (folderUID) {\n const baseUrl = makeFolderLink(folderUID);\n if (folder?.canSave) {\n if (isGroupView && !isProvisioned) {\n actionIcons.push(\n setIsEditingGroup(true)}\n />\n );\n actionIcons.push(\n setIsReorderingGroup(true)}\n />\n );\n }\n if (isListView) {\n actionIcons.push(\n \n );\n\n if (folder?.canAdmin) {\n actionIcons.push(\n \n );\n }\n }\n }\n if (folder) {\n if (isListView) {\n actionIcons.push(\n setIsExporting('folder')}\n />\n );\n } else if (isGroupView) {\n actionIcons.push(\n setIsExporting('group')}\n />\n );\n }\n }\n }\n } else if (canEditRules(rulesSource.name) && hasRuler(rulesSource)) {\n if (!isFederated) {\n actionIcons.push(\n setIsEditingGroup(true)}\n />\n );\n actionIcons.push(\n setIsReorderingGroup(true)}\n />\n );\n }\n\n actionIcons.push(\n setIsDeletingGroup(true)}\n />\n );\n }\n\n // ungrouped rules are rules that are in the \"default\" group name\n const groupName = isListView ? (\n \n ) : (\n \n );\n\n const closeEditModal = (saved = false) => {\n if (!saved) {\n logInfo(LogMessages.leavingRuleGroupEdit);\n }\n setIsEditingGroup(false);\n };\n\n return (\n
\n
\n \n \n {isCloudRulesSource(rulesSource) && (\n \n \n \n )}\n {\n // eslint-disable-next-line\n
setIsCollapsed(!isCollapsed)}>\n {isFederated && } {groupName}\n
\n }\n
\n
\n \n
\n {isProvisioned && (\n <>\n
|
\n
\n \n
\n \n )}\n {!!actionIcons.length && (\n <>\n
|
\n
\n {actionIcons}\n
\n \n )}\n
\n {!isCollapsed && (\n \n )}\n {isEditingGroup && (\n closeEditModal()}\n folderUrl={folder?.canEdit ? makeFolderSettingsLink(folder) : undefined}\n folderUid={folderUID}\n />\n )}\n {isReorderingGroup && (\n setIsReorderingGroup(false)}\n />\n )}\n \n

\n Deleting "{group.name}" will permanently remove the group and{' '}\n {group.rules.length} alert {pluralize('rule', group.rules.length)} belonging to it.\n

\n

Are you sure you want to delete this group?

\n
\n }\n onConfirm={deleteGroup}\n onDismiss={() => setIsDeletingGroup(false)}\n confirmText=\"Delete\"\n />\n {folder && isExporting === 'folder' && (\n setIsExporting(undefined)} />\n )}\n {folder && isExporting === 'group' && (\n setIsExporting(undefined)}\n />\n )}\n
\n );\n});\n\nRulesGroup.displayName = 'RulesGroup';\n\nexport const getStyles = (theme: GrafanaTheme2) => {\n return {\n wrapper: css``,\n header: css`\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: ${theme.spacing(1)} ${theme.spacing(1)} ${theme.spacing(1)} 0;\n flex-wrap: nowrap;\n border-bottom: 1px solid ${theme.colors.border.weak};\n\n &:hover {\n background-color: ${theme.components.table.rowHoverBackground};\n }\n `,\n headerStats: css`\n flex-shrink: 0;\n\n span {\n vertical-align: middle;\n }\n\n ${theme.breakpoints.down('sm')} {\n order: 2;\n width: 100%;\n padding-left: ${theme.spacing(1)};\n }\n `,\n groupName: css`\n margin-left: ${theme.spacing(1)};\n margin-bottom: 0;\n cursor: pointer;\n\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `,\n spacer: css`\n flex: 1;\n `,\n collapseToggle: css`\n background: none;\n border: none;\n margin-top: -${theme.spacing(1)};\n margin-bottom: -${theme.spacing(1)};\n\n svg {\n margin-bottom: 0;\n }\n `,\n dataSourceIcon: css`\n width: ${theme.spacing(2)};\n height: ${theme.spacing(2)};\n margin-left: ${theme.spacing(2)};\n `,\n dataSourceOrigin: css`\n margin-right: 1em;\n color: ${theme.colors.text.disabled};\n `,\n actionsSeparator: css`\n margin: 0 ${theme.spacing(2)};\n `,\n actionIcons: css`\n width: 80px;\n align-items: center;\n\n flex-shrink: 0;\n `,\n rulesTable: css`\n margin: ${theme.spacing(2, 0)};\n `,\n rotate90: css`\n transform: rotate(90deg);\n `,\n };\n};\n","import { useMemo } from 'react';\n\nimport { CombinedRuleNamespace } from '../../../../../types/unified-alerting';\n\nexport function useCombinedGroupNamespace(namespaces: CombinedRuleNamespace[]) {\n return useMemo(\n () =>\n namespaces.flatMap((ns) =>\n ns.groups.map((g) => ({\n namespace: ns,\n group: g,\n }))\n ),\n [namespaces]\n );\n}\n","import { css } from '@emotion/css';\nimport pluralize from 'pluralize';\nimport React, { useMemo } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { GrafanaTheme2, urlUtil } from '@grafana/data';\nimport { LinkButton, LoadingPlaceholder, Pagination, Spinner, useStyles2 } from '@grafana/ui';\nimport { CombinedRuleNamespace } from 'app/types/unified-alerting';\n\nimport { DEFAULT_PER_PAGE_PAGINATION } from '../../../../../core/constants';\nimport { AlertingAction, useAlertingAbility } from '../../hooks/useAbilities';\nimport { usePagination } from '../../hooks/usePagination';\nimport { useUnifiedAlertingSelector } from '../../hooks/useUnifiedAlertingSelector';\nimport { getPaginationStyles } from '../../styles/pagination';\nimport { getRulesDataSources, getRulesSourceUid } from '../../utils/datasource';\nimport { isAsyncRequestStatePending } from '../../utils/redux';\n\nimport { RulesGroup } from './RulesGroup';\nimport { useCombinedGroupNamespace } from './useCombinedGroupNamespace';\n\ninterface Props {\n namespaces: CombinedRuleNamespace[];\n expandAll: boolean;\n}\n\nexport const CloudRules = ({ namespaces, expandAll }: Props) => {\n const styles = useStyles2(getStyles);\n\n const dsConfigs = useUnifiedAlertingSelector((state) => state.dataSources);\n const promRules = useUnifiedAlertingSelector((state) => state.promRules);\n const rulesDataSources = useMemo(getRulesDataSources, []);\n const groupsWithNamespaces = useCombinedGroupNamespace(namespaces);\n\n const dataSourcesLoading = useMemo(\n () =>\n rulesDataSources.filter(\n (ds) => isAsyncRequestStatePending(promRules[ds.name]) || isAsyncRequestStatePending(dsConfigs[ds.name])\n ),\n [promRules, dsConfigs, rulesDataSources]\n );\n\n const hasSomeResults = rulesDataSources.some((ds) => Boolean(promRules[ds.name]?.result?.length));\n\n const hasDataSourcesConfigured = rulesDataSources.length > 0;\n const hasDataSourcesLoading = dataSourcesLoading.length > 0;\n const hasNamespaces = namespaces.length > 0;\n\n const { numberOfPages, onPageChange, page, pageItems } = usePagination(\n groupsWithNamespaces,\n 1,\n DEFAULT_PER_PAGE_PAGINATION\n );\n\n return (\n
\n
\n
\n
Mimir / Cortex / Loki
\n {dataSourcesLoading.length ? (\n \n ) : (\n
\n )}\n \n
\n
\n\n {pageItems.map(({ group, namespace }) => {\n return (\n \n );\n })}\n\n {!hasDataSourcesConfigured &&

There are no Prometheus or Loki data sources configured.

}\n {hasDataSourcesConfigured && !hasDataSourcesLoading && !hasNamespaces &&

No rules found.

}\n {!hasSomeResults && hasDataSourcesLoading && }\n\n \n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n loader: css`\n margin-bottom: 0;\n `,\n sectionHeader: css`\n display: flex;\n justify-content: space-between;\n `,\n wrapper: css`\n margin-bottom: ${theme.spacing(4)};\n `,\n spinner: css`\n text-align: center;\n padding: ${theme.spacing(2)};\n `,\n pagination: getPaginationStyles(theme),\n headerRow: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n marginBottom: theme.spacing(1),\n }),\n});\n\nexport function CreateRecordingRuleButton() {\n const [createCloudRuleSupported, createCloudRuleAllowed] = useAlertingAbility(AlertingAction.CreateExternalAlertRule);\n\n const location = useLocation();\n\n const canCreateCloudRules = createCloudRuleSupported && createCloudRuleAllowed;\n\n if (canCreateCloudRules) {\n return (\n \n New recording rule\n \n );\n }\n return null;\n}\n","import React, { useState } from 'react';\n\nimport { LoadingPlaceholder } from '@grafana/ui';\n\nimport { alertRuleApi } from '../../api/alertRuleApi';\n\nimport { FileExportPreview } from './FileExportPreview';\nimport { GrafanaExportDrawer } from './GrafanaExportDrawer';\nimport { allGrafanaExportProviders, ExportFormats } from './providers';\n\ninterface GrafanaRulesExporterProps {\n onClose: () => void;\n}\n\nexport function GrafanaRulesExporter({ onClose }: GrafanaRulesExporterProps) {\n const [activeTab, setActiveTab] = useState('yaml');\n\n return (\n \n \n \n );\n}\n\ninterface GrafanaRulesExportPreviewProps {\n exportFormat: ExportFormats;\n onClose: () => void;\n}\n\nfunction GrafanaRulesExportPreview({ exportFormat, onClose }: GrafanaRulesExportPreviewProps) {\n const { currentData: rulesDefinition = '', isFetching } = alertRuleApi.endpoints.exportRules.useQuery({\n format: exportFormat,\n });\n\n const downloadFileName = `alert-rules-${new Date().getTime()}`;\n\n if (isFetching) {\n return ;\n }\n\n return (\n \n );\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\nimport { useToggle } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Button, LoadingPlaceholder, Pagination, Spinner, useStyles2 } from '@grafana/ui';\nimport { useQueryParams } from 'app/core/hooks/useQueryParams';\nimport { CombinedRuleNamespace } from 'app/types/unified-alerting';\n\nimport { DEFAULT_PER_PAGE_PAGINATION } from '../../../../../core/constants';\nimport { AlertingAction, useAlertingAbility } from '../../hooks/useAbilities';\nimport { flattenGrafanaManagedRules } from '../../hooks/useCombinedRuleNamespaces';\nimport { usePagination } from '../../hooks/usePagination';\nimport { useUnifiedAlertingSelector } from '../../hooks/useUnifiedAlertingSelector';\nimport { getPaginationStyles } from '../../styles/pagination';\nimport { GRAFANA_RULES_SOURCE_NAME } from '../../utils/datasource';\nimport { initialAsyncRequestState } from '../../utils/redux';\nimport { GrafanaRulesExporter } from '../export/GrafanaRulesExporter';\n\nimport { RulesGroup } from './RulesGroup';\nimport { useCombinedGroupNamespace } from './useCombinedGroupNamespace';\n\ninterface Props {\n namespaces: CombinedRuleNamespace[];\n expandAll: boolean;\n}\n\nexport const GrafanaRules = ({ namespaces, expandAll }: Props) => {\n const styles = useStyles2(getStyles);\n const [queryParams] = useQueryParams();\n\n const { prom, ruler } = useUnifiedAlertingSelector((state) => ({\n prom: state.promRules[GRAFANA_RULES_SOURCE_NAME] || initialAsyncRequestState,\n ruler: state.rulerRules[GRAFANA_RULES_SOURCE_NAME] || initialAsyncRequestState,\n }));\n\n const loading = prom.loading || ruler.loading;\n const hasResult = !!prom.result || !!ruler.result;\n\n const wantsListView = queryParams['view'] === 'list';\n const namespacesFormat = wantsListView ? flattenGrafanaManagedRules(namespaces) : namespaces;\n\n const groupsWithNamespaces = useCombinedGroupNamespace(namespacesFormat);\n\n const { numberOfPages, onPageChange, page, pageItems } = usePagination(\n groupsWithNamespaces,\n 1,\n DEFAULT_PER_PAGE_PAGINATION\n );\n\n const [exportRulesSupported, exportRulesAllowed] = useAlertingAbility(AlertingAction.ExportGrafanaManagedRules);\n const canExportRules = exportRulesSupported && exportRulesAllowed;\n\n const [showExportDrawer, toggleShowExportDrawer] = useToggle(false);\n const hasGrafanaAlerts = namespaces.length > 0;\n\n return (\n
\n
\n
\n
Grafana
\n {loading ? :
}\n {hasGrafanaAlerts && canExportRules && (\n \n Export rules\n \n )}\n
\n
\n\n {pageItems.map(({ group, namespace }) => (\n \n ))}\n {hasResult && namespacesFormat?.length === 0 &&

No rules found.

}\n {!hasResult && loading && }\n \n {canExportRules && showExportDrawer && }\n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n loader: css`\n margin-bottom: 0;\n `,\n sectionHeader: css`\n display: flex;\n justify-content: space-between;\n margin-bottom: ${theme.spacing(1)};\n `,\n wrapper: css`\n margin-bottom: ${theme.spacing(4)};\n `,\n spinner: css`\n text-align: center;\n padding: ${theme.spacing(2)};\n `,\n pagination: getPaginationStyles(theme),\n headerRow: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n flexDirection: 'row',\n }),\n});\n","import React, { useEffect, useMemo } from 'react';\n\nimport { CombinedRuleNamespace } from 'app/types/unified-alerting';\n\nimport { LogMessages, logInfo } from '../../Analytics';\nimport { AlertingAction } from '../../hooks/useAbilities';\nimport { isCloudRulesSource, isGrafanaRulesSource } from '../../utils/datasource';\nimport { Authorize } from '../Authorize';\n\nimport { CloudRules } from './CloudRules';\nimport { GrafanaRules } from './GrafanaRules';\n\ninterface Props {\n namespaces: CombinedRuleNamespace[];\n expandAll: boolean;\n}\n\nexport const RuleListGroupView = ({ namespaces, expandAll }: Props) => {\n const [grafanaNamespaces, cloudNamespaces] = useMemo(() => {\n const sorted = namespaces\n .map((namespace) => ({\n ...namespace,\n groups: namespace.groups.sort((a, b) => a.name.localeCompare(b.name)),\n }))\n .sort((a, b) => a.name.localeCompare(b.name));\n return [\n sorted.filter((ns) => isGrafanaRulesSource(ns.rulesSource)),\n sorted.filter((ns) => isCloudRulesSource(ns.rulesSource)),\n ];\n }, [namespaces]);\n\n useEffect(() => {\n logInfo(LogMessages.loadedList);\n }, []);\n\n return (\n <>\n \n \n \n \n \n \n \n );\n};\n","import { css } from '@emotion/css';\nimport React, { useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { CombinedRule } from 'app/types/unified-alerting';\nimport { PromAlertingRuleState } from 'app/types/unified-alerting-dto';\n\nimport { alertStateToReadable } from '../../utils/rules';\nimport { CollapseToggle } from '../CollapseToggle';\n\nimport { RulesTable } from './RulesTable';\n\ninterface Props {\n rules: CombinedRule[];\n state: PromAlertingRuleState;\n defaultCollapsed?: boolean;\n}\n\nexport const RuleListStateSection = ({ rules, state, defaultCollapsed = false }: Props) => {\n const [collapsed, setCollapsed] = useState(defaultCollapsed);\n const styles = useStyles2(getStyles);\n return (\n <>\n

\n setCollapsed(!collapsed)}\n />\n {alertStateToReadable(state)} ({rules.length})\n

\n {!collapsed && }\n \n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n collapseToggle: css`\n vertical-align: middle;\n `,\n header: css`\n margin-top: ${theme.spacing(2)};\n `,\n rulesTable: css`\n margin-top: ${theme.spacing(3)};\n `,\n});\n","import React, { useMemo } from 'react';\n\nimport { useQueryParams } from 'app/core/hooks/useQueryParams';\nimport { CombinedRule, CombinedRuleNamespace } from 'app/types/unified-alerting';\nimport { PromAlertingRuleState } from 'app/types/unified-alerting-dto';\n\nimport { getFiltersFromUrlParams } from '../../utils/misc';\nimport { isAlertingRule } from '../../utils/rules';\n\nimport { RuleListStateSection } from './RuleListStateSection';\n\ninterface Props {\n namespaces: CombinedRuleNamespace[];\n expandAll?: boolean;\n}\n\ntype GroupedRules = Record;\n\nexport const RuleListStateView = ({ namespaces }: Props) => {\n const filters = getFiltersFromUrlParams(useQueryParams()[0]);\n\n const groupedRules = useMemo(() => {\n const result: GroupedRules = {\n [PromAlertingRuleState.Firing]: [],\n [PromAlertingRuleState.Inactive]: [],\n [PromAlertingRuleState.Pending]: [],\n };\n\n namespaces.forEach((namespace) =>\n namespace.groups.forEach((group) =>\n group.rules.forEach((rule) => {\n if (rule.promRule && isAlertingRule(rule.promRule)) {\n result[rule.promRule.state].push(rule);\n }\n })\n )\n );\n\n Object.values(result).forEach((rules) => rules.sort((a, b) => a.name.localeCompare(b.name)));\n\n return result;\n }, [namespaces]);\n return (\n <>\n {(!filters.alertState || filters.alertState === PromAlertingRuleState.Firing) && (\n \n )}\n {(!filters.alertState || filters.alertState === PromAlertingRuleState.Pending) && (\n \n )}\n {(!filters.alertState || filters.alertState === PromAlertingRuleState.Inactive) && (\n \n )}\n \n );\n};\n","import uFuzzy from '@leeoniya/ufuzzy';\nimport { produce } from 'immer';\nimport { chain, compact, isEmpty } from 'lodash';\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { Matcher } from 'app/plugins/datasource/alertmanager/types';\nimport { CombinedRuleGroup, CombinedRuleNamespace, Rule } from 'app/types/unified-alerting';\nimport { isPromAlertingRuleState, PromRuleType, RulerGrafanaRuleDTO } from 'app/types/unified-alerting-dto';\n\nimport { applySearchFilterToQuery, getSearchFilterFromQuery, RulesFilter } from '../search/rulesSearchParser';\nimport { labelsMatchMatchers, matcherToMatcherField, parseMatchers } from '../utils/alertmanager';\nimport { Annotation } from '../utils/constants';\nimport { isCloudRulesSource } from '../utils/datasource';\nimport { parseMatcher } from '../utils/matchers';\nimport { getRuleHealth, isAlertingRule, isGrafanaRulerRule, isPromRuleType } from '../utils/rules';\n\nimport { calculateGroupTotals, calculateRuleFilteredTotals, calculateRuleTotals } from './useCombinedRuleNamespaces';\nimport { useURLSearchParams } from './useURLSearchParams';\n\nexport function useRulesFilter() {\n const [queryParams, updateQueryParams] = useURLSearchParams();\n const searchQuery = queryParams.get('search') ?? '';\n\n const filterState = useMemo(() => getSearchFilterFromQuery(searchQuery), [searchQuery]);\n const hasActiveFilters = useMemo(() => Object.values(filterState).some((filter) => !isEmpty(filter)), [filterState]);\n\n const updateFilters = useCallback(\n (newFilter: RulesFilter) => {\n const newSearchQuery = applySearchFilterToQuery(searchQuery, newFilter);\n updateQueryParams({ search: newSearchQuery });\n },\n [searchQuery, updateQueryParams]\n );\n\n const setSearchQuery = useCallback(\n (newSearchQuery: string | undefined) => {\n updateQueryParams({ search: newSearchQuery });\n },\n [updateQueryParams]\n );\n\n // Handle legacy filters\n useEffect(() => {\n const legacyFilters = {\n dataSource: queryParams.get('dataSource') ?? undefined,\n alertState: queryParams.get('alertState') ?? undefined,\n ruleType: queryParams.get('ruleType') ?? undefined,\n labels: parseMatchers(queryParams.get('queryString') ?? '').map(matcherToMatcherField),\n };\n\n const hasLegacyFilters = Object.values(legacyFilters).some((legacyFilter) => !isEmpty(legacyFilter));\n if (hasLegacyFilters) {\n updateQueryParams({ dataSource: undefined, alertState: undefined, ruleType: undefined, queryString: undefined });\n // Existing query filters takes precedence over legacy ones\n updateFilters(\n produce(filterState, (draft) => {\n draft.dataSourceNames ??= legacyFilters.dataSource ? [legacyFilters.dataSource] : [];\n if (legacyFilters.alertState && isPromAlertingRuleState(legacyFilters.alertState)) {\n draft.ruleState ??= legacyFilters.alertState;\n }\n if (legacyFilters.ruleType && isPromRuleType(legacyFilters.ruleType)) {\n draft.ruleType ??= legacyFilters.ruleType;\n }\n if (draft.labels.length === 0 && legacyFilters.labels.length > 0) {\n const legacyLabelsAsStrings = legacyFilters.labels.map(\n ({ name, operator, value }) => `${name}${operator}${value}`\n );\n draft.labels.push(...legacyLabelsAsStrings);\n }\n })\n );\n }\n }, [queryParams, updateFilters, filterState, updateQueryParams]);\n\n return { filterState, hasActiveFilters, searchQuery, setSearchQuery, updateFilters };\n}\n\nexport const useFilteredRules = (namespaces: CombinedRuleNamespace[], filterState: RulesFilter) => {\n return useMemo(() => {\n const filteredRules = filterRules(namespaces, filterState);\n\n // Totals recalculation is a workaround for the lack of server-side filtering\n filteredRules.forEach((namespace) => {\n namespace.groups.forEach((group) => {\n group.rules.forEach((rule) => {\n if (isAlertingRule(rule.promRule)) {\n rule.instanceTotals = calculateRuleTotals(rule.promRule);\n rule.filteredInstanceTotals = calculateRuleFilteredTotals(rule.promRule);\n }\n });\n\n group.totals = calculateGroupTotals({\n rules: group.rules.map((r) => r.promRule).filter((r): r is Rule => !!r),\n });\n });\n });\n\n return filteredRules;\n }, [namespaces, filterState]);\n};\n\n// Options details can be found here https://github.com/leeoniya/uFuzzy#options\n// The following configuration complies with Damerau-Levenshtein distance\n// https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance\nconst ufuzzy = new uFuzzy({\n intraMode: 1,\n intraIns: 1,\n intraSub: 1,\n intraTrn: 1,\n intraDel: 1,\n});\n\nexport const filterRules = (\n namespaces: CombinedRuleNamespace[],\n filterState: RulesFilter = { dataSourceNames: [], labels: [], freeFormWords: [] }\n): CombinedRuleNamespace[] => {\n let filteredNamespaces = namespaces;\n\n const dataSourceFilter = filterState.dataSourceNames;\n if (dataSourceFilter.length) {\n filteredNamespaces = filteredNamespaces.filter(({ rulesSource }) =>\n isCloudRulesSource(rulesSource) ? dataSourceFilter.includes(rulesSource.name) : true\n );\n }\n\n const namespaceFilter = filterState.namespace;\n\n if (namespaceFilter) {\n const namespaceHaystack = filteredNamespaces.map((ns) => ns.name);\n\n const [idxs, info, order] = ufuzzy.search(namespaceHaystack, namespaceFilter);\n if (info && order) {\n filteredNamespaces = order.map((idx) => filteredNamespaces[info.idx[idx]]);\n } else if (idxs) {\n filteredNamespaces = idxs.map((idx) => filteredNamespaces[idx]);\n }\n }\n\n // If a namespace and group have rules that match the rules filters then keep them.\n return filteredNamespaces.reduce(reduceNamespaces(filterState), []);\n};\n\nconst reduceNamespaces = (filterState: RulesFilter) => {\n return (namespaceAcc: CombinedRuleNamespace[], namespace: CombinedRuleNamespace) => {\n const groupNameFilter = filterState.groupName;\n let filteredGroups = namespace.groups;\n\n if (groupNameFilter) {\n const groupsHaystack = filteredGroups.map((g) => g.name);\n const [idxs, info, order] = ufuzzy.search(groupsHaystack, groupNameFilter);\n if (info && order) {\n filteredGroups = order.map((idx) => filteredGroups[info.idx[idx]]);\n } else if (idxs) {\n filteredGroups = idxs.map((idx) => filteredGroups[idx]);\n }\n }\n\n filteredGroups = filteredGroups.reduce(reduceGroups(filterState), []);\n\n if (filteredGroups.length) {\n namespaceAcc.push({\n ...namespace,\n groups: filteredGroups,\n });\n }\n\n return namespaceAcc;\n };\n};\n\n// Reduces groups to only groups that have rules matching the filters\nconst reduceGroups = (filterState: RulesFilter) => {\n const ruleNameQuery = filterState.ruleName ?? filterState.freeFormWords.join(' ');\n\n return (groupAcc: CombinedRuleGroup[], group: CombinedRuleGroup) => {\n let filteredRules = group.rules;\n\n if (ruleNameQuery) {\n const rulesHaystack = filteredRules.map((r) => r.name);\n const [idxs, info, order] = ufuzzy.search(rulesHaystack, ruleNameQuery);\n if (info && order) {\n filteredRules = order.map((idx) => filteredRules[info.idx[idx]]);\n } else if (idxs) {\n filteredRules = idxs.map((idx) => filteredRules[idx]);\n }\n }\n\n filteredRules = filteredRules.filter((rule) => {\n const promRuleDefition = rule.promRule;\n\n // this will track what properties we're checking predicates for\n // all predicates must be \"true\" to include the rule in the result set\n // (this will result in an AND operation for our matchers)\n const matchesFilterFor = chain(filterState)\n // ⚠️ keep this list of properties we filter for here up-to-date ⚠️\n // We are ignoring predicates we've matched before we get here (like \"freeFormWords\")\n .pick(['ruleType', 'dataSourceNames', 'ruleHealth', 'labels', 'ruleState', 'dashboardUid'])\n .omitBy(isEmpty)\n .mapValues(() => false)\n .value();\n\n if ('ruleType' in matchesFilterFor && filterState.ruleType === promRuleDefition?.type) {\n matchesFilterFor.ruleType = true;\n }\n\n if ('dataSourceNames' in matchesFilterFor) {\n if (isGrafanaRulerRule(rule.rulerRule)) {\n const doesNotQueryDs = isQueryingDataSource(rule.rulerRule, filterState);\n\n if (doesNotQueryDs) {\n matchesFilterFor.dataSourceNames = true;\n }\n } else {\n matchesFilterFor.dataSourceNames = true;\n }\n }\n\n if ('ruleHealth' in filterState && promRuleDefition) {\n const ruleHealth = getRuleHealth(promRuleDefition.health);\n const match = filterState.ruleHealth === ruleHealth;\n\n if (match) {\n matchesFilterFor.ruleHealth = true;\n }\n }\n\n // Query strings can match alert name, label keys, and label values\n if ('labels' in matchesFilterFor) {\n const matchers = compact(filterState.labels.map(looseParseMatcher));\n\n // check if the label we query for exists in _either_ the rule definition or in any of its alerts\n const doRuleLabelsMatchQuery = matchers.length > 0 && labelsMatchMatchers(rule.labels, matchers);\n const doAlertsContainMatchingLabels =\n matchers.length > 0 &&\n promRuleDefition &&\n promRuleDefition.type === PromRuleType.Alerting &&\n promRuleDefition.alerts &&\n promRuleDefition.alerts.some((alert) => labelsMatchMatchers(alert.labels, matchers));\n\n if (doRuleLabelsMatchQuery || doAlertsContainMatchingLabels) {\n matchesFilterFor.labels = true;\n }\n }\n\n if ('ruleState' in matchesFilterFor) {\n const promRule = rule.promRule;\n const hasPromRuleDefinition = promRule && isAlertingRule(promRule);\n\n const ruleStateMatches = hasPromRuleDefinition && promRule.state === filterState.ruleState;\n\n if (ruleStateMatches) {\n matchesFilterFor.ruleState = true;\n }\n }\n\n if (\n 'dashboardUid' in matchesFilterFor &&\n rule.annotations[Annotation.dashboardUID] === filterState.dashboardUid\n ) {\n matchesFilterFor.dashboardUid = true;\n }\n\n return Object.values(matchesFilterFor).every((match) => match === true);\n });\n\n // Add rules to the group that match the rule list filters\n if (filteredRules.length) {\n groupAcc.push({\n ...group,\n rules: filteredRules,\n });\n }\n return groupAcc;\n };\n};\n\nfunction looseParseMatcher(matcherQuery: string): Matcher | undefined {\n try {\n return parseMatcher(matcherQuery);\n } catch {\n // Try to createa a matcher than matches all values for a given key\n return { name: matcherQuery, value: '', isRegex: true, isEqual: true };\n }\n}\n\nconst isQueryingDataSource = (rulerRule: RulerGrafanaRuleDTO, filterState: RulesFilter): boolean => {\n if (!filterState.dataSourceNames?.length) {\n return true;\n }\n\n return !!rulerRule.grafana_alert.data.find((query) => {\n if (!query.datasourceUid) {\n return false;\n }\n const ds = getDataSourceSrv().getInstanceSettings(query.datasourceUid);\n return ds?.name && filterState?.dataSourceNames?.includes(ds.name);\n });\n};\n","import React, { useState } from 'react';\nimport { PopValueActionMeta, RemoveValueActionMeta } from 'react-select';\n\nimport {\n DataSourceInstanceSettings,\n getDataSourceUID,\n isUnsignedPluginSignature,\n SelectableValue,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { getDataSourceSrv, DataSourcePickerState, DataSourcePickerProps } from '@grafana/runtime';\nimport { ExpressionDatasourceRef } from '@grafana/runtime/src/utils/DataSourceWithBackend';\nimport { ActionMeta, HorizontalGroup, PluginSignatureBadge, MultiSelect } from '@grafana/ui';\n\nimport { isDataSourceManagingAlerts } from '../../utils/datasource';\n\nexport interface MultipleDataSourcePickerProps extends Omit {\n onChange: (ds: DataSourceInstanceSettings, action: 'add' | 'remove') => void;\n current: string[] | undefined;\n}\n\nexport const MultipleDataSourcePicker = (props: MultipleDataSourcePickerProps) => {\n const dataSourceSrv = getDataSourceSrv();\n\n const [state, setState] = useState();\n\n const onChange = (items: Array>, actionMeta: ActionMeta) => {\n if (actionMeta.action === 'clear' && props.onClear) {\n props.onClear();\n return;\n }\n\n const selectedItem = items[items.length - 1];\n\n let dataSourceName, action: 'add' | 'remove';\n\n if (actionMeta.action === 'pop-value' || actionMeta.action === 'remove-value') {\n const castedActionMeta:\n | RemoveValueActionMeta>\n | PopValueActionMeta> = actionMeta;\n dataSourceName = castedActionMeta.removedValue?.value;\n action = 'remove';\n } else {\n dataSourceName = selectedItem.value;\n action = 'add';\n }\n\n const dsSettings = dataSourceSrv.getInstanceSettings(dataSourceName);\n\n if (dsSettings) {\n props.onChange(dsSettings, action);\n setState({ error: undefined });\n }\n };\n\n const getCurrentValue = (): Array> | undefined => {\n const { current, hideTextValue, noDefault } = props;\n if (!current && noDefault) {\n return;\n }\n\n return current?.map((dataSourceName: string) => {\n const ds = dataSourceSrv.getInstanceSettings(dataSourceName);\n if (ds) {\n return {\n label: ds.name.slice(0, 37),\n value: ds.name,\n imgUrl: ds.meta.info.logos.small,\n hideText: hideTextValue,\n meta: ds.meta,\n };\n }\n\n const uid = getDataSourceUID(dataSourceName);\n\n if (uid === ExpressionDatasourceRef.uid || uid === ExpressionDatasourceRef.name) {\n return { label: uid, value: uid, hideText: hideTextValue };\n }\n\n return {\n label: (uid ?? 'no name') + ' - not found',\n value: uid ?? undefined,\n imgUrl: '',\n hideText: hideTextValue,\n };\n });\n };\n\n const getDataSourceOptions = () => {\n const { alerting, tracing, metrics, mixed, dashboard, variables, annotations, pluginId, type, filter, logs } =\n props;\n\n const dataSources = dataSourceSrv.getList({\n alerting,\n tracing,\n metrics,\n logs,\n dashboard,\n mixed,\n variables,\n annotations,\n pluginId,\n filter,\n type,\n });\n\n const alertManagingDs = dataSources.filter(isDataSourceManagingAlerts).map((ds) => ({\n value: ds.name,\n label: `${ds.name}${ds.isDefault ? ' (default)' : ''}`,\n imgUrl: ds.meta.info.logos.small,\n meta: ds.meta,\n }));\n\n const nonAlertManagingDs = dataSources\n .filter((ds) => !isDataSourceManagingAlerts(ds))\n .map((ds) => ({\n value: ds.name,\n label: `${ds.name}${ds.isDefault ? ' (default)' : ''}`,\n imgUrl: ds.meta.info.logos.small,\n meta: ds.meta,\n }));\n\n const groupedOptions = [\n { label: 'Data sources with configured alert rules', options: alertManagingDs, expanded: true },\n { label: 'Other data sources', options: nonAlertManagingDs, expanded: true },\n ];\n\n return groupedOptions;\n };\n\n const {\n autoFocus,\n onBlur,\n onClear,\n openMenuOnFocus,\n placeholder,\n width,\n inputId,\n disabled = false,\n isLoading = false,\n } = props;\n\n const options = getDataSourceOptions();\n const value = getCurrentValue();\n const isClearable = typeof onClear === 'function';\n\n return (\n
\n {\n if (o.meta && isUnsignedPluginSignature(o.meta.signature) && o !== value) {\n return (\n \n {o.label} \n \n );\n }\n return o.label || '';\n }}\n />\n
\n );\n};\n","import { css } from '@emotion/css';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useForm } from 'react-hook-form';\n\nimport { DataSourceInstanceSettings, GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { Button, Field, Icon, Input, Label, RadioButtonGroup, Stack, Tooltip, useStyles2 } from '@grafana/ui';\nimport { DashboardPicker } from 'app/core/components/Select/DashboardPicker';\nimport { useQueryParams } from 'app/core/hooks/useQueryParams';\nimport { PromAlertingRuleState, PromRuleType } from 'app/types/unified-alerting-dto';\n\nimport { logInfo, LogMessages } from '../../Analytics';\nimport { useRulesFilter } from '../../hooks/useFilteredRules';\nimport { RuleHealth } from '../../search/rulesSearchParser';\nimport { alertStateToReadable } from '../../utils/rules';\nimport { HoverCard } from '../HoverCard';\n\nimport { MultipleDataSourcePicker } from './MultipleDataSourcePicker';\n\nconst ViewOptions: SelectableValue[] = [\n {\n icon: 'folder',\n label: 'Grouped',\n value: 'grouped',\n },\n {\n icon: 'list-ul',\n label: 'List',\n value: 'list',\n },\n {\n icon: 'heart-rate',\n label: 'State',\n value: 'state',\n },\n];\n\nconst RuleTypeOptions: SelectableValue[] = [\n {\n label: 'Alert ',\n value: PromRuleType.Alerting,\n },\n {\n label: 'Recording ',\n value: PromRuleType.Recording,\n },\n];\n\nconst RuleHealthOptions: SelectableValue[] = [\n { label: 'Ok', value: RuleHealth.Ok },\n { label: 'No Data', value: RuleHealth.NoData },\n { label: 'Error', value: RuleHealth.Error },\n];\n\ninterface RulesFilerProps {\n onFilterCleared?: () => void;\n}\n\nconst RuleStateOptions = Object.entries(PromAlertingRuleState).map(([key, value]) => ({\n label: alertStateToReadable(value),\n value,\n}));\n\nconst RulesFilter = ({ onFilterCleared = () => undefined }: RulesFilerProps) => {\n const styles = useStyles2(getStyles);\n const [queryParams, setQueryParams] = useQueryParams();\n const { filterState, hasActiveFilters, searchQuery, setSearchQuery, updateFilters } = useRulesFilter();\n\n // This key is used to force a rerender on the inputs when the filters are cleared\n const [filterKey, setFilterKey] = useState(Math.floor(Math.random() * 100));\n const dataSourceKey = `dataSource-${filterKey}`;\n const queryStringKey = `queryString-${filterKey}`;\n\n const searchQueryRef = useRef(null);\n const { handleSubmit, register, setValue } = useForm<{ searchQuery: string }>({ defaultValues: { searchQuery } });\n const { ref, ...rest } = register('searchQuery');\n\n useEffect(() => {\n setValue('searchQuery', searchQuery);\n }, [searchQuery, setValue]);\n\n const handleDataSourceChange = (dataSourceValue: DataSourceInstanceSettings, action: 'add' | 'remove') => {\n const dataSourceNames =\n action === 'add'\n ? [...filterState.dataSourceNames].concat([dataSourceValue.name])\n : filterState.dataSourceNames.filter((name) => name !== dataSourceValue.name);\n\n updateFilters({\n ...filterState,\n dataSourceNames,\n });\n\n setFilterKey((key) => key + 1);\n };\n\n const handleDashboardChange = (dashboardUid: string | undefined) => {\n updateFilters({ ...filterState, dashboardUid });\n };\n\n const clearDataSource = () => {\n updateFilters({ ...filterState, dataSourceNames: [] });\n setFilterKey((key) => key + 1);\n };\n\n const handleAlertStateChange = (value: PromAlertingRuleState) => {\n logInfo(LogMessages.clickingAlertStateFilters);\n updateFilters({ ...filterState, ruleState: value });\n };\n\n const handleViewChange = (view: string) => {\n setQueryParams({ view });\n };\n\n const handleRuleTypeChange = (ruleType: PromRuleType) => {\n updateFilters({ ...filterState, ruleType });\n };\n\n const handleRuleHealthChange = (ruleHealth: RuleHealth) => {\n updateFilters({ ...filterState, ruleHealth });\n };\n\n const handleClearFiltersClick = () => {\n setSearchQuery(undefined);\n onFilterCleared();\n\n setTimeout(() => setFilterKey(filterKey + 1), 100);\n };\n\n const searchIcon = ;\n return (\n
\n \n \n \n \n Search by data sources\n \n

\n Data sources containing configured alert rules are Mimir or Loki data sources where alert\n rules are stored and evaluated in the data source itself.\n

\n

\n In these data sources, you can select Manage alerts via Alerting UI to be able to manage these\n alert rules in the Grafana UI as well as in the data source where they were configured.\n

\n
\n }\n >\n \n \n \n \n }\n >\n \n \n\n Dashboard}\n >\n {/* The key prop is to clear the picker value */}\n {/* DashboardPicker doesn't do that itself when value is undefined */}\n handleDashboardChange(value?.uid)}\n isClearable\n cacheOptions\n />\n \n\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n \n \n {\n setSearchQuery(data.searchQuery);\n searchQueryRef.current?.blur();\n })}\n >\n \n \n Search\n }>\n \n \n \n \n }\n >\n {\n ref(e);\n searchQueryRef.current = e;\n }}\n {...rest}\n placeholder=\"Search\"\n data-testid=\"search-query-input\"\n />\n \n \n \n
\n \n \n
\n
\n {hasActiveFilters && (\n
\n \n
\n )}\n
\n \n \n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n marginBottom: theme.spacing(1),\n }),\n dsPickerContainer: css({\n width: theme.spacing(60),\n flexGrow: 0,\n margin: 0,\n }),\n dashboardPickerContainer: css({\n minWidth: theme.spacing(50),\n }),\n searchInput: css({\n flex: 1,\n margin: 0,\n }),\n };\n};\n\nfunction SearchQueryHelp() {\n const styles = useStyles2(helpStyles);\n\n return (\n
\n
Search syntax allows to query alert rules by the parameters defined below.
\n
\n
\n
Filter type
\n
Expression
\n \n \n \n \n \n \n \n \n \n
\n
\n );\n}\n\nfunction HelpRow({ title, expr }: { title: string; expr: string }) {\n const styles = useStyles2(helpStyles);\n\n return (\n <>\n
{title}
\n {expr}\n \n );\n}\n\nconst helpStyles = (theme: GrafanaTheme2) => ({\n grid: css({\n display: 'grid',\n gridTemplateColumns: 'max-content auto',\n gap: theme.spacing(1),\n alignItems: 'center',\n }),\n code: css({\n display: 'block',\n textAlign: 'center',\n }),\n});\n\nexport default RulesFilter;\n","import { css } from '@emotion/css';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useAsyncFn, useInterval } from 'react-use';\n\nimport { GrafanaTheme2, urlUtil } from '@grafana/data';\nimport { Button, LinkButton, useStyles2, withErrorBoundary } from '@grafana/ui';\nimport { useQueryParams } from 'app/core/hooks/useQueryParams';\nimport { useDispatch } from 'app/types';\n\nimport { CombinedRuleNamespace } from '../../../types/unified-alerting';\n\nimport { LogMessages, logInfo, trackRuleListNavigation } from './Analytics';\nimport { AlertingPageWrapper } from './components/AlertingPageWrapper';\nimport { NoRulesSplash } from './components/rules/NoRulesCTA';\nimport { INSTANCES_DISPLAY_LIMIT } from './components/rules/RuleDetails';\nimport { RuleListErrors } from './components/rules/RuleListErrors';\nimport { RuleListGroupView } from './components/rules/RuleListGroupView';\nimport { RuleListStateView } from './components/rules/RuleListStateView';\nimport { RuleStats } from './components/rules/RuleStats';\nimport RulesFilter from './components/rules/RulesFilter';\nimport { AlertingAction, useAlertingAbility } from './hooks/useAbilities';\nimport { useCombinedRuleNamespaces } from './hooks/useCombinedRuleNamespaces';\nimport { useFilteredRules, useRulesFilter } from './hooks/useFilteredRules';\nimport { useUnifiedAlertingSelector } from './hooks/useUnifiedAlertingSelector';\nimport { fetchAllPromAndRulerRulesAction } from './state/actions';\nimport { RULE_LIST_POLL_INTERVAL_MS } from './utils/constants';\nimport { getAllRulesSourceNames } from './utils/datasource';\n\nconst VIEWS = {\n groups: RuleListGroupView,\n state: RuleListStateView,\n};\n\n// make sure we ask for 1 more so we show the \"show x more\" button\nconst LIMIT_ALERTS = INSTANCES_DISPLAY_LIMIT + 1;\n\nconst RuleList = withErrorBoundary(\n () => {\n const dispatch = useDispatch();\n const styles = useStyles2(getStyles);\n const rulesDataSourceNames = useMemo(getAllRulesSourceNames, []);\n const [expandAll, setExpandAll] = useState(false);\n\n const onFilterCleared = useCallback(() => setExpandAll(false), []);\n\n const [queryParams] = useQueryParams();\n const { filterState, hasActiveFilters } = useRulesFilter();\n\n const view = VIEWS[queryParams['view'] as keyof typeof VIEWS]\n ? (queryParams['view'] as keyof typeof VIEWS)\n : 'groups';\n\n const ViewComponent = VIEWS[view];\n\n const promRuleRequests = useUnifiedAlertingSelector((state) => state.promRules);\n const rulerRuleRequests = useUnifiedAlertingSelector((state) => state.rulerRules);\n\n const loading = rulesDataSourceNames.some(\n (name) => promRuleRequests[name]?.loading || rulerRuleRequests[name]?.loading\n );\n\n const promRequests = Object.entries(promRuleRequests);\n const rulerRequests = Object.entries(rulerRuleRequests);\n\n const allPromLoaded = promRequests.every(\n ([_, state]) => state.dispatched && (state?.result !== undefined || state?.error !== undefined)\n );\n const allRulerLoaded = rulerRequests.every(\n ([_, state]) => state.dispatched && (state?.result !== undefined || state?.error !== undefined)\n );\n\n const allPromEmpty = promRequests.every(([_, state]) => state.dispatched && state?.result?.length === 0);\n\n const allRulerEmpty = rulerRequests.every(([_, state]) => {\n const rulerRules = Object.entries(state?.result ?? {});\n const noRules = rulerRules.every(([_, result]) => result?.length === 0);\n return noRules && state.dispatched;\n });\n\n const limitAlerts = hasActiveFilters ? undefined : LIMIT_ALERTS;\n // Trigger data refresh only when the RULE_LIST_POLL_INTERVAL_MS elapsed since the previous load FINISHED\n const [_, fetchRules] = useAsyncFn(async () => {\n if (!loading) {\n await dispatch(fetchAllPromAndRulerRulesAction(false, { limitAlerts }));\n }\n }, [loading, limitAlerts, dispatch]);\n\n useEffect(() => {\n trackRuleListNavigation().catch(() => {});\n }, []);\n\n // fetch rules, then poll every RULE_LIST_POLL_INTERVAL_MS\n useEffect(() => {\n dispatch(fetchAllPromAndRulerRulesAction(false, { limitAlerts }));\n }, [dispatch, limitAlerts]);\n useInterval(fetchRules, RULE_LIST_POLL_INTERVAL_MS);\n\n // Show splash only when we loaded all of the data sources and none of them has alerts\n const hasNoAlertRulesCreatedYet =\n allPromLoaded && allPromEmpty && promRequests.length > 0 && allRulerEmpty && allRulerLoaded;\n const hasAlertRulesCreated = !hasNoAlertRulesCreatedYet;\n\n const combinedNamespaces: CombinedRuleNamespace[] = useCombinedRuleNamespaces();\n const filteredNamespaces = useFilteredRules(combinedNamespaces, filterState);\n\n return (\n // We don't want to show the Loading... indicator for the whole page.\n // We show separate indicators for Grafana-managed and Cloud rules\n }>\n \n \n {hasAlertRulesCreated && (\n <>\n
\n
\n
\n {view === 'groups' && hasActiveFilters && (\n setExpandAll(!expandAll)}\n >\n {expandAll ? 'Collapse all' : 'Expand all'}\n \n )}\n \n
\n
\n \n )}\n {hasNoAlertRulesCreatedYet && }\n {hasAlertRulesCreated && }\n \n );\n },\n { style: 'page' }\n);\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n break: css`\n width: 100%;\n height: 0;\n margin-bottom: ${theme.spacing(2)};\n border-bottom: solid 1px ${theme.colors.border.medium};\n `,\n buttonsContainer: css`\n margin-bottom: ${theme.spacing(2)};\n display: flex;\n justify-content: space-between;\n `,\n statsContainer: css`\n display: flex;\n flex-direction: row;\n align-items: center;\n `,\n expandAllButton: css`\n margin-right: ${theme.spacing(1)};\n `,\n});\n\nexport default RuleList;\n\nexport function CreateAlertButton() {\n const [createRuleSupported, createRuleAllowed] = useAlertingAbility(AlertingAction.CreateAlertRule);\n const [createCloudRuleSupported, createCloudRuleAllowed] = useAlertingAbility(AlertingAction.CreateExternalAlertRule);\n\n const location = useLocation();\n\n const canCreateCloudRules = createCloudRuleSupported && createCloudRuleAllowed;\n\n const canCreateGrafanaRules = createRuleSupported && createRuleAllowed;\n\n if (canCreateGrafanaRules || canCreateCloudRules) {\n return (\n logInfo(LogMessages.alertRuleFromScratch)}\n >\n New alert rule\n \n );\n }\n return null;\n}\n","import { chain, filter } from 'lodash';\nimport React, { PropsWithChildren } from 'react';\n\nimport {\n Abilities,\n Action,\n AlertingAction,\n AlertmanagerAction,\n useAlertingAbilities,\n useAllAlertmanagerAbilities,\n} from '../hooks/useAbilities';\n\ninterface AuthorizeProps extends PropsWithChildren {\n actions: AlertmanagerAction[] | AlertingAction[];\n}\n\nexport const Authorize = ({ actions, children }: AuthorizeProps) => {\n const alertmanagerActions = filter(actions, isAlertmanagerAction) as AlertmanagerAction[];\n const alertSourceActions = filter(actions, isAlertingAction) as AlertingAction[];\n\n if (alertmanagerActions.length) {\n return {children};\n }\n\n if (alertSourceActions.length) {\n return {children};\n }\n\n return null;\n};\n\ninterface ActionsProps extends PropsWithChildren {\n actions: T[];\n}\n\nconst AuthorizeAlertmanager = ({ actions, children }: ActionsProps) => {\n const alertmanagerAbilties = useAllAlertmanagerAbilities();\n const allowed = actionsAllowed(alertmanagerAbilties, actions);\n\n if (allowed) {\n return <>{children};\n } else {\n return null;\n }\n};\n\nconst AuthorizeAlertsource = ({ actions, children }: ActionsProps) => {\n const alertSourceAbilities = useAlertingAbilities();\n const allowed = actionsAllowed(alertSourceAbilities, actions);\n\n if (allowed) {\n return <>{children};\n } else {\n return null;\n }\n};\n\n// TODO add some authorize helper components for alert source and individual alert rules\n\n// check if some action is allowed from the abilities\nfunction actionsAllowed(abilities: Abilities, actions: T[]) {\n return chain(abilities)\n .pick(actions)\n .values()\n .value()\n .some(([_supported, allowed]) => allowed === true);\n}\n\nfunction isAlertmanagerAction(action: AlertmanagerAction) {\n return Object.values(AlertmanagerAction).includes(action);\n}\n\nfunction isAlertingAction(action: AlertingAction) {\n return Object.values(AlertingAction).includes(action);\n}\n","import { css } from '@emotion/css';\nimport saveAs from 'file-saver';\nimport React, { useCallback, useMemo } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Alert, Button, ClipboardButton, CodeEditor, TextLink, useStyles2 } from '@grafana/ui';\n\nimport { allGrafanaExportProviders, ExportFormats, ExportProvider, ProvisioningType } from './providers';\n\ninterface FileExportPreviewProps {\n format: ExportFormats;\n textDefinition: string;\n\n /*** Filename without extension ***/\n downloadFileName: string;\n onClose: () => void;\n}\n\nexport function FileExportPreview({ format, textDefinition, downloadFileName, onClose }: FileExportPreviewProps) {\n const styles = useStyles2(fileExportPreviewStyles);\n const provider = allGrafanaExportProviders[format];\n\n const onDownload = useCallback(() => {\n const blob = new Blob([textDefinition], {\n type: `application/${format};charset=utf-8`,\n });\n saveAs(blob, `${downloadFileName}.${format}`);\n }, [textDefinition, downloadFileName, format]);\n\n const formattedTextDefinition = useMemo(() => {\n return provider.formatter ? provider.formatter(textDefinition) : textDefinition;\n }, [provider, textDefinition]);\n\n return (\n // TODO Handle empty content\n
\n \n
\n \n {({ height }) => (\n \n )}\n \n
\n
\n \n textDefinition}>\n Copy code\n \n \n
\n
\n );\n}\n\nconst fileExportPreviewStyles = (theme: GrafanaTheme2) => ({\n container: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n gap: ${theme.spacing(2)};\n `,\n content: css`\n flex: 1 1 100%;\n `,\n actions: css`\n flex: 0;\n justify-content: flex-end;\n display: flex;\n gap: ${theme.spacing(1)};\n `,\n});\n\nfunction FileExportInlineDocumentation({ exportProvider }: { exportProvider: ExportProvider }) {\n const { name, type } = exportProvider;\n\n const exportInlineDoc: Record = {\n file: {\n title: 'File-provisioning format',\n component: (\n <>\n {name} format is only valid for File Provisioning.{' '}\n \n Read more in the docs.\n \n \n ),\n },\n api: {\n title: 'API-provisioning format',\n component: (\n <>\n {name} format is only valid for API Provisioning.{' '}\n \n Read more in the docs.\n \n \n ),\n },\n terraform: {\n title: 'Terraform-provisioning format',\n component: (\n <>\n {name} format is only valid for Terraform Provisioning.{' '}\n \n Read more in the docs.\n \n \n ),\n },\n };\n\n const { title, component } = exportInlineDoc[type];\n\n return (\n \n {component}\n \n );\n}\n","import React from 'react';\n\nimport { Drawer } from '@grafana/ui';\n\nimport { RuleInspectorTabs } from '../rule-editor/RuleInspector';\n\nimport { ExportFormats, ExportProvider } from './providers';\n\ninterface GrafanaExportDrawerProps {\n activeTab: ExportFormats;\n onTabChange: (tab: ExportFormats) => void;\n children: React.ReactNode;\n onClose: () => void;\n formatProviders: Array>;\n title?: string;\n}\n\nexport function GrafanaExportDrawer({\n activeTab,\n onTabChange,\n children,\n onClose,\n formatProviders,\n title = 'Export',\n}: GrafanaExportDrawerProps) {\n const grafanaRulesTabs = Object.values(formatProviders).map((provider) => ({\n label: provider.name,\n value: provider.exportFormat,\n }));\n return (\n tabs={grafanaRulesTabs} setActiveTab={onTabChange} activeTab={activeTab} />\n }\n onClose={onClose}\n size=\"md\"\n >\n {children}\n \n );\n}\n","export type ProvisioningType = 'file' | 'api' | 'terraform';\n\nexport interface ExportProvider {\n name: string;\n exportFormat: TFormat;\n type: ProvisioningType;\n formatter?: (raw: string) => string;\n}\n\nexport const JsonExportProvider: ExportProvider<'json'> = {\n name: 'JSON',\n exportFormat: 'json',\n type: 'file',\n formatter: (raw: string) => {\n try {\n return JSON.stringify(JSON.parse(raw), null, 4);\n } catch (e) {\n return raw;\n }\n },\n};\n\nexport const YamlExportProvider: ExportProvider<'yaml'> = {\n name: 'YAML',\n exportFormat: 'yaml',\n type: 'file',\n};\n\nexport const HclExportProvider: ExportProvider<'hcl'> = {\n name: 'Terraform (HCL)',\n exportFormat: 'hcl',\n type: 'terraform',\n};\n\nexport const allGrafanaExportProviders = {\n [JsonExportProvider.exportFormat]: JsonExportProvider,\n [YamlExportProvider.exportFormat]: YamlExportProvider,\n [HclExportProvider.exportFormat]: HclExportProvider,\n} as const;\n\nexport const jsonAndYamlGrafanaExportProviders = [JsonExportProvider, YamlExportProvider];\n\nexport type ExportFormats = keyof typeof allGrafanaExportProviders;\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Icon, Text, Toggletip, useStyles2, Stack } from '@grafana/ui';\n\ninterface NeedHelpInfoProps {\n contentText: string | JSX.Element;\n externalLink?: string;\n linkText?: string;\n title: string;\n}\nexport function NeedHelpInfo({ contentText, externalLink, linkText, title }: NeedHelpInfoProps) {\n const styles = useStyles2(getStyles);\n return (\n {contentText}
}\n title={\n \n \n {title}\n \n }\n footer={\n externalLink ? (\n \n \n \n {linkText} \n \n \n \n ) : undefined\n }\n closeButton={true}\n placement=\"bottom-start\"\n >\n
\n \n \n \n Need help?\n \n \n
\n \n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n mutedText: css`\n color: ${theme.colors.text.secondary};\n font-size: ${theme.typography.size.sm};\n `,\n helpInfo: css`\n cursor: pointer;\n text-decoration: underline;\n `,\n});\n","import { css, cx } from '@emotion/css';\nimport React, { ReactElement } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { FieldSet, Text, useStyles2, Stack } from '@grafana/ui';\n\nexport interface RuleEditorSectionProps {\n title: string;\n stepNo: number;\n description?: string | ReactElement;\n fullWidth?: boolean;\n}\n\nexport const RuleEditorSection = ({\n title,\n stepNo,\n children,\n fullWidth = false,\n description,\n}: React.PropsWithChildren) => {\n const styles = useStyles2(getStyles);\n\n return (\n
\n \n {stepNo}. {title}\n \n }\n >\n \n {description &&
{description}
}\n {children}\n
\n \n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n parent: css`\n display: flex;\n flex-direction: row;\n max-width: ${theme.breakpoints.values.xl}px;\n border: solid 1px ${theme.colors.border.weak};\n border-radius: ${theme.shape.radius.default};\n padding: ${theme.spacing(2)} ${theme.spacing(3)};\n `,\n description: css`\n margin-top: -${theme.spacing(2)};\n `,\n fullWidth: css`\n width: 100%;\n `,\n});\n","import { css } from '@emotion/css';\nimport { dump, load } from 'js-yaml';\nimport React, { useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Button, CodeEditor, Drawer, Icon, Tab, TabsBar, useStyles2, Tooltip } from '@grafana/ui';\n\nimport { RulerRuleDTO } from '../../../../../types/unified-alerting-dto';\nimport { RuleFormValues } from '../../types/rule-form';\nimport {\n alertingRulerRuleToRuleForm,\n formValuesToRulerRuleDTO,\n recordingRulerRuleToRuleForm,\n} from '../../utils/rule-form';\nimport { isAlertingRulerRule, isRecordingRulerRule } from '../../utils/rules';\n\ninterface Props {\n onClose: () => void;\n}\n\nconst cloudRulesTabs = [{ label: 'Yaml', value: 'yaml' }];\n\nexport const RuleInspector = ({ onClose }: Props) => {\n const [activeTab, setActiveTab] = useState('yaml');\n const { setValue } = useFormContext();\n const styles = useStyles2(drawerStyles);\n\n const onApply = (formValues: RuleFormValues) => {\n // Need to loop through all values and set them individually\n // TODO this is not type-safe :(\n for (const key in formValues) {\n // @ts-ignore\n setValue(key, formValues[key]);\n }\n onClose();\n };\n\n return (\n \n \n \n }\n onClose={onClose}\n >\n {activeTab === 'yaml' && }\n \n );\n};\n\ninterface RuleInspectorTabsProps {\n tabs: Array<{ label: string; value: T }>;\n activeTab: T;\n setActiveTab: (tab: T) => void;\n}\n\nexport function RuleInspectorTabs({ tabs, activeTab, setActiveTab }: RuleInspectorTabsProps) {\n return (\n \n {tabs.map((tab, index) => {\n return (\n setActiveTab(tab.value)}\n active={activeTab === tab.value}\n />\n );\n })}\n \n );\n}\n\ninterface YamlTabProps {\n onSubmit: (newModel: RuleFormValues) => void;\n}\n\nconst InspectorYamlTab = ({ onSubmit }: YamlTabProps) => {\n const styles = useStyles2(yamlTabStyle);\n const { getValues } = useFormContext();\n\n const yamlValues = formValuesToRulerRuleDTO(getValues());\n const [alertRuleAsYaml, setAlertRuleAsYaml] = useState(dump(yamlValues));\n\n const onApply = () => {\n const rulerRule = load(alertRuleAsYaml) as RulerRuleDTO;\n const currentFormValues = getValues();\n\n const yamlFormValues = rulerRuleToRuleFormValues(rulerRule);\n onSubmit({ ...currentFormValues, ...yamlFormValues });\n };\n\n return (\n <>\n
\n \n } theme=\"info\" placement=\"left-start\" interactive={true}>\n \n \n
\n\n
\n \n {({ height }) => (\n \n )}\n \n
\n \n );\n};\n\nfunction YamlContentInfo() {\n return (\n
\n The YAML content in the editor only contains alert rule configuration
\n To configure Prometheus, you need to provide the rest of the{' '}\n \n configuration file content.\n \n
\n );\n}\n\nfunction rulerRuleToRuleFormValues(rulerRule: RulerRuleDTO): Partial {\n if (isAlertingRulerRule(rulerRule)) {\n return alertingRulerRuleToRuleForm(rulerRule);\n } else if (isRecordingRulerRule(rulerRule)) {\n return recordingRulerRuleToRuleForm(rulerRule);\n }\n\n return {};\n}\n\nexport const yamlTabStyle = (theme: GrafanaTheme2) => ({\n content: css`\n flex-grow: 1;\n height: 100%;\n padding-bottom: 16px;\n margin-bottom: ${theme.spacing(2)};\n `,\n applyButton: css`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n flex-grow: 0;\n margin-bottom: ${theme.spacing(2)};\n `,\n});\n\nexport const drawerStyles = () => ({\n subtitle: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n `,\n});\n","import React from 'react';\n\nimport { IconName, Tooltip, LinkButton, Button } from '@grafana/ui';\nimport { PopoverContent, TooltipPlacement } from '@grafana/ui/src/components/Tooltip';\n\ninterface Props {\n tooltip: PopoverContent;\n icon: IconName;\n className?: string;\n tooltipPlacement?: TooltipPlacement;\n to?: string;\n target?: string;\n onClick?: () => void;\n 'data-testid'?: string;\n}\n\nexport const ActionIcon = ({\n tooltip,\n icon,\n to,\n target,\n onClick,\n className,\n tooltipPlacement = 'top',\n ...rest\n}: Props) => {\n const ariaLabel = typeof tooltip === 'string' ? tooltip : undefined;\n\n return (\n \n {to ? (\n \n ) : (\n \n )}\n \n );\n};\n","import { useEffect, useRef } from 'react';\nvar useInterval = function (callback, delay) {\n var savedCallback = useRef(function () { });\n useEffect(function () {\n savedCallback.current = callback;\n });\n useEffect(function () {\n if (delay !== null) {\n var interval_1 = setInterval(function () { return savedCallback.current(); }, delay || 0);\n return function () { return clearInterval(interval_1); };\n }\n return undefined;\n }, [delay]);\n};\nexport default useInterval;\n"],"names":["useCleanup","cleanupAction","dispatch","selectorRef","NoRulesSplash","canCreateGrafanaRules","canCreateCloudRules","styles","getStyles","Stack","EmptyListCTA","CallToActionCard","theme","RuleListErrors","expanded","setExpanded","closed","setClosed","useLocalStorage","dataSourceConfigRequests","useUnifiedAlertingSelector","state","promRuleRequests","rulerRuleRequests","errors","dataSourceConfigErrors","promRequestErrors","rulerRequestErrors","requests","result","dataSource","error","grafanaPromError","grafanaRulerError","ErrorSummaryButton","Alert","item","idx","Button","count","onClick","Tooltip","GrafanaRuleFolderExporter","folder","onClose","activeTab","setActiveTab","GrafanaExportDrawer","GrafanaRuleFolderExportPreview","exportFormat","exportFolderDefinition","isFetching","alertRuleApi","LoadingPlaceholder","downloadFileName","FileExportPreview","GrafanaRuleGroupExporter","folderUid","groupName","GrafanaRuleGroupExportPreview","ruleGroupTextDefinition","ReorderCloudGroupModal","props","group","namespace","pending","setPending","rulesList","setRulesList","onDragEnd","newOrderedRules","reorder","rulesSourceName","rulerRules","rule","rulesWithUID","Modal","ModalHeader","provided","_snapshot","rubric","ListItem","droppableProvided","index","isClone","isDragging","AlertStateTag","Badge","Icon","rules","startIndex","endIndex","removed","RulesGroup","expandAll","viewMode","rulesSource","isEditingGroup","setIsEditingGroup","isDeletingGroup","setIsDeletingGroup","isReorderingGroup","setIsReorderingGroup","isExporting","setIsExporting","isCollapsed","setIsCollapsed","canEditRules","hasRuler","rulerRulesLoaded","useHasRuler","rulerRule","folderUID","useFolder","isDeleting","isFederated","isProvisioned","isListView","isGroupView","deleteGroup","actionIcons","Spinner","baseUrl","ActionIcon","RuleLocation","closeEditModal","saved","CollapseToggle","RulesTable","ConfirmModal","useCombinedGroupNamespace","namespaces","ns","g","CloudRules","dsConfigs","promRules","rulesDataSources","groupsWithNamespaces","dataSourcesLoading","ds","hasSomeResults","hasDataSourcesConfigured","hasDataSourcesLoading","hasNamespaces","numberOfPages","onPageChange","page","pageItems","usePagination","CreateRecordingRuleButton","Pagination","createCloudRuleSupported","createCloudRuleAllowed","location","url","GrafanaRulesExporter","GrafanaRulesExportPreview","rulesDefinition","GrafanaRules","queryParams","useQueryParams","prom","ruler","loading","hasResult","wantsListView","namespacesFormat","exportRulesSupported","exportRulesAllowed","canExportRules","showExportDrawer","toggleShowExportDrawer","useToggle","hasGrafanaAlerts","RuleListGroupView","grafanaNamespaces","cloudNamespaces","sorted","a","b","Authorize","RuleListStateSection","defaultCollapsed","collapsed","setCollapsed","RuleListStateView","filters","groupedRules","useRulesFilter","updateQueryParams","useURLSearchParams","searchQuery","filterState","hasActiveFilters","filter","updateFilters","newFilter","newSearchQuery","setSearchQuery","legacyFilters","legacyFilter","draft","legacyLabelsAsStrings","name","operator","value","useFilteredRules","filteredRules","filterRules","r","ufuzzy","filteredNamespaces","dataSourceFilter","namespaceFilter","namespaceHaystack","idxs","info","order","reduceNamespaces","namespaceAcc","groupNameFilter","filteredGroups","groupsHaystack","reduceGroups","ruleNameQuery","groupAcc","rulesHaystack","promRuleDefition","matchesFilterFor","isQueryingDataSource","ruleHealth","matchers","looseParseMatcher","doRuleLabelsMatchQuery","doAlertsContainMatchingLabels","alert","promRule","match","matcherQuery","query","MultipleDataSourcePicker","dataSourceSrv","setState","onChange","items","actionMeta","selectedItem","dataSourceName","action","dsSettings","getCurrentValue","current","hideTextValue","noDefault","uid","getDataSourceOptions","alerting","tracing","metrics","mixed","dashboard","variables","annotations","pluginId","type","logs","dataSources","alertManagingDs","nonAlertManagingDs","autoFocus","onBlur","onClear","openMenuOnFocus","placeholder","width","inputId","disabled","isLoading","options","isClearable","selectors","o","PluginSignatureBadge","ViewOptions","RuleTypeOptions","RuleHealthOptions","RuleStateOptions","key","RulesFilter","onFilterCleared","setQueryParams","filterKey","setFilterKey","dataSourceKey","queryStringKey","searchQueryRef","handleSubmit","register","setValue","ref","rest","handleDataSourceChange","dataSourceValue","dataSourceNames","handleDashboardChange","dashboardUid","clearDataSource","handleAlertStateChange","handleViewChange","view","handleRuleTypeChange","ruleType","handleRuleHealthChange","handleClearFiltersClick","searchIcon","Field","Label","DashboardPicker","RadioButtonGroup","data","HoverCard","SearchQueryHelp","Input","e","helpStyles","HelpRow","title","expr","VIEWS","LIMIT_ALERTS","RuleList","rulesDataSourceNames","setExpandAll","ViewComponent","promRequests","rulerRequests","allPromLoaded","_","allRulerLoaded","allPromEmpty","allRulerEmpty","limitAlerts","fetchRules","useAsyncFn","useInterval","hasNoAlertRulesCreatedYet","hasAlertRulesCreated","combinedNamespaces","useCombinedRuleNamespaces","AlertingPageWrapper","CreateAlertButton","RuleStats","createRuleSupported","createRuleAllowed","actions","children","alertmanagerActions","isAlertmanagerAction","alertSourceActions","isAlertingAction","AuthorizeAlertmanager","AuthorizeAlertsource","alertmanagerAbilties","actionsAllowed","alertSourceAbilities","abilities","_supported","allowed","format","textDefinition","fileExportPreviewStyles","provider","onDownload","blob","formattedTextDefinition","FileExportInlineDocumentation","height","exportProvider","exportInlineDoc","component","onTabChange","formatProviders","grafanaRulesTabs","JsonExportProvider","raw","YamlExportProvider","HclExportProvider","allGrafanaExportProviders","jsonAndYamlGrafanaExportProviders","NeedHelpInfo","contentText","externalLink","linkText","RuleEditorSection","stepNo","fullWidth","description","cloudRulesTabs","RuleInspector","drawerStyles","onApply","formValues","RuleInspectorTabs","InspectorYamlTab","tabs","tab","onSubmit","yamlTabStyle","getValues","yamlValues","alertRuleAsYaml","setAlertRuleAsYaml","currentFormValues","yamlFormValues","rulerRuleToRuleFormValues","YamlContentInfo","tooltip","icon","to","target","className","tooltipPlacement","ariaLabel","callback","delay","savedCallback","interval_1"],"sourceRoot":""}