You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2023/03/15 04:58:38 UTC
[skywalking-cli] branch master updated: Support sub-commands for the cross-thread trace profiling (#178)
This is an automated email from the ASF dual-hosted git repository.
wusheng 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 f3eed66 Support sub-commands for the cross-thread trace profiling (#178)
f3eed66 is described below
commit f3eed66ee2ff330e3218fdc995b6f9952901e37c
Author: mrproliu <74...@qq.com>
AuthorDate: Wed Mar 15 12:58:33 2023 +0800
Support sub-commands for the cross-thread trace profiling (#178)
---
CHANGES.md | 1 +
...t.graphql => GetSegmentsProfileAnalyze.graphql} | 18 ++++----
...Analyze.graphql => GetTaskSegmentsList.graphql} | 44 +++++++++++++-----
.../commands/profiling/trace/getProfileAnalyze.go | 24 +++++++---
.../commands/profiling/trace/getProfiledSegment.go | 53 ----------------------
.../commands/profiling/trace/getTaskSegmentList.go | 6 +--
internal/commands/profiling/trace/trace.go | 1 -
pkg/graphql/profiling/trace.go | 24 +++-------
8 files changed, 69 insertions(+), 102 deletions(-)
diff --git a/CHANGES.md b/CHANGES.md
index 3b39d1d..2d6cf7d 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -38,6 +38,7 @@ Release Notes.
* Adapt the sub-command `metrics` for deprecate scope fron entity by @mrproliu in https://github.com/apache/skywalking-cli/pull/173
* Add components in topology related sub-commands. @mrproliu in https://github.com/apache/skywalking-cli/pull/175
* Add the sub-command `metrics nullable` for query the nullable metrics value. @mrproliu in https://github.com/apache/skywalking-cli/pull/176
+* Adapt the sub-command `profiling trace` for adapt the new trace profiling protocol. @mrproliu in https://github.com/apache/skywalking-cli/pull/177
0.10.0
------------------
diff --git a/assets/graphqls/profiling/trace/GetTaskSegmentList.graphql b/assets/graphqls/profiling/trace/GetSegmentsProfileAnalyze.graphql
similarity index 75%
rename from assets/graphqls/profiling/trace/GetTaskSegmentList.graphql
rename to assets/graphqls/profiling/trace/GetSegmentsProfileAnalyze.graphql
index 9d4e474..b25adb4 100644
--- a/assets/graphqls/profiling/trace/GetTaskSegmentList.graphql
+++ b/assets/graphqls/profiling/trace/GetSegmentsProfileAnalyze.graphql
@@ -15,13 +15,13 @@
# specific language governing permissions and limitations
# under the License.
-query ($taskId: String!) {
- result: getProfileTaskSegmentList(taskID: $taskId) {
- segmentId
- endpointNames
- duration
- start
- isError
- traceIds
+query ($queries: [SegmentProfileAnalyzeQuery!]!) {
+ result: getSegmentsProfileAnalyze(queries: $queries) {
+ tip
+ trees {
+ elements {
+ id parentId codeSignature duration durationChildExcluded count
+ }
+ }
}
-}
\ No newline at end of file
+}
diff --git a/assets/graphqls/profiling/trace/GetProfileAnalyze.graphql b/assets/graphqls/profiling/trace/GetTaskSegmentsList.graphql
similarity index 53%
rename from assets/graphqls/profiling/trace/GetProfileAnalyze.graphql
rename to assets/graphqls/profiling/trace/GetTaskSegmentsList.graphql
index a89d410..a0120e1 100644
--- a/assets/graphqls/profiling/trace/GetProfileAnalyze.graphql
+++ b/assets/graphqls/profiling/trace/GetTaskSegmentsList.graphql
@@ -15,17 +15,39 @@
# specific language governing permissions and limitations
# under the License.
-query ($segmentId: String!, $timeRanges: [ProfileAnalyzeTimeRange!]!) {
- result: getProfileAnalyze(segmentId: $segmentId, timeRanges: $timeRanges) {
- trees {
- elements {
- id
- parentId
- codeSignature
- duration
- durationChildExcluded
- count
+query ($taskId: ID!) {
+ result: getProfileTaskSegments(taskID: $taskId) {
+ traceId
+ instanceId
+ instanceName
+ endpointNames
+ duration
+ start
+ spans {
+ spanId
+ parentSpanId
+ segmentId
+ refs {
+ traceId parentSegmentId parentSpanId type
}
+ serviceCode
+ serviceInstanceName
+ startTime
+ endTime
+ endpointName
+ type
+ peer
+ component
+ isError
+ layer
+ tags {
+ key value
+ }
+ logs {
+ time
+ data { key value }
+ }
+ profiled
}
}
-}
+}
\ No newline at end of file
diff --git a/internal/commands/profiling/trace/getProfileAnalyze.go b/internal/commands/profiling/trace/getProfileAnalyze.go
index cff937a..676e59e 100644
--- a/internal/commands/profiling/trace/getProfileAnalyze.go
+++ b/internal/commands/profiling/trace/getProfileAnalyze.go
@@ -37,8 +37,8 @@ var getProfiledAnalyzeCommand = &cli.Command{
ArgsUsage: "[parameters...]",
Flags: []cli.Flag{
&cli.StringFlag{
- Name: "segment-id",
- Usage: "profiled segment id.",
+ Name: "segment-ids",
+ Usage: "profiled segment ids, multiple id split by ',': s1,s2",
},
&cli.StringFlag{
Name: "time-ranges",
@@ -46,10 +46,11 @@ var getProfiledAnalyzeCommand = &cli.Command{
},
},
Action: func(ctx *cli.Context) error {
- segmentID := ctx.String("segment-id")
+ segmentIDs := ctx.String("segment-ids")
+ segmentIDList := strings.Split(segmentIDs, ",")
tagStr := ctx.String("time-ranges")
- var timeRanges []*api.ProfileAnalyzeTimeRange = nil
+ var queries []*api.SegmentProfileAnalyzeQuery = nil
if tagStr != "" {
tagArr := strings.Split(tagStr, ",")
for _, tag := range tagArr {
@@ -62,16 +63,25 @@ var getProfiledAnalyzeCommand = &cli.Command{
if err != nil {
return err
}
- timeRanges = append(timeRanges, &api.ProfileAnalyzeTimeRange{Start: start, End: end})
+
+ // adding time range to each segments
+ for _, segmentID := range segmentIDList {
+ queries = append(queries, &api.SegmentProfileAnalyzeQuery{
+ SegmentID: segmentID,
+ TimeRange: &api.ProfileAnalyzeTimeRange{
+ Start: start, End: end,
+ },
+ })
+ }
}
}
- analysis, err := profiling.GetTraceProfilingAnalyze(ctx, segmentID, timeRanges)
+ analysis, err := profiling.GetTraceProfilingAnalyze(ctx, queries)
if err != nil {
return err
}
- return display.Display(ctx, &displayable.Displayable{Data: analysis, Condition: segmentID})
+ return display.Display(ctx, &displayable.Displayable{Data: analysis, Condition: segmentIDs})
},
}
diff --git a/internal/commands/profiling/trace/getProfiledSegment.go b/internal/commands/profiling/trace/getProfiledSegment.go
deleted file mode 100644
index b6a363a..0000000
--- a/internal/commands/profiling/trace/getProfiledSegment.go
+++ /dev/null
@@ -1,53 +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.
-
-package trace
-
-import (
- "github.com/apache/skywalking-cli/pkg/display"
- "github.com/apache/skywalking-cli/pkg/display/displayable"
- "github.com/apache/skywalking-cli/pkg/graphql/profiling"
-
- "github.com/urfave/cli/v2"
-)
-
-var getProfiledSegmentCommand = &cli.Command{
- Name: "profiled-segment",
- Aliases: []string{"ps"},
- Usage: "Analyze profiled segment with time ranges",
- UsageText: `Analyze profiled segment with time ranges.
-
-Examples:
-1. Analyze profiled segment with time ranges.
-$ swctl profiling trace profiled-segment --segment-id=<segment-id>`,
- Flags: []cli.Flag{
- &cli.StringFlag{
- Name: "segment-id",
- Usage: "profiled segment id.",
- },
- },
- Action: func(ctx *cli.Context) error {
- segmentID := ctx.String("segment-id")
- segment, err := profiling.GetTraceProfilingSegment(ctx, segmentID)
-
- if err != nil {
- return err
- }
-
- return display.Display(ctx, &displayable.Displayable{Data: segment, Condition: segmentID})
- },
-}
diff --git a/internal/commands/profiling/trace/getTaskSegmentList.go b/internal/commands/profiling/trace/getTaskSegmentList.go
index b0ce7e1..58b78dd 100644
--- a/internal/commands/profiling/trace/getTaskSegmentList.go
+++ b/internal/commands/profiling/trace/getTaskSegmentList.go
@@ -28,11 +28,11 @@ import (
var getTaskSegmentListCommand = &cli.Command{
Name: "segment-list",
Aliases: []string{"sl"},
- Usage: "Query profiling trace task segment list",
- UsageText: `Query profiling trace task segment list
+ Usage: "Query profiling trace task segments list",
+ UsageText: `Query profiling trace task segments list
Examples:
-1. Query profiled segment list
+1. Query profiled segments list
$ swctl profiling trace segment-list --service-name=service-name --endpoint-name=endpoint`,
Flags: []cli.Flag{
&cli.StringFlag{
diff --git a/internal/commands/profiling/trace/trace.go b/internal/commands/profiling/trace/trace.go
index e26b308..5c0df87 100644
--- a/internal/commands/profiling/trace/trace.go
+++ b/internal/commands/profiling/trace/trace.go
@@ -33,7 +33,6 @@ on https://github.com/apache/skywalking/blob/master/docs/en/guides/backend-profi
getTaskListCommand,
getTaskLogListCommand,
getTaskSegmentListCommand,
- getProfiledSegmentCommand,
getProfiledAnalyzeCommand,
},
}
diff --git a/pkg/graphql/profiling/trace.go b/pkg/graphql/profiling/trace.go
index 6e78ce5..a1e0b47 100644
--- a/pkg/graphql/profiling/trace.go
+++ b/pkg/graphql/profiling/trace.go
@@ -62,10 +62,10 @@ func GetTraceProfilingTaskLogList(ctx *cli.Context, taskID string) ([]*api.Profi
return response["result"], err
}
-func GetTraceProfilingTaskSegmentList(ctx *cli.Context, taskID string) ([]*api.BasicTrace, error) {
- var response map[string][]*api.BasicTrace
+func GetTraceProfilingTaskSegmentList(ctx *cli.Context, taskID string) ([]*api.ProfiledTraceSegments, error) {
+ var response map[string][]*api.ProfiledTraceSegments
- request := graphql.NewRequest(assets.Read("graphqls/profiling/trace/GetTaskSegmentList.graphql"))
+ request := graphql.NewRequest(assets.Read("graphqls/profiling/trace/GetTaskSegmentsList.graphql"))
request.Var("taskId", taskID)
err := client.ExecuteQuery(ctx, request, &response)
@@ -73,23 +73,11 @@ func GetTraceProfilingTaskSegmentList(ctx *cli.Context, taskID string) ([]*api.B
return response["result"], err
}
-func GetTraceProfilingSegment(ctx *cli.Context, segmentID string) (api.ProfiledSegment, error) {
- var response map[string]api.ProfiledSegment
-
- request := graphql.NewRequest(assets.Read("graphqls/profiling/trace/GetProfiledSegment.graphql"))
- request.Var("segmentId", segmentID)
-
- err := client.ExecuteQuery(ctx, request, &response)
-
- return response["result"], err
-}
-
-func GetTraceProfilingAnalyze(ctx *cli.Context, segmentID string, timeRanges []*api.ProfileAnalyzeTimeRange) (api.ProfileAnalyzation, error) {
+func GetTraceProfilingAnalyze(ctx *cli.Context, queries []*api.SegmentProfileAnalyzeQuery) (api.ProfileAnalyzation, error) {
var response map[string]api.ProfileAnalyzation
- request := graphql.NewRequest(assets.Read("graphqls/profiling/trace/GetProfileAnalyze.graphql"))
- request.Var("segmentId", segmentID)
- request.Var("timeRanges", timeRanges)
+ request := graphql.NewRequest(assets.Read("graphqls/profiling/trace/GetSegmentsProfileAnalyze.graphql"))
+ request.Var("queries", queries)
err := client.ExecuteQuery(ctx, request, &response)