View File Name : AlertingAdmin.e62f9c73a69abe6a1ac0.js.map
\n }\n callToActionElement={
Go to data sources}\n className={styles.externalDsCTA}\n />\n )}\n {alertmanagers.length > 0 && (\n
\n {alertmanagers.map((am) => (\n \n ))}\n
\n )}\n >\n );\n}\n\ninterface ExternalAMdataSourceCardProps {\n alertmanager: ExternalAlertmanagerDataSourceWithStatus;\n inactive: boolean;\n}\n\nexport function ExternalAMdataSourceCard({ alertmanager, inactive }: ExternalAMdataSourceCardProps) {\n const styles = useStyles2(getStyles);\n\n const { dataSourceSettings, status } = alertmanager;\n\n return (\n
\n \n {dataSourceSettings.name}{' '}\n {status === 'inconclusive' && (\n \n \n \n )}\n \n \n
\n \n \n {inactive ? (\n \n ) : (\n \n )}\n \n {dataSourceSettings.url}\n \n \n Go to datasource\n \n \n \n );\n}\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n muted: css`\n font-size: ${theme.typography.bodySmall.fontSize};\n line-height: ${theme.typography.bodySmall.lineHeight};\n color: ${theme.colors.text.secondary};\n `,\n externalHeading: css`\n justify-content: flex-start;\n `,\n externalWarningIcon: css`\n margin: ${theme.spacing(0, 1)};\n fill: ${theme.colors.warning.main};\n `,\n externalDs: css`\n display: grid;\n gap: ${theme.spacing(1)};\n padding: ${theme.spacing(2, 0)};\n `,\n externalDsCTA: css`\n margin: ${theme.spacing(2, 0)};\n `,\n});\n","import { css } from '@emotion/css';\nimport React, { useEffect } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { Alert, Field, RadioButtonGroup, useStyles2 } from '@grafana/ui';\nimport { loadDataSources } from 'app/features/datasources/state/actions';\nimport { AlertmanagerChoice } from 'app/plugins/datasource/alertmanager/types';\nimport { useDispatch } from 'app/types';\n\nimport { alertmanagerApi } from '../../api/alertmanagerApi';\nimport { useExternalDataSourceAlertmanagers } from '../../hooks/useExternalAmSelector';\n\nimport { ExternalAlertmanagerDataSources } from './ExternalAlertmanagerDataSources';\n\nconst alertmanagerChoices: Array
> = [\n { value: AlertmanagerChoice.Internal, label: 'Only Internal' },\n { value: AlertmanagerChoice.External, label: 'Only External' },\n { value: AlertmanagerChoice.All, label: 'Both internal and external' },\n];\n\nexport const ExternalAlertmanagers = () => {\n const styles = useStyles2(getStyles);\n const dispatch = useDispatch();\n\n const externalDsAlertManagers = useExternalDataSourceAlertmanagers();\n const gmaHandlingAlertmanagers = externalDsAlertManagers.filter(\n (settings) => settings.dataSourceSettings.jsonData.handleGrafanaManagedAlerts === true\n );\n\n const {\n useSaveExternalAlertmanagersConfigMutation,\n useGetExternalAlertmanagerConfigQuery,\n useGetExternalAlertmanagersQuery,\n } = alertmanagerApi;\n\n const [saveExternalAlertManagers] = useSaveExternalAlertmanagersConfigMutation();\n const { currentData: externalAlertmanagerConfig } = useGetExternalAlertmanagerConfigQuery();\n\n // Just to refresh the status periodically\n useGetExternalAlertmanagersQuery(undefined, { pollingInterval: 5000 });\n\n const alertmanagersChoice = externalAlertmanagerConfig?.alertmanagersChoice;\n\n useEffect(() => {\n dispatch(loadDataSources());\n }, [dispatch]);\n\n const onChangeAlertmanagerChoice = (alertmanagersChoice: AlertmanagerChoice) => {\n saveExternalAlertManagers({ alertmanagersChoice });\n };\n\n return (\n \n
External Alertmanagers
\n
\n The way you configure external Alertmanagers has changed.\n
\n You can now use configured Alertmanager data sources as receivers of your Grafana-managed alerts.\n
\n For more information, refer to our documentation.\n \n\n
\n \n onChangeAlertmanagerChoice(value!)}\n />\n \n
\n\n
\n
\n );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n url: css`\n margin-right: ${theme.spacing(1)};\n `,\n actions: css`\n margin-top: ${theme.spacing(2)};\n display: flex;\n justify-content: flex-end;\n `,\n table: css`\n margin-bottom: ${theme.spacing(2)};\n `,\n amChoice: css`\n margin-bottom: ${theme.spacing(4)};\n `,\n});\n","import React from 'react';\n\nimport { AlertmanagerPageWrapper } from './components/AlertingPageWrapper';\nimport AlertmanagerConfig from './components/admin/AlertmanagerConfig';\nimport { ExternalAlertmanagers } from './components/admin/ExternalAlertmanagers';\nimport { useAlertmanager } from './state/AlertmanagerContext';\nimport { GRAFANA_RULES_SOURCE_NAME } from './utils/datasource';\n\nexport default function Admin(): JSX.Element {\n return (\n \n \n \n );\n}\n\nfunction AdminPageContents() {\n const { selectedAlertmanager } = useAlertmanager();\n const isGrafanaAmSelected = selectedAlertmanager === GRAFANA_RULES_SOURCE_NAME;\n\n return (\n <>\n \n {isGrafanaAmSelected && }\n >\n );\n}\n","import { SerializedError } from '@reduxjs/toolkit';\n\nimport { alertmanagerApi } from '../api/alertmanagerApi';\n\ntype Options = {\n refetchOnFocus: boolean;\n refetchOnReconnect: boolean;\n};\n\n// TODO refactor this so we can just call \"alertmanagerApi.endpoints.getAlertmanagerConfiguration\" everywhere\n// and remove this hook since it adds little value\nexport function useAlertmanagerConfig(amSourceName?: string, options?: Options) {\n const fetchConfig = alertmanagerApi.endpoints.getAlertmanagerConfiguration.useQuery(amSourceName ?? '', {\n ...options,\n skip: !amSourceName,\n });\n\n return {\n ...fetchConfig,\n // TODO refactor to get rid of this type assertion\n error: fetchConfig.error as SerializedError,\n };\n}\n"],"names":["ConfigEditor","defaultValues","readOnly","loading","alertManagerSourceName","showConfirmDeleteAMConfig","onSubmit","onReset","onConfirmReset","onDismiss","handleSubmit","errors","setValue","register","value","e","Field","CodeEditor","Stack","Button","ConfirmModal","AlertmanagerConfigSelector","onChange","selectedAmConfig","useGetValidAlertManagersConfigQuery","useResetAlertManagerConfigToOldVersionMutation","alertmanagerApi","styles","getStyles","validAmConfigs","isFetchingValidAmConfigs","resetAlertManagerConfigToOldVersion","validAmConfigsOptions","configs","config","date","onResetClick","id","Select","values","theme","AlertmanagerConfig","dispatch","setShowConfirmDeleteAMConfig","isDeleting","useUnifiedAlertingSelector","state","isSaving","selectedAlertmanager","setSelectedAmConfig","loadingError","isLoadingConfig","useAlertmanagerConfig","resetConfig","defaultValidValues","Alert","dataSourcesApi","alertingApi","build","result","uid","useExternalDataSourceAlertmanagers","alertmanagerDataSources","externalAlertmanagers","dataSourceSettings","status","determineAlertmanagerConnectionStatus","isActive","am","isAlertmanagerMatchByURL","isDropped","MIMIR_ALERTMANAGER_PATH","VANILLA_ALERTMANAGER_PATH","dataSourceUrl","alertmanagerUrl","normalizedUrl","normalizeDataSourceURL","prometheusAlertmanagerMatch","mimirAlertmanagerMatch","url","ExternalAlertmanagerDataSources","alertmanagers","inactive","CallToActionCard","ExternalAMdataSourceCard","alertmanager","Card","Tooltip","Icon","Badge","alertmanagerChoices","ExternalAlertmanagers","gmaHandlingAlertmanagers","settings","useSaveExternalAlertmanagersConfigMutation","useGetExternalAlertmanagerConfigQuery","useGetExternalAlertmanagersQuery","saveExternalAlertManagers","externalAlertmanagerConfig","alertmanagersChoice","onChangeAlertmanagerChoice","RadioButtonGroup","Admin","AdminPageContents","isGrafanaAmSelected","amSourceName","options","fetchConfig"],"sourceRoot":""}