This is an automated email from the ASF dual-hosted git repository.

wu-sheng 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 c0b5f58  Add --value-column / --value-type to `admin inspect entities` 
for foreign-metric inspect (#230)
c0b5f58 is described below

commit c0b5f58f69666761e526314ef15911450eb958f2
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Tue Jun 23 21:06:27 2026 +0800

    Add --value-column / --value-type to `admin inspect entities` for 
foreign-metric inspect (#230)
    
    * Add --value-column / --value-type to admin inspect entities for 
foreign-metric inspect
    
    SkyWalking OAP's /inspect/entities now accepts a metric persisted by 
another OAP
    (one this node does not define locally) when the caller supplies the 
metric's
    value column + type. Expose those as --value-column / --value-type on
    `swctl admin inspect entities`; both are passed through as query params and 
are
    required only when the metric is unknown to the target OAP's local registry.
---
 internal/commands/admin/inspect/inspect.go | 28 +++++++++++++++++++++-------
 pkg/admin/inspect/inspect.go               | 13 ++++++++++++-
 2 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/internal/commands/admin/inspect/inspect.go 
b/internal/commands/admin/inspect/inspect.go
index 528d6c6..385807a 100644
--- a/internal/commands/admin/inspect/inspect.go
+++ b/internal/commands/admin/inspect/inspect.go
@@ -92,7 +92,11 @@ Each row carries an MQE-ready entity to paste into a 
follow-up "swctl metrics ex
 
 Examples:
 1. Entities reporting service_cpm in the last 30 minutes:
-$ swctl admin inspect entities --metric service_cpm`,
+$ swctl admin inspect entities --metric service_cpm
+
+2. Inspect a metric persisted by ANOTHER OAP (not defined on this OAP) — 
supply its value
+   column + type so the OAP resolves it from storage without its local 
registry:
+$ swctl admin inspect entities --metric meter_foo --value-column value 
--value-type LONG`,
        Flags: flags.Flags(
                flags.DurationFlags,
                []cli.Flag{
@@ -105,6 +109,14 @@ $ swctl admin inspect entities --metric service_cpm`,
                                Name:  "limit",
                                Usage: fmt.Sprintf("max rows scanned at the 
storage layer (1-%d, server default 300)", inspect.MaxLimit),
                        },
+                       &cli.StringFlag{
+                               Name:  "value-column",
+                               Usage: "the metric's value `column` (e.g. 
value, value_, double_value); REQUIRED when the metric is not defined on the 
target OAP",
+                       },
+                       &cli.StringFlag{
+                               Name:  "value-type",
+                               Usage: "value data `type` (LONG / INT / DOUBLE 
/ LABELED); REQUIRED when the metric is not defined on the target OAP",
+                       },
                },
        ),
        Before: interceptor.BeforeChain(
@@ -117,12 +129,14 @@ $ swctl admin inspect entities --metric service_cpm`,
                }
                step := ctx.Generic("step").(*model.StepEnumValue).Selected
 
-               entities, err := inspect.ListEntities(ctx.Context, 
inspect.EntitiesOptions{
-                       Metric: ctx.String("metric"),
-                       Start:  ctx.String("start"),
-                       End:    ctx.String("end"),
-                       Step:   string(step),
-                       Limit:  limit,
+               entities, err := inspect.ListEntities(ctx.Context, 
&inspect.EntitiesOptions{
+                       Metric:      ctx.String("metric"),
+                       Start:       ctx.String("start"),
+                       End:         ctx.String("end"),
+                       Step:        string(step),
+                       Limit:       limit,
+                       ValueColumn: ctx.String("value-column"),
+                       ValueType:   ctx.String("value-type"),
                })
                if err != nil {
                        return preflight.Explain(ctx.Context, err, 
preflight.ModuleInspect, "SW_INSPECT")
diff --git a/pkg/admin/inspect/inspect.go b/pkg/admin/inspect/inspect.go
index 6ff9807..ef3ee20 100644
--- a/pkg/admin/inspect/inspect.go
+++ b/pkg/admin/inspect/inspect.go
@@ -82,6 +82,11 @@ type EntitiesOptions struct {
        End    string
        Step   string
        Limit  int
+       // ValueColumn / ValueType are required only when the metric is NOT 
defined on the target OAP
+       // (a metric persisted by another OAP). When set, the OAP resolves the 
metric from storage
+       // using this caller-supplied metadata instead of its local registry.
+       ValueColumn string
+       ValueType   string
 }
 
 // ListMetrics lists the registered metric catalog (GET /inspect/metrics).
@@ -107,7 +112,7 @@ func ListMetrics(ctx context.Context, opts MetricsOptions) 
(*Metrics, error) {
 
 // ListEntities enumerates the entities holding values for a metric over a 
time range
 // (GET /inspect/entities). Only REGULAR_VALUE / LABELED_VALUE metrics are 
accepted.
-func ListEntities(ctx context.Context, opts EntitiesOptions) (*Entities, 
error) {
+func ListEntities(ctx context.Context, opts *EntitiesOptions) (*Entities, 
error) {
        query := url.Values{}
        query.Set("metric", opts.Metric)
        query.Set("start", opts.Start)
@@ -116,6 +121,12 @@ func ListEntities(ctx context.Context, opts 
EntitiesOptions) (*Entities, error)
        if opts.Limit > 0 {
                query.Set("limit", strconv.Itoa(opts.Limit))
        }
+       if opts.ValueColumn != "" {
+               query.Set("valueColumn", opts.ValueColumn)
+       }
+       if opts.ValueType != "" {
+               query.Set("valueType", opts.ValueType)
+       }
 
        var out Entities
        err := client.GetJSON(ctx, "/inspect/entities", query, &out)

Reply via email to