You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by qi...@apache.org on 2023/04/20 11:19:57 UTC

[skywalking-grafana-plugins] 02/04: feat: do request

This is an automated email from the ASF dual-hosted git repository.

qiuxiafan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-grafana-plugins.git

commit 11af6ea77117ff0e6d900ad037b35cb611250238
Author: Fine0830 <fa...@gmail.com>
AuthorDate: Tue Apr 18 16:05:58 2023 +0800

    feat: do request
---
 src/datasource.ts | 26 ++++++++++++++++++++++++++
 src/plugin.json   |  8 +++++++-
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/datasource.ts b/src/datasource.ts
index 92ee42e..eb37871 100644
--- a/src/datasource.ts
+++ b/src/datasource.ts
@@ -6,12 +6,18 @@ import {
   MutableDataFrame,
   FieldType,
 } from '@grafana/data';
+import { getBackendSrv } from '@grafana/runtime';
 
 import { MyQuery, MyDataSourceOptions } from './types';
 
+// proxy route
+const routePath = '/graphql';
 export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
+  url: string;
   constructor(instanceSettings: DataSourceInstanceSettings<MyDataSourceOptions>) {
     super(instanceSettings);
+    // proxy url
+    this.url = instanceSettings.url || '';
   }
 
   async query(options: DataQueryRequest<MyQuery>): Promise<DataQueryResponse> {
@@ -21,6 +27,8 @@ export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
 
     // Return a constant for each query.
     const data = options.targets.map((target) => {
+      // const query = defaults(target, defaultQuery);
+      // const dataQuery = getTemplateSrv().replace(query.queryText, options.scopedVars);
       return new MutableDataFrame({
         refId: target.refId,
         fields: [
@@ -32,6 +40,24 @@ export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
 
     return { data };
   }
+  async doRequest(params?: Record<string, any>) {
+    // Do the request on proxy; the server will replace url + routePath with the url
+    // defined in plugin.json
+    const result = getBackendSrv().fetch({
+      method: 'POST',
+      url: `${this.url}${routePath}`,
+      headers: {
+        'Content-Type': 'application/json'
+      },
+      params
+      // params: {
+      //   query: "query queryServices($duration: Duration!,$keyword: String!) {\n    services: getAllServices(duration: $duration, group: $keyword) {\n      key: id\n      label: name\n      group\n    }\n  }",
+      //   variables: {"duration":{"start":"2023-04-17 1503","end":"2023-04-17 1603","step":"MINUTE"},"keyword":""},
+      // }
+    });
+    console.log(result);
+    return result;
+  }
 
   async testDatasource() {
     // Implement a health check for your data source.
diff --git a/src/plugin.json b/src/plugin.json
index e333339..e467eb1 100644
--- a/src/plugin.json
+++ b/src/plugin.json
@@ -22,5 +22,11 @@
   "dependencies": {
     "grafanaDependency": "^9.3.8",
     "plugins": []
-  }
+  },
+  "routes": [
+    {
+      "path": "graphql",
+      "url": "{{ .JsonData.url }}"
+    }
+  ]
 }