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/05/08 03:02:38 UTC
[skywalking-grafana-plugins] 02/02: feat: add layer
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 5ee35b99d7e38c7cc8e95f0916d9436e055fd0a1
Author: Fine0830 <fa...@gmail.com>
AuthorDate: Mon May 8 11:02:12 2023 +0800
feat: add layer
---
src/components/QueryEditor.tsx | 8 +++++++-
src/constant.ts | 5 ++---
src/datasource.ts | 33 +++++++++++++++++----------------
src/types.ts | 1 +
4 files changed, 27 insertions(+), 20 deletions(-)
diff --git a/src/components/QueryEditor.tsx b/src/components/QueryEditor.tsx
index 1f14503..e80c34c 100644
--- a/src/components/QueryEditor.tsx
+++ b/src/components/QueryEditor.tsx
@@ -7,6 +7,9 @@ import { MyDataSourceOptions, MyQuery } from '../types';
type Props = QueryEditorProps<DataSource, MyQuery, MyDataSourceOptions>;
export function QueryEditor({ query, onChange, onRunQuery }: Props) {
+ const onLayerChange = (event: ChangeEvent<HTMLInputElement>) => {
+ onChange({ ...query, layer: event.target.value });
+ };
const onServiceChange = (event: ChangeEvent<HTMLInputElement>) => {
onChange({ ...query, service: event.target.value });
};
@@ -22,10 +25,13 @@ export function QueryEditor({ query, onChange, onRunQuery }: Props) {
const onRunQueryText = () => {
onRunQuery();
};
- const { service, nodeMetrics, edgeServerMetrics, edgeClientMetrics } = query;
+ const { service, nodeMetrics, edgeServerMetrics, edgeClientMetrics, layer } = query;
return (
<div className="gf-form-group">
+ <InlineField label="Layer" tooltip="Not used yet" labelWidth={20}>
+ <Input onBlur={onRunQueryText} onChange={onLayerChange} value={layer || ''} width={40} />
+ </InlineField>
<InlineField label="Service" tooltip="Not used yet" labelWidth={20}>
<Input onBlur={onRunQueryText} onChange={onServiceChange} value={service || ''} width={40} />
</InlineField>
diff --git a/src/constant.ts b/src/constant.ts
index 51b2774..e26a3e1 100644
--- a/src/constant.ts
+++ b/src/constant.ts
@@ -1,7 +1,6 @@
export const Fragments = {
- serviceTopolgy: "query queryData($serviceId: ID!, $duration: Duration!) {\n topology: getServiceTopology(serviceId: $serviceId, 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 }}",
- globalTopology: "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 }}",
- services: "query queryServices($duration: Duration!,$keyword: String!) {\n services: getAllServices(duration: $duration, group: $keyword) {\n id\n name\n group\n }\n }",
+ servicesTopolgy: "query queryData($serviceIds: [ID!]!, $duration: Duration!) {\n topology: getServicesTopology(serviceIds: $serviceIds, 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 }}",
+ services: "query queryServices($duration: Duration!,$keyword: String!) {\n services: getAllServices(duration: $duration, group: $keyword) {\n id\n name\n group\n layers\n }\n }",
};
// proxy route
diff --git a/src/datasource.ts b/src/datasource.ts
index b6ed946..99ee36f 100644
--- a/src/datasource.ts
+++ b/src/datasource.ts
@@ -52,6 +52,10 @@ export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
};
const promises = options.targets.map(async (target) => {
const query = defaults(target, DEFAULT_QUERY);
+ const layer = getTemplateSrv().replace(query.layer, options.scopedVars);
+ if (!layer) {
+ return [];
+ }
const serviceName = getTemplateSrv().replace(query.service, options.scopedVars);
const nodeMetricsStr = getTemplateSrv().replace(query.nodeMetrics, options.scopedVars);
const nodeMetrics = nodeMetricsStr ? this.parseMetrics(nodeMetricsStr) : [];
@@ -60,14 +64,6 @@ export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
const edgeClientMetricsStr = getTemplateSrv().replace(query.edgeClientMetrics, options.scopedVars);
const edgeClientMetrics = edgeClientMetricsStr ? this.parseMetrics(edgeClientMetricsStr) : [];
let services = [];
- let t: {
- query: string;
- variables: Recordable;
- } = {
- query: Fragments.globalTopology,
- variables: {duration},
- };
- let serviceObj;
// fetch services from api
const s = {
query: Fragments.services,
@@ -75,16 +71,21 @@ export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
};
const resp = await this.doRequest(s);
services = resp.data.services || [];
+
+ const t: {
+ query: string;
+ variables: Recordable;
+ } = {
+ query: Fragments.servicesTopolgy,
+ variables: {duration},
+ };
+ let serviceObj;
if (serviceName) {
- serviceObj = services.find((d: {name: string, id: string}) => d.name === serviceName);
- if(serviceObj) {
- t = {
- query: Fragments.serviceTopolgy,
- variables: {serviceId: serviceObj.id, duration},
- };
- }
+ serviceObj = services.filter((d: {name: string, id: string}) => d.name === serviceName);
+ } else {
+ serviceObj = services.filter((d: {layers: string[], id: string}) => d.layers.includes(layer));
}
-
+ t.variables.serviceIds = serviceObj.map((d: {layers: string[], id: string}) => d.id);
// fetch topology data from api
const res = await this.doRequest(t);
const {nodes, calls} = this.setTopologyData({nodes: res.data.topology.nodes || [], calls: res.data.topology.calls || []});
diff --git a/src/types.ts b/src/types.ts
index de785b5..ea009ca 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -1,6 +1,7 @@
import { DataQuery, DataSourceJsonData } from '@grafana/data';
export interface MyQuery extends DataQuery {
+ layer?: string;
service?: string;
nodeMetrics?: string;
edgeServerMetrics?: string;