| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- import React, { PureComponent } from 'react';
- import { SelectableValue } from '@grafana/data';
- import { DataSourcePluginOptionsEditorProps } from '@grafana/ui';
- import { MonitorConfig } from './components/MonitorConfig';
- import { AnalyticsConfig } from './components/AnalyticsConfig';
- import { TemplateSrv } from 'app/features/templating/template_srv';
- import { getBackendSrv, BackendSrv } from 'app/core/services/backend_srv';
- import AzureMonitorDatasource from './azure_monitor/azure_monitor_datasource';
- import AzureLogAnalyticsDatasource from './azure_log_analytics/azure_log_analytics_datasource';
- import { InsightsConfig } from './components/InsightsConfig';
- export type Props = DataSourcePluginOptionsEditorProps<any>;
- export interface State {
- config: any;
- subscriptions: SelectableValue[];
- logAnalyticsSubscriptions: SelectableValue[];
- logAnalyticsWorkspaces: SelectableValue[];
- }
- export class ConfigEditor extends PureComponent<Props, State> {
- constructor(props: Props) {
- super(props);
- const { options } = this.props;
- this.state = {
- config: ConfigEditor.keyFill(options),
- subscriptions: [],
- logAnalyticsSubscriptions: [],
- logAnalyticsWorkspaces: [],
- };
- this.backendSrv = getBackendSrv();
- this.templateSrv = new TemplateSrv();
- if (options.id) {
- this.state.config.url = '/api/datasources/proxy/' + options.id;
- this.init();
- }
- this.updateDatasource(this.state.config);
- }
- static getDerivedStateFromProps(props: Props, state: State) {
- return {
- ...state,
- config: ConfigEditor.keyFill(props.options),
- };
- }
- static keyFill = (options: any) => {
- options.jsonData.cloudName = options.jsonData.cloudName || 'azuremonitor';
- if (!options.jsonData.hasOwnProperty('azureLogAnalyticsSameAs')) {
- options.jsonData.azureLogAnalyticsSameAs = true;
- }
- if (!options.hasOwnProperty('editorSecureJsonData')) {
- options.editorSecureJsonData = {
- clientSecret: '',
- logAnalyticsClientSecret: '',
- appInsightsApiKey: '',
- };
- }
- if (!options.hasOwnProperty('editorJsonData')) {
- options.editorJsonData = {
- clientId: options.jsonData.clientId || '',
- tenantId: options.jsonData.tenantId || '',
- subscriptionId: options.jsonData.subscriptionId || '',
- logAnalyticsClientId: options.jsonData.logAnalyticsClientId || '',
- logAnalyticsDefaultWorkspace: options.jsonData.logAnalyticsDefaultWorkspace || '',
- logAnalyticsTenantId: options.jsonData.logAnalyticsTenantId || '',
- logAnalyticsSubscriptionId: options.jsonData.logAnalyticsSubscriptionId || '',
- appInsightsAppId: options.jsonData.appInsightsAppId || '',
- };
- }
- if (!options.hasOwnProperty('secureJsonFields')) {
- options.secureJsonFields = {
- clientSecret: false,
- logAnalyticsClientSecret: false,
- appInsightsApiKey: false,
- };
- }
- return options;
- };
- backendSrv: BackendSrv = null;
- templateSrv: TemplateSrv = null;
- init = async () => {
- await this.getSubscriptions();
- if (!this.state.config.jsonData.azureLogAnalyticsSameAs) {
- await this.getLogAnalyticsSubscriptions();
- }
- };
- updateDatasource = async (config: any) => {
- for (const j in config.jsonData) {
- if (config.jsonData[j].length === 0) {
- delete config.jsonData[j];
- }
- }
- for (const k in config.secureJsonData) {
- if (config.secureJsonData[k].length === 0) {
- delete config.secureJsonData[k];
- }
- }
- for (const m in config.editorJsonData) {
- if (!config.hasOwnProperty('jsonData')) {
- config.jsonData = {};
- }
- if (config.editorJsonData[m].length === 0) {
- if (config.hasOwnProperty('jsonData') && config.jsonData.hasOwnProperty(m)) {
- delete config.jsonData[m];
- }
- } else {
- config.jsonData[m] = config.editorJsonData[m];
- }
- }
- for (const l in config.editorSecureJsonData) {
- if (!config.hasOwnProperty('secureJsonData')) {
- config.secureJsonData = {};
- }
- if (config.editorSecureJsonData[l].length === 0) {
- if (config.hasOwnProperty('secureJsonData') && config.secureJsonData.hasOwnProperty(l)) {
- delete config.secureJsonData[l];
- }
- } else {
- config.secureJsonData[l] = config.editorSecureJsonData[l];
- }
- }
- this.props.onOptionsChange({
- ...config,
- });
- };
- hasNecessaryCredentials = () => {
- if (!this.state.config.secureJsonFields.clientSecret && !this.state.config.editorSecureJsonData.clientSecret) {
- return false;
- }
- if (!this.state.config.jsonData.clientId || !this.state.config.jsonData.tenantId) {
- return false;
- }
- return true;
- };
- logAnalyticsHasNecessaryCredentials = () => {
- if (
- !this.state.config.secureJsonFields.logAnalyticsClientSecret &&
- !this.state.config.editorSecureJsonData.logAnalyticsClientSecret
- ) {
- return false;
- }
- if (!this.state.config.jsonData.logAnalyticsClientId || !this.state.config.jsonData.logAnalyticsTenantId) {
- return false;
- }
- return true;
- };
- onConfigUpdate = (config: any) => {
- this.updateDatasource(config);
- };
- onLoadSubscriptions = async (type?: string) => {
- await this.backendSrv.put(`/api/datasources/${this.state.config.id}`, this.state.config).then(() => {
- this.updateDatasource({
- ...this.state.config,
- version: this.state.config.version + 1,
- });
- });
- if (type && type === 'workspacesloganalytics') {
- this.getLogAnalyticsSubscriptions();
- } else {
- this.getSubscriptions();
- }
- };
- getSubscriptions = async () => {
- if (!this.hasNecessaryCredentials()) {
- return;
- }
- const azureMonitorDatasource = new AzureMonitorDatasource(this.state.config, this.backendSrv, this.templateSrv);
- let subscriptions = (await azureMonitorDatasource.getSubscriptions()) || [];
- subscriptions = subscriptions.map((subscription: any) => {
- return {
- value: subscription.value,
- label: subscription.text,
- };
- });
- if (subscriptions && subscriptions.length > 0) {
- this.setState({ subscriptions });
- this.state.config.editorJsonData.subscriptionId =
- this.state.config.editorJsonData.subscriptionId || subscriptions[0].value;
- }
- if (this.state.config.editorJsonData.subscriptionId && this.state.config.jsonData.azureLogAnalyticsSameAs) {
- await this.getWorkspaces();
- }
- };
- getLogAnalyticsSubscriptions = async () => {
- if (!this.logAnalyticsHasNecessaryCredentials()) {
- return;
- }
- const azureMonitorDatasource = new AzureMonitorDatasource(this.state.config, this.backendSrv, this.templateSrv);
- let logAnalyticsSubscriptions = (await azureMonitorDatasource.getSubscriptions('workspacesloganalytics')) || [];
- logAnalyticsSubscriptions = logAnalyticsSubscriptions.map((subscription: any) => {
- return {
- value: subscription.value,
- label: subscription.text,
- };
- });
- if (logAnalyticsSubscriptions && logAnalyticsSubscriptions.length > 0) {
- this.setState({ logAnalyticsSubscriptions });
- this.state.config.editorJsonData.logAnalyticsSubscriptionId =
- this.state.config.editorJsonData.logAnalyticsSubscriptionId || logAnalyticsSubscriptions[0].value;
- }
- if (this.state.config.editorJsonData.logAnalyticsSubscriptionId) {
- await this.getWorkspaces();
- }
- };
- getWorkspaces = async () => {
- const sameAs =
- this.state.config.jsonData.azureLogAnalyticsSameAs && this.state.config.editorJsonData.subscriptionId;
- if (!sameAs && !this.state.config.editorJsonData.logAnalyticsSubscriptionId) {
- return;
- }
- const azureLogAnalyticsDatasource = new AzureLogAnalyticsDatasource(
- this.state.config,
- this.backendSrv,
- this.templateSrv
- );
- let logAnalyticsWorkspaces = await azureLogAnalyticsDatasource.getWorkspaces(
- sameAs
- ? this.state.config.editorJsonData.subscriptionId
- : this.state.config.editorJsonData.logAnalyticsSubscriptionId
- );
- logAnalyticsWorkspaces = logAnalyticsWorkspaces.map((workspace: any) => {
- return {
- value: workspace.value,
- label: workspace.text,
- };
- });
- if (logAnalyticsWorkspaces.length > 0) {
- this.setState({ logAnalyticsWorkspaces });
- this.state.config.editorJsonData.logAnalyticsDefaultWorkspace =
- this.state.config.editorJsonData.logAnalyticsDefaultWorkspace || logAnalyticsWorkspaces[0].value;
- }
- };
- render() {
- const { config, subscriptions, logAnalyticsSubscriptions, logAnalyticsWorkspaces } = this.state;
- return (
- <>
- <MonitorConfig
- datasourceConfig={config}
- subscriptions={subscriptions}
- onLoadSubscriptions={this.onLoadSubscriptions}
- onDatasourceUpdate={this.onConfigUpdate}
- />
- <AnalyticsConfig
- datasourceConfig={config}
- logAnalyticsWorkspaces={logAnalyticsWorkspaces}
- logAnalyticsSubscriptions={logAnalyticsSubscriptions}
- onLoadSubscriptions={this.onLoadSubscriptions}
- onDatasourceUpdate={this.onConfigUpdate}
- onLoadWorkspaces={this.getWorkspaces}
- />
- <InsightsConfig datasourceConfig={config} onDatasourceUpdate={this.onConfigUpdate} />
- </>
- );
- }
- }
- export default ConfigEditor;
|