AlertingRule.06bfd56aec3a1fb7ebbb.js.map 53 KB

1
  1. {"version":3,"file":"AlertingRule.06bfd56aec3a1fb7ebbb.js","mappings":"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","sources":["webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/RuleViewerVisualization.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetailsFederatedSources.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/query.ts","webpack://grafana/./public/app/features/alerting/unified/RuleViewer.tsx","webpack://grafana/./public/app/features/alerting/unified/components/Authorize.tsx","webpack://grafana/./public/app/features/alerting/unified/components/PanelPluginsButtonGroup.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/RuleViewerLayout.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useAlertQueriesStatus.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/useCombinedRule.ts","webpack://grafana/./public/app/features/alerting/unified/utils/timeRange.ts","webpack://grafana/./public/app/features/alerting/unified/state/AlertingQueryRunner.ts","webpack://grafana/./public/app/features/expressions/guards.ts","webpack://grafana/./.yarn/__virtual__/react-use-virtual-00326e70ba/3/opt/drone/yarncache/react-use-npm-17.3.2-a032cbeb01-7379460f51.zip/node_modules/react-use/esm/useObservable.js"],"sourcesContent":["import { css } from '@emotion/css';\nimport React, { useCallback, useState } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { DataSourceInstanceSettings, DateTime, dateTime, GrafanaTheme2, PanelData, urlUtil } from '@grafana/data';\nimport { config, getDataSourceSrv, PanelRenderer } from '@grafana/runtime';\nimport { Alert, CodeEditor, DateTimePicker, LinkButton, useStyles2, useTheme2 } from '@grafana/ui';\nimport { isExpressionQuery } from 'app/features/expressions/guards';\nimport { PanelOptions } from 'app/plugins/panel/table/models.gen';\nimport { AccessControlAction } from 'app/types';\nimport { AlertQuery } from 'app/types/unified-alerting-dto';\n\nimport { TABLE, TIMESERIES } from '../../utils/constants';\nimport { Authorize } from '../Authorize';\nimport { PanelPluginsButtonGroup, SupportedPanelPlugins } from '../PanelPluginsButtonGroup';\n\ntype RuleViewerVisualizationProps = {\n data?: PanelData;\n query: AlertQuery;\n onChangeQuery: (query: AlertQuery) => void;\n};\n\nconst headerHeight = 4;\n\nexport function RuleViewerVisualization(props: RuleViewerVisualizationProps): JSX.Element | null {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const { data, query, onChangeQuery } = props;\n const defaultPanel = isExpressionQuery(query.model) ? TABLE : TIMESERIES;\n const [panel, setPanel] = useState<SupportedPanelPlugins>(defaultPanel);\n const dsSettings = getDataSourceSrv().getInstanceSettings(query.datasourceUid);\n const relativeTimeRange = query.relativeTimeRange;\n const [options, setOptions] = useState<PanelOptions>({\n frameIndex: 0,\n showHeader: true,\n });\n\n const onTimeChange = useCallback(\n (newDateTime: DateTime) => {\n const now = dateTime().unix() - newDateTime.unix();\n\n if (relativeTimeRange) {\n const interval = relativeTimeRange.from - relativeTimeRange.to;\n onChangeQuery({\n ...query,\n relativeTimeRange: { from: now + interval, to: now },\n });\n }\n },\n [onChangeQuery, query, relativeTimeRange]\n );\n\n const setDateTime = useCallback((relativeTimeRangeTo: number) => {\n return relativeTimeRangeTo === 0 ? dateTime() : dateTime().subtract(relativeTimeRangeTo, 'seconds');\n }, []);\n\n if (!data) {\n return null;\n }\n\n if (!dsSettings) {\n return (\n <div className={styles.content}>\n <Alert title=\"Could not find datasource for query\" />\n <CodeEditor\n width=\"100%\"\n height=\"250px\"\n language=\"json\"\n showLineNumbers={false}\n showMiniMap={false}\n value={JSON.stringify(query, null, '\\t')}\n readOnly={true}\n />\n </div>\n );\n }\n\n return (\n <div className={styles.content}>\n <AutoSizer>\n {({ width, height }) => {\n return (\n <div style={{ width, height }}>\n <div className={styles.header}>\n <div>\n {`Query ${query.refId}`}\n <span className={styles.dataSource}>({dsSettings.name})</span>\n </div>\n <div className={styles.actions}>\n {!isExpressionQuery(query.model) && relativeTimeRange ? (\n <DateTimePicker\n date={setDateTime(relativeTimeRange.to)}\n onChange={onTimeChange}\n maxDate={new Date()}\n />\n ) : null}\n <PanelPluginsButtonGroup onChange={setPanel} value={panel} size=\"md\" />\n <Authorize actions={[AccessControlAction.DataSourcesExplore]}>\n {!isExpressionQuery(query.model) && (\n <>\n <div className={styles.spacing} />\n <LinkButton\n size=\"md\"\n variant=\"secondary\"\n icon=\"compass\"\n target=\"_blank\"\n href={createExploreLink(dsSettings, query)}\n >\n View in Explore\n </LinkButton>\n </>\n )}\n </Authorize>\n </div>\n </div>\n <PanelRenderer\n height={height - theme.spacing.gridSize * headerHeight}\n width={width}\n data={data}\n pluginId={panel}\n title=\"\"\n onOptionsChange={setOptions}\n options={options}\n />\n </div>\n );\n }}\n </AutoSizer>\n </div>\n );\n}\n\nfunction createExploreLink(settings: DataSourceInstanceSettings, query: AlertQuery): string {\n const { name } = settings;\n const { refId, ...rest } = query.model;\n const queryParams = { ...rest, datasource: name };\n\n return urlUtil.renderUrl(`${config.appSubUrl}/explore`, {\n left: JSON.stringify(['now-1h', 'now', name, queryParams]),\n });\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n content: css`\n width: 100%;\n height: 250px;\n `,\n header: css`\n height: ${theme.spacing(headerHeight)};\n display: flex;\n align-items: center;\n justify-content: space-between;\n white-space: nowrap;\n `,\n refId: css`\n font-weight: ${theme.typography.fontWeightMedium};\n color: ${theme.colors.text.link};\n overflow: hidden;\n `,\n dataSource: css`\n margin-left: ${theme.spacing(1)};\n font-style: italic;\n color: ${theme.colors.text.secondary};\n `,\n actions: css`\n display: flex;\n align-items: center;\n `,\n spacing: css`\n padding: ${theme.spacing(0, 1, 0, 0)};\n `,\n errorMessage: css`\n white-space: pre-wrap;\n `,\n };\n};\n","import React, { FC } from 'react';\n\nimport { CombinedRuleGroup } from 'app/types/unified-alerting';\n\nimport { DetailsField } from '../DetailsField';\n\ninterface Props {\n group: CombinedRuleGroup;\n}\n\nconst RuleDetailsFederatedSources: FC<Props> = ({ group }) => {\n const sourceTenants = group.source_tenants ?? [];\n\n return (\n <DetailsField label=\"Tenant sources\">\n <>\n {sourceTenants.map((tenant) => (\n <div key={tenant}>{tenant}</div>\n ))}\n </>\n </DetailsField>\n );\n};\n\nexport { RuleDetailsFederatedSources };\n","import { DataQuery, DataSourceInstanceSettings } from '@grafana/data';\nimport { LokiQuery } from 'app/plugins/datasource/loki/types';\nimport { PromQuery } from 'app/plugins/datasource/prometheus/types';\nimport { CombinedRule } from 'app/types/unified-alerting';\nimport { AlertQuery } from 'app/types/unified-alerting-dto';\n\nimport { isCloudRulesSource, isGrafanaRulesSource } from './datasource';\nimport { isGrafanaRulerRule } from './rules';\n\nexport function alertRuleToQueries(combinedRule: CombinedRule | undefined | null): AlertQuery[] {\n if (!combinedRule) {\n return [];\n }\n const { namespace, rulerRule } = combinedRule;\n const { rulesSource } = namespace;\n\n if (isGrafanaRulesSource(rulesSource)) {\n if (isGrafanaRulerRule(rulerRule)) {\n return rulerRule.grafana_alert.data;\n }\n }\n\n if (isCloudRulesSource(rulesSource)) {\n const model = cloudAlertRuleToModel(rulesSource, combinedRule);\n\n return [\n {\n refId: model.refId,\n datasourceUid: rulesSource.uid,\n queryType: '',\n model,\n relativeTimeRange: {\n from: 360,\n to: 0,\n },\n },\n ];\n }\n\n return [];\n}\n\nfunction cloudAlertRuleToModel(dsSettings: DataSourceInstanceSettings, rule: CombinedRule): DataQuery {\n const refId = 'A';\n\n switch (dsSettings.type) {\n case 'prometheus': {\n const query: PromQuery = {\n refId,\n expr: rule.query,\n };\n\n return query;\n }\n\n case 'loki': {\n const query: LokiQuery = {\n refId,\n expr: rule.query,\n };\n\n return query;\n }\n\n default:\n throw new Error(`Query for datasource type ${dsSettings.type} is currently not supported by cloud alert rules.`);\n }\n}\n","import { css } from '@emotion/css';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useObservable } from 'react-use';\n\nimport { GrafanaTheme2, LoadingState, PanelData } from '@grafana/data';\nimport {\n Alert,\n Button,\n Icon,\n LoadingPlaceholder,\n PanelChromeLoadingIndicator,\n useStyles2,\n VerticalGroup,\n withErrorBoundary,\n} from '@grafana/ui';\nimport { GrafanaRouteComponentProps } from 'app/core/navigation/types';\n\nimport { AlertQuery } from '../../../types/unified-alerting-dto';\n\nimport { AlertLabels } from './components/AlertLabels';\nimport { DetailsField } from './components/DetailsField';\nimport { RuleViewerLayout, RuleViewerLayoutContent } from './components/rule-viewer/RuleViewerLayout';\nimport { RuleViewerVisualization } from './components/rule-viewer/RuleViewerVisualization';\nimport { RuleDetailsActionButtons } from './components/rules/RuleDetailsActionButtons';\nimport { RuleDetailsAnnotations } from './components/rules/RuleDetailsAnnotations';\nimport { RuleDetailsDataSources } from './components/rules/RuleDetailsDataSources';\nimport { RuleDetailsExpression } from './components/rules/RuleDetailsExpression';\nimport { RuleDetailsFederatedSources } from './components/rules/RuleDetailsFederatedSources';\nimport { RuleDetailsMatchingInstances } from './components/rules/RuleDetailsMatchingInstances';\nimport { RuleHealth } from './components/rules/RuleHealth';\nimport { RuleState } from './components/rules/RuleState';\nimport { useAlertQueriesStatus } from './hooks/useAlertQueriesStatus';\nimport { useCombinedRule } from './hooks/useCombinedRule';\nimport { AlertingQueryRunner } from './state/AlertingQueryRunner';\nimport { getRulesSourceByName } from './utils/datasource';\nimport { alertRuleToQueries } from './utils/query';\nimport * as ruleId from './utils/rule-id';\nimport { isFederatedRuleGroup } from './utils/rules';\n\ntype RuleViewerProps = GrafanaRouteComponentProps<{ id?: string; sourceName?: string }>;\n\nconst errorMessage = 'Could not find data source for rule';\nconst errorTitle = 'Could not view rule';\nconst pageTitle = 'Alerting / View rule';\n\nexport function RuleViewer({ match }: RuleViewerProps) {\n const styles = useStyles2(getStyles);\n const { id } = match.params;\n const identifier = ruleId.tryParse(id, true);\n\n const { loading, error, result: rule } = useCombinedRule(identifier, identifier?.ruleSourceName);\n const runner = useMemo(() => new AlertingQueryRunner(), []);\n const data = useObservable(runner.get());\n const queries2 = useMemo(() => alertRuleToQueries(rule), [rule]);\n const [queries, setQueries] = useState<AlertQuery[]>([]);\n\n const { allDataSourcesAvailable } = useAlertQueriesStatus(queries2);\n\n const onRunQueries = useCallback(() => {\n if (queries.length > 0 && allDataSourcesAvailable) {\n runner.run(queries);\n }\n }, [queries, runner, allDataSourcesAvailable]);\n\n useEffect(() => {\n setQueries(queries2);\n }, [queries2]);\n\n useEffect(() => {\n if (allDataSourcesAvailable) {\n onRunQueries();\n }\n }, [onRunQueries, allDataSourcesAvailable]);\n\n useEffect(() => {\n return () => runner.destroy();\n }, [runner]);\n\n const onChangeQuery = useCallback((query: AlertQuery) => {\n setQueries((queries) =>\n queries.map((q) => {\n if (q.refId === query.refId) {\n return query;\n }\n return q;\n })\n );\n }, []);\n\n if (!identifier?.ruleSourceName) {\n return (\n <RuleViewerLayout title={pageTitle}>\n <Alert title={errorTitle}>\n <details className={styles.errorMessage}>{errorMessage}</details>\n </Alert>\n </RuleViewerLayout>\n );\n }\n\n const rulesSource = getRulesSourceByName(identifier.ruleSourceName);\n\n if (loading) {\n return (\n <RuleViewerLayout title={pageTitle}>\n <LoadingPlaceholder text=\"Loading rule...\" />\n </RuleViewerLayout>\n );\n }\n\n if (error || !rulesSource) {\n return (\n <RuleViewerLayout title={pageTitle}>\n <Alert title={errorTitle}>\n <details className={styles.errorMessage}>\n {error?.message ?? errorMessage}\n <br />\n {!!error?.stack && error.stack}\n </details>\n </Alert>\n </RuleViewerLayout>\n );\n }\n\n if (!rule) {\n return (\n <RuleViewerLayout title={pageTitle}>\n <span>Rule could not be found.</span>\n </RuleViewerLayout>\n );\n }\n\n const annotations = Object.entries(rule.annotations).filter(([_, value]) => !!value.trim());\n const isFederatedRule = isFederatedRuleGroup(rule.group);\n\n return (\n <RuleViewerLayout wrapInContent={false} title={pageTitle}>\n {isFederatedRule && (\n <Alert severity=\"info\" title=\"This rule is part of a federated rule group.\">\n <VerticalGroup>\n Federated rule groups are currently an experimental feature.\n <Button fill=\"text\" icon=\"book\">\n <a href=\"https://grafana.com/docs/metrics-enterprise/latest/tenant-management/tenant-federation/#cross-tenant-alerting-and-recording-rule-federation\">\n Read documentation\n </a>\n </Button>\n </VerticalGroup>\n </Alert>\n )}\n <RuleViewerLayoutContent>\n <div>\n <h4>\n <Icon name=\"bell\" size=\"lg\" /> {rule.name}\n </h4>\n <RuleState rule={rule} isCreating={false} isDeleting={false} />\n <RuleDetailsActionButtons rule={rule} rulesSource={rulesSource} />\n </div>\n <div className={styles.details}>\n <div className={styles.leftSide}>\n {rule.promRule && (\n <DetailsField label=\"Health\" horizontal={true}>\n <RuleHealth rule={rule.promRule} />\n </DetailsField>\n )}\n {!!rule.labels && !!Object.keys(rule.labels).length && (\n <DetailsField label=\"Labels\" horizontal={true}>\n <AlertLabels labels={rule.labels} />\n </DetailsField>\n )}\n <RuleDetailsExpression rulesSource={rulesSource} rule={rule} annotations={annotations} />\n <RuleDetailsAnnotations annotations={annotations} />\n </div>\n <div className={styles.rightSide}>\n <RuleDetailsDataSources rule={rule} rulesSource={rulesSource} />\n {isFederatedRule && <RuleDetailsFederatedSources group={rule.group} />}\n <DetailsField label=\"Namespace / Group\">{`${rule.namespace.name} / ${rule.group.name}`}</DetailsField>\n </div>\n </div>\n <div>\n <RuleDetailsMatchingInstances rule={rule} />\n </div>\n </RuleViewerLayoutContent>\n {!isFederatedRule && data && Object.keys(data).length > 0 && (\n <>\n <div className={styles.queriesTitle}>\n Query results <PanelChromeLoadingIndicator loading={isLoading(data)} onCancel={() => runner.cancel()} />\n </div>\n <RuleViewerLayoutContent padding={0}>\n <div className={styles.queries}>\n {queries.map((query) => {\n return (\n <div key={query.refId} className={styles.query}>\n <RuleViewerVisualization\n query={query}\n data={data && data[query.refId]}\n onChangeQuery={onChangeQuery}\n />\n </div>\n );\n })}\n </div>\n </RuleViewerLayoutContent>\n </>\n )}\n {!isFederatedRule && !allDataSourcesAvailable && (\n <Alert title=\"Query not available\" severity=\"warning\" className={styles.queryWarning}>\n Cannot display the query preview. Some of the data sources used in the queries are not available.\n </Alert>\n )}\n </RuleViewerLayout>\n );\n}\n\nfunction isLoading(data: Record<string, PanelData>): boolean {\n return !!Object.values(data).find((d) => d.state === LoadingState.Loading);\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n errorMessage: css`\n white-space: pre-wrap;\n `,\n queries: css`\n height: 100%;\n width: 100%;\n `,\n queriesTitle: css`\n padding: ${theme.spacing(2, 0.5)};\n font-size: ${theme.typography.h5.fontSize};\n font-weight: ${theme.typography.fontWeightBold};\n font-family: ${theme.typography.h5.fontFamily};\n `,\n query: css`\n border-bottom: 1px solid ${theme.colors.border.medium};\n padding: ${theme.spacing(2)};\n `,\n queryWarning: css`\n margin: ${theme.spacing(4, 0)};\n `,\n details: css`\n display: flex;\n flex-direction: row;\n `,\n leftSide: css`\n flex: 1;\n `,\n rightSide: css`\n padding-left: 90px;\n width: 300px;\n `,\n };\n};\n\nexport default withErrorBoundary(RuleViewer, { style: 'page' });\n","import React, { FC } from 'react';\n\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { AccessControlAction } from 'app/types';\n\ntype Props = {\n actions: AccessControlAction[];\n fallback?: boolean;\n};\n\nexport const Authorize: FC<Props> = ({ actions, children, fallback = true }) => {\n if (actions.some((action) => contextSrv.hasAccess(action, fallback))) {\n return <>{children}</>;\n } else {\n return null;\n }\n};\n","import React, { useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { RadioButtonGroup } from '@grafana/ui';\n\nimport { STAT, TABLE, TIMESERIES } from '../utils/constants';\n\nexport type SupportedPanelPlugins = 'timeseries' | 'table' | 'stat';\n\ntype Props = {\n value: SupportedPanelPlugins;\n onChange: (value: SupportedPanelPlugins) => void;\n size?: 'sm' | 'md';\n};\n\nexport function PanelPluginsButtonGroup(props: Props): JSX.Element | null {\n const { value, onChange, size = 'md' } = props;\n const panels = useMemo(() => getSupportedPanels(), []);\n\n return <RadioButtonGroup options={panels} value={value} onChange={onChange} size={size} />;\n}\n\nfunction getSupportedPanels(): Array<SelectableValue<SupportedPanelPlugins>> {\n return Object.values(config.panels).reduce((panels: Array<SelectableValue<SupportedPanelPlugins>>, panel) => {\n if (isSupportedPanelPlugin(panel.id)) {\n panels.push({\n value: panel.id,\n label: panel.name,\n imgUrl: panel.info.logos.small,\n });\n }\n return panels;\n }, []);\n}\n\nfunction isSupportedPanelPlugin(id: string): id is SupportedPanelPlugins {\n switch (id) {\n case TIMESERIES:\n case TABLE:\n case STAT:\n return true;\n default:\n return false;\n }\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\nimport { PageToolbar, useStyles2 } from '@grafana/ui';\nimport { Page } from 'app/core/components/Page/Page';\n\ntype Props = {\n children: React.ReactNode | React.ReactNode[];\n title: string;\n wrapInContent?: boolean;\n};\n\nexport function RuleViewerLayout(props: Props): JSX.Element | null {\n const { wrapInContent = true, children, title } = props;\n const styles = useStyles2(getPageStyles);\n\n return (\n <Page>\n <PageToolbar title={title} pageIcon=\"bell\" onGoBack={() => locationService.push('/alerting/list')} />\n <div className={styles.content}>{wrapInContent ? <RuleViewerLayoutContent {...props} /> : children}</div>\n </Page>\n );\n}\n\ntype ContentProps = {\n children: React.ReactNode | React.ReactNode[];\n padding?: number;\n};\n\nexport function RuleViewerLayoutContent({ children, padding = 2 }: ContentProps): JSX.Element | null {\n const styles = useStyles2(getContentStyles(padding));\n return <div className={styles.wrapper}>{children}</div>;\n}\n\nconst getPageStyles = (theme: GrafanaTheme2) => {\n return {\n content: css`\n margin: ${theme.spacing(0, 2, 2)};\n max-width: ${theme.breakpoints.values.xxl}px;\n `,\n };\n};\n\nconst getContentStyles = (padding: number) => (theme: GrafanaTheme2) => {\n return {\n wrapper: css`\n background: ${theme.colors.background.primary};\n border: 1px solid ${theme.colors.border.weak};\n border-radius: ${theme.shape.borderRadius()};\n padding: ${theme.spacing(padding)};\n `,\n };\n};\n","import { useMemo } from 'react';\n\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { AlertQuery } from 'app/types/unified-alerting-dto';\n\nexport function useAlertQueriesStatus(queries: AlertQuery[]) {\n const allDataSourcesAvailable = useMemo(\n () => queries.every((query) => Boolean(getDataSourceSrv().getInstanceSettings(query.datasourceUid))),\n [queries]\n );\n\n return { allDataSourcesAvailable };\n}\n","import { useMemo } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useAsync } from 'react-use';\n\nimport { CombinedRule, RuleIdentifier, RuleNamespace } from 'app/types/unified-alerting';\nimport { RulerRulesConfigDTO } from 'app/types/unified-alerting-dto';\n\nimport { fetchPromAndRulerRulesAction } from '../state/actions';\nimport { AsyncRequestMapSlice, AsyncRequestState, initialAsyncRequestState } from '../utils/redux';\nimport * as ruleId from '../utils/rule-id';\nimport { isRulerNotSupportedResponse } from '../utils/rules';\n\nimport { useCombinedRuleNamespaces } from './useCombinedRuleNamespaces';\nimport { useUnifiedAlertingSelector } from './useUnifiedAlertingSelector';\n\nexport function useCombinedRule(\n identifier: RuleIdentifier | undefined,\n ruleSourceName: string | undefined\n): AsyncRequestState<CombinedRule> {\n const requestState = useCombinedRulesLoader(ruleSourceName);\n const combinedRules = useCombinedRuleNamespaces(ruleSourceName);\n\n const rule = useMemo(() => {\n if (!identifier || !ruleSourceName || combinedRules.length === 0) {\n return;\n }\n\n for (const namespace of combinedRules) {\n for (const group of namespace.groups) {\n for (const rule of group.rules) {\n const id = ruleId.fromCombinedRule(ruleSourceName, rule);\n\n if (ruleId.equal(id, identifier)) {\n return rule;\n }\n }\n }\n }\n\n return;\n }, [identifier, ruleSourceName, combinedRules]);\n\n return {\n ...requestState,\n result: rule,\n };\n}\n\nexport function useCombinedRulesMatching(\n ruleName: string | undefined,\n ruleSourceName: string | undefined\n): AsyncRequestState<CombinedRule[]> {\n const requestState = useCombinedRulesLoader(ruleSourceName);\n const combinedRules = useCombinedRuleNamespaces(ruleSourceName);\n\n const rules = useMemo(() => {\n if (!ruleName || !ruleSourceName || combinedRules.length === 0) {\n return [];\n }\n\n const rules: CombinedRule[] = [];\n\n for (const namespace of combinedRules) {\n for (const group of namespace.groups) {\n for (const rule of group.rules) {\n if (rule.name === ruleName) {\n rules.push(rule);\n }\n }\n }\n }\n\n return rules;\n }, [ruleName, ruleSourceName, combinedRules]);\n\n return {\n ...requestState,\n result: rules,\n };\n}\n\nfunction useCombinedRulesLoader(rulesSourceName: string | undefined): AsyncRequestState<void> {\n const dispatch = useDispatch();\n const promRuleRequests = useUnifiedAlertingSelector((state) => state.promRules);\n const promRuleRequest = getRequestState(rulesSourceName, promRuleRequests);\n const rulerRuleRequests = useUnifiedAlertingSelector((state) => state.rulerRules);\n const rulerRuleRequest = getRequestState(rulesSourceName, rulerRuleRequests);\n\n const { loading } = useAsync(async () => {\n if (!rulesSourceName) {\n return;\n }\n\n await dispatch(fetchPromAndRulerRulesAction({ rulesSourceName }));\n }, [dispatch, rulesSourceName]);\n\n return {\n loading,\n error: promRuleRequest.error ?? isRulerNotSupportedResponse(rulerRuleRequest) ? undefined : rulerRuleRequest.error,\n dispatched: promRuleRequest.dispatched && rulerRuleRequest.dispatched,\n };\n}\n\nfunction getRequestState(\n ruleSourceName: string | undefined,\n slice: AsyncRequestMapSlice<RulerRulesConfigDTO | RuleNamespace[] | null>\n): AsyncRequestState<RulerRulesConfigDTO | RuleNamespace[] | null> {\n if (!ruleSourceName) {\n return initialAsyncRequestState;\n }\n\n const state = slice[ruleSourceName];\n\n if (!state) {\n return initialAsyncRequestState;\n }\n\n return state;\n}\n","import { RelativeTimeRange } from '@grafana/data';\nimport { AlertQuery } from 'app/types/unified-alerting-dto';\n\nimport { ExpressionQuery, ExpressionQueryType } from '../../../expressions/types';\n\nconst FALL_BACK_TIME_RANGE = { from: 21600, to: 0 };\n\nexport const getTimeRangeForExpression = (query: ExpressionQuery, queries: AlertQuery[]): RelativeTimeRange => {\n const referencedRefIds: string[] | undefined = getReferencedIds(query, queries);\n\n if (!referencedRefIds) {\n return FALL_BACK_TIME_RANGE;\n }\n\n const { from, to } = getTimeRanges(referencedRefIds, queries);\n\n if (!from.length && !to.length) {\n return FALL_BACK_TIME_RANGE;\n }\n\n return {\n from: Math.max(...from),\n to: Math.min(...to),\n };\n};\n\nconst getReferencedIds = (model: ExpressionQuery, queries: AlertQuery[]): string[] | undefined => {\n switch (model.type) {\n case ExpressionQueryType.classic:\n return getReferencedIdsForClassicCondition(model);\n case ExpressionQueryType.math:\n return getReferencedIdsForMath(model, queries);\n case ExpressionQueryType.resample:\n case ExpressionQueryType.reduce:\n return getReferencedIdsForReduce(model);\n }\n};\n\nconst getReferencedIdsForClassicCondition = (model: ExpressionQuery) => {\n return model.conditions?.map((condition) => {\n return condition.query.params[0];\n });\n};\n\nconst getTimeRanges = (referencedRefIds: string[], queries: AlertQuery[]) => {\n let from: number[] = [];\n let to = [FALL_BACK_TIME_RANGE.to];\n for (const referencedRefIdsKey of referencedRefIds) {\n const query = queries.find((query) => query.refId === referencedRefIdsKey);\n\n if (!query || !query.relativeTimeRange) {\n continue;\n }\n from.push(query.relativeTimeRange.from);\n to.push(query.relativeTimeRange.to);\n }\n\n return {\n from,\n to,\n };\n};\n\nconst getReferencedIdsForMath = (model: ExpressionQuery, queries: AlertQuery[]) => {\n return (\n queries\n // filter queries of type query and filter expression on if it includes any refIds\n .filter((q) => q.queryType === 'query' && model.expression?.includes(q.refId))\n .map((q) => {\n return q.refId;\n })\n );\n};\n\nconst getReferencedIdsForReduce = (model: ExpressionQuery) => {\n return model.expression ? [model.expression] : undefined;\n};\n","import { Observable, of, OperatorFunction, ReplaySubject, Unsubscribable } from 'rxjs';\nimport { catchError, map, share } from 'rxjs/operators';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n dataFrameFromJSON,\n DataFrameJSON,\n getDefaultTimeRange,\n LoadingState,\n PanelData,\n rangeUtil,\n TimeRange,\n withLoadingIndicator,\n} from '@grafana/data';\nimport { FetchResponse, getDataSourceSrv, toDataQueryError } from '@grafana/runtime';\nimport { BackendSrv, getBackendSrv } from 'app/core/services/backend_srv';\nimport { isExpressionQuery } from 'app/features/expressions/guards';\nimport { cancelNetworkRequestsOnUnsubscribe } from 'app/features/query/state/processing/canceler';\nimport { setStructureRevision } from 'app/features/query/state/processing/revision';\nimport { preProcessPanelData } from 'app/features/query/state/runRequest';\nimport { AlertQuery } from 'app/types/unified-alerting-dto';\n\nimport { getTimeRangeForExpression } from '../utils/timeRange';\n\nexport interface AlertingQueryResult {\n frames: DataFrameJSON[];\n}\n\nexport interface AlertingQueryResponse {\n results: Record<string, AlertingQueryResult>;\n}\nexport class AlertingQueryRunner {\n private subject: ReplaySubject<Record<string, PanelData>>;\n private subscription?: Unsubscribable;\n private lastResult: Record<string, PanelData>;\n\n constructor(private backendSrv = getBackendSrv(), private dataSourceSrv = getDataSourceSrv()) {\n this.subject = new ReplaySubject(1);\n this.lastResult = {};\n }\n\n get(): Observable<Record<string, PanelData>> {\n return this.subject.asObservable();\n }\n\n async run(queries: AlertQuery[]) {\n if (queries.length === 0) {\n const empty = initialState(queries, LoadingState.Done);\n return this.subject.next(empty);\n }\n\n // do not execute if one more of the queries are not runnable,\n // for example not completely configured\n for (const query of queries) {\n if (!isExpressionQuery(query.model)) {\n const ds = await this.dataSourceSrv.get(query.datasourceUid);\n if (ds.filterQuery && !ds.filterQuery(query.model)) {\n const empty = initialState(queries, LoadingState.Done);\n return this.subject.next(empty);\n }\n }\n }\n\n this.subscription = runRequest(this.backendSrv, queries).subscribe({\n next: (dataPerQuery) => {\n const nextResult = applyChange(dataPerQuery, (refId, data) => {\n const previous = this.lastResult[refId];\n const preProcessed = preProcessPanelData(data, previous);\n return setStructureRevision(preProcessed, previous);\n });\n\n this.lastResult = nextResult;\n this.subject.next(this.lastResult);\n },\n\n error: (error: Error) => {\n this.lastResult = mapErrorToPanelData(this.lastResult, error);\n this.subject.next(this.lastResult);\n },\n });\n }\n\n cancel() {\n if (!this.subscription) {\n return;\n }\n this.subscription.unsubscribe();\n\n let requestIsRunning = false;\n\n const nextResult = applyChange(this.lastResult, (refId, data) => {\n if (data.state === LoadingState.Loading) {\n requestIsRunning = true;\n }\n\n return {\n ...data,\n state: LoadingState.Done,\n };\n });\n\n if (requestIsRunning) {\n this.subject.next(nextResult);\n }\n }\n\n destroy() {\n if (this.subject) {\n this.subject.complete();\n }\n\n this.cancel();\n }\n}\n\nconst runRequest = (backendSrv: BackendSrv, queries: AlertQuery[]): Observable<Record<string, PanelData>> => {\n const initial = initialState(queries, LoadingState.Loading);\n const request = {\n data: { data: queries },\n url: '/api/v1/eval',\n method: 'POST',\n requestId: uuidv4(),\n };\n\n return withLoadingIndicator({\n whileLoading: initial,\n source: backendSrv.fetch<AlertingQueryResponse>(request).pipe(\n mapToPanelData(initial),\n catchError((error) => of(mapErrorToPanelData(initial, error))),\n cancelNetworkRequestsOnUnsubscribe(backendSrv, request.requestId),\n share()\n ),\n });\n};\n\nconst initialState = (queries: AlertQuery[], state: LoadingState): Record<string, PanelData> => {\n return queries.reduce((dataByQuery: Record<string, PanelData>, query) => {\n dataByQuery[query.refId] = {\n state,\n series: [],\n timeRange: getTimeRange(query, queries),\n };\n\n return dataByQuery;\n }, {});\n};\n\nconst getTimeRange = (query: AlertQuery, queries: AlertQuery[]): TimeRange => {\n if (isExpressionQuery(query.model)) {\n const relative = getTimeRangeForExpression(query.model, queries);\n return rangeUtil.relativeToTimeRange(relative);\n }\n\n if (!query.relativeTimeRange) {\n console.warn(`Query with refId: ${query.refId} did not have any relative time range, using default.`);\n return getDefaultTimeRange();\n }\n\n return rangeUtil.relativeToTimeRange(query.relativeTimeRange);\n};\n\nconst mapToPanelData = (\n dataByQuery: Record<string, PanelData>\n): OperatorFunction<FetchResponse<AlertingQueryResponse>, Record<string, PanelData>> => {\n return map((response) => {\n const { data } = response;\n const results: Record<string, PanelData> = {};\n\n for (const [refId, result] of Object.entries(data.results)) {\n results[refId] = {\n timeRange: dataByQuery[refId].timeRange,\n state: LoadingState.Done,\n series: result.frames.map(dataFrameFromJSON),\n };\n }\n\n return results;\n });\n};\n\nconst mapErrorToPanelData = (lastResult: Record<string, PanelData>, error: Error): Record<string, PanelData> => {\n const queryError = toDataQueryError(error);\n\n return applyChange(lastResult, (refId, data) => {\n return {\n ...data,\n state: LoadingState.Error,\n error: queryError,\n };\n });\n};\n\nconst applyChange = (\n initial: Record<string, PanelData>,\n change: (refId: string, data: PanelData) => PanelData\n): Record<string, PanelData> => {\n const nextResult: Record<string, PanelData> = {};\n\n for (const [refId, data] of Object.entries(initial)) {\n nextResult[refId] = change(refId, data);\n }\n\n return nextResult;\n};\n","import { DataQuery } from '@grafana/data';\nimport { isExpressionReference } from '@grafana/runtime/src/utils/DataSourceWithBackend';\n\nimport { ExpressionQuery, ExpressionQueryType } from './types';\n\nexport const isExpressionQuery = (dataQuery?: DataQuery): dataQuery is ExpressionQuery => {\n if (!dataQuery) {\n return false;\n }\n\n if (isExpressionReference(dataQuery.datasource)) {\n return true;\n }\n\n const expression = dataQuery as ExpressionQuery;\n\n if (typeof expression.type !== 'string') {\n return false;\n }\n return Object.values(ExpressionQueryType).includes(expression.type);\n};\n","import { useState } from 'react';\nimport useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect';\nfunction useObservable(observable$, initialValue) {\n var _a = useState(initialValue), value = _a[0], update = _a[1];\n useIsomorphicLayoutEffect(function () {\n var s = observable$.subscribe(update);\n return function () { return s.unsubscribe(); };\n }, [observable$]);\n return value;\n}\nexport default useObservable;\n"],"names":["RuleViewerVisualization","props","theme","useTheme2","styles","useStyles2","getStyles","data","query","onChangeQuery","defaultPanel","isExpressionQuery","model","TABLE","TIMESERIES","panel","setPanel","useState","dsSettings","getDataSourceSrv","getInstanceSettings","datasourceUid","relativeTimeRange","options","setOptions","frameIndex","showHeader","onTimeChange","useCallback","newDateTime","now","dateTime","unix","interval","from","to","setDateTime","relativeTimeRangeTo","subtract","className","content","width","height","style","header","refId","dataSource","name","actions","DateTimePicker","date","onChange","maxDate","Date","PanelPluginsButtonGroup","value","size","Authorize","AccessControlAction","spacing","LinkButton","variant","icon","target","href","createExploreLink","PanelRenderer","gridSize","pluginId","title","onOptionsChange","Alert","CodeEditor","language","showLineNumbers","showMiniMap","JSON","stringify","readOnly","settings","rest","queryParams","datasource","urlUtil","config","left","css","typography","fontWeightMedium","colors","text","link","secondary","errorMessage","RuleDetailsFederatedSources","group","sourceTenants","source_tenants","DetailsField","label","map","tenant","alertRuleToQueries","combinedRule","namespace","rulerRule","rulesSource","isGrafanaRulesSource","isGrafanaRulerRule","grafana_alert","isCloudRulesSource","rule","type","expr","Error","cloudAlertRuleToModel","uid","queryType","errorTitle","pageTitle","RuleViewer","match","id","params","identifier","ruleId","loading","error","result","useCombinedRule","ruleSourceName","runner","useMemo","AlertingQueryRunner","useObservable","get","queries2","queries","setQueries","allDataSourcesAvailable","useAlertQueriesStatus","onRunQueries","length","run","useEffect","destroy","q","RuleViewerLayout","getRulesSourceByName","LoadingPlaceholder","message","stack","annotations","Object","entries","filter","_","trim","isFederatedRule","isFederatedRuleGroup","wrapInContent","severity","VerticalGroup","Button","fill","Icon","RuleState","isCreating","isDeleting","RuleDetailsActionButtons","details","leftSide","promRule","horizontal","RuleHealth","labels","keys","AlertLabels","RuleDetailsExpression","RuleDetailsAnnotations","rightSide","RuleDetailsDataSources","RuleDetailsMatchingInstances","queriesTitle","PanelChromeLoadingIndicator","isLoading","onCancel","cancel","padding","queryWarning","values","find","d","state","LoadingState","h5","fontSize","fontWeightBold","fontFamily","border","medium","withErrorBoundary","children","fallback","some","action","contextSrv","panels","reduce","STAT","isSupportedPanelPlugin","push","imgUrl","info","logos","small","RadioButtonGroup","getPageStyles","PageToolbar","pageIcon","onGoBack","locationService","RuleViewerLayoutContent","getContentStyles","wrapper","breakpoints","xxl","background","primary","weak","shape","borderRadius","every","Boolean","requestState","useCombinedRulesLoader","combinedRules","useCombinedRuleNamespaces","groups","rules","useCombinedRulesMatching","ruleName","rulesSourceName","dispatch","useDispatch","promRuleRequests","useUnifiedAlertingSelector","promRules","promRuleRequest","getRequestState","rulerRuleRequests","rulerRules","rulerRuleRequest","useAsync","async","fetchPromAndRulerRulesAction","isRulerNotSupportedResponse","undefined","dispatched","slice","initialAsyncRequestState","FALL_BACK_TIME_RANGE","getReferencedIds","ExpressionQueryType","getReferencedIdsForClassicCondition","getReferencedIdsForMath","getReferencedIdsForReduce","conditions","condition","getTimeRanges","referencedRefIds","referencedRefIdsKey","expression","includes","constructor","backendSrv","getBackendSrv","dataSourceSrv","this","subject","ReplaySubject","lastResult","asObservable","empty","initialState","next","ds","filterQuery","subscription","runRequest","subscribe","dataPerQuery","nextResult","applyChange","previous","preProcessed","preProcessPanelData","setStructureRevision","mapErrorToPanelData","unsubscribe","requestIsRunning","complete","initial","request","url","method","requestId","uuidv4","withLoadingIndicator","whileLoading","source","fetch","pipe","mapToPanelData","catchError","of","cancelNetworkRequestsOnUnsubscribe","share","dataByQuery","series","timeRange","getTimeRange","relative","Math","max","min","getTimeRangeForExpression","rangeUtil","console","warn","getDefaultTimeRange","response","results","frames","dataFrameFromJSON","queryError","toDataQueryError","change","dataQuery","isExpressionReference","observable$","initialValue","_a","update","s"],"sourceRoot":""}