Browse Source

Implemented datasource test

Erik Sundell 7 years ago
parent
commit
f9b7524423

+ 61 - 11
public/app/plugins/datasource/stackdriver/datasource.ts

@@ -1,13 +1,63 @@
 /** @ngInject */
-export function StackdriverDatasource(this: any, instanceSettings, $q, backendSrv, templateSrv) {
-  // this.basicAuth = instanceSettings.basicAuth;
-  // this.url = instanceSettings.url;
-  // this.name = instanceSettings.name;
-  // this.graphiteVersion = instanceSettings.jsonData.graphiteVersion || '0.9';
-  // this.supportsTags = supportsTags(this.graphiteVersion);
-  // this.cacheTimeout = instanceSettings.cacheTimeout;
-  // this.withCredentials = instanceSettings.withCredentials;
-  // this.render_method = instanceSettings.render_method || 'POST';
-  // this.funcDefs = null;
-  // this.funcDefsPromise = null;
+export default class StackdriverDatasource {
+  url: string;
+  baseUrl: string;
+  cloudName: string;
+
+  constructor(instanceSettings, private backendSrv) {
+    this.cloudName = 'stackdriver';
+    this.baseUrl = `/${this.cloudName}/`;
+    this.url = instanceSettings.url;
+  }
+
+  testDatasource() {
+    const path = `v3/projects/raintank-production/timeSeries?aggregation.crossSeriesReducer=
+    REDUCE_NONE&filter=metric.type%20%3D%20%22compute.googleapis.com%2Finstance%2Fcpu%2Fusage_time%
+    22&aggregation.perSeriesAligner=ALIGN_NONE&interval.startTime=2018-09-04T05%3A16%3A02.383Z&interval.endTime=2018-09-04T11%3A16%3A02.383Z`;
+    return this.doRequest(`${this.baseUrl}${path}`)
+      .then(response => {
+        if (response.status === 200) {
+          return {
+            status: 'success',
+            message: 'Successfully queried the Azure Monitor service.',
+            title: 'Success',
+          };
+        } else {
+          throw new Error();
+        }
+      })
+      .catch(error => {
+        let message = 'Azure Monitor: ';
+        message += error.statusText ? error.statusText + ': ' : '';
+
+        if (error.data && error.data.error && error.data.error.code) {
+          message += error.data.error.code + '. ' + error.data.error.message;
+        } else if (error.data && error.data.error) {
+          message += error.data.error;
+        } else if (error.data) {
+          message += error.data;
+        } else {
+          message += 'Cannot connect to Azure Monitor REST API.';
+        }
+        return {
+          status: 'error',
+          message: message,
+        };
+      });
+  }
+
+  doRequest(url, maxRetries = 1) {
+    return this.backendSrv
+      .datasourceRequest({
+        url: this.url + url,
+        method: 'GET',
+      })
+      .catch(error => {
+        if (maxRetries > 0) {
+          return this.doRequest(url, maxRetries - 1);
+        }
+
+        throw error;
+      });
+  }
 }

+ 2 - 2
public/app/plugins/datasource/stackdriver/module.ts

@@ -1,4 +1,4 @@
-// import { StackdriverDatasource } from './datasource';
+import StackdriverDatasource from './datasource';
 // import { StackdriverQueryCtrl } from './query_ctrl';
 import { StackdriverConfigCtrl } from './config_ctrl';
 
@@ -7,7 +7,7 @@ import { StackdriverConfigCtrl } from './config_ctrl';
 // }
 
 export {
-  // StackdriverDatasource as Datasource,
+  StackdriverDatasource as Datasource,
   // StackdriverQueryCtrl as QueryCtrl,
   StackdriverConfigCtrl as ConfigCtrl,
   // AnnotationsQueryCtrl,

+ 15 - 1
public/app/plugins/datasource/stackdriver/plugin.json

@@ -12,5 +12,19 @@
   "info": {
     "description": "Data Source for Stackdriver",
     "version": "1.0.0"
-  }
+  },
+  "routes": [
+    {
+      "path": "stackdriver",
+      "method": "GET",
+      "url": "https://content-monitoring.googleapis.com",
+      "jwtTokenAuth": {
+        "params": {
+          "token_uri": "{{.JsonData.tokenUri}}",
+          "client_email": "{{.JsonData.clientEmail}}",
+          "private_key": "{{.SecureJsonData.privateKey}}"
+        }
+      }
+    }
+  ]
 }