You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2020/07/30 15:12:12 UTC
[skywalking-cli] branch master updated: Fix `dashboard global`
command cannot return json result (#49)
This is an automated email from the ASF dual-hosted git repository.
kezhenxu94 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-cli.git
The following commit(s) were added to refs/heads/master by this push:
new 61a8081 Fix `dashboard global` command cannot return json result (#49)
61a8081 is described below
commit 61a80813f45d5b10cfb4c25c0191e03f6497bf66
Author: Hoshea Jiang <fg...@gmail.com>
AuthorDate: Thu Jul 30 23:12:05 2020 +0800
Fix `dashboard global` command cannot return json result (#49)
---
.../dashboard/LabeledMetricsValues.graphql | 4 +--
commands/dashboard/global/global.go | 12 ++++++-
graphql/dashboard/global.go | 38 +++++++++++++++++++---
3 files changed, 46 insertions(+), 8 deletions(-)
diff --git a/assets/graphqls/dashboard/LabeledMetricsValues.graphql b/assets/graphqls/dashboard/LabeledMetricsValues.graphql
index 9b8c2ed..25fa78e 100644
--- a/assets/graphqls/dashboard/LabeledMetricsValues.graphql
+++ b/assets/graphqls/dashboard/LabeledMetricsValues.graphql
@@ -15,8 +15,8 @@
# specific language governing permissions and limitations
# under the License.
-query ($condition: MetricsCondition!, $label: [String!]!, $duration: Duration!) {
- result: readLabeledMetricsValues(condition: $condition, labels: $label, duration: $duration) {
+query ($condition: MetricsCondition!, $labels: [String!]!, $duration: Duration!) {
+ result: readLabeledMetricsValues(condition: $condition, labels: $labels, duration: $duration) {
label
values {
values {
diff --git a/commands/dashboard/global/global.go b/commands/dashboard/global/global.go
index 2a1bc04..baa0226 100644
--- a/commands/dashboard/global/global.go
+++ b/commands/dashboard/global/global.go
@@ -36,7 +36,17 @@ var GlobalCommand = cli.Command{
ShortName: "g",
Usage: "Display global data",
Description: "Display global data",
- Flags: flags.DurationFlags,
+ Flags: flags.Flags(
+ flags.DurationFlags,
+ []cli.Flag{
+ cli.StringFlag{
+ Name: "template",
+ Usage: "load dashboard UI template",
+ Required: false,
+ Value: dashboard.DefaultTemplatePath,
+ },
+ },
+ ),
Before: interceptor.BeforeChain([]cli.BeforeFunc{
interceptor.TimezoneInterceptor,
interceptor.DurationInterceptor,
diff --git a/graphql/dashboard/global.go b/graphql/dashboard/global.go
index eb8cf13..c0d2d8d 100644
--- a/graphql/dashboard/global.go
+++ b/graphql/dashboard/global.go
@@ -21,6 +21,7 @@ import (
"encoding/json"
"io/ioutil"
"os"
+ "strings"
"github.com/machinebox/graphql"
"github.com/urfave/cli"
@@ -56,10 +57,18 @@ type GlobalData struct {
HeatMap schema.HeatMap `json:"heatMap"`
}
+// Use singleton pattern to make sure to load template only once.
+var globalTemplate *GlobalTemplate
+
const DefaultTemplatePath = "templates/Dashboard.Global.json"
+// LoadTemplate reads UI template from file.
func LoadTemplate(filename string) (*GlobalTemplate, error) {
- var config GlobalTemplate
+ if globalTemplate != nil {
+ return globalTemplate, nil
+ }
+
+ var t GlobalTemplate
var byteValue []byte
if filename == DefaultTemplatePath {
@@ -78,20 +87,22 @@ func LoadTemplate(filename string) (*GlobalTemplate, error) {
}
}
- if err := json.Unmarshal(byteValue, &config); err != nil {
+ if err := json.Unmarshal(byteValue, &t); err != nil {
return nil, err
}
- return &config, nil
+ globalTemplate = &t
+ return globalTemplate, nil
}
func Metrics(ctx *cli.Context, duration schema.Duration) [][]*schema.SelectedRecord {
var ret [][]*schema.SelectedRecord
- configs, err := LoadTemplate(ctx.String("template"))
+
+ template, err := LoadTemplate(ctx.String("template"))
if err != nil {
return nil
}
- for _, m := range configs.Metrics {
+ for _, m := range template.Metrics {
var response map[string][]*schema.SelectedRecord
request := graphql.NewRequest(assets.Read("graphqls/dashboard/SortMetrics.graphql"))
request.Var("condition", m.Condition)
@@ -107,8 +118,19 @@ func Metrics(ctx *cli.Context, duration schema.Duration) [][]*schema.SelectedRec
func responseLatency(ctx *cli.Context, duration schema.Duration) []*schema.MetricsValues {
var response map[string][]*schema.MetricsValues
+ template, err := LoadTemplate(ctx.String("template"))
+ if err != nil {
+ return nil
+ }
+
+ // labels in the template file is string type,
+ // need to convert to string array for graphql query.
+ labels := strings.Split(template.ResponseLatency.Labels, ",")
+
request := graphql.NewRequest(assets.Read("graphqls/dashboard/LabeledMetricsValues.graphql"))
request.Var("duration", duration)
+ request.Var("condition", template.ResponseLatency.Condition)
+ request.Var("labels", labels)
client.ExecuteQueryOrFail(ctx, request, &response)
@@ -118,8 +140,14 @@ func responseLatency(ctx *cli.Context, duration schema.Duration) []*schema.Metri
func heatMap(ctx *cli.Context, duration schema.Duration) schema.HeatMap {
var response map[string]schema.HeatMap
+ template, err := LoadTemplate(ctx.String("template"))
+ if err != nil {
+ return schema.HeatMap{}
+ }
+
request := graphql.NewRequest(assets.Read("graphqls/dashboard/HeatMap.graphql"))
request.Var("duration", duration)
+ request.Var("condition", template.HeatMap.Condition)
client.ExecuteQueryOrFail(ctx, request, &response)