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