{"version":3,"file":"8225.4587a60b5b2aaf077238.js","mappings":"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","sources":["webpack://grafana/./public/app/features/alerting/unified/components/DynamicTableWithGuidelines.tsx","webpack://grafana/./public/app/features/alerting/unified/components/RuleLocation.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleActionsButtons.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleConfigStatus.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetails.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RulesTable.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useHasRuler.ts"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { DynamicTable, DynamicTableProps } from './DynamicTable';\n\nexport type DynamicTableWithGuidelinesProps = Omit, 'renderPrefixHeader, renderPrefixCell'>;\n\n// DynamicTable, but renders visual guidelines on the left, for larger screen widths\nexport const DynamicTableWithGuidelines = ({\n renderExpandedContent,\n ...props\n}: DynamicTableWithGuidelinesProps) => {\n const styles = useStyles2(getStyles);\n return (\n (\n <>\n {!(index === items.length - 1) &&
}\n {renderExpandedContent(item, index, items)}\n \n )\n : undefined\n }\n renderPrefixHeader={() => (\n
\n
\n
\n )}\n renderPrefixCell={(_, index, items) => (\n
\n
\n {!(index === items.length - 1) &&
}\n
\n )}\n {...props}\n />\n );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n relative: css`\n position: relative;\n height: 100%;\n `,\n guideline: css`\n left: -19px;\n border-left: 1px solid ${theme.colors.border.medium};\n position: absolute;\n\n ${theme.breakpoints.down('md')} {\n display: none;\n }\n `,\n topGuideline: css`\n width: 18px;\n border-bottom: 1px solid ${theme.colors.border.medium};\n top: 0;\n bottom: 50%;\n `,\n bottomGuideline: css`\n top: 50%;\n bottom: 0;\n `,\n contentGuideline: css`\n top: 0;\n bottom: 0;\n left: -49px !important;\n `,\n headerGuideline: css`\n top: -25px;\n bottom: 0;\n `,\n});\n","import React, { FC } from 'react';\n\nimport { Icon } from '@grafana/ui';\n\ninterface RuleLocationProps {\n namespace: string;\n group?: string;\n}\n\nconst RuleLocation: FC = ({ namespace, group }) => {\n if (!group) {\n return <>{namespace};\n }\n\n return (\n <>\n {namespace} {group}\n \n );\n};\n\nexport { RuleLocation };\n","import { css } from '@emotion/css';\nimport React, { FC, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Stack } from '@grafana/experimental';\nimport { config } from '@grafana/runtime';\nimport { Button, ClipboardButton, ConfirmModal, LinkButton, Tooltip, useStyles2 } from '@grafana/ui';\nimport { useAppNotification } from 'app/core/copy/appNotification';\nimport { useDispatch } from 'app/types';\nimport { CombinedRule, RulesSource } from 'app/types/unified-alerting';\n\nimport { useIsRuleEditable } from '../../hooks/useIsRuleEditable';\nimport { deleteRuleAction } from '../../state/actions';\nimport { getRulesSourceName, isCloudRulesSource } from '../../utils/datasource';\nimport { createViewLink } from '../../utils/misc';\nimport * as ruleId from '../../utils/rule-id';\nimport { isFederatedRuleGroup, isGrafanaRulerRule } from '../../utils/rules';\nimport { createUrl } from '../../utils/url';\n\nimport { CloneRuleButton } from './CloneRuleButton';\nexport const matchesWidth = (width: number) => window.matchMedia(`(max-width: ${width}px)`).matches;\n\ninterface Props {\n rule: CombinedRule;\n rulesSource: RulesSource;\n}\n\nexport const RuleActionsButtons: FC = ({ rule, rulesSource }) => {\n const dispatch = useDispatch();\n const location = useLocation();\n const notifyApp = useAppNotification();\n const style = useStyles2(getStyles);\n const { namespace, group, rulerRule } = rule;\n const [ruleToDelete, setRuleToDelete] = useState();\n\n const rulesSourceName = getRulesSourceName(rulesSource);\n\n const isProvisioned = isGrafanaRulerRule(rule.rulerRule) && Boolean(rule.rulerRule.grafana_alert.provenance);\n\n const buttons: JSX.Element[] = [];\n\n const isFederated = isFederatedRuleGroup(group);\n const { isEditable, isRemovable } = useIsRuleEditable(rulesSourceName, rulerRule);\n const returnTo = location.pathname + location.search;\n const isViewMode = inViewMode(location.pathname);\n\n const deleteRule = () => {\n if (ruleToDelete && ruleToDelete.rulerRule) {\n const identifier = ruleId.fromRulerRule(\n getRulesSourceName(ruleToDelete.namespace.rulesSource),\n ruleToDelete.namespace.name,\n ruleToDelete.group.name,\n ruleToDelete.rulerRule\n );\n\n dispatch(deleteRuleAction(identifier, { navigateTo: isViewMode ? '/alerting/list' : undefined }));\n setRuleToDelete(undefined);\n }\n };\n\n const buildShareUrl = () => {\n if (isCloudRulesSource(rulesSource)) {\n const { appUrl, appSubUrl } = config;\n const baseUrl = appSubUrl !== '' ? `${appUrl}${appSubUrl}/` : config.appUrl;\n const ruleUrl = `${encodeURIComponent(rulesSource.name)}/${encodeURIComponent(rule.name)}`;\n return `${baseUrl}alerting/${ruleUrl}/find`;\n }\n\n return window.location.href.split('?')[0];\n };\n\n const sourceName = getRulesSourceName(rulesSource);\n\n if (!isViewMode) {\n buttons.push(\n \n \n \n );\n }\n\n if (isEditable && rulerRule && !isFederated) {\n const identifier = ruleId.fromRulerRule(sourceName, namespace.name, group.name, rulerRule);\n\n if (!isProvisioned) {\n const editURL = createUrl(`/alerting/${encodeURIComponent(ruleId.stringifyIdentifier(identifier))}/edit`, {\n returnTo,\n });\n\n if (isViewMode) {\n buttons.push(\n {\n notifyApp.error('Error while copying URL', copiedText);\n }}\n className={style.button}\n size=\"sm\"\n getText={buildShareUrl}\n >\n Copy link to rule\n \n );\n }\n\n buttons.push(\n \n \n \n );\n }\n\n buttons.push(\n \n \n \n );\n }\n\n if (isRemovable && rulerRule && !isFederated && !isProvisioned) {\n buttons.push(\n \n setRuleToDelete(rule)}\n />\n \n );\n }\n\n if (buttons.length) {\n return (\n <>\n \n {buttons.map((button, index) => (\n {button}\n ))}\n \n {!!ruleToDelete && (\n setRuleToDelete(undefined)}\n />\n )}\n \n );\n }\n\n return null;\n};\n\nfunction inViewMode(pathname: string): boolean {\n return pathname.endsWith('/view');\n}\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n button: css`\n padding: 0 ${theme.spacing(2)};\n `,\n});\n","import { css } from '@emotion/css';\nimport React, { useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data/src';\nimport { config } from '@grafana/runtime/src';\nimport { Icon, Tooltip, useStyles2 } from '@grafana/ui/src';\n\nimport { CombinedRule } from '../../../../../types/unified-alerting';\nimport { checkEvaluationIntervalGlobalLimit } from '../../utils/config';\n\ninterface RuleConfigStatusProps {\n rule: CombinedRule;\n}\n\nexport function RuleConfigStatus({ rule }: RuleConfigStatusProps) {\n const styles = useStyles2(getStyles);\n\n const { exceedsLimit } = useMemo(\n () => checkEvaluationIntervalGlobalLimit(rule.group.interval),\n [rule.group.interval]\n );\n\n if (!exceedsLimit) {\n return null;\n }\n\n return (\n \n A minimum evaluation interval of{' '}\n {config.unifiedAlerting.minInterval} has been configured in\n Grafana and will be used instead of the {rule.group.interval} interval configured for the Rule Group.\n
\n }\n >\n \n \n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n globalLimitValue: css`\n font-weight: ${theme.typography.fontWeightBold};\n `,\n icon: css`\n fill: ${theme.colors.warning.text};\n `,\n };\n}\n","import { css } from '@emotion/css';\nimport React, { FC } from 'react';\n\nimport { GrafanaTheme2, dateTime, dateTimeFormat } from '@grafana/data';\nimport { useStyles2, Tooltip } from '@grafana/ui';\nimport { Time } from 'app/features/explore/Time';\nimport { CombinedRule } from 'app/types/unified-alerting';\n\nimport { isRecordingRulerRule } from '../../utils/rules';\nimport { isNullDate } from '../../utils/time';\nimport { AlertLabels } from '../AlertLabels';\nimport { DetailsField } from '../DetailsField';\n\nimport { RuleDetailsActionButtons } from './RuleDetailsActionButtons';\nimport { RuleDetailsAnnotations } from './RuleDetailsAnnotations';\nimport { RuleDetailsDataSources } from './RuleDetailsDataSources';\nimport { RuleDetailsExpression } from './RuleDetailsExpression';\nimport { RuleDetailsMatchingInstances } from './RuleDetailsMatchingInstances';\n\ninterface Props {\n rule: CombinedRule;\n}\n\n// The limit is set to 15 in order to upkeep the good performance\n// and to encourage users to go to the rule details page to see the rest of the instances\n// We don't want to paginate the instances list on the alert list page\nconst INSTANCES_DISPLAY_LIMIT = 15;\n\nexport const RuleDetails: FC = ({ rule }) => {\n const styles = useStyles2(getStyles);\n const {\n namespace: { rulesSource },\n } = rule;\n\n const annotations = Object.entries(rule.annotations).filter(([_, value]) => !!value.trim());\n\n return (\n
\n \n
\n
\n {}\n {!!rule.labels && !!Object.keys(rule.labels).length && (\n \n \n \n )}\n \n \n
\n
\n \n
\n
\n \n
\n );\n};\n\ninterface EvaluationBehaviorSummaryProps {\n rule: CombinedRule;\n}\n\nconst EvaluationBehaviorSummary = ({ rule }: EvaluationBehaviorSummaryProps) => {\n let forDuration: string | undefined;\n let every = rule.group.interval;\n let lastEvaluation = rule.promRule?.lastEvaluation;\n let lastEvaluationDuration = rule.promRule?.evaluationTime;\n\n // recording rules don't have a for duration\n if (!isRecordingRulerRule(rule.rulerRule)) {\n forDuration = rule.rulerRule?.for;\n }\n\n return (\n <>\n {every && (\n \n Every {every}\n \n )}\n {forDuration && (\n \n {forDuration}\n \n )}\n\n {lastEvaluation && !isNullDate(lastEvaluation) && (\n \n \n {`${dateTime(lastEvaluation).locale('en').fromNow(true)} ago`}\n \n \n )}\n\n {lastEvaluation && !isNullDate(lastEvaluation) && lastEvaluationDuration !== undefined && (\n \n \n {Time({ timeInMs: lastEvaluationDuration * 1000, humanize: true })}\n \n \n )}\n \n );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css`\n display: flex;\n flex-direction: row;\n\n ${theme.breakpoints.down('md')} {\n flex-direction: column;\n }\n `,\n leftSide: css`\n flex: 1;\n `,\n rightSide: css`\n ${theme.breakpoints.up('md')} {\n padding-left: 90px;\n width: 300px;\n }\n `,\n});\n","import { css, cx } from '@emotion/css';\nimport React, { FC, useCallback, useMemo } from 'react';\n\nimport {\n GrafanaTheme2,\n addDurationToDate,\n isValidDate,\n isValidDuration,\n parseDuration,\n dateTimeFormat,\n dateTime,\n} from '@grafana/data';\nimport { useStyles2, Tooltip } from '@grafana/ui';\nimport { CombinedRule } from 'app/types/unified-alerting';\n\nimport { DEFAULT_PER_PAGE_PAGINATION } from '../../../../../core/constants';\nimport { useHasRuler } from '../../hooks/useHasRuler';\nimport { Annotation } from '../../utils/constants';\nimport { isGrafanaRulerRule } from '../../utils/rules';\nimport { isNullDate } from '../../utils/time';\nimport { DynamicTable, DynamicTableColumnProps, DynamicTableItemProps } from '../DynamicTable';\nimport { DynamicTableWithGuidelines } from '../DynamicTableWithGuidelines';\nimport { ProvisioningBadge } from '../Provisioning';\nimport { RuleLocation } from '../RuleLocation';\nimport { Tokenize } from '../Tokenize';\n\nimport { RuleActionsButtons } from './RuleActionsButtons';\nimport { RuleConfigStatus } from './RuleConfigStatus';\nimport { RuleDetails } from './RuleDetails';\nimport { RuleHealth } from './RuleHealth';\nimport { RuleState } from './RuleState';\n\ntype RuleTableColumnProps = DynamicTableColumnProps;\ntype RuleTableItemProps = DynamicTableItemProps;\n\ninterface Props {\n rules: CombinedRule[];\n showGuidelines?: boolean;\n showGroupColumn?: boolean;\n showSummaryColumn?: boolean;\n showNextEvaluationColumn?: boolean;\n emptyMessage?: string;\n className?: string;\n}\n\nexport const RulesTable: FC = ({\n rules,\n className,\n showGuidelines = false,\n emptyMessage = 'No rules found.',\n showGroupColumn = false,\n showSummaryColumn = false,\n showNextEvaluationColumn = false,\n}) => {\n const styles = useStyles2(getStyles);\n\n const wrapperClass = cx(styles.wrapper, className, { [styles.wrapperMargin]: showGuidelines });\n\n const items = useMemo((): RuleTableItemProps[] => {\n return rules.map((rule, ruleIdx) => {\n return {\n id: `${rule.namespace.name}-${rule.group.name}-${rule.name}-${ruleIdx}`,\n data: rule,\n };\n });\n }, [rules]);\n\n const columns = useColumns(showSummaryColumn, showGroupColumn, showNextEvaluationColumn);\n\n if (!rules.length) {\n return
{emptyMessage}
;\n }\n\n const TableComponent = showGuidelines ? DynamicTableWithGuidelines : DynamicTable;\n\n return (\n
\n }\n pagination={{ itemsPerPage: DEFAULT_PER_PAGE_PAGINATION }}\n paginationStyles={styles.pagination}\n />\n
\n );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n wrapperMargin: css`\n ${theme.breakpoints.up('md')} {\n margin-left: 36px;\n }\n `,\n emptyMessage: css`\n padding: ${theme.spacing(1)};\n `,\n wrapper: css`\n width: auto;\n border-radius: ${theme.shape.borderRadius()};\n `,\n pagination: css`\n display: flex;\n margin: 0;\n padding-top: ${theme.spacing(1)};\n padding-bottom: ${theme.spacing(0.25)};\n justify-content: center;\n border-left: 1px solid ${theme.colors.border.strong};\n border-right: 1px solid ${theme.colors.border.strong};\n border-bottom: 1px solid ${theme.colors.border.strong};\n `,\n});\n\nfunction useColumns(showSummaryColumn: boolean, showGroupColumn: boolean, showNextEvaluationColumn: boolean) {\n const { hasRuler, rulerRulesLoaded } = useHasRuler();\n\n const calculateNextEvaluationDate = useCallback((rule: CombinedRule) => {\n const isValidLastEvaluation =\n rule.promRule?.lastEvaluation &&\n !isNullDate(rule.promRule.lastEvaluation) &&\n isValidDate(rule.promRule.lastEvaluation);\n const isValidIntervalDuration = rule.group.interval && isValidDuration(rule.group.interval);\n\n if (!isValidLastEvaluation || !isValidIntervalDuration) {\n return;\n }\n\n const lastEvaluationDate = Date.parse(rule.promRule?.lastEvaluation || '');\n const intervalDuration = parseDuration(rule.group.interval!);\n const nextEvaluationDate = addDurationToDate(lastEvaluationDate, intervalDuration);\n return {\n humanized: dateTime(nextEvaluationDate).locale('en').fromNow(true),\n fullDate: dateTimeFormat(nextEvaluationDate, { format: 'YYYY-MM-DD HH:mm:ss' }),\n };\n }, []);\n\n return useMemo((): RuleTableColumnProps[] => {\n const columns: RuleTableColumnProps[] = [\n {\n id: 'state',\n label: 'State',\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: rule }) => {\n const { namespace } = rule;\n const { rulesSource } = namespace;\n const { promRule, rulerRule } = rule;\n\n const isDeleting = !!(hasRuler(rulesSource) && rulerRulesLoaded(rulesSource) && promRule && !rulerRule);\n const isCreating = !!(hasRuler(rulesSource) && rulerRulesLoaded(rulesSource) && rulerRule && !promRule);\n const isGrafanaManagedRule = isGrafanaRulerRule(rulerRule);\n const isPaused = isGrafanaManagedRule && Boolean(rulerRule.grafana_alert.is_paused);\n\n return ;\n },\n size: '165px',\n },\n {\n id: 'name',\n label: 'Name',\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: rule }) => rule.name,\n size: showNextEvaluationColumn ? 4 : 5,\n },\n {\n id: 'provisioned',\n label: '',\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: rule }) => {\n const rulerRule = rule.rulerRule;\n const isGrafanaManagedRule = isGrafanaRulerRule(rulerRule);\n\n if (!isGrafanaManagedRule) {\n return null;\n }\n\n const provenance = rulerRule.grafana_alert.provenance;\n return provenance ? : null;\n },\n size: '100px',\n },\n {\n id: 'warnings',\n label: '',\n renderCell: ({ data: combinedRule }) => ,\n size: '45px',\n },\n {\n id: 'health',\n label: 'Health',\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: { promRule, group } }) => (promRule ? : null),\n size: '75px',\n },\n ];\n if (showSummaryColumn) {\n columns.push({\n id: 'summary',\n label: 'Summary',\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: rule }) => {\n return ;\n },\n size: showNextEvaluationColumn ? 4 : 5,\n });\n }\n\n if (showNextEvaluationColumn) {\n columns.push({\n id: 'nextEvaluation',\n label: 'Next evaluation',\n renderCell: ({ data: rule }) => {\n const nextEvalInfo = calculateNextEvaluationDate(rule);\n return (\n nextEvalInfo?.fullDate && (\n \n in {nextEvalInfo?.humanized}\n \n )\n );\n },\n size: 2,\n });\n }\n\n if (showGroupColumn) {\n columns.push({\n id: 'group',\n label: 'Group',\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: rule }) => {\n const { namespace, group } = rule;\n // ungrouped rules are rules that are in the \"default\" group name\n const isUngrouped = group.name === 'default';\n const groupName = isUngrouped ? (\n \n ) : (\n \n );\n\n return groupName;\n },\n size: 5,\n });\n }\n columns.push({\n id: 'actions',\n label: 'Actions',\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: rule }) => {\n return ;\n },\n size: '200px',\n });\n\n return columns;\n }, [\n showSummaryColumn,\n showGroupColumn,\n showNextEvaluationColumn,\n hasRuler,\n rulerRulesLoaded,\n calculateNextEvaluationDate,\n ]);\n}\n","import { useCallback } from 'react';\n\nimport { RulesSource } from 'app/types/unified-alerting';\n\nimport { getRulesSourceName, GRAFANA_RULES_SOURCE_NAME } from '../utils/datasource';\n\nimport { useUnifiedAlertingSelector } from './useUnifiedAlertingSelector';\n\n// datasource has ruler if it's grafana managed or if we're able to load rules from it\nexport function useHasRuler() {\n const rulerRules = useUnifiedAlertingSelector((state) => state.rulerRules);\n\n const hasRuler = useCallback(\n (rulesSource: string | RulesSource) => {\n const rulesSourceName = typeof rulesSource === 'string' ? rulesSource : rulesSource.name;\n return rulesSourceName === GRAFANA_RULES_SOURCE_NAME || !!rulerRules[rulesSourceName]?.result;\n },\n [rulerRules]\n );\n\n const rulerRulesLoaded = useCallback(\n (rulesSource: RulesSource) => {\n const rulesSourceName = getRulesSourceName(rulesSource);\n const result = rulerRules[rulesSourceName]?.result;\n\n return Boolean(result);\n },\n [rulerRules]\n );\n\n return { hasRuler, rulerRulesLoaded };\n}\n"],"names":["DynamicTableWithGuidelines","renderExpandedContent","props","styles","getStyles","item","index","items","_","theme","RuleLocation","namespace","group","matchesWidth","width","RuleActionsButtons","rule","rulesSource","dispatch","location","notifyApp","style","rulerRule","ruleToDelete","setRuleToDelete","rulesSourceName","isProvisioned","buttons","isFederated","isEditable","isRemovable","useIsRuleEditable","returnTo","isViewMode","inViewMode","deleteRule","identifier","buildShareUrl","appUrl","appSubUrl","config","baseUrl","ruleUrl","sourceName","Tooltip","editURL","ClipboardButton","copiedText","CloneRuleButton","Button","button","ConfirmModal","pathname","RuleConfigStatus","exceedsLimit","Icon","INSTANCES_DISPLAY_LIMIT","RuleDetails","annotations","value","RuleDetailsActionButtons","EvaluationBehaviorSummary","DetailsField","AlertLabels","RuleDetailsExpression","RuleDetailsAnnotations","RuleDetailsDataSources","RuleDetailsMatchingInstances","forDuration","every","lastEvaluation","lastEvaluationDuration","Time","RulesTable","rules","className","showGuidelines","emptyMessage","showGroupColumn","showSummaryColumn","showNextEvaluationColumn","wrapperClass","ruleIdx","columns","useColumns","TableComponent","DynamicTable","hasRuler","rulerRulesLoaded","useHasRuler","calculateNextEvaluationDate","isValidLastEvaluation","isValidIntervalDuration","lastEvaluationDate","intervalDuration","nextEvaluationDate","promRule","isDeleting","isCreating","isPaused","RuleState","Provisioning","combinedRule","RuleHealth","Tokenize","nextEvalInfo","rulerRules","state","result"],"sourceRoot":""}