feat: add fields on query editor
diff --git a/src/components/QueryEditor.tsx b/src/components/QueryEditor.tsx
index 872a423..6cca4a8 100644
--- a/src/components/QueryEditor.tsx
+++ b/src/components/QueryEditor.tsx
@@ -7,18 +7,42 @@
type Props = QueryEditorProps<DataSource, MyQuery, MyDataSourceOptions>;
export function QueryEditor({ query, onChange, onRunQuery }: Props) {
- const onQueryTextChange = (event: ChangeEvent<HTMLInputElement>) => {
- onChange({ ...query, queryText: event.target.value });
+ const onServiceChange = (event: ChangeEvent<HTMLInputElement>) => {
+ onChange({ ...query, service: event.target.value });
+ };
+ const onLayerChange = (event: ChangeEvent<HTMLInputElement>) => {
+ onChange({ ...query, layer: event.target.value });
+ };
+ const onNodeMetricsChange = (event: ChangeEvent<HTMLInputElement>) => {
+ onChange({ ...query, nodeMetrics: event.target.value });
+ };
+ const onEdgeServerMetricsChange = (event: ChangeEvent<HTMLInputElement>) => {
+ onChange({ ...query, edgeServerMetrics: event.target.value });
+ };
+ const onEdgeClientMetricsChange = (event: ChangeEvent<HTMLInputElement>) => {
+ onChange({ ...query, edgeClientMetrics: event.target.value });
};
const onRunQueryText = () => {
onRunQuery();
};
- const { queryText } = query;
+ const { service, layer, nodeMetrics, edgeServerMetrics, edgeClientMetrics } = query;
return (
<div className="gf-form">
- <InlineField label="Query Text" tooltip="Not used yet">
- <Input onBlur={onRunQueryText} onChange={onQueryTextChange} value={queryText || ''} width={40} />
+ <InlineField label="Service" tooltip="Not used yet">
+ <Input onBlur={onRunQueryText} onChange={onServiceChange} value={service || ''} width={40} />
+ </InlineField>
+ <InlineField label="Layer" tooltip="Not used yet">
+ <Input onBlur={onRunQueryText} onChange={onLayerChange} value={layer || ''} width={40} />
+ </InlineField>
+ <InlineField label="Node Metrics" tooltip="Not used yet">
+ <Input onBlur={onRunQueryText} onChange={onNodeMetricsChange} value={nodeMetrics || ''} width={40} />
+ </InlineField>
+ <InlineField label="Edge Server Metrics" tooltip="Not used yet">
+ <Input onBlur={onRunQueryText} onChange={onEdgeServerMetricsChange} value={edgeServerMetrics || ''} width={40} />
+ </InlineField>
+ <InlineField label="Edge Client Metrics" tooltip="Not used yet">
+ <Input onBlur={onRunQueryText} onChange={onEdgeClientMetricsChange} value={edgeClientMetrics || ''} width={40} />
</InlineField>
</div>
);
diff --git a/src/constant.ts b/src/constant.ts
index 4b60de8..ea4ed84 100644
--- a/src/constant.ts
+++ b/src/constant.ts
@@ -3,8 +3,10 @@
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 }",
};
+
// proxy route
export const RoutePath = '/graphql';
+
export enum TimeType {
MINUTE_TIME = "MINUTE",
HOUR_TIME = "HOUR",
diff --git a/src/datasource.ts b/src/datasource.ts
index 9584b85..94f507b 100644
--- a/src/datasource.ts
+++ b/src/datasource.ts
@@ -42,20 +42,21 @@
};
const promises = options.targets.map(async (target) => {
const query = defaults(target, DEFAULT_QUERY);
- const str = getTemplateSrv().replace(query.queryText, options.scopedVars);
- this.validate(str);
+ const serviceName = getTemplateSrv().replace(query.service, options.scopedVars);
+ const layer = getTemplateSrv().replace(query.layer, options.scopedVars);
+ this.validate(layer);
let t: any = {
query: Fragments.globalTopology,
variables: {duration},
};
- if (str) {
+ if (serviceName) {
const s = {
query: Fragments.services,
variables: {duration, keyword: ""},
};
// fetch services from api
const resp = await this.doRequest(s);
- const serviceObj = (resp.data.services || []).find((d: {name: string, id: string}) => d.name === str);
+ const serviceObj = (resp.data.services || []).find((d: {name: string, id: string}) => d.name === serviceName);
if(serviceObj) {
t = {
query: Fragments.serviceTopolgy,
diff --git a/src/types.ts b/src/types.ts
index 1e04930..8244a98 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -1,13 +1,14 @@
import { DataQuery, DataSourceJsonData } from '@grafana/data';
export interface MyQuery extends DataQuery {
- queryText?: string;
- constant: number;
+ service?: string;
+ layer?: string;
+ nodeMetrics?: string;
+ edgeServerMetrics?: string;
+ edgeClientMetrics?: string;
}
-export const DEFAULT_QUERY: Partial<MyQuery> = {
- constant: 6.5,
-};
+export const DEFAULT_QUERY: Partial<MyQuery> = {};
/**
* These are options configured for each DataSource instance