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/25 01:58:11 UTC
[skywalking-grafana-plugins] 02/04: feat: add utc
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 ef586ffefc211be77b391593d49bf92ddc55f270
Author: Fine0830 <fa...@gmail.com>
AuthorDate: Mon Apr 24 19:00:18 2023 +0800
feat: add utc
---
src/datasource.ts | 38 ++++++++++++++++++++++++++++++--------
1 file changed, 30 insertions(+), 8 deletions(-)
diff --git a/src/datasource.ts b/src/datasource.ts
index edbbc35..3e0169f 100644
--- a/src/datasource.ts
+++ b/src/datasource.ts
@@ -8,6 +8,9 @@ import {
FieldType,
} from '@grafana/data';
import { getBackendSrv, getTemplateSrv } from '@grafana/runtime';
+import dayjs from "dayjs";
+import timezone from "dayjs/plugin/timezone";
+import utc from "dayjs/plugin/utc";
import { MyQuery, MyDataSourceOptions, DEFAULT_QUERY } from './types';
@@ -19,25 +22,33 @@ enum TimeType {
DAY_TIME = "DAY",
}
+
+
export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
URL: string;
constructor(instanceSettings: DataSourceInstanceSettings<MyDataSourceOptions>) {
super(instanceSettings);
// proxy url
this.URL = instanceSettings.url || '';
+ dayjs.extend(utc)
+ dayjs.extend(timezone)
}
async query(options: DataQueryRequest<MyQuery>): Promise<DataQueryResponse> {
const { range } = options;
const from = range!.from.valueOf();
const to = range!.to.valueOf();
- const dates = this.timeFormat([new Date(from), new Date(to)]);
+ let utc = -(new Date().getTimezoneOffset() / 60) + ":0";
+
+ if (options.timezone !== "browser") {
+ utc = dayjs().tz(options.timezone).utcOffset() / 60 + ":0";
+ }
+ const dates = this.timeFormat([this.getLocalTime(utc, new Date(from)), this.getLocalTime(utc, new Date(to))]);
const duration = {
start: this.dateFormatStep(dates.start, dates.step),
end: this.dateFormatStep(dates.end, dates.step),
step: dates.step,
};
-
// Return a constant for each query.
const data = options.targets.map(async (target) => {
const query = defaults(target, DEFAULT_QUERY);
@@ -48,13 +59,13 @@ export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
};
// fetch services from api
await this.doRequest(s);
- // console.log(services);
- // const t = {
- // query: "query queryData($duration: Duration!, $serviceIds: [ID!]!) {\n topology: getServicesTopology(duration: $duration, serviceIds: $serviceIds) {\n nodes {\n id\n name\n type\n isReal\n }\n calls {\n id\n source\n detectPoints\n target\n }\n }}",
- // variables: JSON.stringify({duration,serviceIds:["YWdlbnQ6OnNvbmdz.1","YWdlbnQ6OnJlY29tbWVuZGF0aW9u.1","YWdlbnQ6OmFwcA==.1","YWdlbnQ6OmdhdGV3YXk=.1","YWdlbnQ6OmZyb250ZW5k.1"]}),
- // };
+ const t = {
+ query: "query queryData($duration: Duration!) {\n topology: getGlobalTopology(duration: $duration) {\n nodes {\n id\n name\n type\n isReal\n }\n calls {\n id\n source\n detectPoints\n target\n }\n }}",
+ // variables: {duration: {"start":"2023-04-23 1503","end":"2023-04-23 1603","step":"MINUTE"}},
+ variables: {duration},
+ };
// fetch topology data from api
- // await this.doRequest(t);
+ await this.doRequest(t);
return new MutableDataFrame({
refId: target.refId,
fields: [
@@ -133,6 +144,17 @@ export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
}
return "";
}
+ getLocalTime(utc: string, time: Date): Date {
+ const utcArr = utc.split(":");
+ const utcHour = isNaN(Number(utcArr[0])) ? 0 : Number(utcArr[0]);
+ const utcMin = isNaN(Number(utcArr[1])) ? 0 : Number(utcArr[1]);
+ const d = new Date(time);
+ const len = d.getTime();
+ const offset = d.getTimezoneOffset() * 60000;
+ const utcTime = len + offset;
+
+ return new Date(utcTime + 3600000 * utcHour + utcMin * 60000);
+ };
async testDatasource() {
// Implement a health check for your data source.