@cloudcare/guance-front-tools 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/guance-dashboard.json +1 -1
- package/lib/cjs/generated/dashboardCharts.d.ts +1 -4
- package/lib/esm/generated/dashboardCharts.d.ts +1 -4
- package/lib/example/pod.json +2133 -0
- package/lib/example/test.json +3122 -0
- package/lib/scripts/grafana-covert-to-guance.js +12 -5
- package/lib/scripts/grafana-covert-to-guance.ts +12 -5
- package/package.json +1 -1
- package/schemas/charts/chart-schema.json +10 -2
- package/test/pod.json +1 -0
|
@@ -136,21 +136,22 @@ function covertPanelToGuanceChart(grafanaPanel, rowPanel) {
|
|
|
136
136
|
const queries = [];
|
|
137
137
|
if (targets && targets.length) {
|
|
138
138
|
targets.forEach((_target) => {
|
|
139
|
-
|
|
139
|
+
const queryStr = _target.expr || _target.query;
|
|
140
|
+
if (!queryStr)
|
|
140
141
|
return;
|
|
141
142
|
const queryItem = {
|
|
142
143
|
datasource: 'dataflux',
|
|
143
144
|
qtype: 'promql',
|
|
144
145
|
type: chartType,
|
|
145
146
|
query: {
|
|
146
|
-
q: replaceVariableStr(
|
|
147
|
+
q: replaceVariableStr(queryStr),
|
|
147
148
|
type: 'promql',
|
|
148
149
|
},
|
|
149
150
|
};
|
|
150
151
|
queries.push(queryItem);
|
|
151
152
|
});
|
|
152
153
|
}
|
|
153
|
-
|
|
154
|
+
let settings = {};
|
|
154
155
|
if (options) {
|
|
155
156
|
switch (chartType) {
|
|
156
157
|
case 'text':
|
|
@@ -161,6 +162,12 @@ function covertPanelToGuanceChart(grafanaPanel, rowPanel) {
|
|
|
161
162
|
};
|
|
162
163
|
queries.push(queryItem);
|
|
163
164
|
break;
|
|
165
|
+
case 'toplist':
|
|
166
|
+
settings = {
|
|
167
|
+
showTopSize: true,
|
|
168
|
+
chartType: 'bar',
|
|
169
|
+
};
|
|
170
|
+
break;
|
|
164
171
|
default:
|
|
165
172
|
break;
|
|
166
173
|
}
|
|
@@ -170,7 +177,7 @@ function covertPanelToGuanceChart(grafanaPanel, rowPanel) {
|
|
|
170
177
|
settings: settings,
|
|
171
178
|
},
|
|
172
179
|
group: {
|
|
173
|
-
name: rowPanel ? rowPanel.title :
|
|
180
|
+
name: rowPanel ? rowPanel.title : null,
|
|
174
181
|
},
|
|
175
182
|
pos: {
|
|
176
183
|
x: pos.x,
|
|
@@ -277,7 +284,7 @@ const covert = (grafanaData) => {
|
|
|
277
284
|
const guanceVariableItem = {
|
|
278
285
|
type: VARIABLE_MAP[type],
|
|
279
286
|
datasource: VARIABLE_DATASOURCE_MAP[type],
|
|
280
|
-
name: _variable.label,
|
|
287
|
+
name: _variable.label || _variable.name || '',
|
|
281
288
|
seq: index,
|
|
282
289
|
hide: _variable.hide ? 1 : 0,
|
|
283
290
|
multiple: _variable.multi !== undefined ? _variable.multi : true,
|
|
@@ -141,20 +141,21 @@ function covertPanelToGuanceChart(grafanaPanel: Panel, rowPanel: RowPanel | unde
|
|
|
141
141
|
const queries: GuanceChartQueries = []
|
|
142
142
|
if (targets && targets.length) {
|
|
143
143
|
targets.forEach((_target) => {
|
|
144
|
-
|
|
144
|
+
const queryStr: string | unknown = _target.expr || _target.query
|
|
145
|
+
if (!queryStr) return
|
|
145
146
|
const queryItem: GuanceChartQueryItem = {
|
|
146
147
|
datasource: 'dataflux',
|
|
147
148
|
qtype: 'promql',
|
|
148
149
|
type: chartType,
|
|
149
150
|
query: {
|
|
150
|
-
q: replaceVariableStr(
|
|
151
|
+
q: replaceVariableStr(queryStr as string),
|
|
151
152
|
type: 'promql',
|
|
152
153
|
},
|
|
153
154
|
}
|
|
154
155
|
queries.push(queryItem)
|
|
155
156
|
})
|
|
156
157
|
}
|
|
157
|
-
|
|
158
|
+
let settings: GuanceChartSettings = {}
|
|
158
159
|
if (options) {
|
|
159
160
|
switch (chartType) {
|
|
160
161
|
case 'text':
|
|
@@ -165,6 +166,12 @@ function covertPanelToGuanceChart(grafanaPanel: Panel, rowPanel: RowPanel | unde
|
|
|
165
166
|
}
|
|
166
167
|
queries.push(queryItem)
|
|
167
168
|
break
|
|
169
|
+
case 'toplist':
|
|
170
|
+
settings = {
|
|
171
|
+
showTopSize: true,
|
|
172
|
+
chartType: 'bar',
|
|
173
|
+
}
|
|
174
|
+
break
|
|
168
175
|
default:
|
|
169
176
|
break
|
|
170
177
|
}
|
|
@@ -174,7 +181,7 @@ function covertPanelToGuanceChart(grafanaPanel: Panel, rowPanel: RowPanel | unde
|
|
|
174
181
|
settings: settings,
|
|
175
182
|
},
|
|
176
183
|
group: {
|
|
177
|
-
name: rowPanel ? rowPanel.title :
|
|
184
|
+
name: rowPanel ? rowPanel.title : null,
|
|
178
185
|
},
|
|
179
186
|
pos: {
|
|
180
187
|
x: pos.x,
|
|
@@ -271,7 +278,7 @@ const covert = (grafanaData: GrafanaDashboardType): GuanceDashboardType => {
|
|
|
271
278
|
const guanceVariableItem: ChartVarsItem = {
|
|
272
279
|
type: VARIABLE_MAP[type],
|
|
273
280
|
datasource: VARIABLE_DATASOURCE_MAP[type],
|
|
274
|
-
name: _variable.label,
|
|
281
|
+
name: _variable.label || _variable.name || '',
|
|
275
282
|
seq: index,
|
|
276
283
|
hide: _variable.hide ? 1 : 0,
|
|
277
284
|
multiple: _variable.multi !== undefined ? _variable.multi : true,
|
package/package.json
CHANGED
|
@@ -25,8 +25,16 @@
|
|
|
25
25
|
"type": "object",
|
|
26
26
|
"properties": {
|
|
27
27
|
"name": {
|
|
28
|
-
"
|
|
29
|
-
|
|
28
|
+
"oneOf": [
|
|
29
|
+
{
|
|
30
|
+
"type": "string",
|
|
31
|
+
"description": "分组名称"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"type": "null",
|
|
35
|
+
"description": "分组名称"
|
|
36
|
+
}
|
|
37
|
+
]
|
|
30
38
|
}
|
|
31
39
|
}
|
|
32
40
|
},
|
package/test/pod.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"title":"项目容器状态","dashboardExtend":{"groupUnfoldStatus":{}},"main":{"vars":[{"type":"PROMQL_QUERY","datasource":"dataflux","name":"namespace","seq":0,"hide":0,"multiple":false,"includeStar":false,"valueSort":"desc","code":"namespace","definition":{"value":"label_values(kube_pod_info, namespace)","defaultVal":{"label":"kube-system","value":"kube-system"}}},{"type":"PROMQL_QUERY","datasource":"dataflux","name":"workload","seq":1,"hide":0,"multiple":false,"includeStar":false,"valueSort":"desc","code":"workload","definition":{"value":"label_values(kube_deployment_created{namespace=\"#{namespace}\"}, deployment)","defaultVal":{"label":"tiller-deploy","value":"tiller-deploy"}}}],"charts":[{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":0,"y":0.5,"h":5.8,"w":3},"name":"CPU Limit","queries":[{"datasource":"dataflux","qtype":"promql","type":"singlestat","query":{"q":"max(kube_pod_container_resource_limits_cpu_cores{namespace=\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"})","type":"promql"}}],"type":"singlestat"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":3,"y":0.5,"h":5.8,"w":3},"name":"Memory Limit","queries":[{"datasource":"dataflux","qtype":"promql","type":"singlestat","query":{"q":"max(kube_pod_container_resource_limits_memory_bytes{namespace=\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"})","type":"promql"}}],"type":"singlestat"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":6,"y":0.5,"h":5.8,"w":3},"name":"最大实例数","queries":[{"datasource":"dataflux","qtype":"promql","type":"singlestat","query":{"q":"kube_deployment_spec_replicas{deployment=~\"#{workload}\"}","type":"promql"}}],"type":"singlestat"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":9,"y":0.5,"h":15.3,"w":5},"name":"整体CPU使用率","queries":[{"datasource":"dataflux","qtype":"promql","type":"gauge","query":{"q":"avg(\navg(irate(container_cpu_usage_seconds_total{container!~\"(POD|istio-proxy)\", namespace=\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"}[5m]) ) by (pod)\n/\navg( kube_pod_container_resource_limits_cpu_cores{namespace=\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"} ) by (pod)\n)","type":"promql"}}],"type":"gauge"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":14,"y":0.5,"h":15.3,"w":5},"name":"整体内存使用率","queries":[{"datasource":"dataflux","qtype":"promql","type":"gauge","query":{"q":"avg(\navg(container_memory_working_set_bytes{ container=\"#{workload}\",namespace=\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"} ) by (pod)\n/\nmax( kube_pod_container_resource_limits_memory_bytes{container=~\"#{workload}\"} ) by (pod)\n)","type":"promql"}}],"type":"gauge"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":19,"y":0.5,"h":15.3,"w":5},"name":"实例可用率","queries":[{"datasource":"dataflux","qtype":"promql","type":"gauge","query":{"q":"kube_deployment_status_replicas_available{deployment=~\"#{workload}\"} / kube_deployment_spec_replicas{deployment=~\"#{workload}\"} ","type":"promql"}}],"type":"gauge"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":0,"y":5.8,"h":9.6,"w":9},"name":"可用副本数","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"kube_deployment_status_replicas_available{deployment=~\"${workload}\"}","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":0,"y":15.3,"h":15.3,"w":12},"name":"CPU使用率","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"avg(irate(container_cpu_usage_seconds_total{container!~\"(POD|istio-proxy)\", namespace=\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"}[5m]) ) by (pod)\n/\nmax( kube_pod_container_resource_limits_cpu_cores{namespace=\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"} ) by (pod)","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":12,"y":15.3,"h":15.3,"w":12},"name":"内存使用率","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"avg(container_memory_working_set_bytes{ container=\"#{workload}\", namespace=\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"} ) by (pod)\n/\nmax( kube_pod_container_resource_limits_memory_bytes{namespace=\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"} ) by (pod)","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":0,"y":30.5,"h":15.3,"w":12},"name":"磁盘读取速率","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"rate(container_fs_reads_bytes_total{namespace=~\"#{namespace}\", container=~\"#{workload}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"}[5m])","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":12,"y":30.5,"h":15.3,"w":12},"name":"磁盘写入速率","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"rate(container_fs_writes_bytes_total{namespace=~\"#{namespace}\", container=~\"#{workload}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"}[5m])","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":0,"y":45.7,"h":17.2,"w":12},"name":"网络传输速率","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"irate(container_network_transmit_bytes_total{namespace=~\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"}[5m])","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":12,"y":45.7,"h":17.2,"w":12},"name":"网络接收速率","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"irate(container_network_receive_bytes_total{namespace=~\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"}[5m])","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":0,"y":62.8,"h":15.3,"w":12},"name":"文件打开数","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"process_files_open{namespace=~\"#{namespace}\", service=~\"#{workload}\"}","type":"promql"}},{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"process_files_open_files{namespace=~\"#{namespace}\", service=~\"#{workload}\"}","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":12,"y":62.8,"h":15.3,"w":12},"name":"网络速率","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"sum(irate(container_network_receive_bytes_total{namespace=~\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"}[5m]))","type":"promql"}},{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"0- sum(irate(container_network_transmit_bytes_total{namespace=~\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"}[5m]))","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":0,"y":78,"h":15.3,"w":12},"name":"业务状态码 isSuccess","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"product_appId_isSuccess:polaris_requests_business_code_total:increase1m{appId=~\"#{workload}\"}","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":12,"y":78,"h":15.3,"w":12},"name":"业务状态码 respCode - busCode","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"sum(product_appId_isSuccess_respCode_busCode:polaris_requests_business_code_total:increase1m{appId=~\"#{workload}\"}) by (respCode, busCode)","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":0,"y":93.2,"h":15.3,"w":12},"name":"访问量","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"sum(increase(nginx_ingress_controller_requests{namespace=\"#{namespace}\", service=\"#{workload}\",service!~\"ingress.+\"}[1m])) by (service) ","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":12,"y":93.2,"h":15.3,"w":12},"name":"状态码","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"sum(increase(nginx_ingress_controller_requests{status=~\"(40[1-4]|40[5-9]|4[1-9][0-9]|5[0-9]+)\", namespace=\"#{namespace}\", service=\"#{workload}\"}[1m])) by (service, status) > 0","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":0,"y":108.4,"h":15.3,"w":12},"name":"cpu throttle (核心数)","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"irate(container_cpu_cfs_throttled_seconds_total{container=~\"#{workload}\", namespace=\"#{namespace}\", pod=~\"#{workload}-[0-9a-z]+-[0-9a-z]+\"}[5m])","type":"promql"}}],"type":"sequence"},{"extend":{"settings":{}},"group":{"name":null},"pos":{"x":12,"y":108.4,"h":15.3,"w":12},"name":"pod挂载状态","queries":[{"datasource":"dataflux","qtype":"promql","type":"sequence","query":{"q":"kube_pod_container_status_ready{container=\"#{workload}\"} == 1","type":"promql"}}],"type":"sequence"}],"groups":[]}}
|