{"version":3,"file":"4259.388ff5263374111783f9.js","mappings":"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","sources":["webpack://grafana/./.yarn/__virtual__/@grafana-data-virtual-adf1e43f85/1/packages/grafana-data/src/types/config.ts","webpack://grafana/./public/app/features/alerting/unified/api/alertmanagerApi.ts","webpack://grafana/./public/app/features/alerting/unified/components/Provisioning.tsx","webpack://grafana/./public/app/features/alerting/unified/components/alert-groups/MatcherFilter.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/CloneRuleButton.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useManagedAlertStateHistory.ts","webpack://grafana/./public/app/features/alerting/unified/components/rules/StateHistory.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useStateHistoryModal.tsx","webpack://grafana/./public/app/features/alerting/unified/components/PluginBridge.tsx","webpack://grafana/./public/app/features/alerting/unified/components/bridges/DeclareIncidentButton.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetailsActionButtons.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetailsAnnotations.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetailsDataSources.tsx","webpack://grafana/./public/app/features/alerting/unified/components/Expression.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetailsExpression.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/AlertInstanceStateFilter.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetailsMatchingInstances.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleHealth.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleState.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useCombinedRuleNamespaces.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/useFolder.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/useIsRuleEditable.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/usePluginBridge.ts","webpack://grafana/./public/app/features/alerting/unified/types/pluginBridges.ts","webpack://grafana/./public/app/plugins/datasource/loki/syntax.ts"],"sourcesContent":["import { SystemDateFormatSettings } from '../datetime';\nimport { MapLayerOptions } from '../geo/layer';\nimport { GrafanaTheme2 } from '../themes';\n\nimport { DataSourceInstanceSettings } from './datasource';\nimport { FeatureToggles } from './featureToggles.gen';\nimport { PanelPluginMeta } from './panel';\n\nimport { GrafanaTheme, IconName, NavLinkDTO, OrgRole } from '.';\n\n/**\n * Describes the build information that will be available via the Grafana configuration.\n *\n * @public\n */\nexport interface BuildInfo {\n version: string;\n commit: string;\n env: string;\n edition: GrafanaEdition;\n latestVersion: string;\n hasUpdate: boolean;\n hideVersion: boolean;\n}\n\n/**\n * @internal\n */\nexport enum GrafanaEdition {\n OpenSource = 'Open Source',\n Pro = 'Pro',\n Enterprise = 'Enterprise',\n}\n\n/**\n * Describes the license information about the current running instance of Grafana.\n *\n * @public\n */\nexport interface LicenseInfo {\n expiry: number;\n licenseUrl: string;\n stateInfo: string;\n edition: GrafanaEdition;\n enabledFeatures: { [key: string]: boolean };\n trialExpiry?: number;\n}\n\n/**\n * Describes Sentry integration config\n *\n * @public\n */\nexport interface SentryConfig {\n enabled: boolean;\n dsn: string;\n customEndpoint: string;\n sampleRate: number;\n}\n\n/**\n * Describes GrafanaJavascriptAgentConfig integration config\n *\n * @public\n */\nexport interface GrafanaJavascriptAgentConfig {\n enabled: boolean;\n customEndpoint: string;\n errorInstrumentalizationEnabled: boolean;\n consoleInstrumentalizationEnabled: boolean;\n webVitalsInstrumentalizationEnabled: boolean;\n apiKey: string;\n}\n\nexport interface UnifiedAlertingConfig {\n minInterval: string;\n}\n\n/**\n * Describes the plugins that should be preloaded prior to start Grafana.\n *\n * @public\n */\nexport type PreloadPlugin = {\n path: string;\n version: string;\n};\n\n/** Supported OAuth services\n *\n * @public\n */\nexport type OAuth =\n | 'github'\n | 'gitlab'\n | 'google'\n | 'generic_oauth'\n // | 'grafananet' Deprecated. Key always changed to \"grafana_com\"\n | 'grafana_com'\n | 'azuread'\n | 'okta';\n\n/** Map of enabled OAuth services and their respective names\n *\n * @public\n */\nexport type OAuthSettings = Partial>;\n\n/**\n * Information needed for analytics providers\n *\n * @internal\n */\nexport interface AnalyticsSettings {\n identifier: string;\n intercomIdentifier?: string;\n}\n\n/** Current user info included in bootData\n *\n * @internal\n */\nexport interface CurrentUserDTO {\n isSignedIn: boolean;\n id: number;\n externalUserId: string;\n login: string;\n email: string;\n name: string;\n theme: string; // dark | light | system\n orgCount: number;\n orgId: number;\n orgName: string;\n orgRole: OrgRole | '';\n isGrafanaAdmin: boolean;\n gravatarUrl: string;\n timezone: string;\n weekStart: string;\n locale: string;\n language: string;\n permissions?: Record;\n analytics: AnalyticsSettings;\n\n /** @deprecated Use theme instead */\n lightTheme: boolean;\n}\n\n/** Contains essential user and config info\n *\n * @internal\n */\nexport interface BootData {\n user: CurrentUserDTO;\n settings: GrafanaConfig;\n navTree: NavLinkDTO[];\n themePaths: {\n light: string;\n dark: string;\n };\n}\n\n/**\n * Describes all the different Grafana configuration values available for an instance.\n *\n * @internal\n */\nexport interface GrafanaConfig {\n isPublicDashboardView: boolean;\n snapshotEnabled: boolean;\n datasources: { [str: string]: DataSourceInstanceSettings };\n panels: { [key: string]: PanelPluginMeta };\n auth: AuthSettings;\n minRefreshInterval: string;\n appSubUrl: string;\n windowTitlePrefix: string;\n buildInfo: BuildInfo;\n newPanelTitle: string;\n bootData: BootData;\n externalUserMngLinkUrl: string;\n externalUserMngLinkName: string;\n externalUserMngInfo: string;\n allowOrgCreate: boolean;\n disableLoginForm: boolean;\n defaultDatasource: string;\n alertingEnabled: boolean;\n alertingErrorOrTimeout: string;\n alertingNoDataOrNullValues: string;\n alertingMinInterval: number;\n authProxyEnabled: boolean;\n exploreEnabled: boolean;\n queryHistoryEnabled: boolean;\n helpEnabled: boolean;\n profileEnabled: boolean;\n ldapEnabled: boolean;\n sigV4AuthEnabled: boolean;\n azureAuthEnabled: boolean;\n samlEnabled: boolean;\n autoAssignOrg: boolean;\n verifyEmailEnabled: boolean;\n oauth: OAuthSettings;\n rbacEnabled: boolean;\n disableUserSignUp: boolean;\n loginHint: string;\n passwordHint: string;\n loginError?: string;\n viewersCanEdit: boolean;\n editorsCanAdmin: boolean;\n disableSanitizeHtml: boolean;\n liveEnabled: boolean;\n /** @deprecated Use `theme2` instead. */\n theme: GrafanaTheme;\n theme2: GrafanaTheme2;\n pluginsToPreload: PreloadPlugin[];\n featureToggles: FeatureToggles;\n anonymousEnabled: boolean;\n licenseInfo: LicenseInfo;\n http2Enabled: boolean;\n dateFormats?: SystemDateFormatSettings;\n sentry: SentryConfig;\n grafanaJavascriptAgent: GrafanaJavascriptAgentConfig;\n customTheme?: any;\n geomapDefaultBaseLayer?: MapLayerOptions;\n geomapDisableCustomBaseLayer?: boolean;\n unifiedAlertingEnabled: boolean;\n unifiedAlerting: UnifiedAlertingConfig;\n angularSupportEnabled: boolean;\n feedbackLinksEnabled: boolean;\n secretsManagerPluginEnabled: boolean;\n supportBundlesEnabled: boolean;\n googleAnalyticsId: string | undefined;\n googleAnalytics4Id: string | undefined;\n googleAnalytics4SendManualPageViews: boolean;\n rudderstackWriteKey: string | undefined;\n rudderstackDataPlaneUrl: string | undefined;\n rudderstackSdkUrl: string | undefined;\n rudderstackConfigUrl: string | undefined;\n}\n\nexport interface AuthSettings {\n OAuthSkipOrgRoleUpdateSync?: boolean;\n SAMLSkipOrgRoleSync?: boolean;\n LDAPSkipOrgRoleSync?: boolean;\n JWTAuthSkipOrgRoleSync?: boolean;\n GrafanaComSkipOrgRoleSync?: boolean;\n GithubSkipOrgRoleSync?: boolean;\n GitLabSkipOrgRoleSync?: boolean;\n OktaSkipOrgRoleSync?: boolean;\n AzureADSkipOrgRoleSync?: boolean;\n GoogleSkipOrgRoleSync?: boolean;\n DisableSyncLock?: boolean;\n}\n","import {\n AlertmanagerChoice,\n ExternalAlertmanagerConfig,\n ExternalAlertmanagers,\n ExternalAlertmanagersResponse,\n} from '../../../../plugins/datasource/alertmanager/types';\n\nimport { alertingApi } from './alertingApi';\n\nexport interface AlertmanagersChoiceResponse {\n alertmanagersChoice: AlertmanagerChoice;\n numExternalAlertmanagers: number;\n}\n\nexport const alertmanagerApi = alertingApi.injectEndpoints({\n endpoints: (build) => ({\n getAlertmanagerChoiceStatus: build.query({\n query: () => ({ url: '/api/v1/ngalert' }),\n providesTags: ['AlertmanagerChoice'],\n }),\n\n getExternalAlertmanagerConfig: build.query({\n query: () => ({ url: '/api/v1/ngalert/admin_config' }),\n providesTags: ['AlertmanagerChoice'],\n }),\n\n getExternalAlertmanagers: build.query({\n query: () => ({ url: '/api/v1/ngalert/alertmanagers' }),\n transformResponse: (response: ExternalAlertmanagersResponse) => response.data,\n }),\n\n saveExternalAlertmanagersConfig: build.mutation<{ message: string }, ExternalAlertmanagerConfig>({\n query: (config) => ({ url: '/api/v1/ngalert/admin_config', method: 'POST', data: config }),\n invalidatesTags: ['AlertmanagerChoice'],\n }),\n }),\n});\n","import React from 'react';\n\nimport { Alert, Badge } from '@grafana/ui';\n\nexport enum ProvisionedResource {\n ContactPoint = 'contact point',\n Template = 'template',\n MuteTiming = 'mute timing',\n AlertRule = 'alert rule',\n RootNotificationPolicy = 'root notification policy',\n}\n\ninterface ProvisioningAlertProps {\n resource: ProvisionedResource;\n}\n\nexport const ProvisioningAlert = ({ resource }: ProvisioningAlertProps) => {\n return (\n \n This {resource} has been provisioned, that means it was created by config. Please contact your server admin to\n update this {resource}.\n \n );\n};\n\nexport const ProvisioningBadge = () => {\n return ;\n};\n","import { css } from '@emotion/css';\nimport { debounce } from 'lodash';\nimport React, { FormEvent, useEffect, useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Stack } from '@grafana/experimental';\nimport { logInfo } from '@grafana/runtime';\nimport { Label, Tooltip, Input, Icon, useStyles2 } from '@grafana/ui';\n\nimport { LogMessages } from '../../Analytics';\n\ninterface Props {\n className?: string;\n defaultQueryString?: string;\n onFilterChange: (filterString: string) => void;\n}\n\nexport const MatcherFilter = ({ className, onFilterChange, defaultQueryString }: Props) => {\n const styles = useStyles2(getStyles);\n\n const onSearchInputChanged = useMemo(\n () =>\n debounce((e: FormEvent) => {\n logInfo(LogMessages.filterByLabel);\n\n const target = e.target as HTMLInputElement;\n onFilterChange(target.value);\n }, 600),\n [onFilterChange]\n );\n\n useEffect(() => onSearchInputChanged.cancel(), [onSearchInputChanged]);\n\n const searchIcon = ;\n\n return (\n
\n
\n }\n >\n \n \n \n \n \n \n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n icon: css`\n margin-right: ${theme.spacing(0.5)};\n `,\n inputWidth: css`\n width: 340px;\n flex-grow: 0;\n `,\n});\n","import { css } from '@emotion/css';\nimport React, { useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\nimport { ConfirmModal, LinkButton, useStyles2 } from '@grafana/ui';\nimport { RuleIdentifier } from 'app/types/unified-alerting';\n\nimport * as ruleId from '../../utils/rule-id';\nimport { createUrl } from '../../utils/url';\n\ninterface CloneRuleButtonProps {\n ruleIdentifier: RuleIdentifier;\n isProvisioned: boolean;\n text?: string;\n className?: string;\n}\n\nexport const CloneRuleButton = React.forwardRef(\n ({ text, ruleIdentifier, isProvisioned, className }, ref) => {\n // For provisioned rules an additional confirmation step is required\n // Users have to be aware that the cloned rule will NOT be marked as provisioned\n const [provRuleCloneUrl, setProvRuleCloneUrl] = useState(undefined);\n\n const styles = useStyles2(getStyles);\n const cloneUrl = createUrl('/alerting/new', { copyFrom: ruleId.stringifyIdentifier(ruleIdentifier) });\n\n return (\n <>\n setProvRuleCloneUrl(cloneUrl) : undefined}\n ref={ref}\n >\n {text}\n \n\n \n

\n The new rule will NOT be marked as a provisioned rule.\n

\n

\n You will need to set a new alert group for the copied rule because the original one has been provisioned\n and cannot be used for rules created in the UI.\n

\n \n }\n confirmText=\"Copy\"\n onConfirm={() => provRuleCloneUrl && locationService.push(provRuleCloneUrl)}\n onDismiss={() => setProvRuleCloneUrl(undefined)}\n />\n \n );\n }\n);\n\nCloneRuleButton.displayName = 'CloneRuleButton';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n bold: css`\n font-weight: ${theme.typography.fontWeightBold};\n `,\n});\n","import { useEffect } from 'react';\n\nimport { useDispatch } from 'app/types';\nimport { StateHistoryItem } from 'app/types/unified-alerting';\n\nimport { fetchGrafanaAnnotationsAction } from '../state/actions';\nimport { AsyncRequestState } from '../utils/redux';\n\nimport { useUnifiedAlertingSelector } from './useUnifiedAlertingSelector';\n\nexport function useManagedAlertStateHistory(alertId: string) {\n const dispatch = useDispatch();\n const history = useUnifiedAlertingSelector>(\n (state) => state.managedAlertStateHistory\n );\n\n useEffect(() => {\n dispatch(fetchGrafanaAnnotationsAction(alertId));\n }, [dispatch, alertId]);\n\n return history;\n}\n","import { css } from '@emotion/css';\nimport { groupBy } from 'lodash';\nimport React, { FC, FormEvent, useCallback, useState } from 'react';\n\nimport { AlertState, dateTimeFormat, GrafanaTheme2 } from '@grafana/data';\nimport { Stack } from '@grafana/experimental';\nimport { Alert, Field, Icon, Input, Label, LoadingPlaceholder, Tooltip, useStyles2 } from '@grafana/ui';\nimport { StateHistoryItem, StateHistoryItemData } from 'app/types/unified-alerting';\nimport { GrafanaAlertStateWithReason, PromAlertingRuleState } from 'app/types/unified-alerting-dto';\n\nimport { useManagedAlertStateHistory } from '../../hooks/useManagedAlertStateHistory';\nimport { AlertLabel } from '../AlertLabel';\nimport { DynamicTable, DynamicTableColumnProps, DynamicTableItemProps } from '../DynamicTable';\n\nimport { AlertStateTag } from './AlertStateTag';\n\ntype StateHistoryRowItem = {\n id: string;\n state: PromAlertingRuleState | GrafanaAlertStateWithReason | AlertState;\n text?: string;\n data?: StateHistoryItemData;\n timestamp?: number;\n stringifiedLabels: string;\n};\n\ntype StateHistoryMap = Record;\n\ntype StateHistoryRow = DynamicTableItemProps;\n\ninterface RuleStateHistoryProps {\n alertId: string;\n}\n\nconst StateHistory: FC = ({ alertId }) => {\n const [textFilter, setTextFilter] = useState('');\n const handleTextFilter = useCallback((event: FormEvent) => {\n setTextFilter(event.currentTarget.value);\n }, []);\n\n const { loading, error, result = [] } = useManagedAlertStateHistory(alertId);\n\n const styles = useStyles2(getStyles);\n\n if (loading && !error) {\n return ;\n }\n\n if (error && !loading) {\n return {error.message};\n }\n\n const columns: Array> = [\n { id: 'state', label: 'State', size: 'max-content', renderCell: renderStateCell },\n { id: 'value', label: '', size: 'auto', renderCell: renderValueCell },\n { id: 'timestamp', label: 'Time', size: 'max-content', renderCell: renderTimestampCell },\n ];\n\n // group the state history list by unique set of labels\n const tables = Object.entries(groupStateByLabels(result))\n // sort and filter each table\n .sort()\n .filter(([groupKey]) => matchKey(groupKey, textFilter))\n .map(([groupKey, items]) => {\n const tableItems: StateHistoryRow[] = items.map((historyItem) => ({\n id: historyItem.id,\n data: historyItem,\n }));\n\n return (\n
\n
\n {groupKey}\n
\n \n
\n );\n });\n\n return (\n
\n
\n }\n >\n \n \n \n \n }\n >\n } onChange={handleTextFilter} placeholder=\"Search\" />\n \n \n {tables}\n \n );\n};\n\n// group state history by labels\nexport function groupStateByLabels(\n history: Array>\n): StateHistoryMap {\n const items: StateHistoryRowItem[] = history.map((item) => {\n // let's grab the last matching set of `{}` since the alert name could also contain { or }\n const LABELS_REGEX = /{.*?}/g;\n const stringifiedLabels = item.text.match(LABELS_REGEX)?.at(-1) ?? '';\n\n return {\n id: String(item.id),\n state: item.newState,\n // let's omit the labels for each entry since it's just added noise to each state history item\n text: item.text.replace(stringifiedLabels, ''),\n data: item.data,\n timestamp: item.updated,\n stringifiedLabels,\n };\n });\n\n // we have to group our state history items by their unique combination of tags since we want to display a DynamicTable for each alert instance\n // (effectively unique combination of labels)\n return groupBy(items, (item) => item.stringifiedLabels);\n}\n\n// match a string either by exact text match or with regular expression when in the form of \"//\"\nexport function matchKey(groupKey: string, textFilter: string) {\n // if the text filter is empty we show all matches\n if (textFilter === '') {\n return true;\n }\n\n const isRegExp = textFilter.startsWith('/') && textFilter.endsWith('/');\n\n // not a regular expression, use normal text matching\n if (!isRegExp) {\n return groupKey.includes(textFilter);\n }\n\n // regular expression, try parsing and applying\n // when we fail to parse the text as a regular expression, we return no match\n try {\n return new RegExp(textFilter.slice(1, -1)).test(groupKey);\n } catch (err) {\n return false;\n }\n}\n\nfunction renderValueCell(item: StateHistoryRow) {\n const matches = item.data.data?.evalMatches ?? [];\n\n return (\n <>\n {item.data.text}\n \n {matches.map((match) => (\n \n ))}\n \n \n );\n}\n\nfunction renderStateCell(item: StateHistoryRow) {\n return ;\n}\n\nfunction renderTimestampCell(item: StateHistoryRow) {\n return (\n
{item.data.timestamp && {dateTimeFormat(item.data.timestamp)}}
\n );\n}\n\nconst LabelsWrapper = ({ children }: React.PropsWithChildren<{}>) => {\n const { wrapper } = useStyles2(getStyles);\n return
{children}
;\n};\n\nconst TimestampStyle = css`\n display: flex;\n align-items: flex-end;\n flex-direction: column;\n`;\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css`\n & > * {\n margin-right: ${theme.spacing(1)};\n }\n `,\n tableGroupKey: css`\n margin-top: ${theme.spacing(2)};\n margin-bottom: ${theme.spacing(2)};\n `,\n});\n\nexport { StateHistory };\n","import React, { useMemo, useState } from 'react';\n\nimport { Modal } from '@grafana/ui';\n\nimport { StateHistory } from '../components/rules/StateHistory';\n\nfunction useStateHistoryModal(alertId: string) {\n const [showModal, setShowModal] = useState(false);\n\n const StateHistoryModal = useMemo(\n () => (\n setShowModal(false)}\n closeOnBackdropClick={true}\n closeOnEscape={true}\n title=\"State history\"\n >\n \n \n ),\n [alertId, showModal]\n );\n\n return {\n StateHistoryModal,\n showStateHistoryModal: () => setShowModal(true),\n hideStateHistoryModal: () => setShowModal(false),\n };\n}\n\nexport { useStateHistoryModal };\n","import React, { FC, ReactElement } from 'react';\n\nimport { usePluginBridge } from '../hooks/usePluginBridge';\nimport { SupportedPlugin } from '../types/pluginBridges';\n\nexport type PluginID = SupportedPlugin | string;\n\nexport interface PluginBridgeProps {\n plugin: PluginID;\n // shows an optional component when the plugin is not installed\n notInstalledFallback?: ReactElement;\n // shows an optional component when we're checking if the plugin is installed\n loadingComponent?: ReactElement;\n}\n\nexport const PluginBridge: FC = ({ children, plugin, loadingComponent, notInstalledFallback }) => {\n const { loading, installed } = usePluginBridge(plugin);\n\n if (loading) {\n return loadingComponent ?? null;\n }\n\n if (!installed) {\n return notInstalledFallback ?? null;\n }\n\n return <>{children};\n};\n\nexport function createBridgeURL(plugin: PluginID, path?: string, options?: Record) {\n const searchParams = new URLSearchParams(options).toString();\n const pluginPath = `/a/${plugin}${path}`;\n\n return pluginPath + (searchParams ? '?' + searchParams : '');\n}\n","import React, { FC } from 'react';\n\nimport { Button, LinkButton, Tooltip } from '@grafana/ui';\n\nimport { usePluginBridge } from '../../hooks/usePluginBridge';\nimport { SupportedPlugin } from '../../types/pluginBridges';\nimport { createBridgeURL } from '../PluginBridge';\n\ninterface Props {\n title?: string;\n severity?: 'minor' | 'major' | 'critical';\n url?: string;\n}\n\nexport const DeclareIncident: FC = ({ title = '', severity = '', url = '' }) => {\n const bridgeURL = createBridgeURL(SupportedPlugin.Incident, '/incidents/declare', { title, severity, url });\n\n const { loading, installed, settings } = usePluginBridge(SupportedPlugin.Incident);\n\n return (\n <>\n {loading === true && (\n \n )}\n {installed === false && (\n \n \n \n )}\n {settings && (\n \n Declare Incident\n \n )}\n \n );\n};\n","import { css } from '@emotion/css';\nimport React, { FC, Fragment, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { GrafanaTheme2, textUtil, urlUtil } from '@grafana/data';\nimport { GrafanaEdition } from '@grafana/data/src/types/config';\nimport { config } from '@grafana/runtime';\nimport { Button, ClipboardButton, ConfirmModal, HorizontalGroup, LinkButton, useStyles2 } from '@grafana/ui';\nimport { useAppNotification } from 'app/core/copy/appNotification';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { AlertmanagerChoice } from 'app/plugins/datasource/alertmanager/types';\nimport { AccessControlAction, useDispatch } from 'app/types';\nimport { CombinedRule, RulesSource } from 'app/types/unified-alerting';\nimport { PromAlertingRuleState } from 'app/types/unified-alerting-dto';\n\nimport { alertmanagerApi } from '../../api/alertmanagerApi';\nimport { useIsRuleEditable } from '../../hooks/useIsRuleEditable';\nimport { useStateHistoryModal } from '../../hooks/useStateHistoryModal';\nimport { deleteRuleAction } from '../../state/actions';\nimport { getRulesPermissions } from '../../utils/access-control';\nimport { getAlertmanagerByUid } from '../../utils/alertmanager';\nimport { Annotation } from '../../utils/constants';\nimport { getRulesSourceName, isCloudRulesSource, isGrafanaRulesSource } from '../../utils/datasource';\nimport { createExploreLink, makeRuleBasedSilenceLink } from '../../utils/misc';\nimport * as ruleId from '../../utils/rule-id';\nimport { isAlertingRule, isFederatedRuleGroup, isGrafanaRulerRule } from '../../utils/rules';\nimport { DeclareIncident } from '../bridges/DeclareIncidentButton';\n\nimport { CloneRuleButton } from './CloneRuleButton';\n\ninterface Props {\n rule: CombinedRule;\n rulesSource: RulesSource;\n isViewMode: boolean;\n}\n\nexport const RuleDetailsActionButtons: FC = ({ rule, rulesSource, isViewMode }) => {\n const style = useStyles2(getStyles);\n const { namespace, group, rulerRule } = rule;\n const alertId = isGrafanaRulerRule(rule.rulerRule) ? rule.rulerRule.grafana_alert.id ?? '' : '';\n const { StateHistoryModal, showStateHistoryModal } = useStateHistoryModal(alertId);\n const dispatch = useDispatch();\n const location = useLocation();\n const notifyApp = useAppNotification();\n\n const [ruleToDelete, setRuleToDelete] = useState();\n\n const alertmanagerSourceName = isGrafanaRulesSource(rulesSource)\n ? rulesSource\n : getAlertmanagerByUid(rulesSource.jsonData.alertmanagerUid)?.name;\n\n const hasExplorePermission = contextSrv.hasPermission(AccessControlAction.DataSourcesExplore);\n\n const buttons: JSX.Element[] = [];\n const rightButtons: JSX.Element[] = [];\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 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 isFederated = isFederatedRuleGroup(group);\n const rulesSourceName = getRulesSourceName(rulesSource);\n const isProvisioned = isGrafanaRulerRule(rule.rulerRule) && Boolean(rule.rulerRule.grafana_alert.provenance);\n\n const isFiringRule = isAlertingRule(rule.promRule) && rule.promRule.state === PromAlertingRuleState.Firing;\n\n const rulesPermissions = getRulesPermissions(rulesSourceName);\n const hasCreateRulePermission = contextSrv.hasPermission(rulesPermissions.create);\n const { isEditable, isRemovable } = useIsRuleEditable(rulesSourceName, rulerRule);\n const canSilence = useCanSilence(rule);\n\n const returnTo = location.pathname + location.search;\n // explore does not support grafana rule queries atm\n // neither do \"federated rules\"\n if (isCloudRulesSource(rulesSource) && hasExplorePermission && !isFederated) {\n buttons.push(\n \n See graph\n \n );\n }\n if (rule.annotations[Annotation.runbookURL]) {\n buttons.push(\n \n View runbook\n \n );\n }\n if (rule.annotations[Annotation.dashboardUID]) {\n const dashboardUID = rule.annotations[Annotation.dashboardUID];\n if (dashboardUID) {\n buttons.push(\n \n Go to dashboard\n \n );\n const panelId = rule.annotations[Annotation.panelID];\n if (panelId) {\n buttons.push(\n \n Go to panel\n \n );\n }\n }\n }\n\n if (canSilence && alertmanagerSourceName) {\n buttons.push(\n \n Silence\n \n );\n }\n\n if (alertId) {\n buttons.push(\n \n \n {StateHistoryModal}\n \n );\n }\n\n if (isFiringRule && shouldShowDeclareIncidentButton()) {\n buttons.push(\n \n \n \n );\n }\n\n if (isViewMode && rulerRule) {\n const sourceName = getRulesSourceName(rulesSource);\n const identifier = ruleId.fromRulerRule(sourceName, namespace.name, group.name, rulerRule);\n\n if (isEditable && !isFederated) {\n rightButtons.push(\n {\n notifyApp.error('Error while copying URL', copiedText);\n }}\n size=\"sm\"\n getText={buildShareUrl}\n >\n Copy link to rule\n \n );\n\n if (!isProvisioned) {\n const editURL = urlUtil.renderUrl(\n `${config.appSubUrl}/alerting/${encodeURIComponent(ruleId.stringifyIdentifier(identifier))}/edit`,\n {\n returnTo,\n }\n );\n\n rightButtons.push(\n \n Edit\n \n );\n }\n }\n\n if (hasCreateRulePermission && !isFederated) {\n rightButtons.push(\n \n );\n }\n\n if (isRemovable && !isFederated && !isProvisioned) {\n rightButtons.push(\n setRuleToDelete(rule)}\n >\n Delete\n \n );\n }\n }\n\n if (buttons.length || rightButtons.length) {\n return (\n <>\n
\n {buttons.length ? buttons :
}\n {rightButtons.length ? rightButtons :
}\n
\n {!!ruleToDelete && (\n setRuleToDelete(undefined)}\n />\n )}\n \n );\n }\n return null;\n};\n\n/**\n * Since Incident isn't available as an open-source product we shouldn't show it for Open-Source licenced editions of Grafana.\n * We should show it in development mode\n */\nfunction shouldShowDeclareIncidentButton() {\n const buildInfo = config.buildInfo;\n const isOpenSourceEdition = buildInfo.edition === GrafanaEdition.OpenSource;\n const isDevelopment = buildInfo.env === 'development';\n\n return !isOpenSourceEdition || isDevelopment;\n}\n\n/**\n * We don't want to show the silence button if either\n * 1. the user has no permissions to create silences\n * 2. the admin has configured to only send instances to external AMs\n */\nfunction useCanSilence(rule: CombinedRule) {\n const isGrafanaManagedRule = isGrafanaRulerRule(rule.rulerRule);\n\n const { useGetAlertmanagerChoiceStatusQuery } = alertmanagerApi;\n const { currentData: amConfigStatus, isLoading } = useGetAlertmanagerChoiceStatusQuery(undefined, {\n skip: !isGrafanaManagedRule,\n });\n\n if (!isGrafanaManagedRule || isLoading) {\n return false;\n }\n\n const hasPermissions = contextSrv.hasAccess(AccessControlAction.AlertingInstanceCreate, contextSrv.isEditor);\n\n const interactsOnlyWithExternalAMs = amConfigStatus?.alertmanagersChoice === AlertmanagerChoice.External;\n const interactsWithAll = amConfigStatus?.alertmanagersChoice === AlertmanagerChoice.All;\n\n return hasPermissions && (!interactsOnlyWithExternalAMs || interactsWithAll);\n}\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css`\n padding: ${theme.spacing(2)} 0;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n flex-wrap: wrap;\n border-bottom: solid 1px ${theme.colors.border.medium};\n `,\n});\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { useStyles2 } from '@grafana/ui';\n\nimport { AnnotationDetailsField } from '../AnnotationDetailsField';\n\ntype Props = {\n annotations: Array<[string, string]>;\n};\n\nexport function RuleDetailsAnnotations(props: Props): JSX.Element | null {\n const { annotations } = props;\n const styles = useStyles2(getStyles);\n\n if (annotations.length === 0) {\n return null;\n }\n\n return (\n
\n {annotations.map(([key, value]) => (\n \n ))}\n
\n );\n}\n\nconst getStyles = () => ({\n annotations: css`\n margin-top: 46px;\n `,\n});\n","import { css } from '@emotion/css';\nimport React, { useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { useStyles2 } from '@grafana/ui';\nimport { ExpressionDatasourceUID } from 'app/features/expressions/types';\nimport { CombinedRule, RulesSource } from 'app/types/unified-alerting';\n\nimport { isCloudRulesSource } from '../../utils/datasource';\nimport { isGrafanaRulerRule } from '../../utils/rules';\nimport { DetailsField } from '../DetailsField';\n\ntype Props = {\n rule: CombinedRule;\n rulesSource: RulesSource;\n};\n\nexport function RuleDetailsDataSources(props: Props): JSX.Element | null {\n const { rulesSource, rule } = props;\n const styles = useStyles2(getStyles);\n\n const dataSources: Array<{ name: string; icon?: string }> = useMemo(() => {\n if (isCloudRulesSource(rulesSource)) {\n return [{ name: rulesSource.name, icon: rulesSource.meta.info.logos.small }];\n }\n\n if (isGrafanaRulerRule(rule.rulerRule)) {\n const { data } = rule.rulerRule.grafana_alert;\n const unique = data.reduce((dataSources, query) => {\n const ds = getDataSourceSrv().getInstanceSettings(query.datasourceUid);\n\n if (!ds || ds.uid === ExpressionDatasourceUID) {\n return dataSources;\n }\n\n dataSources[ds.name] = { name: ds.name, icon: ds.meta.info.logos.small };\n return dataSources;\n }, {} as Record);\n\n return Object.values(unique);\n }\n\n return [];\n }, [rule, rulesSource]);\n\n if (dataSources.length === 0) {\n return null;\n }\n\n return (\n \n {dataSources.map(({ name, icon }, index) => (\n
\n {icon && (\n <>\n {`${name}{' '}\n \n )}\n {name}\n
\n ))}\n
\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n const size = theme.spacing(2);\n\n return {\n dataSourceIcon: css`\n width: ${size};\n height: ${size};\n `,\n };\n}\n","import { css, cx } from '@emotion/css';\nimport { LanguageMap, languages as prismLanguages } from 'prismjs';\nimport React, { FC, useMemo } from 'react';\nimport { Editor } from 'slate-react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { makeValue, SlatePrism, useStyles2 } from '@grafana/ui';\nimport LogqlSyntax from 'app/plugins/datasource/loki/syntax';\nimport PromqlSyntax from 'app/plugins/datasource/prometheus/promql';\nimport { RulesSource } from 'app/types/unified-alerting';\n\nimport { DataSourceType, isCloudRulesSource } from '../utils/datasource';\n\nimport { Well } from './Well';\n\ninterface Props {\n expression: string;\n rulesSource: RulesSource;\n}\n\nexport const HighlightedQuery: FC<{ language: 'promql' | 'logql'; expr: string }> = ({ language, expr }) => {\n const plugins = useMemo(\n () => [\n SlatePrism(\n {\n onlyIn: (node: any) => node.type === 'code_block',\n getSyntax: () => language,\n },\n { ...(prismLanguages as LanguageMap), [language]: language === 'logql' ? LogqlSyntax : PromqlSyntax }\n ),\n ],\n [language]\n );\n\n const slateValue = useMemo(() => makeValue(expr), [expr]);\n\n //We don't want to set readOnly={true} to the Editor to prevent unwanted charaters in the copied text. See https://github.com/grafana/grafana/pull/57839\n return ;\n};\n\nexport const Expression: FC = ({ expression: query, rulesSource }) => {\n const styles = useStyles2(getStyles);\n\n return (\n \n {isCloudRulesSource(rulesSource) ? (\n \n ) : (\n query\n )}\n \n );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n well: css`\n font-family: ${theme.typography.fontFamilyMonospace};\n `,\n});\n","import { css, cx } from '@emotion/css';\nimport React from 'react';\n\nimport { CombinedRule, RulesSource } from 'app/types/unified-alerting';\n\nimport { isCloudRulesSource } from '../../utils/datasource';\nimport { DetailsField } from '../DetailsField';\nimport { Expression } from '../Expression';\n\ntype Props = {\n rule: CombinedRule;\n rulesSource: RulesSource;\n annotations: Array<[string, string]>;\n};\n\nexport function RuleDetailsExpression(props: Props): JSX.Element | null {\n const { annotations, rulesSource, rule } = props;\n const styles = getStyles();\n\n if (!isCloudRulesSource(rulesSource)) {\n return null;\n }\n\n return (\n \n \n \n );\n}\n\nconst getStyles = () => ({\n exprRow: css`\n margin-bottom: 46px;\n `,\n});\n","import { css } from '@emotion/css';\nimport { capitalize } from 'lodash';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data/src';\nimport { Label, RadioButtonGroup, Tag, useStyles2 } from '@grafana/ui';\nimport { GrafanaAlertState, PromAlertingRuleState } from 'app/types/unified-alerting-dto';\n\nexport type InstanceStateFilter = GrafanaAlertState | PromAlertingRuleState.Pending | PromAlertingRuleState.Firing;\n\ninterface Props {\n className?: string;\n filterType: 'grafana' | 'prometheus';\n stateFilter?: InstanceStateFilter;\n onStateFilterChange: (value?: InstanceStateFilter) => void;\n itemPerStateStats?: Record;\n}\n\nexport const AlertInstanceStateFilter = ({\n className,\n onStateFilterChange,\n stateFilter,\n filterType,\n itemPerStateStats,\n}: Props) => {\n const styles = useStyles2(getStyles);\n\n const getOptionComponent = (state: InstanceStateFilter) => {\n return function InstanceStateCounter() {\n return itemPerStateStats && itemPerStateStats[state] ? (\n \n ) : null;\n };\n };\n\n const grafanaOptions = Object.values(GrafanaAlertState).map((state) => ({\n label: state,\n value: state,\n component: getOptionComponent(state),\n }));\n\n const promOptionValues = [PromAlertingRuleState.Firing, PromAlertingRuleState.Pending] as const;\n const promOptions = promOptionValues.map((state) => ({\n label: capitalize(state),\n value: state,\n component: getOptionComponent(state),\n }));\n\n const stateOptions = filterType === 'grafana' ? grafanaOptions : promOptions;\n\n return (\n
\n \n {\n if (v === stateFilter) {\n onStateFilterChange(undefined);\n }\n }}\n />\n
\n );\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n tag: css`\n font-size: 11px;\n font-weight: normal;\n padding: ${theme.spacing(0.25, 0.5)};\n vertical-align: middle;\n margin-left: ${theme.spacing(0.5)};\n `,\n };\n}\n","import { css, cx } from '@emotion/css';\nimport { countBy } from 'lodash';\nimport React, { useMemo, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { LinkButton, useStyles2 } from '@grafana/ui';\nimport { MatcherFilter } from 'app/features/alerting/unified/components/alert-groups/MatcherFilter';\nimport {\n AlertInstanceStateFilter,\n InstanceStateFilter,\n} from 'app/features/alerting/unified/components/rules/AlertInstanceStateFilter';\nimport { labelsMatchMatchers, parseMatchers } from 'app/features/alerting/unified/utils/alertmanager';\nimport { createViewLink, sortAlerts } from 'app/features/alerting/unified/utils/misc';\nimport { SortOrder } from 'app/plugins/panel/alertlist/types';\nimport { Alert, CombinedRule, PaginationProps } from 'app/types/unified-alerting';\nimport { mapStateWithReasonToBaseState } from 'app/types/unified-alerting-dto';\n\nimport { GRAFANA_RULES_SOURCE_NAME, isGrafanaRulesSource } from '../../utils/datasource';\nimport { isAlertingRule } from '../../utils/rules';\nimport { DetailsField } from '../DetailsField';\n\nimport { AlertInstancesTable } from './AlertInstancesTable';\n\ninterface Props {\n rule: CombinedRule;\n pagination?: PaginationProps;\n itemsDisplayLimit?: number;\n}\n\ninterface ShowMoreStats {\n totalItemsCount: number;\n visibleItemsCount: number;\n}\n\nfunction ShowMoreInstances(props: { ruleViewPageLink: string; stats: ShowMoreStats }) {\n const styles = useStyles2(getStyles);\n const { ruleViewPageLink, stats } = props;\n\n return (\n
\n
\n Showing {stats.visibleItemsCount} out of {stats.totalItemsCount} instances\n
\n {ruleViewPageLink && (\n \n Show all {stats.totalItemsCount} alert instances\n \n )}\n
\n );\n}\n\nexport function RuleDetailsMatchingInstances(props: Props): JSX.Element | null {\n const {\n rule: { promRule, namespace },\n itemsDisplayLimit = Number.POSITIVE_INFINITY,\n pagination,\n } = props;\n\n const [queryString, setQueryString] = useState();\n const [alertState, setAlertState] = useState();\n\n // This key is used to force a rerender on the inputs when the filters are cleared\n const [filterKey] = useState(Math.floor(Math.random() * 100));\n const queryStringKey = `queryString-${filterKey}`;\n\n const styles = useStyles2(getStyles);\n\n const stateFilterType = isGrafanaRulesSource(namespace.rulesSource) ? GRAFANA_RULES_SOURCE_NAME : 'prometheus';\n\n const alerts = useMemo(\n (): Alert[] =>\n isAlertingRule(promRule) && promRule.alerts?.length\n ? filterAlerts(queryString, alertState, sortAlerts(SortOrder.Importance, promRule.alerts))\n : [],\n [promRule, alertState, queryString]\n );\n\n if (!isAlertingRule(promRule)) {\n return null;\n }\n\n const visibleInstances = alerts.slice(0, itemsDisplayLimit);\n\n const countAllByState = countBy(promRule.alerts, (alert) => mapStateWithReasonToBaseState(alert.state));\n const hiddenItemsCount = alerts.length - visibleInstances.length;\n\n const stats: ShowMoreStats = {\n totalItemsCount: alerts.length,\n visibleItemsCount: visibleInstances.length,\n };\n\n const ruleViewPageLink = createViewLink(namespace.rulesSource, props.rule, location.pathname + location.search);\n\n const footerRow = hiddenItemsCount ? (\n \n ) : undefined;\n\n return (\n \n
\n
\n setQueryString(value)}\n />\n \n
\n
\n\n \n
\n );\n}\n\nfunction filterAlerts(\n alertInstanceLabel: string | undefined,\n alertInstanceState: InstanceStateFilter | undefined,\n alerts: Alert[]\n): Alert[] {\n let filteredAlerts = [...alerts];\n if (alertInstanceLabel) {\n const matchers = parseMatchers(alertInstanceLabel || '');\n filteredAlerts = filteredAlerts.filter(({ labels }) => labelsMatchMatchers(labels, matchers));\n }\n if (alertInstanceState) {\n filteredAlerts = filteredAlerts.filter((alert) => {\n return mapStateWithReasonToBaseState(alert.state) === alertInstanceState;\n });\n }\n\n return filteredAlerts;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n flexRow: css`\n display: flex;\n flex-direction: row;\n align-items: flex-end;\n width: 100%;\n flex-wrap: wrap;\n margin-bottom: ${theme.spacing(1)};\n `,\n spaceBetween: css`\n justify-content: space-between;\n `,\n rowChild: css`\n margin-right: ${theme.spacing(1)};\n `,\n footerRow: css`\n display: flex;\n flex-direction: column;\n gap: ${theme.spacing(1)};\n justify-content: space-between;\n align-items: center;\n width: 100%;\n `,\n };\n};\n","import { css } from '@emotion/css';\nimport React, { FC } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Icon, Tooltip, useStyles2 } from '@grafana/ui';\nimport { Rule } from 'app/types/unified-alerting';\n\ninterface Prom {\n rule: Rule;\n}\n\nexport const RuleHealth: FC = ({ rule }) => {\n const style = useStyles2(getStyle);\n\n if (rule.health === 'err' || rule.health === 'error') {\n return (\n \n
\n \n error\n
\n
\n );\n }\n\n return <>{rule.health};\n};\n\nconst getStyle = (theme: GrafanaTheme2) => ({\n warn: css`\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n gap: ${theme.spacing(1)};\n\n color: ${theme.colors.warning.text};\n `,\n});\n","import { css } from '@emotion/css';\nimport React, { FC, useMemo } from 'react';\n\nimport { GrafanaTheme2, intervalToAbbreviatedDurationString } from '@grafana/data';\nimport { HorizontalGroup, Spinner, useStyles2 } from '@grafana/ui';\nimport { CombinedRule } from 'app/types/unified-alerting';\nimport { PromAlertingRuleState } from 'app/types/unified-alerting-dto';\n\nimport { isAlertingRule, isRecordingRule, getFirstActiveAt } from '../../utils/rules';\n\nimport { AlertStateTag } from './AlertStateTag';\n\ninterface Props {\n rule: CombinedRule;\n isDeleting: boolean;\n isCreating: boolean;\n isPaused?: boolean;\n}\n\nexport const RuleState: FC = ({ rule, isDeleting, isCreating, isPaused }) => {\n const style = useStyles2(getStyle);\n const { promRule } = rule;\n\n // return how long the rule has been in its firing state, if any\n const forTime = useMemo(() => {\n if (\n promRule &&\n isAlertingRule(promRule) &&\n promRule.alerts?.length &&\n promRule.state !== PromAlertingRuleState.Inactive\n ) {\n // find earliest alert\n const firstActiveAt = getFirstActiveAt(promRule);\n\n // calculate time elapsed from earliest alert\n if (firstActiveAt) {\n return (\n \n for{' '}\n {intervalToAbbreviatedDurationString(\n {\n start: firstActiveAt,\n end: new Date(),\n },\n false\n )}\n \n );\n }\n }\n return null;\n }, [promRule, style]);\n\n if (isDeleting) {\n return (\n \n \n deleting\n \n );\n } else if (isCreating) {\n return (\n \n {' '}\n \n creating\n \n );\n } else if (promRule && isAlertingRule(promRule)) {\n return (\n \n \n {forTime}\n \n );\n } else if (promRule && isRecordingRule(promRule)) {\n return <>Recording rule;\n }\n return <>n/a;\n};\n\nconst getStyle = (theme: GrafanaTheme2) => ({\n for: css`\n font-size: ${theme.typography.bodySmall.fontSize};\n color: ${theme.colors.text.secondary};\n white-space: nowrap;\n padding-top: 2px;\n `,\n});\n","import { isEqual } from 'lodash';\nimport { useMemo, useRef } from 'react';\n\nimport {\n CombinedRule,\n CombinedRuleGroup,\n CombinedRuleNamespace,\n Rule,\n RuleGroup,\n RuleNamespace,\n RulesSource,\n} from 'app/types/unified-alerting';\nimport { RulerRuleDTO, RulerRuleGroupDTO, RulerRulesConfigDTO } from 'app/types/unified-alerting-dto';\n\nimport {\n getAllRulesSources,\n getRulesSourceByName,\n isCloudRulesSource,\n isGrafanaRulesSource,\n} from '../utils/datasource';\nimport { isAlertingRule, isAlertingRulerRule, isRecordingRulerRule } from '../utils/rules';\n\nimport { useUnifiedAlertingSelector } from './useUnifiedAlertingSelector';\n\ninterface CacheValue {\n promRules?: RuleNamespace[];\n rulerRules?: RulerRulesConfigDTO | null;\n result: CombinedRuleNamespace[];\n}\n\n// this little monster combines prometheus rules and ruler rules to produce a unified data structure\n// can limit to a single rules source\nexport function useCombinedRuleNamespaces(rulesSourceName?: string): CombinedRuleNamespace[] {\n const promRulesResponses = useUnifiedAlertingSelector((state) => state.promRules);\n const rulerRulesResponses = useUnifiedAlertingSelector((state) => state.rulerRules);\n\n // cache results per rules source, so we only recalculate those for which results have actually changed\n const cache = useRef>({});\n\n const rulesSources = useMemo((): RulesSource[] => {\n if (rulesSourceName) {\n const rulesSource = getRulesSourceByName(rulesSourceName);\n if (!rulesSource) {\n throw new Error(`Unknown rules source: ${rulesSourceName}`);\n }\n return [rulesSource];\n }\n return getAllRulesSources();\n }, [rulesSourceName]);\n\n return useMemo(\n () =>\n rulesSources\n .map((rulesSource): CombinedRuleNamespace[] => {\n const rulesSourceName = isCloudRulesSource(rulesSource) ? rulesSource.name : rulesSource;\n const promRules = promRulesResponses[rulesSourceName]?.result;\n const rulerRules = rulerRulesResponses[rulesSourceName]?.result;\n\n const cached = cache.current[rulesSourceName];\n if (cached && cached.promRules === promRules && cached.rulerRules === rulerRules) {\n return cached.result;\n }\n const namespaces: Record = {};\n\n // first get all the ruler rules in\n Object.entries(rulerRules || {}).forEach(([namespaceName, groups]) => {\n const namespace: CombinedRuleNamespace = {\n rulesSource,\n name: namespaceName,\n groups: [],\n };\n namespaces[namespaceName] = namespace;\n addRulerGroupsToCombinedNamespace(namespace, groups);\n });\n\n // then correlate with prometheus rules\n promRules?.forEach(({ name: namespaceName, groups }) => {\n const ns = (namespaces[namespaceName] = namespaces[namespaceName] || {\n rulesSource,\n name: namespaceName,\n groups: [],\n });\n\n addPromGroupsToCombinedNamespace(ns, groups);\n });\n\n const result = Object.values(namespaces);\n\n cache.current[rulesSourceName] = { promRules, rulerRules, result };\n return result;\n })\n .flat(),\n [promRulesResponses, rulerRulesResponses, rulesSources]\n );\n}\n\n// merge all groups in case of grafana managed, essentially treating namespaces (folders) as groups\nexport function flattenGrafanaManagedRules(namespaces: CombinedRuleNamespace[]) {\n return namespaces.map((namespace) => {\n const newNamespace: CombinedRuleNamespace = {\n ...namespace,\n groups: [],\n };\n\n // add default group with ungrouped rules\n newNamespace.groups.push({\n name: 'default',\n rules: sortRulesByName(namespace.groups.flatMap((group) => group.rules)),\n });\n\n return newNamespace;\n });\n}\n\nexport function sortRulesByName(rules: CombinedRule[]) {\n return rules.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction addRulerGroupsToCombinedNamespace(namespace: CombinedRuleNamespace, groups: RulerRuleGroupDTO[] = []): void {\n namespace.groups = groups.map((group) => {\n const combinedGroup: CombinedRuleGroup = {\n name: group.name,\n interval: group.interval,\n source_tenants: group.source_tenants,\n rules: [],\n };\n combinedGroup.rules = group.rules.map((rule) => rulerRuleToCombinedRule(rule, namespace, combinedGroup));\n return combinedGroup;\n });\n}\n\nfunction addPromGroupsToCombinedNamespace(namespace: CombinedRuleNamespace, groups: RuleGroup[]): void {\n const existingGroupsByName = new Map();\n namespace.groups.forEach((group) => existingGroupsByName.set(group.name, group));\n\n groups.forEach((group) => {\n let combinedGroup = existingGroupsByName.get(group.name);\n if (!combinedGroup) {\n combinedGroup = {\n name: group.name,\n rules: [],\n };\n namespace.groups.push(combinedGroup);\n existingGroupsByName.set(group.name, combinedGroup);\n }\n\n const combinedRulesByName = new Map();\n combinedGroup!.rules.forEach((r) => {\n // Prometheus rules do not have to be unique by name\n const existingRule = combinedRulesByName.get(r.name);\n existingRule ? existingRule.push(r) : combinedRulesByName.set(r.name, [r]);\n });\n\n (group.rules ?? []).forEach((rule) => {\n const existingRule = getExistingRuleInGroup(rule, combinedRulesByName, namespace.rulesSource);\n if (existingRule) {\n existingRule.promRule = rule;\n } else {\n combinedGroup!.rules.push(promRuleToCombinedRule(rule, namespace, combinedGroup!));\n }\n });\n });\n}\n\nfunction promRuleToCombinedRule(rule: Rule, namespace: CombinedRuleNamespace, group: CombinedRuleGroup): CombinedRule {\n return {\n name: rule.name,\n query: rule.query,\n labels: rule.labels || {},\n annotations: isAlertingRule(rule) ? rule.annotations || {} : {},\n promRule: rule,\n namespace: namespace,\n group,\n };\n}\n\nfunction rulerRuleToCombinedRule(\n rule: RulerRuleDTO,\n namespace: CombinedRuleNamespace,\n group: CombinedRuleGroup\n): CombinedRule {\n return isAlertingRulerRule(rule)\n ? {\n name: rule.alert,\n query: rule.expr,\n labels: rule.labels || {},\n annotations: rule.annotations || {},\n rulerRule: rule,\n namespace,\n group,\n }\n : isRecordingRulerRule(rule)\n ? {\n name: rule.record,\n query: rule.expr,\n labels: rule.labels || {},\n annotations: {},\n rulerRule: rule,\n namespace,\n group,\n }\n : {\n name: rule.grafana_alert.title,\n query: '',\n labels: rule.labels || {},\n annotations: rule.annotations || {},\n rulerRule: rule,\n namespace,\n group,\n };\n}\n\n// find existing rule in group that matches the given prom rule\nfunction getExistingRuleInGroup(\n rule: Rule,\n existingCombinedRulesMap: Map,\n rulesSource: RulesSource\n): CombinedRule | undefined {\n // Using Map of name-based rules is important performance optimization for the code below\n // Otherwise we would perform find method multiple times on (possibly) thousands of rules\n\n const nameMatchingRules = existingCombinedRulesMap.get(rule.name);\n if (!nameMatchingRules) {\n return undefined;\n }\n\n if (isGrafanaRulesSource(rulesSource)) {\n // assume grafana groups have only the one rule. check name anyway because paranoid\n return nameMatchingRules[0];\n }\n\n // try finding a rule that matches name, labels, annotations and query\n const strictlyMatchingRule = nameMatchingRules.find(\n (combinedRule) => !combinedRule.promRule && isCombinedRuleEqualToPromRule(combinedRule, rule, true)\n );\n if (strictlyMatchingRule) {\n return strictlyMatchingRule;\n }\n\n // if that fails, try finding a rule that only matches name, labels and annotations.\n // loki & prom can sometimes modify the query so it doesnt match, eg `2 > 1` becomes `1`\n const looselyMatchingRule = nameMatchingRules.find(\n (combinedRule) => !combinedRule.promRule && isCombinedRuleEqualToPromRule(combinedRule, rule, false)\n );\n if (looselyMatchingRule) {\n return looselyMatchingRule;\n }\n\n return undefined;\n}\n\nfunction isCombinedRuleEqualToPromRule(combinedRule: CombinedRule, rule: Rule, checkQuery = true): boolean {\n if (combinedRule.name === rule.name) {\n return isEqual(\n [checkQuery ? hashQuery(combinedRule.query) : '', combinedRule.labels, combinedRule.annotations],\n [checkQuery ? hashQuery(rule.query) : '', rule.labels || {}, isAlertingRule(rule) ? rule.annotations || {} : {}]\n );\n }\n return false;\n}\n\n// there can be slight differences in how prom & ruler render a query, this will hash them accounting for the differences\nfunction hashQuery(query: string) {\n // one of them might be wrapped in parens\n if (query.length > 1 && query[0] === '(' && query[query.length - 1] === ')') {\n query = query.slice(1, -1);\n }\n // whitespace could be added or removed\n query = query.replace(/\\s|\\n/g, '');\n // labels matchers can be reordered, so sort the enitre string, esentially comparing just the character counts\n return query.split('').sort().join('');\n}\n","import { useEffect } from 'react';\n\nimport { FolderDTO, useDispatch } from 'app/types';\n\nimport { fetchFolderIfNotFetchedAction } from '../state/actions';\nimport { initialAsyncRequestState } from '../utils/redux';\n\nimport { useUnifiedAlertingSelector } from './useUnifiedAlertingSelector';\n\ninterface ReturnBag {\n folder?: FolderDTO;\n loading: boolean;\n}\n\nexport function useFolder(uid?: string): ReturnBag {\n const dispatch = useDispatch();\n const folderRequests = useUnifiedAlertingSelector((state) => state.folders);\n useEffect(() => {\n if (uid) {\n dispatch(fetchFolderIfNotFetchedAction(uid));\n }\n }, [dispatch, uid]);\n\n if (uid) {\n const request = folderRequests[uid] || initialAsyncRequestState;\n return {\n folder: request.result,\n loading: request.loading,\n };\n }\n return {\n loading: false,\n };\n}\n","import { contextSrv } from 'app/core/services/context_srv';\nimport { RulerRuleDTO } from 'app/types/unified-alerting-dto';\n\nimport { getRulesPermissions } from '../utils/access-control';\nimport { isGrafanaRulerRule } from '../utils/rules';\n\nimport { useFolder } from './useFolder';\nimport { useUnifiedAlertingSelector } from './useUnifiedAlertingSelector';\n\ninterface ResultBag {\n isEditable?: boolean;\n isRemovable?: boolean;\n loading: boolean;\n}\n\nexport function useIsRuleEditable(rulesSourceName: string, rule?: RulerRuleDTO): ResultBag {\n const dataSources = useUnifiedAlertingSelector((state) => state.dataSources);\n const folderUID = rule && isGrafanaRulerRule(rule) ? rule.grafana_alert.namespace_uid : undefined;\n\n const rulePermission = getRulesPermissions(rulesSourceName);\n const { folder, loading } = useFolder(folderUID);\n\n if (!rule) {\n return { isEditable: false, isRemovable: false, loading: false };\n }\n\n // Grafana rules can be edited if user can edit the folder they're in\n // When RBAC is disabled access to a folder is the only requirement for managing rules\n // When RBAC is enabled the appropriate alerting permissions need to be met\n if (isGrafanaRulerRule(rule)) {\n if (!folderUID) {\n throw new Error(\n `Rule ${rule.grafana_alert.title} does not have a folder uid, cannot determine if it is editable.`\n );\n }\n\n if (!folder) {\n // Loading or invalid folder UID\n return {\n isEditable: false,\n isRemovable: false,\n loading,\n };\n }\n const rbacDisabledFallback = folder.canSave;\n\n const canEditGrafanaRules = contextSrv.hasAccessInMetadata(rulePermission.update, folder, rbacDisabledFallback);\n const canRemoveGrafanaRules = contextSrv.hasAccessInMetadata(rulePermission.delete, folder, rbacDisabledFallback);\n\n return {\n isEditable: canEditGrafanaRules,\n isRemovable: canRemoveGrafanaRules,\n loading,\n };\n }\n\n // prom rules are only editable by users with Editor role and only if rules source supports editing\n const isRulerAvailable = Boolean(dataSources[rulesSourceName]?.result?.rulerConfig);\n const canEditCloudRules = contextSrv.hasAccess(rulePermission.update, contextSrv.isEditor);\n const canRemoveCloudRules = contextSrv.hasAccess(rulePermission.delete, contextSrv.isEditor);\n\n return {\n isEditable: canEditCloudRules && isRulerAvailable,\n isRemovable: canRemoveCloudRules && isRulerAvailable,\n loading: dataSources[rulesSourceName]?.loading,\n };\n}\n","import { useAsync } from 'react-use';\n\nimport { PluginMeta } from '@grafana/data';\nimport { getPluginSettings } from 'app/features/plugins/pluginSettings';\n\nimport { PluginID } from '../components/PluginBridge';\ninterface PluginBridgeHookResponse {\n loading: boolean;\n installed?: boolean;\n error?: Error;\n settings?: PluginMeta<{}>;\n}\n\nexport function usePluginBridge(plugin: PluginID): PluginBridgeHookResponse {\n const { loading, error, value } = useAsync(() => getPluginSettings(plugin, { showErrorAlert: false }));\n\n const installed = value && !error && !loading;\n const enabled = value?.enabled;\n const isLoading = loading && !value;\n\n if (isLoading) {\n return { loading: true };\n }\n\n if (!installed || !enabled) {\n return { loading: false, installed: false };\n }\n\n return { loading, installed: true, settings: value };\n}\n","export enum SupportedPlugin {\n Incident = 'grafana-incident-app',\n OnCall = 'grafana-oncall-app',\n MachineLearning = 'grafana-ml-app',\n}\n","import { Grammar } from 'prismjs';\n\nimport { CompletionItem } from '@grafana/ui';\n\nexport const AGGREGATION_OPERATORS: CompletionItem[] = [\n {\n label: 'avg',\n insertText: 'avg',\n documentation: 'Calculate the average over dimensions',\n },\n {\n label: 'bottomk',\n insertText: 'bottomk',\n documentation: 'Smallest k elements by sample value',\n },\n {\n label: 'count',\n insertText: 'count',\n documentation: 'Count number of elements in the vector',\n },\n {\n label: 'max',\n insertText: 'max',\n documentation: 'Select maximum over dimensions',\n },\n {\n label: 'min',\n insertText: 'min',\n documentation: 'Select minimum over dimensions',\n },\n {\n label: 'stddev',\n insertText: 'stddev',\n documentation: 'Calculate population standard deviation over dimensions',\n },\n {\n label: 'stdvar',\n insertText: 'stdvar',\n documentation: 'Calculate population standard variance over dimensions',\n },\n {\n label: 'sum',\n insertText: 'sum',\n documentation: 'Calculate sum over dimensions',\n },\n {\n label: 'topk',\n insertText: 'topk',\n documentation: 'Largest k elements by sample value',\n },\n];\n\nexport const PIPE_PARSERS: CompletionItem[] = [\n {\n label: 'json',\n insertText: 'json',\n documentation: 'Extracting labels from the log line using json parser.',\n },\n {\n label: 'regexp',\n insertText: 'regexp \"\"',\n documentation: 'Extracting labels from the log line using regexp parser.',\n move: -1,\n },\n {\n label: 'logfmt',\n insertText: 'logfmt',\n documentation: 'Extracting labels from the log line using logfmt parser.',\n },\n {\n label: 'pattern',\n insertText: 'pattern',\n documentation: 'Extracting labels from the log line using pattern parser. Only available in Loki 2.3+.',\n },\n {\n label: 'unpack',\n insertText: 'unpack',\n detail: 'unpack identifier',\n documentation:\n 'Parses a JSON log line, unpacking all embedded labels in the pack stage. A special property \"_entry\" will also be used to replace the original log line. Only available in Loki 2.2+.',\n },\n];\n\nexport const PIPE_OPERATORS: CompletionItem[] = [\n {\n label: 'unwrap',\n insertText: 'unwrap',\n detail: 'unwrap identifier',\n documentation: 'Take labels and use the values as sample data for metric aggregations.',\n },\n {\n label: 'label_format',\n insertText: 'label_format',\n documentation: 'Use to rename, modify or add labels. For example, | label_format foo=bar .',\n },\n {\n label: 'line_format',\n insertText: 'line_format',\n documentation: 'Rewrites log line content. For example, | line_format \"{{.query}} {{.duration}}\" .',\n },\n];\n\nexport const RANGE_VEC_FUNCTIONS = [\n {\n insertText: 'avg_over_time',\n label: 'avg_over_time',\n detail: 'avg_over_time(range-vector)',\n documentation: 'The average of all values in the specified interval.',\n },\n {\n insertText: 'bytes_over_time',\n label: 'bytes_over_time',\n detail: 'bytes_over_time(range-vector)',\n documentation: 'Counts the amount of bytes used by each log stream for a given range',\n },\n {\n insertText: 'bytes_rate',\n label: 'bytes_rate',\n detail: 'bytes_rate(range-vector)',\n documentation: 'Calculates the number of bytes per second for each stream.',\n },\n {\n insertText: 'first_over_time',\n label: 'first_over_time',\n detail: 'first_over_time(range-vector)',\n documentation: 'The first of all values in the specified interval. Only available in Loki 2.3+.',\n },\n {\n insertText: 'last_over_time',\n label: 'last_over_time',\n detail: 'last_over_time(range-vector)',\n documentation: 'The last of all values in the specified interval. Only available in Loki 2.3+.',\n },\n {\n insertText: 'sum_over_time',\n label: 'sum_over_time',\n detail: 'sum_over_time(range-vector)',\n documentation: 'The sum of all values in the specified interval.',\n },\n {\n insertText: 'count_over_time',\n label: 'count_over_time',\n detail: 'count_over_time(range-vector)',\n documentation: 'The count of all values in the specified interval.',\n },\n {\n insertText: 'max_over_time',\n label: 'max_over_time',\n detail: 'max_over_time(range-vector)',\n documentation: 'The maximum of all values in the specified interval.',\n },\n {\n insertText: 'min_over_time',\n label: 'min_over_time',\n detail: 'min_over_time(range-vector)',\n documentation: 'The minimum of all values in the specified interval.',\n },\n {\n insertText: 'quantile_over_time',\n label: 'quantile_over_time',\n detail: 'quantile_over_time(scalar, range-vector)',\n documentation: 'The φ-quantile (0 ≤ φ ≤ 1) of the values in the specified interval.',\n },\n {\n insertText: 'rate',\n label: 'rate',\n detail: 'rate(v range-vector)',\n documentation: 'Calculates the number of entries per second.',\n },\n {\n insertText: 'stddev_over_time',\n label: 'stddev_over_time',\n detail: 'stddev_over_time(range-vector)',\n documentation: 'The population standard deviation of the values in the specified interval.',\n },\n {\n insertText: 'stdvar_over_time',\n label: 'stdvar_over_time',\n detail: 'stdvar_over_time(range-vector)',\n documentation: 'The population standard variance of the values in the specified interval.',\n },\n];\n\nexport const FUNCTIONS = [...AGGREGATION_OPERATORS, ...RANGE_VEC_FUNCTIONS];\nexport const LOKI_KEYWORDS = [...FUNCTIONS, ...PIPE_OPERATORS, ...PIPE_PARSERS].map((keyword) => keyword.label);\n\nexport const lokiGrammar: Grammar = {\n comment: {\n pattern: /#.*/,\n },\n 'context-aggregation': {\n pattern: /((without|by)\\s*)\\([^)]*\\)/, // by ()\n lookbehind: true,\n inside: {\n 'label-key': {\n pattern: /[^(),\\s][^,)]*[^),\\s]*/,\n alias: 'attr-name',\n },\n punctuation: /[()]/,\n },\n },\n 'context-labels': {\n pattern: /\\{[^}]*(?=}?)/,\n greedy: true,\n inside: {\n comment: {\n pattern: /#.*/,\n },\n 'label-key': {\n pattern: /[a-zA-Z_]\\w*(?=\\s*(=|!=|=~|!~))/,\n alias: 'attr-name',\n greedy: true,\n },\n 'label-value': {\n pattern: /\"(?:\\\\.|[^\\\\\"])*\"/,\n greedy: true,\n alias: 'attr-value',\n },\n punctuation: /[{]/,\n },\n },\n 'context-pipe': {\n pattern: /\\s\\|[^=~]\\s?\\w*/i,\n inside: {\n 'pipe-operator': {\n pattern: /\\|/i,\n alias: 'operator',\n },\n 'pipe-operations': {\n pattern: new RegExp(`${[...PIPE_PARSERS, ...PIPE_OPERATORS].map((f) => f.label).join('|')}`, 'i'),\n alias: 'keyword',\n },\n },\n },\n function: new RegExp(`\\\\b(?:${FUNCTIONS.map((f) => f.label).join('|')})(?=\\\\s*\\\\()`, 'i'),\n 'context-range': [\n {\n pattern: /\\[[^\\]]*(?=\\])/, // [1m]\n inside: {\n 'range-duration': {\n pattern: /\\b\\d+[smhdwy]\\b/i,\n alias: 'number',\n },\n },\n },\n {\n pattern: /(offset\\s+)\\w+/, // offset 1m\n lookbehind: true,\n inside: {\n 'range-duration': {\n pattern: /\\b\\d+[smhdwy]\\b/i,\n alias: 'number',\n },\n },\n },\n ],\n quote: {\n pattern: /\"(?:\\\\.|[^\\\\\"])*\"/,\n alias: 'string',\n greedy: true,\n },\n backticks: {\n pattern: /`(?:\\\\.|[^\\\\`])*`/,\n alias: 'string',\n greedy: true,\n },\n number: /\\b-?\\d+((\\.\\d*)?([eE][+-]?\\d+)?)?\\b/,\n operator: /\\s?(\\|[=~]?|!=?|<(?:=>?|<|>)?|>[>=]?)\\s?/i,\n punctuation: /[{}(),.]/,\n};\n\nexport default lokiGrammar;\n"],"names":["GrafanaEdition","alertmanagerApi","build","response","config","ProvisionedResource","ProvisioningAlert","resource","ProvisioningBadge","MatcherFilter","className","onFilterChange","defaultQueryString","styles","getStyles","onSearchInputChanged","e","target","searchIcon","theme","CloneRuleButton","text","ruleIdentifier","isProvisioned","ref","provRuleCloneUrl","setProvRuleCloneUrl","cloneUrl","useManagedAlertStateHistory","alertId","dispatch","history","useUnifiedAlertingSelector","state","StateHistory","textFilter","setTextFilter","handleTextFilter","event","loading","error","result","LoadingPlaceholder","Alert","columns","renderStateCell","renderValueCell","renderTimestampCell","tables","groupStateByLabels","groupKey","matchKey","items","tableItems","historyItem","DynamicTable","Field","Label","Tooltip","Icon","Input","item","LABELS_REGEX","stringifiedLabels","matches","LabelsWrapper","match","AlertLabel","AlertStateTag","TimestampStyle","children","wrapper","useStateHistoryModal","showModal","setShowModal","Modal","PluginBridge","plugin","loadingComponent","notInstalledFallback","installed","createBridgeURL","path","options","searchParams","DeclareIncident","title","severity","url","bridgeURL","settings","Button","RuleDetailsActionButtons","rule","rulesSource","isViewMode","style","namespace","group","rulerRule","StateHistoryModal","showStateHistoryModal","location","notifyApp","ruleToDelete","setRuleToDelete","alertmanagerSourceName","hasExplorePermission","buttons","rightButtons","deleteRule","identifier","buildShareUrl","appUrl","appSubUrl","baseUrl","ruleUrl","isFederated","rulesSourceName","isFiringRule","rulesPermissions","hasCreateRulePermission","isEditable","isRemovable","useIsRuleEditable","canSilence","useCanSilence","returnTo","dashboardUID","panelId","shouldShowDeclareIncidentButton","sourceName","ClipboardButton","copiedText","editURL","ConfirmModal","buildInfo","isOpenSourceEdition","isDevelopment","isGrafanaManagedRule","useGetAlertmanagerChoiceStatusQuery","amConfigStatus","isLoading","hasPermissions","interactsOnlyWithExternalAMs","interactsWithAll","RuleDetailsAnnotations","props","annotations","key","value","RuleDetailsDataSources","dataSources","data","unique","query","ds","name","icon","index","size","HighlightedQuery","language","expr","plugins","node","prism","slateValue","Expression","Well","RuleDetailsExpression","DetailsField","AlertInstanceStateFilter","onStateFilterChange","stateFilter","filterType","itemPerStateStats","getOptionComponent","Tag","grafanaOptions","promOptions","stateOptions","RadioButtonGroup","v","ShowMoreInstances","ruleViewPageLink","stats","RuleDetailsMatchingInstances","promRule","itemsDisplayLimit","pagination","queryString","setQueryString","alertState","setAlertState","filterKey","queryStringKey","stateFilterType","alerts","filterAlerts","visibleInstances","countAllByState","alert","hiddenItemsCount","footerRow","AlertInstancesTable","alertInstanceLabel","alertInstanceState","filteredAlerts","matchers","labels","RuleHealth","getStyle","RuleState","isDeleting","isCreating","isPaused","forTime","firstActiveAt","useCombinedRuleNamespaces","promRulesResponses","rulerRulesResponses","cache","rulesSources","promRules","rulerRules","cached","namespaces","namespaceName","groups","addRulerGroupsToCombinedNamespace","ns","addPromGroupsToCombinedNamespace","flattenGrafanaManagedRules","newNamespace","sortRulesByName","rules","a","b","combinedGroup","rulerRuleToCombinedRule","existingGroupsByName","combinedRulesByName","r","existingRule","getExistingRuleInGroup","promRuleToCombinedRule","existingCombinedRulesMap","nameMatchingRules","strictlyMatchingRule","combinedRule","isCombinedRuleEqualToPromRule","looselyMatchingRule","checkQuery","hashQuery","useFolder","uid","folderRequests","request","folderUID","rulePermission","folder","rbacDisabledFallback","canEditGrafanaRules","canRemoveGrafanaRules","isRulerAvailable","canEditCloudRules","canRemoveCloudRules","usePluginBridge","enabled","SupportedPlugin","AGGREGATION_OPERATORS","PIPE_PARSERS","PIPE_OPERATORS","RANGE_VEC_FUNCTIONS","FUNCTIONS","LOKI_KEYWORDS","keyword","lokiGrammar","f"],"sourceRoot":""}