import { css } from '@emotion/css'; import React, { useRef } from 'react'; import { SIGV4ConnectionConfig } from '@grafana/aws-sdk'; import { DataSourcePluginOptionsEditorProps, DataSourceSettings, GrafanaTheme2 } from '@grafana/data'; import { ConfigSection, DataSourceDescription } from '@grafana/experimental'; import { Alert, DataSourceHttpSettings, FieldValidationMessage, useTheme2 } from '@grafana/ui'; import { config } from 'app/core/config'; import { PromOptions } from '../types'; import { AlertingSettingsOverhaul } from './AlertingSettingsOverhaul'; import { AzureAuthSettings } from './AzureAuthSettings'; import { hasCredentials, setDefaultCredentials, resetCredentials } from './AzureCredentialsConfig'; import { DataSourcehttpSettingsOverhaul } from './DataSourceHttpSettingsOverhaul'; import { PromSettings } from './PromSettings'; import { AdvancedHttpSettings } from './overhaul/AdvancedHttpSettings'; export const PROM_CONFIG_LABEL_WIDTH = 30; export type Props = DataSourcePluginOptionsEditorProps; export const ConfigEditor = (props: Props) => { const { options, onOptionsChange } = props; const prometheusConfigOverhaulAuth = config.featureToggles.prometheusConfigOverhaulAuth; // use ref so this is evaluated only first time it renders and the select does not disappear suddenly. const showAccessOptions = useRef(props.options.access === 'direct'); const azureAuthSettings = { azureAuthSupported: config.azureAuthEnabled, getAzureAuthEnabled: (config: DataSourceSettings): boolean => hasCredentials(config), setAzureAuthEnabled: (config: DataSourceSettings, enabled: boolean) => enabled ? setDefaultCredentials(config) : resetCredentials(config), azureSettingsUI: AzureAuthSettings, }; const theme = useTheme2(); const styles = overhaulStyles(theme); return ( <> {options.access === 'direct' && ( Browser access mode in the Prometheus data source is no longer available. Switch to server access mode. )} {/* WRAP IN FEATURE TOGGLE */} {prometheusConfigOverhaulAuth ? ( <>
} secureSocksDSProxyEnabled={config.secureSocksDSProxyEnabled} /> ) : ( } secureSocksDSProxyEnabled={config.secureSocksDSProxyEnabled} urlLabel="Prometheus server URL" urlDocs={docsTip()} /> )} {prometheusConfigOverhaulAuth ? ( <>
options={options} onOptionsChange={onOptionsChange} /> ) : ( <>

Additional settings

Additional settings are optional settings that can be configured for more control over your data source.

options={options} onOptionsChange={onOptionsChange} /> )} ); }; /** * Use this to return a url in a tooltip in a field. Don't forget to make the field interactive to be able to click on the tooltip * @param url * @returns */ export function docsTip(url?: string) { const docsUrl = 'https://grafana.com/docs/grafana/latest/datasources/prometheus/#configure-the-data-source'; return ( Visit docs for more details here. ); } export const validateInput = ( input: string, pattern: string | RegExp, errorMessage?: string ): boolean | JSX.Element => { const defaultErrorMessage = 'Value is not valid'; if (input && !input.match(pattern)) { return {errorMessage ? errorMessage : defaultErrorMessage}; } else { return true; } }; export function overhaulStyles(theme: GrafanaTheme2) { return { additionalSettings: css` margin-bottom: 25px; `, secondaryGrey: css` color: ${theme.colors.secondary.text}; opacity: 65%; `, inlineError: css` margin: 0px 0px 4px 245px; `, switchField: css` align-items: center; `, sectionHeaderPadding: css` padding-top: 32px; `, sectionBottomPadding: css` padding-bottom: 28px; `, subsectionText: css` font-size: 12px; `, hrBottomSpace: css` margin-bottom: 56px; `, hrTopSpace: css` margin-top: 50px; `, textUnderline: css` text-decoration: underline; `, versionMargin: css` margin-bottom: 12px; `, advancedHTTPSettingsMargin: css` margin: 24px 0 8px 0; `, advancedSettings: css` padding-top: 32px; `, alertingTop: css` margin-top: 40px !important; `, overhaulPageHeading: css` font-weight: 400; `, container: css` maxwidth: 578; `, }; }