This is an automated email from the ASF dual-hosted git repository.
hoshea 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 dbff942 Refactor metrics linear to adopt v2 protocol (#69)
dbff942 is described below
commit dbff94243f58a866b08fd856c0427b9ebfd6c618
Author: Hoshea Jiang <[email protected]>
AuthorDate: Wed Oct 21 08:53:06 2020 +0800
Refactor metrics linear to adopt v2 protocol (#69)
### Enhancements
- Refactor `metrics linear` and `metrics multiple-linear` commands to
adopt v2 protocol
### Bug Fixes
- Replace invalid links of `OAL` in `README.md`
- Delete duplicate sentence in `README.md`
---
README.md | 43 ++++++----------------
.../{dashboard => metrics}/HeatMap.graphql | 0
.../LabeledMetricsValues.graphql | 0
...Thermodynamic.graphql => MetricsValues.graphql} | 12 +++---
.../metrics/MultipleLinearIntValues.graphql | 22 -----------
commands/metrics/linear/linear-metrics.go | 38 +++++++++----------
commands/metrics/linear/multiple-linear-metrics.go | 41 +++++++++------------
display/graph/graph.go | 17 +++++----
display/graph/linear/linear.go | 12 +++---
graphql/dashboard/global.go | 39 +++-----------------
graphql/metrics/metrics.go | 20 +++++-----
graphql/utils/adapter.go | 27 +++++++++++---
graphql/utils/adapter_test.go | 30 ++++++++-------
13 files changed, 124 insertions(+), 177 deletions(-)
diff --git a/README.md b/README.md
index 5debd1c..4f1623a 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@ git submodule update
make
```
-and copy the `./bin/swctl-latest-(darwin|linux|windows)-amd64` to your `PATH`
directory according to your OS,
+Then copy the `./bin/swctl-latest-(darwin|linux|windows)-amd64` to your `PATH`
directory according to your OS,
usually `/usr/bin/` or `/usr/local/bin`, or you can copy it to any directory
you like,
and add that directory to `PATH`, we recommend you to rename the
`swctl-latest-(darwin|linux|windows)-amd64` to `swctl`.
@@ -160,12 +160,12 @@ Ascii Graph, like coloring in terminal, so please use
`json` or `yaml` instead.
<details>
-<summary>metrics linear [--start=start-time] [--end=end-time]
--name=metrics-name [--id=entity-id]</summary>
+<summary>metrics linear [--start=start-time] [--end=end-time]
--name=metrics-name [--scope=scope-of-metrics]</summary>
| option | description | default |
| :--- | :--- | :--- |
-| `--name` | Metrics name, defined in
[OAL](https://github.com/apache/skywalking/blob/master/oap-server/server-bootstrap/src/main/resources/official_analysis.oal),
such as `all_p99`, etc. |
-| `--id` | the related id if the metrics requires one, e.g. for metrics
`service_p99`, the service `id` is required, use `--id` to specify the service
id, the same for `instance`, `endpoint`, etc. |
+| `--name` | Metrics name, defined in
[OAL](https://github.com/apache/skywalking/blob/master/oap-server/server-bootstrap/src/main/resources/oal/core.oal),
such as `all_p99`, etc. |
+| `--scope` | The scope of metrics, which is consistent with `--name`, such as
`All`, `Service`, `ServiceInstance`, `Endpoint`, `ServiceRelation`,
`ServiceInstanceRelation` and `EndpointRelation`. |`All`|
| `--start` | See [Common options](#common-options) | See [Common
options](#common-options) |
| `--end` | See [Common options](#common-options) | See [Common
options](#common-options) |
@@ -175,15 +175,14 @@ Ascii Graph, like coloring in terminal, so please use
`json` or `yaml` instead.
<details>
-<summary>metrics multiple-linear [--start=start-time] [--end=end-time]
--name=metrics-name [--id=entity-id] [--num=number-of-linear-metrics]</summary>
+<summary>metrics multiple-linear [--start=start-time] [--end=end-time]
--name=metrics-name [--num=number-of-linear-metrics]</summary>
| option | description | default |
| :--- | :--- | :--- |
-| `--name` | Metrics name, defined in
[OAL](https://github.com/apache/skywalking/blob/master/oap-server/server-bootstrap/src/main/resources/official_analysis.oal),
such as `all_p99`, etc. |
-| `--id` | the related id if the metrics requires one, e.g. for metrics
`service_p99`, the service `id` is required, use `--id` to specify the service
id, the same for `instance`, `endpoint`, etc. |
+| `--name` | Metrics name, defined in
[OAL](https://github.com/apache/skywalking/blob/master/oap-server/server-bootstrap/src/main/resources/oal/core.oal),
such as `all_p99`, etc. |
+| `--num` | Number of the linear metrics to fetch | `5` |
| `--start` | See [Common options](#common-options) | See [Common
options](#common-options) |
| `--end` | See [Common options](#common-options) | See [Common
options](#common-options) |
-| `--num` | Number of the linear metrics to fetch | `5` |
</details>
@@ -195,7 +194,7 @@ Ascii Graph, like coloring in terminal, so please use
`json` or `yaml` instead.
| option | description | default |
| :--- | :--- | :--- |
-| `--name` | Metrics name, defined in
[OAL](https://github.com/apache/skywalking/blob/master/oap-server/server-bootstrap/src/main/resources/official_analysis.oal),
such as `service_sla`, etc. |
+| `--name` | Metrics name, defined in
[OAL](https://github.com/apache/skywalking/blob/master/oap-server/server-bootstrap/src/main/resources/oal/core.oal),
such as `service_sla`, etc. |
| `--ids` | IDs that are required by the metric type, such as service IDs for
`service_sla` |
| `--start` | See [Common options](#common-options) | See [Common
options](#common-options) |
| `--end` | See [Common options](#common-options) | See [Common
options](#common-options) |
@@ -210,7 +209,7 @@ Ascii Graph, like coloring in terminal, so please use
`json` or `yaml` instead.
| option | description | default |
| :--- | :--- | :--- |
-| `--name` | Metrics name, defined in
[OAL](https://github.com/apache/skywalking/blob/master/oap-server/server-bootstrap/src/main/resources/official_analysis.oal),
such as `service_sla`, etc. |
+| `--name` | Metrics name, defined in
[OAL](https://github.com/apache/skywalking/blob/master/oap-server/server-bootstrap/src/main/resources/oal/core.oal),
such as `service_sla`, etc. |
| `--service-id` | service ID that are required by the metric type, such as
service IDs for `service_sla` |
| `--start` | See [Common options](#common-options) | See [Common
options](#common-options) |
| `--end` | See [Common options](#common-options) | See [Common
options](#common-options) |
@@ -226,24 +225,8 @@ Ascii Graph, like coloring in terminal, so please use
`json` or `yaml` instead.
| option | description | default |
| :--- | :--- | :--- |
-| `--name` | Metrics name, defined in
[OAL](https://github.com/apache/skywalking/blob/master/oap-server/server-bootstrap/src/main/resources/official_analysis.oal),
such as `service_sla`, etc. |
-| `--scope` | The scope of metrics, which is consistent with `--name`, such as
`All`, `Service`, etc. |`All`|
-| `--start` | See [Common options](#common-options) | See [Common
options](#common-options) |
-| `--end` | See [Common options](#common-options) | See [Common
options](#common-options) |
-
-</details>
-
-<details>
-
-<summary>instance search [--start=start-time] [--end=end-time]
[--regex=instance-name-regex] [--service-id=service-id]
[--service-name=service-name]</summary>
-
-`instance search` filter the instance in the time range of `[start, end]` and
given --regex --service-id or --service-name.
-
-| option | description | default |
-| :--- | :--- | :--- |
-| `--regex` | Query regex of instance name| |
-| `--service-id` | Query by service id (priority over `--service-name`)| |
-| `--service-name` | Query by service name if `service-id` is absent | |
+| `--name` | Metrics name, defined in
[OAL](https://github.com/apache/skywalking/blob/master/oap-server/server-bootstrap/src/main/resources/oal/core.oal),
such as `service_sla`, etc. |
+| `--scope` | The scope of metrics, which is consistent with `--name`, such as
`All`, `Service`, `ServiceInstance`, `Endpoint`, `ServiceRelation`,
`ServiceInstanceRelation` and `EndpointRelation`. |`All`|
| `--start` | See [Common options](#common-options) | See [Common
options](#common-options) |
| `--end` | See [Common options](#common-options) | See [Common
options](#common-options) |
@@ -392,10 +375,8 @@ otherwise,
<summary>Query a linear metrics graph for an instance</summary>
-If you have already got the `id` of the instance:
-
```shell
-$ ./bin/swctl --display=graph metrics linear --name=service_instance_resp_time
--id 5
+$ ./bin/swctl --display=graph metrics linear --name=service_instance_resp_time
--scope ServiceInstance
┌─────────────────────────────────────────────────────────────────────────────────Press
q to
quit──────────────────────────────────────────────────────────────────────────────────┐
│
│
│
│
diff --git a/assets/graphqls/dashboard/HeatMap.graphql
b/assets/graphqls/metrics/HeatMap.graphql
similarity index 100%
rename from assets/graphqls/dashboard/HeatMap.graphql
rename to assets/graphqls/metrics/HeatMap.graphql
diff --git a/assets/graphqls/dashboard/LabeledMetricsValues.graphql
b/assets/graphqls/metrics/LabeledMetricsValues.graphql
similarity index 100%
rename from assets/graphqls/dashboard/LabeledMetricsValues.graphql
rename to assets/graphqls/metrics/LabeledMetricsValues.graphql
diff --git a/assets/graphqls/metrics/Thermodynamic.graphql
b/assets/graphqls/metrics/MetricsValues.graphql
similarity index 84%
rename from assets/graphqls/metrics/Thermodynamic.graphql
rename to assets/graphqls/metrics/MetricsValues.graphql
index ddbbe81..3d1c8a1 100644
--- a/assets/graphqls/metrics/Thermodynamic.graphql
+++ b/assets/graphqls/metrics/MetricsValues.graphql
@@ -16,14 +16,12 @@
# under the License.
query ($condition: MetricsCondition!, $duration: Duration!) {
- result: readHeatMap(condition: $condition, duration: $duration) {
+ result: readMetricsValues(condition: $condition, duration: $duration) {
+ label
values {
- id
- values
- }
- buckets {
- min
- max
+ values {
+ value
+ }
}
}
}
diff --git a/assets/graphqls/metrics/MultipleLinearIntValues.graphql
b/assets/graphqls/metrics/MultipleLinearIntValues.graphql
deleted file mode 100644
index 2450068..0000000
--- a/assets/graphqls/metrics/MultipleLinearIntValues.graphql
+++ /dev/null
@@ -1,22 +0,0 @@
-# Licensed to Apache Software Foundation (ASF) under one or more contributor
-# license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright
-# ownership. Apache Software Foundation (ASF) licenses this file to you under
-# the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-query ($metric: MetricCondition!, $numOfLinear: Int!, $duration: Duration!) {
- result: getMultipleLinearIntValues(metric: $metric, numOfLinear:
$numOfLinear, duration: $duration) {
- values { value }
- }
-}
diff --git a/commands/metrics/linear/linear-metrics.go
b/commands/metrics/linear/linear-metrics.go
index c1aa19b..48cc830 100644
--- a/commands/metrics/linear/linear-metrics.go
+++ b/commands/metrics/linear/linear-metrics.go
@@ -18,18 +18,16 @@
package linear
import (
- "github.com/urfave/cli"
-
- "github.com/apache/skywalking-cli/display/displayable"
-
- "github.com/apache/skywalking-cli/graphql/metrics"
- "github.com/apache/skywalking-cli/graphql/utils"
-
"github.com/apache/skywalking-cli/commands/flags"
"github.com/apache/skywalking-cli/commands/interceptor"
"github.com/apache/skywalking-cli/commands/model"
"github.com/apache/skywalking-cli/display"
+ "github.com/apache/skywalking-cli/display/displayable"
+ "github.com/apache/skywalking-cli/graphql/metrics"
"github.com/apache/skywalking-cli/graphql/schema"
+ "github.com/apache/skywalking-cli/graphql/utils"
+
+ "github.com/urfave/cli"
)
var Single = cli.Command{
@@ -43,9 +41,14 @@ var Single = cli.Command{
Usage: "metrics `NAME`, such as `all_p99`",
Required: true,
},
- cli.StringFlag{
- Name: "id",
- Usage: "`ID`, the related id if the metrics
requires one",
+ cli.GenericFlag{
+ Name: "scope",
+ Usage: "the scope of the query, which follows
the metrics `name`",
+ Value: &model.ScopeEnumValue{
+ Enum: schema.AllScope,
+ Default: schema.ScopeAll,
+ Selected: schema.ScopeAll,
+ },
Required: false,
},
},
@@ -59,12 +62,7 @@ var Single = cli.Command{
start := ctx.String("start")
step := ctx.Generic("step")
metricsName := ctx.String("name")
-
- var id *string = nil
-
- if idString := ctx.String("id"); idString != "" {
- id = &idString
- }
+ scope := ctx.Generic("scope").(*model.ScopeEnumValue).Selected
duration := schema.Duration{
Start: start,
@@ -72,11 +70,13 @@ var Single = cli.Command{
Step: step.(*model.StepEnumValue).Selected,
}
- metricsValues := metrics.LinearIntValues(ctx,
schema.MetricCondition{
+ metricsValues := metrics.LinearIntValues(ctx,
schema.MetricsCondition{
Name: metricsName,
- ID: id,
+ Entity: &schema.Entity{
+ Scope: scope,
+ },
}, duration)
- return display.Display(ctx, &displayable.Displayable{Data:
utils.MetricsToMap(duration, metricsValues)})
+ return display.Display(ctx, &displayable.Displayable{Data:
utils.MetricsValuesToMap(duration, metricsValues)})
},
}
diff --git a/commands/metrics/linear/multiple-linear-metrics.go
b/commands/metrics/linear/multiple-linear-metrics.go
index fae3580..4036435 100644
--- a/commands/metrics/linear/multiple-linear-metrics.go
+++ b/commands/metrics/linear/multiple-linear-metrics.go
@@ -18,18 +18,18 @@
package linear
import (
- "github.com/urfave/cli"
-
- "github.com/apache/skywalking-cli/display/displayable"
-
- "github.com/apache/skywalking-cli/graphql/metrics"
- "github.com/apache/skywalking-cli/graphql/utils"
+ "fmt"
"github.com/apache/skywalking-cli/commands/flags"
"github.com/apache/skywalking-cli/commands/interceptor"
"github.com/apache/skywalking-cli/commands/model"
"github.com/apache/skywalking-cli/display"
+ "github.com/apache/skywalking-cli/display/displayable"
+ "github.com/apache/skywalking-cli/graphql/metrics"
"github.com/apache/skywalking-cli/graphql/schema"
+ "github.com/apache/skywalking-cli/graphql/utils"
+
+ "github.com/urfave/cli"
)
var Multiple = cli.Command{
@@ -43,11 +43,6 @@ var Multiple = cli.Command{
Usage: "metrics `NAME`, such as
`all_percentile`",
Required: true,
},
- cli.StringFlag{
- Name: "id",
- Usage: "`ID`, the related id if the metrics
requires one",
- Required: false,
- },
cli.IntFlag{
Name: "num",
Usage: "`num`, the number of linear metrics
to query, (default: 5)",
@@ -67,10 +62,13 @@ var Multiple = cli.Command{
metricsName := ctx.String("name")
numOfLinear := ctx.Int("num")
- var id *string = nil
+ if numOfLinear > 5 || numOfLinear < 1 {
+ numOfLinear = 5
+ }
- if idString := ctx.String("id"); idString != "" {
- id = &idString
+ var labels []string
+ for i := 0; i < numOfLinear; i++ {
+ labels = append(labels, fmt.Sprintf("%d", i))
}
duration := schema.Duration{
@@ -79,17 +77,14 @@ var Multiple = cli.Command{
Step: step.(*model.StepEnumValue).Selected,
}
- values := metrics.MultipleLinearIntValues(ctx,
schema.MetricCondition{
+ metricsValuesArray := metrics.MultipleLinearIntValues(ctx,
schema.MetricsCondition{
Name: metricsName,
- ID: id,
- }, numOfLinear, duration)
-
- reshaped := make([]map[string]float64, len(values))
-
- for index, value := range values {
- reshaped[index] = utils.MetricsToMap(duration, value)
- }
+ Entity: &schema.Entity{
+ Scope: schema.ScopeAll,
+ },
+ }, labels, duration)
+ reshaped := utils.MetricsValuesArrayToMap(duration,
metricsValuesArray)
return display.Display(ctx, &displayable.Displayable{Data:
reshaped})
},
}
diff --git a/display/graph/graph.go b/display/graph/graph.go
index 73dd51e..22aad02 100644
--- a/display/graph/graph.go
+++ b/display/graph/graph.go
@@ -20,19 +20,18 @@ package graph
import (
"fmt"
"reflect"
+ "strings"
"github.com/urfave/cli"
+ d "github.com/apache/skywalking-cli/display/displayable"
db "github.com/apache/skywalking-cli/display/graph/dashboard"
"github.com/apache/skywalking-cli/display/graph/gauge"
+ "github.com/apache/skywalking-cli/display/graph/heatmap"
+ "github.com/apache/skywalking-cli/display/graph/linear"
"github.com/apache/skywalking-cli/display/graph/tree"
"github.com/apache/skywalking-cli/graphql/dashboard"
-
- "github.com/apache/skywalking-cli/display/graph/heatmap"
"github.com/apache/skywalking-cli/graphql/schema"
-
- d "github.com/apache/skywalking-cli/display/displayable"
- "github.com/apache/skywalking-cli/display/graph/linear"
)
type (
@@ -55,6 +54,8 @@ var (
GlobalDataType = reflect.TypeOf(&GlobalData{})
)
+const multipleLinearTitles = "P50, P75, P90, P95, P99"
+
func Display(ctx *cli.Context, displayable *d.Displayable) error {
data := displayable.Data
@@ -63,10 +64,12 @@ func Display(ctx *cli.Context, displayable *d.Displayable)
error {
return heatmap.Display(displayable)
case LinearMetricsType:
- return linear.Display([]LinearMetrics{data.(LinearMetrics)})
+ return linear.Display(ctx,
[]LinearMetrics{data.(LinearMetrics)}, nil)
case MultiLinearMetricsType:
- return linear.Display(data.(MultiLinearMetrics))
+ inputs := data.(MultiLinearMetrics)
+ titles := strings.Split(multipleLinearTitles, ",
")[:len(inputs)]
+ return linear.Display(ctx, inputs, titles)
case TraceType:
return tree.Display(tree.Adapt(data.(Trace)))
diff --git a/display/graph/linear/linear.go b/display/graph/linear/linear.go
index bf0bc5c..37a4c7c 100644
--- a/display/graph/linear/linear.go
+++ b/display/graph/linear/linear.go
@@ -24,14 +24,15 @@ import (
"sort"
"strings"
- "github.com/mum4k/termdash/linestyle"
-
"github.com/mum4k/termdash"
"github.com/mum4k/termdash/container"
"github.com/mum4k/termdash/container/grid"
+ "github.com/mum4k/termdash/linestyle"
"github.com/mum4k/termdash/terminal/termbox"
"github.com/mum4k/termdash/terminal/terminalapi"
"github.com/mum4k/termdash/widgets/linechart"
+
+ "github.com/urfave/cli"
)
const RootID = "root"
@@ -124,7 +125,7 @@ func layout(rows [][]grid.Element) ([]container.Option,
error) {
return builder.Build()
}
-func Display(inputs []map[string]float64) error {
+func Display(cliCtx *cli.Context, inputs []map[string]float64, titles
[]string) error {
t, err := termbox.New()
if err != nil {
return err
@@ -149,7 +150,7 @@ func Display(inputs []map[string]float64) error {
elements = append(elements, w)
}
- gridOpts, err := layout(LineChartElements(elements, nil))
+ gridOpts, err := layout(LineChartElements(elements, titles))
if err != nil {
return err
}
@@ -157,7 +158,8 @@ func Display(inputs []map[string]float64) error {
err = c.Update(RootID, append(
gridOpts,
container.Border(linestyle.Light),
- container.BorderTitle("PRESS Q TO QUIT"))...,
+ container.BorderTitle(fmt.Sprintf("[%s]-PRESS Q TO QUIT",
cliCtx.String("name"))),
+ container.BorderTitleAlignLeft())...,
)
if err != nil {
diff --git a/graphql/dashboard/global.go b/graphql/dashboard/global.go
index fc37f5a..2ea0872 100644
--- a/graphql/dashboard/global.go
+++ b/graphql/dashboard/global.go
@@ -20,20 +20,19 @@ package dashboard
import (
"bytes"
"io/ioutil"
- "strconv"
"strings"
"github.com/machinebox/graphql"
"github.com/spf13/viper"
"github.com/urfave/cli"
+ "gopkg.in/yaml.v2"
+
"github.com/apache/skywalking-cli/assets"
"github.com/apache/skywalking-cli/graphql/client"
+ "github.com/apache/skywalking-cli/graphql/metrics"
"github.com/apache/skywalking-cli/graphql/schema"
"github.com/apache/skywalking-cli/graphql/utils"
- "github.com/apache/skywalking-cli/logger"
-
- "gopkg.in/yaml.v2"
)
type ButtonTemplate struct {
@@ -167,8 +166,6 @@ func Metrics(ctx *cli.Context, duration schema.Duration)
[][]*schema.SelectedRec
}
func responseLatency(ctx *cli.Context, duration schema.Duration)
[]map[string]float64 {
- var response map[string][]*schema.MetricsValues
-
template, err := LoadTemplate(ctx.String("template"))
if err != nil {
return nil
@@ -183,31 +180,13 @@ func responseLatency(ctx *cli.Context, duration
schema.Duration) []map[string]fl
// need use ", " to split into string array for graphql query.
labelsIndex := strings.Split(template.ResponseLatency.LabelsIndex, ", ")
- request :=
graphql.NewRequest(assets.Read("graphqls/dashboard/LabeledMetricsValues.graphql"))
- request.Var("duration", duration)
- request.Var("condition", template.ResponseLatency.Condition)
- request.Var("labels", labelsIndex)
-
- client.ExecuteQueryOrFail(ctx, request, &response)
+ responseLatency := metrics.MultipleLinearIntValues(ctx,
template.ResponseLatency.Condition, labelsIndex, duration)
// Convert metrics values to map type data.
- responseLatency := response["result"]
- reshaped := make([]map[string]float64, len(responseLatency))
- for _, mvs := range responseLatency {
- index, err := strconv.Atoi(strings.TrimSpace(*mvs.Label))
- if err != nil {
- logger.Log.Fatalln(err)
- return nil
- }
- reshaped[index] = utils.MetricsToMap(duration, *mvs.Values)
- }
-
- return reshaped
+ return utils.MetricsValuesArrayToMap(duration, responseLatency)
}
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{}
@@ -218,13 +197,7 @@ func heatMap(ctx *cli.Context, duration schema.Duration)
schema.HeatMap {
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)
-
- return response["result"]
+ return metrics.Thermodynamic(ctx, template.HeatMap.Condition, duration)
}
func Global(ctx *cli.Context, duration schema.Duration) *GlobalData {
diff --git a/graphql/metrics/metrics.go b/graphql/metrics/metrics.go
index 0cf7099..022779d 100644
--- a/graphql/metrics/metrics.go
+++ b/graphql/metrics/metrics.go
@@ -41,12 +41,12 @@ func IntValues(ctx *cli.Context, condition
schema.BatchMetricConditions, duratio
return response["result"]
}
-func LinearIntValues(ctx *cli.Context, condition schema.MetricCondition,
duration schema.Duration) schema.IntValues {
- var response map[string]schema.IntValues
+func LinearIntValues(ctx *cli.Context, condition schema.MetricsCondition,
duration schema.Duration) schema.MetricsValues {
+ var response map[string]schema.MetricsValues
- request :=
graphql.NewRequest(assets.Read("graphqls/metrics/LinearIntValues.graphql"))
+ request :=
graphql.NewRequest(assets.Read("graphqls/metrics/MetricsValues.graphql"))
- request.Var("metric", condition)
+ request.Var("condition", condition)
request.Var("duration", duration)
client.ExecuteQueryOrFail(ctx, request, &response)
@@ -54,14 +54,14 @@ func LinearIntValues(ctx *cli.Context, condition
schema.MetricCondition, duratio
return response["result"]
}
-func MultipleLinearIntValues(ctx *cli.Context, condition
schema.MetricCondition, numOfLinear int, duration schema.Duration)
[]schema.IntValues {
- var response map[string][]schema.IntValues
+func MultipleLinearIntValues(ctx *cli.Context, condition
schema.MetricsCondition, labels []string, duration schema.Duration)
[]schema.MetricsValues {
+ var response map[string][]schema.MetricsValues
- request :=
graphql.NewRequest(assets.Read("graphqls/metrics/MultipleLinearIntValues.graphql"))
+ request :=
graphql.NewRequest(assets.Read("graphqls/metrics/LabeledMetricsValues.graphql"))
- request.Var("metric", condition)
- request.Var("numOfLinear", numOfLinear)
request.Var("duration", duration)
+ request.Var("condition", condition)
+ request.Var("labels", labels)
client.ExecuteQueryOrFail(ctx, request, &response)
@@ -71,7 +71,7 @@ func MultipleLinearIntValues(ctx *cli.Context, condition
schema.MetricCondition,
func Thermodynamic(ctx *cli.Context, condition schema.MetricsCondition,
duration schema.Duration) schema.HeatMap {
var response map[string]schema.HeatMap
- request :=
graphql.NewRequest(assets.Read("graphqls/metrics/Thermodynamic.graphql"))
+ request :=
graphql.NewRequest(assets.Read("graphqls/metrics/HeatMap.graphql"))
request.Var("condition", condition)
request.Var("duration", duration)
diff --git a/graphql/utils/adapter.go b/graphql/utils/adapter.go
index cabf7cb..1f5918f 100644
--- a/graphql/utils/adapter.go
+++ b/graphql/utils/adapter.go
@@ -18,17 +18,32 @@
package utils
import (
+ "strconv"
+ "strings"
"time"
"github.com/apache/skywalking-cli/graphql/schema"
"github.com/apache/skywalking-cli/logger"
)
-type IntValues schema.IntValues
+// MetricsValuesArrayToMap converts Array of MetricsValues into a map that
uses time as key.
+func MetricsValuesArrayToMap(duration schema.Duration, mvArray
[]schema.MetricsValues) []map[string]float64 {
+ ret := make([]map[string]float64, len(mvArray))
+ for _, mvs := range mvArray {
+ index, err := strconv.Atoi(strings.TrimSpace(*mvs.Label))
+ if err != nil {
+ logger.Log.Fatalln(err)
+ return nil
+ }
+ ret[index] = MetricsValuesToMap(duration, mvs)
+ }
+ return ret
+}
-func MetricsToMap(duration schema.Duration, intValues schema.IntValues)
map[string]float64 {
- kvInts := intValues.Values
- values := map[string]float64{}
+// MetricsValuesToMap converts MetricsValues into a map that uses time as key.
+func MetricsValuesToMap(duration schema.Duration, metricsValues
schema.MetricsValues) map[string]float64 {
+ kvInts := metricsValues.Values.Values
+ ret := map[string]float64{}
format := StepFormats[duration.Step]
startTime, err := time.Parse(format, duration.Start)
@@ -38,10 +53,10 @@ func MetricsToMap(duration schema.Duration, intValues
schema.IntValues) map[stri
step := StepDuration[duration.Step]
for idx, value := range kvInts {
- values[startTime.Add(time.Duration(idx)*step).Format(format)] =
float64(value.Value)
+ ret[startTime.Add(time.Duration(idx)*step).Format(format)] =
float64(value.Value)
}
- return values
+ return ret
}
// HeatMapToMap converts a HeatMap into a map that uses time as key.
diff --git a/graphql/utils/adapter_test.go b/graphql/utils/adapter_test.go
index ff3b64c..1d8270d 100644
--- a/graphql/utils/adapter_test.go
+++ b/graphql/utils/adapter_test.go
@@ -26,8 +26,8 @@ import (
func TestMetricsToMap(t *testing.T) {
type args struct {
- duration schema.Duration
- intValues schema.IntValues
+ duration schema.Duration
+ metricsValues schema.MetricsValues
}
tests := []struct {
name string
@@ -42,16 +42,18 @@ func TestMetricsToMap(t *testing.T) {
End: "2020-01-01 0007",
Step: schema.StepMinute,
},
- intValues: schema.IntValues{
- Values: []*schema.KVInt{
- {Value: 0},
- {Value: 1},
- {Value: 2},
- {Value: 3},
- {Value: 4},
- {Value: 5},
- {Value: 6},
- {Value: 7},
+ metricsValues: schema.MetricsValues{
+ Values: &schema.IntValues{
+ Values: []*schema.KVInt{
+ {Value: 0},
+ {Value: 1},
+ {Value: 2},
+ {Value: 3},
+ {Value: 4},
+ {Value: 5},
+ {Value: 6},
+ {Value: 7},
+ },
},
},
},
@@ -69,8 +71,8 @@ func TestMetricsToMap(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- if got := MetricsToMap(tt.args.duration,
tt.args.intValues); !reflect.DeepEqual(got, tt.want) {
- t.Errorf("MetricsToMap() = %v, want %v", got,
tt.want)
+ if got := MetricsValuesToMap(tt.args.duration,
tt.args.metricsValues); !reflect.DeepEqual(got, tt.want) {
+ t.Errorf("MetricsValuesToMap() = %v, want %v",
got, tt.want)
}
})
}