Files
grafana/public/app/plugins/datasource/grafana-azure-monitor-datasource/config_ctrl.ts
2019-07-06 07:01:22 +02:00

128 lines
4.4 KiB
TypeScript

import AzureLogAnalyticsDatasource from './azure_log_analytics/azure_log_analytics_datasource';
import config from 'app/core/config';
import { isVersionGtOrEq } from 'app/core/utils/version';
import AzureMonitorDatasource from './azure_monitor/azure_monitor_datasource';
import { BackendSrv } from 'app/core/services/backend_srv';
import { IQService } from 'angular';
import { TemplateSrv } from 'app/features/templating/template_srv';
interface AzureCloud {
key: string;
url: string;
loginUrl: string;
}
export class AzureMonitorConfigCtrl {
static templateUrl = 'public/app/plugins/datasource/grafana-azure-monitor-datasource/partials/config.html';
current: any;
azureLogAnalyticsDatasource: any;
azureMonitorDatasource: any;
workspaces: any[];
subscriptions: Array<{ text: string; value: string }>;
subscriptionsForLogAnalytics: Array<{ text: string; value: string }>;
hasRequiredGrafanaVersion: boolean;
azureClouds: AzureCloud[];
token: string;
/** @ngInject */
constructor(private backendSrv: BackendSrv, private $q: IQService, private templateSrv: TemplateSrv) {
this.hasRequiredGrafanaVersion = this.hasMinVersion();
this.current.jsonData.cloudName = this.current.jsonData.cloudName || 'azuremonitor';
this.current.jsonData.azureLogAnalyticsSameAs = this.current.jsonData.azureLogAnalyticsSameAs || false;
this.current.secureJsonData = this.current.secureJsonData || {};
this.current.secureJsonFields = this.current.secureJsonFields || {};
this.subscriptions = [];
this.subscriptionsForLogAnalytics = [];
this.azureClouds = [
{
key: 'azuremonitor',
url: 'https://management.azure.com/',
loginUrl: 'https://login.microsoftonline.com/',
},
{
key: 'govazuremonitor',
url: 'https://management.usgovcloudapi.net/',
loginUrl: 'https://login.microsoftonline.us/',
},
{
key: 'germanyazuremonitor',
url: 'https://management.microsoftazure.de',
loginUrl: 'https://management.microsoftazure.de/',
},
{
key: 'chinaazuremonitor',
url: 'https://management.chinacloudapi.cn',
loginUrl: 'https://login.chinacloudapi.cn',
},
];
if (this.current.id) {
this.current.url = '/api/datasources/proxy/' + this.current.id;
this.init();
}
}
async init() {
this.azureMonitorDatasource = new AzureMonitorDatasource(this.current, this.backendSrv, this.templateSrv);
await this.getSubscriptions();
await this.getSubscriptionsForLogsAnalytics();
this.azureLogAnalyticsDatasource = new AzureLogAnalyticsDatasource(
this.current,
this.backendSrv,
this.templateSrv,
this.$q
);
await this.getWorkspaces();
}
hasMinVersion(): boolean {
return isVersionGtOrEq(config.buildInfo.version, '5.2');
}
showMinVersionWarning() {
return !this.hasRequiredGrafanaVersion && this.current.secureJsonFields.logAnalyticsClientSecret;
}
async getWorkspaces() {
const sameAs = this.current.jsonData.azureLogAnalyticsSameAs && this.subscriptions.length > 0;
if (!sameAs && this.subscriptionsForLogAnalytics.length === 0) {
return;
}
this.workspaces = await this.azureLogAnalyticsDatasource.getWorkspaces();
if (this.workspaces.length > 0) {
this.current.jsonData.logAnalyticsDefaultWorkspace =
this.current.jsonData.logAnalyticsDefaultWorkspace || this.workspaces[0].value;
}
}
async getSubscriptions() {
if (!this.current.secureJsonFields.clientSecret && !this.current.secureJsonData.clientSecret) {
return;
}
this.subscriptions = (await this.azureMonitorDatasource.getSubscriptions()) || [];
if (this.subscriptions && this.subscriptions.length > 0) {
this.current.jsonData.subscriptionId = this.current.jsonData.subscriptionId || this.subscriptions[0].value;
}
}
async getSubscriptionsForLogsAnalytics() {
if (
!this.current.secureJsonFields.logAnalyticsClientSecret &&
!this.current.secureJsonData.logAnalyticsClientSecret
) {
return;
}
this.subscriptionsForLogAnalytics =
(await this.azureMonitorDatasource.getSubscriptions('workspacesloganalytics')) || [];
if (this.subscriptionsForLogAnalytics && this.subscriptionsForLogAnalytics.length > 0) {
this.current.jsonData.logAnalyticsSubscriptionId =
this.current.jsonData.logAnalyticsSubscriptionId || this.subscriptionsForLogAnalytics[0].value;
}
}
}