import React, { PureComponent, ChangeEvent } from 'react'; import { SelectableValue } from '@grafana/data'; import { AzureCredentialsForm } from './AzureCredentialsForm'; import { InlineFormLabel, LegacyForms, Button } from '@grafana/ui'; const { Select, Switch } = LegacyForms; import { AzureDataSourceSettings } from '../types'; export interface State { sameAsSwitched: boolean; } export interface Props { options: AzureDataSourceSettings; subscriptions: SelectableValue[]; workspaces: SelectableValue[]; makeSameAs: () => void; onUpdateDatasourceOptions: (options: AzureDataSourceSettings) => void; onUpdateJsonDataOption: (key: string, val: any) => void; onUpdateSecureJsonDataOption: (key: string, val: any) => void; onResetOptionKey: (key: string) => void; onLoadSubscriptions: (type?: string) => void; onLoadWorkspaces: (type?: string) => void; } export class AnalyticsConfig extends PureComponent { constructor(props: Props) { super(props); this.state = { sameAsSwitched: false, }; } onLogAnalyticsTenantIdChange = (event: ChangeEvent) => { this.props.onUpdateJsonDataOption('logAnalyticsTenantId', event.target.value); }; onLogAnalyticsClientIdChange = (event: ChangeEvent) => { this.props.onUpdateJsonDataOption('logAnalyticsClientId', event.target.value); }; onLogAnalyticsClientSecretChange = (event: ChangeEvent) => { this.props.onUpdateSecureJsonDataOption('logAnalyticsClientSecret', event.target.value); }; onLogAnalyticsSubscriptionSelect = (logAnalyticsSubscription: SelectableValue) => { this.props.onUpdateJsonDataOption('logAnalyticsSubscriptionId', logAnalyticsSubscription.value); }; onWorkspaceSelectChange = (logAnalyticsDefaultWorkspace: SelectableValue) => { this.props.onUpdateJsonDataOption('logAnalyticsDefaultWorkspace', logAnalyticsDefaultWorkspace.value); }; onAzureLogAnalyticsSameAsChange = () => { const { options, onUpdateDatasourceOptions, makeSameAs } = this.props; if (!options.jsonData.azureLogAnalyticsSameAs && options.secureJsonData!.clientSecret) { makeSameAs(); } else if (!options.jsonData.azureLogAnalyticsSameAs) { // if currently off, clear monitor secret onUpdateDatasourceOptions({ ...options, jsonData: { ...options.jsonData, azureLogAnalyticsSameAs: !options.jsonData.azureLogAnalyticsSameAs, }, secureJsonData: { ...options.secureJsonData, clientSecret: '', }, secureJsonFields: { clientSecret: false, }, }); this.setState({ sameAsSwitched: true, }); } else { this.props.onUpdateJsonDataOption('azureLogAnalyticsSameAs', !options.jsonData.azureLogAnalyticsSameAs); } }; onLogAnalyticsResetClientSecret = () => { this.props.onResetOptionKey('logAnalyticsClientSecret'); }; hasWorkspaceRequiredFields = () => { const { options: { jsonData, secureJsonData, secureJsonFields }, } = this.props; if (jsonData.azureLogAnalyticsSameAs) { return ( jsonData.tenantId && jsonData.clientId && jsonData.subscriptionId && (secureJsonData!.clientSecret || secureJsonFields.clientSecret) ); } return ( jsonData.logAnalyticsTenantId && jsonData.logAnalyticsTenantId.length && jsonData.logAnalyticsClientId && jsonData.logAnalyticsClientId.length && jsonData.logAnalyticsSubscriptionId && (secureJsonFields.logAnalyticsClientSecret || secureJsonData!.logAnalyticsClientSecret) ); }; render() { const { options: { jsonData, secureJsonData, secureJsonFields }, subscriptions, workspaces, } = this.props; const { sameAsSwitched } = this.state; if (!jsonData.hasOwnProperty('azureLogAnalyticsSameAs')) { jsonData.azureLogAnalyticsSameAs = true; } const addtlAttrs = { ...(jsonData.azureLogAnalyticsSameAs && { tooltip: 'Workspaces are pulled from default subscription selected above.', }), }; const showSameAsHelpMsg = sameAsSwitched && jsonData.azureLogAnalyticsSameAs && secureJsonFields && !secureJsonFields.clientSecret && !secureJsonData!.clientSecret; return ( <>

Azure Monitor Logs Details

{showSameAsHelpMsg && (

Re-enter your Azure Monitor Client Secret to use this setting.

)} {!jsonData.azureLogAnalyticsSameAs && ( this.props.onLoadSubscriptions('workspacesloganalytics')} /> )}
Default Workspace