mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
128 lines
4.4 KiB
TypeScript
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;
|
|
}
|
|
}
|
|
}
|