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 <741550...@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)
 

Reply via email to