This is an automated email from the ASF dual-hosted git repository.
wu-sheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-satellite.git
The following commit(s) were added to refs/heads/main by this push:
new 3cfaf59 Support transmit pprof protocol (#255)
3cfaf59 is described below
commit 3cfaf59a755e7ffcd900d6695a8bc4174397cace
Author: mrproliu <[email protected]>
AuthorDate: Thu May 21 16:56:23 2026 +0800
Support transmit pprof protocol (#255)
---
.github/workflows/e2e-istio.yaml | 8 +-
.github/workflows/e2e-native.yaml | 7 +-
CHANGES.md | 1 +
configs/satellite_config.yaml | 26 ++++
go.mod | 2 +-
go.sum | 150 +--------------------
plugins/forwarder/forwarder_repository.go | 2 +
plugins/forwarder/grpc/nativepprof/forwarder.go | 112 +++++++++++++++
plugins/receiver/grpc/nativepprof/pprof_service.go | 100 ++++++++++++++
plugins/receiver/grpc/nativepprof/receiver.go | 67 +++++++++
plugins/receiver/receiver_repository.go | 2 +
test/e2e/base/base-compose.yml | 19 ++-
test/e2e/base/env | 6 +-
test/e2e/base/go-provider/Dockerfile | 34 +++++
test/e2e/base/go-provider/go.mod | 25 ++++
test/e2e/base/go-provider/go.sum | 2 +
test/e2e/base/go-provider/main.go | 68 ++++++++++
.../case/istio/als/expected/metrics-has-value.yml | 4 +-
test/e2e/case/istio/kind.yaml | 8 +-
.../metrics/expected/metrics-has-value-label.yml | 4 +-
.../istio/metrics/expected/metrics-has-value.yml | 4 +-
test/e2e/case/istio/traffic-gen.yaml | 10 +-
test/e2e/case/istio/values.yaml | 2 +-
.../case/native-asyncprofiler/docker-compose.yml | 7 +
test/e2e/case/native-ebpf/docker-compose.yml | 8 ++
.../docker-compose.yml | 59 ++++----
test/e2e/case/native-pprof/e2e.yaml | 64 +++++++++
.../expected/analysis.yml} | 20 ++-
.../expected/create.yml} | 14 +-
.../expected/list.yml} | 20 +--
.../expected/progress.yml} | 22 +--
.../native-pprof/expected/service-instance.yml | 28 ++++
.../expected/service.yml} | 17 ++-
test/e2e/case/native-protocols/docker-compose.yml | 8 ++
test/e2e/case/native-protocols/e2e.yaml | 78 ++++++-----
.../{service.yml => dependency-services.yml} | 33 +++--
.../case/native-protocols/expected/event-list.yml | 20 ++-
.../case/native-protocols/expected/logs-list.yml | 4 +-
.../expected/metrics-has-value.yml | 30 +++--
.../expected/metrics-no-value.yml} | 4 +-
.../expected/profile-segment-analyze.yml | 2 +-
.../expected/profile-segment-list.yml | 52 ++++---
.../e2e/case/native-protocols/expected/service.yml | 10 +-
.../expected/trace-info-detail.yml | 97 +++++++------
.../expected/trace-users-detail.yml | 60 +++++----
.../case/native-protocols/expected/traces-list.yml | 40 ++++--
46 files changed, 934 insertions(+), 426 deletions(-)
diff --git a/.github/workflows/e2e-istio.yaml b/.github/workflows/e2e-istio.yaml
index bfe51fb..409b19b 100644
--- a/.github/workflows/e2e-istio.yaml
+++ b/.github/workflows/e2e-istio.yaml
@@ -34,7 +34,7 @@ jobs:
fail-fast: true
matrix:
analyzer: [k8s-mesh, mx-mesh]
- istio_version: [ 1.15.0, 1.16.0, 1.17.0, 1.18.0 ]
+ istio_version: [ 1.21.0, 1.22.0, 1.23.0, 1.24.0, 1.25.0, 1.26.0,
1.27.0, 1.28.0, 1.29.0 ]
name: Istio(${{ matrix.istio_version }})+ALS(${{ matrix.analyzer }})
env:
ISTIO_VERSION: ${{ matrix.istio_version }}
@@ -51,7 +51,7 @@ jobs:
- name: Build Docker Image
shell: bash
run: make docker
- - uses:
apache/skywalking-infra-e2e@cf589b4a0b9f8e6f436f78e9cfd94a1ee5494180
+ - uses:
apache/skywalking-infra-e2e@0d91769411db83f6329633df810a36c6ea1a9b02
with:
e2e-file: test/e2e/case/istio/als/e2e.yaml
- uses: actions/upload-artifact@v4
@@ -68,7 +68,7 @@ jobs:
strategy:
fail-fast: true
matrix:
- istio_version: [1.15.0, 1.16.0, 1.17.0, 1.18.0]
+ istio_version: [ 1.21.0, 1.22.0, 1.23.0, 1.24.0, 1.25.0, 1.26.0,
1.27.0, 1.28.0, 1.29.0 ]
env:
ISTIO_VERSION: ${{ matrix.istio_version }}
steps:
@@ -83,7 +83,7 @@ jobs:
- name: Build Docker Image
shell: bash
run: make docker
- - uses:
apache/skywalking-infra-e2e@cf589b4a0b9f8e6f436f78e9cfd94a1ee5494180
+ - uses:
apache/skywalking-infra-e2e@0d91769411db83f6329633df810a36c6ea1a9b02
with:
e2e-file: test/e2e/case/istio/metrics/e2e.yaml
- uses: actions/upload-artifact@v4
diff --git a/.github/workflows/e2e-native.yaml
b/.github/workflows/e2e-native.yaml
index 8fbde96..3d8e7ab 100644
--- a/.github/workflows/e2e-native.yaml
+++ b/.github/workflows/e2e-native.yaml
@@ -32,6 +32,8 @@ jobs:
config: test/e2e/case/native-ebpf/e2e.yaml
- name: Native Process/Async Profiler
config: test/e2e/case/native-asyncprofiler/e2e.yaml
+ - name: Native Process/Pprof Profiler
+ config: test/e2e/case/native-pprof/e2e.yaml
fail-fast: true
name: Native E2E test
runs-on: ubuntu-latest
@@ -39,6 +41,9 @@ jobs:
- uses: actions/checkout@v2
with:
submodules: true
+ - uses: actions/setup-go@v5
+ with:
+ go-version: 1.26
- name: Build Test Service
shell: bash
run: |
@@ -46,7 +51,7 @@ jobs:
./mvnw --batch-mode -f provider/pom.xml clean package
-Dsw.version=8.7.0
./mvnw --batch-mode -f consumer/pom.xml clean package
-Dsw.version=8.7.0
- name: ${{ matrix.test.name }}
- uses:
apache/skywalking-infra-e2e@cf589b4a0b9f8e6f436f78e9cfd94a1ee5494180
+ uses:
apache/skywalking-infra-e2e@0d91769411db83f6329633df810a36c6ea1a9b02
with:
e2e-file: $GITHUB_WORKSPACE/${{ matrix.test.config }}
- uses: actions/upload-artifact@v4
diff --git a/CHANGES.md b/CHANGES.md
index 819d424..254d38e 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -8,6 +8,7 @@ Release Notes.
* Support native eBPF Access Log protocol.
* Update go library to `1.24`.
* Support async profiler protocol.
+* Support pprof protocol.
#### Bug Fixes
diff --git a/configs/satellite_config.yaml b/configs/satellite_config.yaml
index 37f9298..56a3d1a 100644
--- a/configs/satellite_config.yaml
+++ b/configs/satellite_config.yaml
@@ -273,6 +273,32 @@ pipes:
client_name: grpc-client
forwarders:
- plugin_name: native-async-profiler-grpc-forwarder
+ - common_config:
+ pipe_name: pprofpipe
+ gatherer:
+ server_name: "grpc-server"
+ receiver:
+ plugin_name: "grpc-native-pprof-receiver"
+ queue:
+ plugin_name: "memory-queue"
+ # The maximum buffer event size.
+ event_buffer_size: ${SATELLITE_QUEUE_EVENT_BUFFER_SIZE:5000}
+ # The partition count of queue.
+ partition: ${SATELLITE_QUEUE_PARTITION:4}
+ processor:
+ filters:
+ sender:
+ fallbacker:
+ plugin_name: none-fallbacker
+ # The time interval between two flush operations. And the time unit is
millisecond.
+ flush_time: ${SATELLITE_PPROFPIPE_SENDER_FLUSH_TIME:1000}
+ # The maximum buffer elements.
+ max_buffer_size: ${SATELLITE_PPROFPIPE_SENDER_MAX_BUFFER_SIZE:200}
+ # The minimum flush elements.
+ min_flush_events: ${SATELLITE_PPROFPIPE_SENDER_MIN_FLUSH_EVENTS:1}
+ client_name: grpc-client
+ forwarders:
+ - plugin_name: native-pprof-grpc-forwarder
- common_config:
pipe_name: cdspipe
gatherer:
diff --git a/go.mod b/go.mod
index f162029..ad1aa10 100644
--- a/go.mod
+++ b/go.mod
@@ -24,7 +24,7 @@ require (
google.golang.org/protobuf v1.36.11
gopkg.in/yaml.v3 v3.0.1
k8s.io/apimachinery v0.35.3
- skywalking.apache.org/repo/goapi v0.0.0-20241106011455-ef3dbfac3128
+ skywalking.apache.org/repo/goapi v0.0.0-20260521015734-5c05525a3cce
)
require (
diff --git a/go.sum b/go.sum
index f8d5da5..13a3284 100644
--- a/go.sum
+++ b/go.sum
@@ -1,24 +1,13 @@
-cloud.google.com/go v0.26.0/go.mod
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-github.com/BurntSushi/toml v0.3.1/go.mod
h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Masterminds/semver/v3 v3.4.0
h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
github.com/Masterminds/semver/v3 v3.4.0/go.mod
h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
-github.com/OneOfOne/xxhash v1.2.2/go.mod
h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/Shopify/sarama v1.27.2
h1:1EyY1dsxNDUQEv0O/4TsjosHI2CgB1uo9H/v56xzTxc=
github.com/Shopify/sarama v1.27.2/go.mod
h1:g5s5osgELxgM+Md9Qni9rzo7Rbt+vvFQI4bt/Mc93II=
github.com/Shopify/toxiproxy v2.1.4+incompatible
h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod
h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
-github.com/antihax/optional v1.0.0/go.mod
h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod
h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod
h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash v1.1.0/go.mod
h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.3.0
h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod
h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/client9/misspell v0.3.4/go.mod
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod
h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod
h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
-github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cpuguy83/go-md2man/v2 v2.0.7
h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod
h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/creack/pty v1.1.9/go.mod
h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
@@ -36,13 +25,6 @@ github.com/emicklei/go-restful/v3 v3.12.2
h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf
github.com/emicklei/go-restful/v3 v3.12.2/go.mod
h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/enriquebris/goconcurrentqueue v0.7.0
h1:JYrDa45N3xo3Sr9mjvlRaWiBHvBEJIhAdLXO3VGVghA=
github.com/enriquebris/goconcurrentqueue v0.7.0/go.mod
h1:OZ+KC2BcRYzjg0vgoUs1GFqdAjkD9mz2Ots7Jbm1yS4=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod
h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane
v0.9.1-0.20191026205805-5f8ba28d4473/go.mod
h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod
h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/go-control-plane
v0.9.9-0.20201210154907-fd9021fe5dad/go.mod
h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
-github.com/envoyproxy/go-control-plane
v0.9.9-0.20210217033140-668b12f5399d/go.mod
h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
-github.com/envoyproxy/go-control-plane
v0.9.9-0.20210512163311-63b5d3c536b0/go.mod
h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod
h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fortytw2/leaktest v1.3.0
h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/fortytw2/leaktest v1.3.0/go.mod
h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/frankban/quicktest v1.10.2/go.mod
h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s=
@@ -52,7 +34,6 @@ github.com/fsnotify/fsnotify v1.9.0
h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S
github.com/fsnotify/fsnotify v1.9.0/go.mod
h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/fxamacker/cbor/v2 v2.9.0
h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
github.com/fxamacker/cbor/v2 v2.9.0/go.mod
h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
-github.com/ghodss/yaml v1.0.0/go.mod
h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod
h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -99,21 +80,6 @@ github.com/go-viper/mapstructure/v2 v2.5.0
h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPE
github.com/go-viper/mapstructure/v2 v2.5.0/go.mod
h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/golang-jwt/jwt/v5 v5.3.1
h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=
github.com/golang-jwt/jwt/v5 v5.3.1/go.mod
h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod
h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/mock v1.1.1/go.mod
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod
h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod
h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod
h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod
h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod
h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod
h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod
h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod
h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod
h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod
h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.4.3/go.mod
h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod
h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2/go.mod
h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.4
h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod
h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.1/go.mod
h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -121,27 +87,18 @@ github.com/golang/snappy v1.0.0
h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs=
github.com/golang/snappy v1.0.0/go.mod
h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/gnostic-models v0.7.0
h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
github.com/google/gnostic-models v0.7.0/go.mod
h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
-github.com/google/go-cmp v0.2.0/go.mod
h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod
h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod
h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod
h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/gofuzz v1.0.0/go.mod
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/pprof v0.0.0-20260302011040-a15ffb7f9dcc
h1:VBbFa1lDYWEeV5FZKUiYKYT0VxCp9twUmmaq9eb8sXw=
github.com/google/pprof v0.0.0-20260302011040-a15ffb7f9dcc/go.mod
h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI=
-github.com/google/uuid v1.1.2/go.mod
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853
h1:cLN4IBkmkYZNnk7EAJ0BHIethd+J6LqxFNw5mSiI2bM=
github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853/go.mod
h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk=
github.com/grandecola/mmap v0.7.0
h1:p3x6GiNdwuVo21xauBvmJE3qUhUZPsONI1OdkIXtI/8=
github.com/grandecola/mmap v0.7.0/go.mod
h1:AxuKbHbB37A8XVWcLn/EuS8l6v0JSfUcIuKvQxqoAPo=
-github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod
h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/hashicorp/errwrap v1.0.0/go.mod
h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0
h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod
h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -193,7 +150,6 @@ github.com/prashantv/gostub v1.1.0
h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4
github.com/prashantv/gostub v1.1.0/go.mod
h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
github.com/prometheus/client_golang v1.23.2
h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
github.com/prometheus/client_golang v1.23.2/go.mod
h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod
h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.6.2
h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
github.com/prometheus/client_model v0.6.2/go.mod
h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
github.com/prometheus/common v0.67.5
h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4=
@@ -204,7 +160,6 @@ github.com/prometheus/prometheus v0.311.3
h1:3IrVxQv6v5i/ZCGi6OrYeBhtCwaPTn6Z3DY
github.com/prometheus/prometheus v0.311.3/go.mod
h1:gjsCxTKtHO1Q8T9333u1s+lUR1OjPyM7ruuGH8RvVyo=
github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0
h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ=
github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod
h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
-github.com/rogpeppe/fastuuid v1.2.0/go.mod
h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.14.1
h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod
h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/russross/blackfriday/v2 v2.1.0
h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
@@ -217,7 +172,6 @@ github.com/sirupsen/logrus v1.9.4
h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w
github.com/sirupsen/logrus v1.9.4/go.mod
h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g=
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8
h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod
h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
-github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod
h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
github.com/spf13/afero v1.15.0/go.mod
h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
@@ -230,7 +184,6 @@ github.com/stretchr/objx v0.1.0/go.mod
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod
h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod
h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.5.1/go.mod
h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.11.1
h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod
h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
@@ -248,8 +201,6 @@ github.com/xdg/scram
v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhe
github.com/xdg/stringprep v1.0.0/go.mod
h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1
h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod
h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
-github.com/yuin/goldmark v1.3.5/go.mod
h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/yuin/goldmark v1.4.13/go.mod
h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yusufpapurcu/wmi v1.2.2
h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
github.com/yusufpapurcu/wmi v1.2.2/go.mod
h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
go.opentelemetry.io/auto/sdk v1.2.1
h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
@@ -264,7 +215,6 @@ go.opentelemetry.io/otel/sdk/metric v1.43.0
h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfC
go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod
h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
go.opentelemetry.io/otel/trace v1.43.0
h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
go.opentelemetry.io/otel/trace v1.43.0/go.mod
h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
-go.opentelemetry.io/proto/otlp v0.7.0/go.mod
h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod
h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
@@ -276,138 +226,46 @@ go.yaml.in/yaml/v2 v2.4.4/go.mod
h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod
h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod
h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod
h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod
h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.18.0/go.mod
h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
golang.org/x/crypto v0.50.0/go.mod
h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod
h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod
h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod
h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod
h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod
h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod
h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod
h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4=
golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod
h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod
h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod
h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod
h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod
h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod
h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod
h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod
h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod
h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
golang.org/x/oauth2 v0.36.0/go.mod
h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
golang.org/x/sync v0.20.0/go.mod
h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
-golang.org/x/term v0.16.0/go.mod
h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY=
golang.org/x/term v0.42.0/go.mod
h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.14.0/go.mod
h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
golang.org/x/text v0.37.0/go.mod
h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
golang.org/x/time v0.15.0/go.mod
h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod
h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod
h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod
h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod
h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.1.3/go.mod
h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.12/go.mod
h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.6.0/go.mod
h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
golang.org/x/tools v0.44.0/go.mod
h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
gonum.org/v1/gonum v0.17.0/go.mod
h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
-google.golang.org/appengine v1.1.0/go.mod
h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod
h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod
h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod
h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod
h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c
h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk=
google.golang.org/genproto/googleapis/rpc
v0.0.0-20260311181403-84a4fc48630c/go.mod
h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
-google.golang.org/grpc v1.19.0/go.mod
h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.23.0/go.mod
h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod
h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.27.0/go.mod
h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.1/go.mod
h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
-google.golang.org/grpc v1.36.0/go.mod
h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
-google.golang.org/grpc v1.38.0/go.mod
h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
-google.golang.org/grpc v1.40.0/go.mod
h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ=
google.golang.org/grpc v1.81.1/go.mod
h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod
h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod
h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod
h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod
h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod
h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod
h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod
h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod
h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod
h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod
h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod
h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.32.0/go.mod
h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
google.golang.org/protobuf v1.36.11
h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
google.golang.org/protobuf v1.36.11/go.mod
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -428,14 +286,10 @@ gopkg.in/jcmturner/gokrb5.v7 v7.5.0
h1:a9tsXlIDD9SKxotJMK3niV7rPZAJeX2aD/0yg3qlI
gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod
h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM=
gopkg.in/jcmturner/rpc.v1 v1.1.0
h1:QHIUxTX1ISuAv9dD2wJ9HWQVuWDX/Zc0PfeC2tjc4rU=
gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod
h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
k8s.io/api v0.35.3 h1:pA2fiBc6+N9PDf7SAiluKGEBuScsTzd2uYBkA5RzNWQ=
k8s.io/api v0.35.3/go.mod h1:9Y9tkBcFwKNq2sxwZTQh1Njh9qHl81D0As56tu42GA4=
k8s.io/apimachinery v0.35.3 h1:MeaUwQCV3tjKP4bcwWGgZ/cp/vpsRnQzqO6J6tJyoF8=
@@ -456,5 +310,5 @@ sigs.k8s.io/structured-merge-diff/v6 v6.3.0
h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/
sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod
h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=
-skywalking.apache.org/repo/goapi v0.0.0-20241106011455-ef3dbfac3128
h1:wrHG0+CwYwqcgPWwJf/JI1x1sk+jD1Wdy93M1YuecO0=
-skywalking.apache.org/repo/goapi v0.0.0-20241106011455-ef3dbfac3128/go.mod
h1:+n8BMuS8eRdzdnGh15ElRGBXPi0eYZSs2TKySBDmRTE=
+skywalking.apache.org/repo/goapi v0.0.0-20260521015734-5c05525a3cce
h1:KZOFEve4GtOekeIAF/v3j+J9mEG7tBboMbB3AXoNWI0=
+skywalking.apache.org/repo/goapi v0.0.0-20260521015734-5c05525a3cce/go.mod
h1:tsTLCXFg0zZ1lqr5+7tDMsZvZA+YFUCQe0lRctv23yc=
diff --git a/plugins/forwarder/forwarder_repository.go
b/plugins/forwarder/forwarder_repository.go
index e9c3b8c..644b8aa 100644
--- a/plugins/forwarder/forwarder_repository.go
+++ b/plugins/forwarder/forwarder_repository.go
@@ -34,6 +34,7 @@ import (
grpc_nativelog
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativelog"
grpc_nativemanagement
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativemanagement"
grpc_meter
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativemeter"
+ grpc_nativepprof
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativepprof"
grpc_nativeprocess
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativeprocess"
grpc_nativeprofile
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativeprofile"
grpc_nativetracing
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativetracing"
@@ -68,6 +69,7 @@ func RegisterForwarderPlugins() {
new(otlpmetricsv1.Forwarder),
new(grpc_nativeebpfaccesslog.Forwarder),
new(grpc_asyncprofiler.Forwarder),
+ new(grpc_nativepprof.Forwarder),
}
for _, forwarder := range forwarders {
plugin.RegisterPlugin(forwarder)
diff --git a/plugins/forwarder/grpc/nativepprof/forwarder.go
b/plugins/forwarder/grpc/nativepprof/forwarder.go
new file mode 100644
index 0000000..4fc5da8
--- /dev/null
+++ b/plugins/forwarder/grpc/nativepprof/forwarder.go
@@ -0,0 +1,112 @@
+// 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 nativepprof
+
+import (
+ "context"
+ "fmt"
+ "reflect"
+
+ client_grpc "github.com/apache/skywalking-satellite/plugins/client/grpc"
+ server_grpc "github.com/apache/skywalking-satellite/plugins/server/grpc"
+
+ "google.golang.org/grpc"
+ pprof "skywalking.apache.org/repo/goapi/collect/pprof/v10"
+ v1 "skywalking.apache.org/repo/goapi/satellite/data/v1"
+
+ "github.com/apache/skywalking-satellite/internal/pkg/config"
+ "github.com/apache/skywalking-satellite/internal/pkg/log"
+ "github.com/apache/skywalking-satellite/internal/satellite/event"
+)
+
+const (
+ Name = "native-pprof-grpc-forwarder"
+ ShowName = "Native Pprof GRPC Forwarder"
+)
+
+type Forwarder struct {
+ config.CommonFields
+
+ pprofClient pprof.PprofTaskClient
+}
+
+func (f *Forwarder) Name() string { return Name }
+func (f *Forwarder) ShowName() string { return ShowName }
+func (f *Forwarder) Description() string {
+ return "This is a grpc forwarder with the SkyWalking native pprof
protocol."
+}
+func (f *Forwarder) DefaultConfig() string { return `` }
+
+func (f *Forwarder) Prepare(connection interface{}) error {
+ client, ok := connection.(*grpc.ClientConn)
+ if !ok {
+ return fmt.Errorf("the %s only accepts a grpc client, but
received a %s",
+ f.Name(), reflect.TypeOf(connection).String())
+ }
+ f.pprofClient = pprof.NewPprofTaskClient(client)
+ return nil
+}
+
+func (f *Forwarder) Forward(_ event.BatchEvents) error {
+ return fmt.Errorf("unsupport forward")
+}
+
+func (f *Forwarder) SyncForward(e *v1.SniffData) (*v1.SniffData,
grpc.ClientStream, error) {
+ switch requestData := e.GetData().(type) {
+ case *v1.SniffData_PprofTaskCommandQuery:
+ cmds, err :=
f.pprofClient.GetPprofTaskCommands(context.Background(),
requestData.PprofTaskCommandQuery)
+ if err != nil {
+ return nil, nil, err
+ }
+ return &v1.SniffData{Data: &v1.SniffData_Commands{Commands:
cmds}}, nil, nil
+
+ case *v1.SniffData_PprofData:
+ ctx := context.WithValue(context.Background(),
client_grpc.CtxBidirectionalStreamKey, true)
+ stream, err := f.pprofClient.Collect(ctx)
+ if err != nil {
+ log.Logger.Errorf("%s open collect stream error: %v",
f.Name(), err)
+ return nil, nil, err
+ }
+ metaData := server_grpc.NewOriginalData(requestData.PprofData)
+ if err = stream.SendMsg(metaData); err != nil {
+ log.Logger.Errorf("%s send meta data error: %v",
f.Name(), err)
+ f.closeStream(stream)
+ return nil, nil, err
+ }
+ resp, err := stream.Recv()
+ if err != nil {
+ log.Logger.Errorf("%s receive meta data response error:
%v", f.Name(), err)
+ f.closeStream(stream)
+ return nil, nil, err
+ }
+ return &v1.SniffData{
+ Data:
&v1.SniffData_PprofCollectionResponse{PprofCollectionResponse: resp},
+ }, stream, nil
+ }
+
+ return nil, nil, fmt.Errorf("unsupport data")
+}
+
+func (f *Forwarder) ForwardType() v1.SniffType { return v1.SniffType_PprofType
}
+func (f *Forwarder) SupportedSyncInvoke() bool { return true }
+
+func (f *Forwarder) closeStream(stream pprof.PprofTask_CollectClient) {
+ if err := stream.CloseSend(); err != nil {
+ log.Logger.Errorf("%s close stream error: %v", f.Name(), err)
+ }
+}
diff --git a/plugins/receiver/grpc/nativepprof/pprof_service.go
b/plugins/receiver/grpc/nativepprof/pprof_service.go
new file mode 100644
index 0000000..6da5ad0
--- /dev/null
+++ b/plugins/receiver/grpc/nativepprof/pprof_service.go
@@ -0,0 +1,100 @@
+// 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 nativepprof
+
+import (
+ "context"
+ "fmt"
+ "io"
+
+ "github.com/apache/skywalking-satellite/internal/pkg/log"
+
+ common "skywalking.apache.org/repo/goapi/collect/common/v3"
+ pprof "skywalking.apache.org/repo/goapi/collect/pprof/v10"
+ v1 "skywalking.apache.org/repo/goapi/satellite/data/v1"
+
+ module
"github.com/apache/skywalking-satellite/internal/satellite/module/api"
+ "github.com/apache/skywalking-satellite/plugins/server/grpc"
+)
+
+type PprofService struct {
+ receiveChannel chan *v1.SniffData
+
+ module.SyncInvoker
+ pprof.UnimplementedPprofTaskServer
+}
+
+func (p *PprofService) GetPprofTaskCommands(_ context.Context,
+ query *pprof.PprofTaskCommandQuery,
+) (*common.Commands, error) {
+ event := &v1.SniffData{
+ Data: &v1.SniffData_PprofTaskCommandQuery{
+ PprofTaskCommandQuery: query,
+ },
+ }
+ data, _, err := p.SyncInvoke(event)
+ if err != nil {
+ return nil, err
+ }
+ return data.GetCommands(), nil
+}
+
+func (p *PprofService) Collect(clientStream pprof.PprofTask_CollectServer)
error {
+ metaData := grpc.NewOriginalData(nil)
+ err := clientStream.RecvMsg(metaData)
+ if err == io.EOF {
+ return nil
+ }
+ if err != nil {
+ return err
+ }
+ event := &v1.SniffData{
+ Data: &v1.SniffData_PprofData{
+ PprofData: metaData.Content,
+ },
+ }
+ serverStreamAndResp, serverStream, err := p.SyncInvoke(event)
+ if err != nil {
+ return fmt.Errorf("satellite send pprof metadata to server but
get err: %s", err)
+ }
+ resp :=
serverStreamAndResp.GetData().(*v1.SniffData_PprofCollectionResponse)
+ err = clientStream.Send(resp.PprofCollectionResponse)
+ if err == io.EOF {
+ return nil
+ }
+ if err != nil {
+ return err
+ }
+
+ for {
+ chunk := grpc.NewOriginalData(nil)
+ err := clientStream.RecvMsg(chunk)
+ if err == io.EOF {
+ if cerr := serverStream.CloseSend(); cerr != nil {
+ log.Logger.Errorf("pprof service close server
stream error: %s", cerr)
+ }
+ return nil
+ }
+ if err != nil {
+ return err
+ }
+ if err = serverStream.SendMsg(chunk); err != nil {
+ return fmt.Errorf("satellite send pprof chunk to server
but get err: %s", err)
+ }
+ }
+}
diff --git a/plugins/receiver/grpc/nativepprof/receiver.go
b/plugins/receiver/grpc/nativepprof/receiver.go
new file mode 100644
index 0000000..d74f92d
--- /dev/null
+++ b/plugins/receiver/grpc/nativepprof/receiver.go
@@ -0,0 +1,67 @@
+// 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 nativepprof
+
+import (
+ pprof "skywalking.apache.org/repo/goapi/collect/pprof/v10"
+ v1 "skywalking.apache.org/repo/goapi/satellite/data/v1"
+
+ "github.com/apache/skywalking-satellite/internal/pkg/config"
+ module
"github.com/apache/skywalking-satellite/internal/satellite/module/api"
+ forwarder "github.com/apache/skywalking-satellite/plugins/forwarder/api"
+ forwarder_nativepprof
"github.com/apache/skywalking-satellite/plugins/forwarder/grpc/nativepprof"
+ "github.com/apache/skywalking-satellite/plugins/receiver/grpc"
+)
+
+const (
+ Name = "grpc-native-pprof-receiver"
+ ShowName = "GRPC Native Pprof Receiver"
+)
+
+type Receiver struct {
+ config.CommonFields
+ grpc.CommonGRPCReceiverFields
+ service *PprofService
+}
+
+func (r *Receiver) Name() string { return Name }
+func (r *Receiver) ShowName() string { return ShowName }
+func (r *Receiver) Description() string {
+ return "This is a receiver for SkyWalking native pprof format, " +
+ "which is defined at
https://github.com/apache/skywalking-data-collect-protocol/blob/master/pprof/Pprof.proto."
+}
+
+func (r *Receiver) DefaultConfig() string { return "" }
+
+func (r *Receiver) RegisterHandler(server interface{}) {
+ r.CommonGRPCReceiverFields = *grpc.InitCommonGRPCReceiverFields(server)
+ r.service = &PprofService{receiveChannel: r.OutputChannel}
+ pprof.RegisterPprofTaskServer(r.Server, r.service)
+}
+
+func (r *Receiver) RegisterSyncInvoker(invoker module.SyncInvoker) {
+ r.service.SyncInvoker = invoker
+}
+
+func (r *Receiver) Channel() <-chan *v1.SniffData { return r.OutputChannel }
+
+func (r *Receiver) SupportForwarders() []forwarder.Forwarder {
+ return []forwarder.Forwarder{
+ new(forwarder_nativepprof.Forwarder),
+ }
+}
diff --git a/plugins/receiver/receiver_repository.go
b/plugins/receiver/receiver_repository.go
index 0b12ae4..9351859 100644
--- a/plugins/receiver/receiver_repository.go
+++ b/plugins/receiver/receiver_repository.go
@@ -36,6 +36,7 @@ import (
grpcnavtivelog
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativelog"
grpcnativemanagement
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativemanagement"
grpcnativemeter
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativemeter"
+ grpcnativepprof
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativepprof"
grpcnativeprocess
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativeprocess"
grpcnativeprofile
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativeprofile"
grpcnativetracing
"github.com/apache/skywalking-satellite/plugins/receiver/grpc/nativetracing"
@@ -67,6 +68,7 @@ func RegisterReceiverPlugins() {
new(otlpmetricsv1.Receiver),
new(grpcnativeebpfaccesslog.Receiver),
new(grpcasyncprofiler.Receiver),
+ new(grpcnativepprof.Receiver),
}
for _, receiver := range receivers {
plugin.RegisterPlugin(receiver)
diff --git a/test/e2e/base/base-compose.yml b/test/e2e/base/base-compose.yml
index ef9a13c..888bd09 100644
--- a/test/e2e/base/base-compose.yml
+++ b/test/e2e/base/base-compose.yml
@@ -26,12 +26,13 @@ services:
- e2e
restart: on-failure
environment:
- SW_STORAGE: h2
+ SW_STORAGE: banyandb
+ SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
SW_CLUSTER_ZK_HOST_PORT: zk:2181
SW_STORAGE_ES_CLUSTER_NODES: es:9200
SW_JDBC_URL: jdbc:mysql://mysql:3306/swtest
SW_STORAGE_INFLUXDB_URL: http://influxdb:8086
- SW_METER_ANALYZER_ACTIVE_FILES: spring-sleuth
+ SW_METER_ANALYZER_ACTIVE_FILES: go-agent
SW_CLUSTER_ETCD_ENDPOINTS: http://etcd:2379
SW_SCLUSTER_ETCD_ERVICE_NAME: s1
SW_CONFIG_ETCD_PERIOD: 1
@@ -42,6 +43,20 @@ services:
timeout: 60s
retries: 120
+ banyandb:
+ image: "ghcr.io/apache/skywalking-banyandb:${SW_BANYANDB_COMMIT}"
+ networks:
+ - e2e
+ expose:
+ - 17912
+ - 17913
+ command: standalone --measure-metadata-cache-wait-duration 1m
--stream-metadata-cache-wait-duration 1m
+ healthcheck:
+ test: ["CMD", "sh", "-c", "nc -nz 127.0.0.1 17912"]
+ interval: 5s
+ timeout: 60s
+ retries: 120
+
provider:
build:
context: provider
diff --git a/test/e2e/base/env b/test/e2e/base/env
index c76246b..cff3de3 100644
--- a/test/e2e/base/env
+++ b/test/e2e/base/env
@@ -14,10 +14,12 @@
# limitations under the License.
SW_AGENT_JAVA_COMMIT=f0245864e4388a388fe7445b56b6ce7cedc94aaf
-SW_OAP_COMMIT=df7450b4b4744257012c2f1608b634f44fbe7d66
+SW_OAP_COMMIT=5b481a41a99861249410118e4cfbf591c4508dae
SW_UI_COMMIT=1acba5d2467f6d905a6261e999f85464d5432562
SW_KUBERNETES_COMMIT_SHA=2850db1502283a2d8516146c57cc2b49f1da934b
SW_AGENT_JDK_VERSION=8
SW_ROVER_COMMIT=a58b40e01c670003c211fc9d498a58c70098c364
+SW_AGENT_GO_COMMIT=afa75a3cc8c31f142102443af6164b825d63d8fc
+SW_BANYANDB_COMMIT=69c8f4d20ebb6532ea4c16a7ed7114dd6ec9770b
-SW_CTL_COMMIT=bce7faaabbd57ed1f40156af8a8eb6c3eccea4ae
+SW_CTL_COMMIT=8c709ce6999ce3d8503f54475afe9083d0ecb070
diff --git a/test/e2e/base/go-provider/Dockerfile
b/test/e2e/base/go-provider/Dockerfile
new file mode 100644
index 0000000..77e23fd
--- /dev/null
+++ b/test/e2e/base/go-provider/Dockerfile
@@ -0,0 +1,34 @@
+# 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.
+
+ARG SW_AGENT_GO_COMMIT=
+FROM ghcr.io/apache/skywalking-go/skywalking-go:${SW_AGENT_GO_COMMIT}-go1.19
AS base
+
+ENV CGO_ENABLED=0
+ENV GO111MODULE=on
+
+WORKDIR /go-service
+COPY . /go-service
+
+RUN go mod tidy && go build -toolexec="skywalking-go-agent" -a -o service
+
+FROM alpine:3.19
+
+COPY --from=base /go-service/service /service
+
+EXPOSE 8080
+ENTRYPOINT ["/service"]
diff --git a/test/e2e/base/go-provider/go.mod b/test/e2e/base/go-provider/go.mod
new file mode 100644
index 0000000..2d0c025
--- /dev/null
+++ b/test/e2e/base/go-provider/go.mod
@@ -0,0 +1,25 @@
+// 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.
+
+module sw-e2e
+
+go 1.19
+
+require (
+ github.com/apache/skywalking-go v0.6.1-0.20251023090254-afa75a3cc8c3
+ github.com/gin-gonic/gin v1.10.0
+)
diff --git a/test/e2e/base/go-provider/go.sum b/test/e2e/base/go-provider/go.sum
new file mode 100644
index 0000000..e497d21
--- /dev/null
+++ b/test/e2e/base/go-provider/go.sum
@@ -0,0 +1,2 @@
+github.com/apache/skywalking-go v0.6.1-0.20251023090254-afa75a3cc8c3/go.mod
h1:EIbOxJezWSf22p4P0p0RAgpEOvaN0sNQAtfYPX2wAyc=
+github.com/gin-gonic/gin v1.10.0/go.mod
h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
diff --git a/test/e2e/base/go-provider/main.go
b/test/e2e/base/go-provider/main.go
new file mode 100644
index 0000000..4c50b9d
--- /dev/null
+++ b/test/e2e/base/go-provider/main.go
@@ -0,0 +1,68 @@
+// 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 main
+
+import (
+ "log"
+ "time"
+
+ "github.com/gin-gonic/gin"
+
+ _ "github.com/apache/skywalking-go"
+)
+
+func main() {
+ // Produce light, recurring CPU work so the pprof CPU profile captures
+ // observable stacks without saturating the CI runner (~20% duty cycle).
+ go func() {
+ for {
+ start := time.Now()
+ for time.Since(start) < 100*time.Millisecond {
+ for i := 0; i < 1e5; i++ {
+ _ = i * i
+ }
+ }
+ time.Sleep(400 * time.Millisecond)
+ }
+ }()
+
+ engine := gin.New()
+
+ engine.Handle("GET", "/health", func(c *gin.Context) {
+ c.String(200, "ok")
+ })
+
+ engine.Handle("GET", "/profile", func(c *gin.Context) {
+ log.Printf("=== /profile called ===")
+ doWork()
+ c.String(200, "Profiling completed")
+ })
+
+ _ = engine.Run(":8080")
+}
+
+func doWork() {
+ start := time.Now()
+ for time.Since(start) < 10*time.Second {
+ _ = 1
+ for i := 0; i < 1e6; i++ {
+ _ = i * i
+ }
+ }
+ log.Printf("doWork() completed after %v", time.Since(start))
+}
diff --git a/test/e2e/case/istio/als/expected/metrics-has-value.yml
b/test/e2e/case/istio/als/expected/metrics-has-value.yml
index 445dceb..cae6688 100644
--- a/test/e2e/case/istio/als/expected/metrics-has-value.yml
+++ b/test/e2e/case/istio/als/expected/metrics-has-value.yml
@@ -22,10 +22,12 @@ results:
values:
{{- contains .values }}
- id: {{ notEmpty .id }}
- value: {{ .value }}
+ value: {{ notEmpty .value }}
+ owner: null
traceid: null
- id: {{ notEmpty .id }}
value: null
+ owner: null
traceid: null
{{- end}}
{{- end}}
diff --git a/test/e2e/case/istio/kind.yaml b/test/e2e/case/istio/kind.yaml
index 08ff4c7..2f21ed2 100644
--- a/test/e2e/case/istio/kind.yaml
+++ b/test/e2e/case/istio/kind.yaml
@@ -19,10 +19,10 @@ kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- image:
kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8
+ image:
kindest/node:v1.28.15@sha256:a7c05c7ae043a0b8c818f5a06188bc2c4098f6cb59ca7d1856df00375d839251
- role: worker
- image:
kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8
+ image:
kindest/node:v1.28.15@sha256:a7c05c7ae043a0b8c818f5a06188bc2c4098f6cb59ca7d1856df00375d839251
- role: worker
- image:
kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8
+ image:
kindest/node:v1.28.15@sha256:a7c05c7ae043a0b8c818f5a06188bc2c4098f6cb59ca7d1856df00375d839251
- role: worker
- image:
kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8
+ image:
kindest/node:v1.28.15@sha256:a7c05c7ae043a0b8c818f5a06188bc2c4098f6cb59ca7d1856df00375d839251
diff --git a/test/e2e/case/istio/metrics/expected/metrics-has-value-label.yml
b/test/e2e/case/istio/metrics/expected/metrics-has-value-label.yml
index bb8b7f2..19e88f7 100644
--- a/test/e2e/case/istio/metrics/expected/metrics-has-value-label.yml
+++ b/test/e2e/case/istio/metrics/expected/metrics-has-value-label.yml
@@ -24,10 +24,12 @@ results:
values:
{{- contains .values }}
- id: {{ notEmpty .id }}
- value: {{ .value }}
+ value: {{ notEmpty .value }}
+ owner: null
traceid: null
- id: {{ notEmpty .id }}
value: null
+ owner: null
traceid: null
{{- end}}
{{- end}}
diff --git a/test/e2e/case/istio/metrics/expected/metrics-has-value.yml
b/test/e2e/case/istio/metrics/expected/metrics-has-value.yml
index 445dceb..cae6688 100644
--- a/test/e2e/case/istio/metrics/expected/metrics-has-value.yml
+++ b/test/e2e/case/istio/metrics/expected/metrics-has-value.yml
@@ -22,10 +22,12 @@ results:
values:
{{- contains .values }}
- id: {{ notEmpty .id }}
- value: {{ .value }}
+ value: {{ notEmpty .value }}
+ owner: null
traceid: null
- id: {{ notEmpty .id }}
value: null
+ owner: null
traceid: null
{{- end}}
{{- end}}
diff --git a/test/e2e/case/istio/traffic-gen.yaml
b/test/e2e/case/istio/traffic-gen.yaml
index 549bcfd..e97fdda 100644
--- a/test/e2e/case/istio/traffic-gen.yaml
+++ b/test/e2e/case/istio/traffic-gen.yaml
@@ -33,8 +33,14 @@ spec:
spec:
containers:
- name: trafficgenerator
- image: williamyeh/wrk
- command: ["wrk", "-t1", "-c1", "-d20m",
"http://istio-ingressgateway.istio-system:80/productpage"]
+ image: alpine/curl:8.9.1
+ command: ["/bin/sh", "-c", "--"]
+ args:
+ - |
+ while true; do
+ curl -s -o /dev/null -w "%{http_code}\n"
http://istio-ingressgateway.istio-system:80/productpage
+ sleep 1
+ done
resources:
requests:
cpu: 0.1
\ No newline at end of file
diff --git a/test/e2e/case/istio/values.yaml b/test/e2e/case/istio/values.yaml
index 8b42ad4..27426bb 100644
--- a/test/e2e/case/istio/values.yaml
+++ b/test/e2e/case/istio/values.yaml
@@ -16,7 +16,7 @@
oap:
config:
metadata-service-mapping.yaml: |
- serviceName: e2e::${LABELS."service.istio.io/canonical-name"}
+ serviceName: e2e::${LABELS."service.istio.io/canonical-name",SERVICE}
serviceInstanceName: ${NAME}
elasticsearch:
diff --git a/test/e2e/case/native-asyncprofiler/docker-compose.yml
b/test/e2e/case/native-asyncprofiler/docker-compose.yml
index 7028650..a7a9431 100644
--- a/test/e2e/case/native-asyncprofiler/docker-compose.yml
+++ b/test/e2e/case/native-asyncprofiler/docker-compose.yml
@@ -38,6 +38,11 @@ services:
timeout: 60s
retries: 120
+ banyandb:
+ extends:
+ file: ../../base/base-compose.yml
+ service: banyandb
+
oap:
extends:
file: ../../base/base-compose.yml
@@ -51,6 +56,8 @@ services:
depends_on:
etcd:
condition: service_healthy
+ banyandb:
+ condition: service_healthy
satellite:
extends:
diff --git a/test/e2e/case/native-ebpf/docker-compose.yml
b/test/e2e/case/native-ebpf/docker-compose.yml
index 598b586..f09f4df 100644
--- a/test/e2e/case/native-ebpf/docker-compose.yml
+++ b/test/e2e/case/native-ebpf/docker-compose.yml
@@ -16,12 +16,20 @@
version: '2.1'
services:
+ banyandb:
+ extends:
+ file: ../../base/base-compose.yml
+ service: banyandb
+
oap:
extends:
file: ../../base/base-compose.yml
service: oap
ports:
- 12800:12800
+ depends_on:
+ banyandb:
+ condition: service_healthy
satellite:
extends:
diff --git a/test/e2e/case/native-asyncprofiler/docker-compose.yml
b/test/e2e/case/native-pprof/docker-compose.yml
similarity index 69%
copy from test/e2e/case/native-asyncprofiler/docker-compose.yml
copy to test/e2e/case/native-pprof/docker-compose.yml
index 7028650..5f3c766 100644
--- a/test/e2e/case/native-asyncprofiler/docker-compose.yml
+++ b/test/e2e/case/native-pprof/docker-compose.yml
@@ -16,40 +16,19 @@
version: '2.1'
services:
-
- etcd:
- hostname: etcd
- image: quay.io/coreos/etcd:v3.5.0
- ports:
- - 2379
- networks:
- - e2e
- environment:
- ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379
- ETCD_ADVERTISE_CLIENT_URLS: http://0.0.0.0:2379
- ETCD_LISTEN_PEER_URLS: http://0.0.0.0:2380
- ETCD_INITIAL_ADVERTISE_PEER_URLS: http://0.0.0.0:2380
- ETCD_INITIAL_CLUSTER: s1=http://0.0.0.0:2380
- ETCD_NAME: s1
- ETCD_DATA_DIR: /etcd-data
- healthcheck:
- test: ["CMD", "sh", "-c", "etcdctl endpoint health" ]
- interval: 5s
- timeout: 60s
- retries: 120
+ banyandb:
+ extends:
+ file: ../../base/base-compose.yml
+ service: banyandb
oap:
extends:
file: ../../base/base-compose.yml
service: oap
- environment:
- SW_LOG_LAL_FILES: test
- SW_CLUSTER: etcd
- SW_CONFIGURATION: etcd
ports:
- 12800
depends_on:
- etcd:
+ banyandb:
condition: service_healthy
satellite:
@@ -59,22 +38,36 @@ services:
environment:
SATELLITE_GRPC_CLIENT_FINDER: static
SATELLITE_GRPC_CLIENT: oap:11800
- SATELLITE_LOGPIPE_SENDER_MIN_FLUSH_EVENTS: 1
SATELLITE_GRPC_ACCEPT_LIMIT_CPU_UTILIZATION: 100
+ SATELLITE_PPROFPIPE_SENDER_MIN_FLUSH_EVENTS: 1
ports:
- 11800
depends_on:
oap:
condition: service_healthy
- provider:
- extends:
- file: ../../base/base-compose.yml
- service: provider
- privileged: true
+ go-service:
+ build:
+ context: ../../base/go-provider
+ dockerfile: Dockerfile
+ args:
+ - SW_AGENT_GO_COMMIT=${SW_AGENT_GO_COMMIT}
+ expose:
+ - 8080
+ networks:
+ - e2e
+ environment:
+ SW_AGENT_NAME: go-service
+ SW_AGENT_INSTANCE_NAME: provider1
+ SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE: satellite:11800
+ healthcheck:
+ test: ["CMD", "wget", "-q", "-O", "-", "http://127.0.0.1:8080/health"]
+ interval: 5s
+ timeout: 60s
+ retries: 120
depends_on:
satellite:
condition: service_healthy
networks:
- e2e:
\ No newline at end of file
+ e2e:
diff --git a/test/e2e/case/native-pprof/e2e.yaml
b/test/e2e/case/native-pprof/e2e.yaml
new file mode 100644
index 0000000..b575d3a
--- /dev/null
+++ b/test/e2e/case/native-pprof/e2e.yaml
@@ -0,0 +1,64 @@
+# Licensed to the 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.
+# The 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.
+
+setup:
+ env: compose
+ file: docker-compose.yml
+ timeout: 20m
+ init-system-environment: ../../base/env
+ steps:
+ - name: set PATH
+ command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+ - name: install yq
+ command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
+ - name: install swctl
+ command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh
swctl
+
+verify:
+ retry:
+ count: 20
+ interval: 10s
+ cases:
+ # service list
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql service ls
+ expected: expected/service.yml
+ # service instance list
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql instance list
--service-name=go-service
+ expected: expected/service-instance.yml
+ # create task
+ - query: |
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql \
+ profiling pprof create --service-name=go-service \
+ --duration=1 --events=CPU \
+ --instance-name-list=provider1
+ expected: expected/create.yml
+ # list task
+ - query: |
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql \
+ profiling pprof list --service-name=go-service
+ expected: expected/list.yml
+ # task progress (CPU sampling lasts duration minutes + agent upload
latency)
+ - query: |
+ sleep 75 && swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql \
+ profiling pprof progress \
+ --task-id=$(swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling pprof list
--service-name=go-service | yq e '.tasks[0].id')
+ expected: expected/progress.yml
+ # task analysis
+ - query: |
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql \
+ profiling pprof analysis --service-name=go-service \
+ --instance-name-list=provider1 \
+ --task-id=$(swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling pprof list
--service-name=go-service | yq e '.tasks[0].id')
+ expected: expected/analysis.yml
diff --git a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
b/test/e2e/case/native-pprof/expected/analysis.yml
similarity index 76%
copy from test/e2e/case/native-protocols/expected/metrics-has-value.yml
copy to test/e2e/case/native-pprof/expected/analysis.yml
index 5aa1e36..31d6b80 100644
--- a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-pprof/expected/analysis.yml
@@ -13,14 +13,12 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-{{- contains . }}
-- key: {{ notEmpty .key }}
- value:
- {{ if .value.isemptyvalue }}
- isemptyvalue: true
- value: 0
- {{ else }}
- isemptyvalue: false
- value: {{ ge .value.value 0 }}
- {{ end }}
-{{- end }}
+tree:
+ elements:
+ {{- contains .tree.elements }}
+ - id: {{ notEmpty .id }}
+ parentid: {{ notEmpty .parentid }}
+ codesignature: {{ notEmpty .codesignature }}
+ total: {{ gt .total -1 }}
+ self: {{ gt .self -1 }}
+ {{- end }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
b/test/e2e/case/native-pprof/expected/create.yml
similarity index 77%
copy from test/e2e/case/native-protocols/expected/metrics-has-value.yml
copy to test/e2e/case/native-pprof/expected/create.yml
index 5aa1e36..85bd887 100644
--- a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-pprof/expected/create.yml
@@ -13,14 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-{{- contains . }}
-- key: {{ notEmpty .key }}
- value:
- {{ if .value.isemptyvalue }}
- isemptyvalue: true
- value: 0
- {{ else }}
- isemptyvalue: false
- value: {{ ge .value.value 0 }}
- {{ end }}
-{{- end }}
+errorreason: null
+code: SUCCESS
+id: {{ notEmpty .id }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/traces-list.yml
b/test/e2e/case/native-pprof/expected/list.yml
similarity index 73%
copy from test/e2e/case/native-protocols/expected/traces-list.yml
copy to test/e2e/case/native-pprof/expected/list.yml
index e529898..b95911c 100644
--- a/test/e2e/case/native-protocols/expected/traces-list.yml
+++ b/test/e2e/case/native-pprof/expected/list.yml
@@ -13,15 +13,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-debuggingtrace: null
-traces:
- {{- contains .traces }}
-- segmentid: {{ notEmpty .segmentid }}
- endpointnames:
- - POST:/info
+errorreason: null
+tasks:
+ {{- contains .tasks }}
+- id: {{ notEmpty .id }}
+ serviceid: {{ b64enc "go-service" }}.1
+ serviceinstanceids:
+ - {{ b64enc "go-service" }}.1_{{ b64enc "provider1" }}
+ createtime: {{ gt .createtime 0 }}
+ dumpperiod: {{ ge .dumpperiod 0 }}
+ events: CPU
duration: {{ ge .duration 0 }}
- start: "{{ notEmpty .start}}"
- iserror: false
- traceids:
- - {{ (index .traceids 0) }}
{{- end }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
b/test/e2e/case/native-pprof/expected/progress.yml
similarity index 69%
copy from test/e2e/case/native-protocols/expected/metrics-has-value.yml
copy to test/e2e/case/native-pprof/expected/progress.yml
index 5aa1e36..56de9d6 100644
--- a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-pprof/expected/progress.yml
@@ -13,14 +13,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-{{- contains . }}
-- key: {{ notEmpty .key }}
- value:
- {{ if .value.isemptyvalue }}
- isemptyvalue: true
- value: 0
- {{ else }}
- isemptyvalue: false
- value: {{ ge .value.value 0 }}
- {{ end }}
-{{- end }}
+logs:
+ {{- contains .logs }}
+- id: {{ notEmpty .id}}
+ instanceid: {{ b64enc "go-service" }}.1_{{ b64enc "provider1" }}
+ instancename: provider1
+ operationtype: EXECUTION_FINISHED
+ operationtime: {{ ge .operationtime 0 }}
+ {{- end }}
+errorinstanceids: []
+successinstanceids:
+ - {{ b64enc "go-service" }}.1_{{ b64enc "provider1" }}
diff --git a/test/e2e/case/native-pprof/expected/service-instance.yml
b/test/e2e/case/native-pprof/expected/service-instance.yml
new file mode 100644
index 0000000..630d58c
--- /dev/null
+++ b/test/e2e/case/native-pprof/expected/service-instance.yml
@@ -0,0 +1,28 @@
+# 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.
+
+{{- contains . }}
+- id: {{ notEmpty .id }}
+ name: {{ notEmpty .name }}
+ attributes:
+ {{- contains .attributes }}
+ - name: ipv4s
+ value: {{ notEmpty .value }}
+ {{- end}}
+ language: GO
+ instanceuuid: {{ notEmpty .instanceuuid }}
+{{- end}}
diff --git a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
b/test/e2e/case/native-pprof/expected/service.yml
similarity index 80%
copy from test/e2e/case/native-protocols/expected/metrics-has-value.yml
copy to test/e2e/case/native-pprof/expected/service.yml
index 5aa1e36..5744ee6 100644
--- a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-pprof/expected/service.yml
@@ -14,13 +14,12 @@
# limitations under the License.
{{- contains . }}
-- key: {{ notEmpty .key }}
- value:
- {{ if .value.isemptyvalue }}
- isemptyvalue: true
- value: 0
- {{ else }}
- isemptyvalue: false
- value: {{ ge .value.value 0 }}
- {{ end }}
+- id: {{ b64enc "go-service" }}.1
+ name: go-service
+ group: ""
+ shortname: go-service
+ normal: true
+ layers:
+ - GENERAL
+ - SO11Y_GO_AGENT
{{- end }}
diff --git a/test/e2e/case/native-protocols/docker-compose.yml
b/test/e2e/case/native-protocols/docker-compose.yml
index 2741707..6419043 100644
--- a/test/e2e/case/native-protocols/docker-compose.yml
+++ b/test/e2e/case/native-protocols/docker-compose.yml
@@ -38,6 +38,11 @@ services:
timeout: 60s
retries: 120
+ banyandb:
+ extends:
+ file: ../../base/base-compose.yml
+ service: banyandb
+
oap:
extends:
file: ../../base/base-compose.yml
@@ -45,6 +50,7 @@ services:
environment:
SW_LOG_LAL_FILES: test
SW_CLUSTER: etcd
+ SW_METER_ANALYZER_ACTIVE_FILES: spring-micrometer
SW_CONFIGURATION: etcd
volumes:
- ./lal.yaml:/skywalking/config/lal/test.yaml
@@ -53,6 +59,8 @@ services:
depends_on:
etcd:
condition: service_healthy
+ banyandb:
+ condition: service_healthy
satellite:
extends:
diff --git a/test/e2e/case/native-protocols/e2e.yaml
b/test/e2e/case/native-protocols/e2e.yaml
index c2504d9..9b61f19 100644
--- a/test/e2e/case/native-protocols/e2e.yaml
+++ b/test/e2e/case/native-protocols/e2e.yaml
@@ -21,6 +21,8 @@ setup:
timeout: 1200
init-system-environment: ../../base/env
steps:
+ - name: set PATH
+ command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
- name: install yq
command: bash test/e2e/base/scripts/prepare/setup-e2e-shell/install.sh yq
- name: install swctl
@@ -31,93 +33,102 @@ setup:
trigger:
action: http
interval: 3s
- times: 5
+ times: -1
url: http://${consumer_host}:${consumer_9090}/info
method: POST
verify:
- # verify with retry strategy
retry:
- # max retry count
count: 20
- # the interval between two retries, in millisecond.
interval: 10s
cases:
# basic check: service list
- query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql service ls
expected: expected/service.yml
# basic check: service metrics
- - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name
service_sla --service-name e2e-service-provider |yq e 'to_entries' -
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec
--expression=service_sla --service-name=e2e-service-provider
expected: expected/metrics-has-value.yml
# basic check: service endpoint
- - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql endpoint list --keyword=info
--service-name e2e-service-provider
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql endpoint list --keyword=info
--service-name=e2e-service-provider
expected: expected/service-endpoint.yml
# basic check: service endpoint metrics
- - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name
endpoint_cpm --endpoint-name POST:/info --service-name e2e-service-provider |yq
e 'to_entries' -
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec
--expression=endpoint_cpm --endpoint-name=POST:/info
--service-name=e2e-service-provider
expected: expected/metrics-has-value.yml
+ # basic check: dependency service
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql dependency service
--service-name="e2e-service-provider"
+ expected: expected/dependency-services.yml
# native management: service instance list
- - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql instance list --service-name
e2e-service-provider
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql instance list
--service-name=e2e-service-provider
expected: expected/service-instance.yml
# native jvm: service instance jvm metrics
- - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name
instance_jvm_thread_live_count --service-name e2e-service-provider
--instance-name provider1 |yq e 'to_entries' -
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec
--expression=instance_jvm_thread_live_count --instance-name=provider1
--service-name=e2e-service-provider
expected: expected/metrics-has-value.yml
# native tracing: trace segment list
- - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql tv2 ls
expected: expected/traces-list.yml
# native tracing: trace detail
- - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql trace $(swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls|grep -A 5
'/info'|tail -n1|awk -F ' ' '{print $2}')
+ - query: |
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql tv2 ls
expected: expected/trace-info-detail.yml
# native meter: instance meter
- - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name
meter_jvm_memory_used --instance-name provider1 --service-name
e2e-service-provider |yq e 'to_entries' -
- expected: expected/metrics-has-value.yml
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql metrics exec
--expression=meter_jvm_memory_used --instance-name=provider1
--service-name=e2e-service-provider
+ expected: expected/metrics-no-value.yml
# native event: event list
- - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql event list --service-name
e2e-service-provider --instance-name provider1
+ - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql event list
expected: expected/event-list.yml
# native log: logs list
- - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql logs list
--service-name=e2e-service-provider --trace-id=$( \
- swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls \
- | yq e '.traces | select(.[].endpointnames[0]=="POST:/info") |
.[0].traceids[0]' -
+ - query: |
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql logs list
--service-name=e2e-service-provider --tags level=INFO --trace-id=$( \
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql logs list
--service-name=e2e-service-provider --tags level=INFO | yq e '.logs |
map(select(.traceid != null)) | .[0].traceid' - \
)
expected: expected/logs-list.yml
# native profile: create task
- - query: swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace create
--service-name e2e-service-provider --endpoint-name POST:/info
--start-time=$((($(date +%s)+5)*1000)) --duration=1 --min-duration-threshold=0
--dump-period=10 --max-sampling-count=9
+ - query: |
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql \
+ profiling trace create --service-name=e2e-service-provider \
+ --endpoint-name=POST:/info \
+ --start-time=$((($(date +%s)+5)*1000)) \
+ --duration=1 --min-duration-threshold=0 \
+ --dump-period=10 --max-sampling-count=9
expected: expected/profile-create.yml
# native profile: sleep to wait agent notices and query profile list
- - query: sleep 10 && swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list
--service-name e2e-service-provider --endpoint-name POST:/info
+ - query: sleep 10 && swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list
--service-name=e2e-service-provider --endpoint-name=POST:/info
expected: expected/profile-list.yml
# native profile: sleep to wait segment report and query profiled segment
list
- query: |
curl -X POST http://${consumer_host}:${consumer_9090}/info > /dev/null;
sleep 5;
- swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list
--task-id=$(swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list
--service-name e2e-service-provider --endpoint-name POST:/info|yq e '.[0].id' -)
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list
--task-id=$( \
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id'
- \
+ )
expected: expected/profile-segment-list.yml
# native profile: query profiled segment
- query: |
segmentid=$( \
- swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list
--task-id=$( \
- swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id'
- \
- ) | yq e '.[0].spans.[] | select(.spanid == 0) | .segmentid' - \
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list
--task-id=$( \
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id'
- \
+ ) | yq e '.[0].spans.[] | select(.spanid == 0) | .segmentid' - \
);
start=$(
- swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list
--task-id=$( \
- swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id'
- \
- ) | yq e '.[0].spans.[] | select(.spanid == 0) | .starttime' - \
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list
--task-id=$( \
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id'
- \
+ ) | yq e '.[0].spans.[] | select(.spanid == 0) | .starttime' - \
);
end=$(
- swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list
--task-id=$( \
- swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id'
- \
- ) | yq e '.[0].spans.[] | select(.spanid == 0) | .endtime' - \
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace segment-list
--task-id=$( \
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace list
--service-name=e2e-service-provider --endpoint-name=POST:/info | yq e '.[0].id'
- \
+ ) | yq e '.[0].spans.[] | select(.spanid == 0) | .endtime' - \
);
swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql profiling trace analysis
--segment-ids=$segmentid --time-ranges=$(echo $start"-"$end)
-
expected: expected/profile-segment-analyze.yml
+
# native CDS: using etcdctl to update trace span limit, "/users" should
have more than one span because it need DB save
- query: |
etcdctl --endpoints http://${etcd_host}:${etcd_2379}/ put
/skywalking/configuration-discovery.default.agentConfigurations 'configurations:
@@ -127,8 +138,5 @@ verify:
- query: |
curl -s -XPOST http://${provider_host}:${provider_9090}/users -d
'{"id":"123","name":"SinglesBar"}' -H "Content-Type: application/json" >
/dev/null;
sleep 5;
- swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql trace $( \
- swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql trace ls --order startTime
--service-name "e2e-service-provider" --endpoint-name "POST:/users" \
- | yq e '.traces[0].traceids[0]' - \
- )
- expected: expected/trace-users-detail.yml
\ No newline at end of file
+ swctl --display yaml
--base-url=http://${oap_host}:${oap_12800}/graphql tv2 ls --order startTime
--service-name "e2e-service-provider" --endpoint-name "POST:/users"
+ expected: expected/trace-users-detail.yml
diff --git a/test/e2e/case/native-protocols/expected/service.yml
b/test/e2e/case/native-protocols/expected/dependency-services.yml
similarity index 62%
copy from test/e2e/case/native-protocols/expected/service.yml
copy to test/e2e/case/native-protocols/expected/dependency-services.yml
index b9bd7c5..8660dde 100644
--- a/test/e2e/case/native-protocols/expected/service.yml
+++ b/test/e2e/case/native-protocols/expected/dependency-services.yml
@@ -13,19 +13,32 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-{{- contains . }}
-- id: {{ b64enc "e2e-service-provider" }}.1
+debuggingtrace: null
+nodes:
+{{- contains .nodes }}
+- id: {{ b64enc "e2e-service-provider"}}.1
name: e2e-service-provider
- shortname: e2e-service-provider
- group: ""
+ type: Tomcat
+ isreal: true
layers:
- GENERAL
- normal: true
-- id: {{ b64enc "e2e-service-consumer" }}.1
+- id: {{ b64enc "e2e-service-consumer"}}.1
name: e2e-service-consumer
- shortname: e2e-service-consumer
- group: ""
+ type: Tomcat
+ isreal: true
layers:
- GENERAL
- normal: true
-{{- end }}
\ No newline at end of file
+{{- end }}
+calls:
+{{- contains .calls }}
+- source: {{ b64enc "e2e-service-consumer"}}.1
+ sourcecomponents:
+ - SpringRestTemplate
+ target: {{ b64enc "e2e-service-provider"}}.1
+ targetcomponents:
+ - Tomcat
+ id: {{ b64enc "e2e-service-consumer"}}.1-{{ b64enc "e2e-service-provider"}}.1
+ detectpoints:
+ - CLIENT
+ - SERVER
+{{- end }}
diff --git a/test/e2e/case/native-protocols/expected/event-list.yml
b/test/e2e/case/native-protocols/expected/event-list.yml
index 4b4dde2..8cf1259 100644
--- a/test/e2e/case/native-protocols/expected/event-list.yml
+++ b/test/e2e/case/native-protocols/expected/event-list.yml
@@ -25,8 +25,24 @@ events:
message: Start Java Application
parameters:
{{- contains .parameters }}
- - key: OPTS
- value: {{ notEmpty .value }}
+ - key: OPTS
+ value: {{ notEmpty .value }}
+ {{- end }}
+ starttime: {{ gt .starttime 0 }}
+ endtime: {{ gt .endtime 0 }}
+ layer: GENERAL
+- uuid: {{ notEmpty .uuid }}
+ source:
+ service: e2e-service-consumer
+ serviceinstance: consumer1
+ endpoint: ""
+ name: Start
+ type: Normal
+ message: Start Java Application
+ parameters:
+ {{- contains .parameters }}
+ - key: OPTS
+ value: {{ notEmpty .value }}
{{- end }}
starttime: {{ gt .starttime 0 }}
endtime: {{ gt .endtime 0 }}
diff --git a/test/e2e/case/native-protocols/expected/logs-list.yml
b/test/e2e/case/native-protocols/expected/logs-list.yml
index d044721..9046a24 100644
--- a/test/e2e/case/native-protocols/expected/logs-list.yml
+++ b/test/e2e/case/native-protocols/expected/logs-list.yml
@@ -21,8 +21,8 @@ logs:
serviceid: {{ b64enc "e2e-service-provider" }}.1
serviceinstancename: provider1
serviceinstanceid: {{ b64enc "e2e-service-provider" }}.1_{{ b64enc
"provider1" }}
- endpointname: POST:/info
- endpointid: {{ b64enc "e2e-service-provider" }}.1_{{ b64enc "POST:/info" }}
+ endpointname: {{ notEmpty .endpointname }}
+ endpointid: {{ notEmpty .endpointid }}
traceid: {{ notEmpty .traceid }}
timestamp: {{ gt .timestamp 0 }}
contenttype: TEXT
diff --git a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
b/test/e2e/case/native-protocols/expected/metrics-has-value.yml
index 5aa1e36..cae6688 100644
--- a/test/e2e/case/native-protocols/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-protocols/expected/metrics-has-value.yml
@@ -13,14 +13,22 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-{{- contains . }}
-- key: {{ notEmpty .key }}
- value:
- {{ if .value.isemptyvalue }}
- isemptyvalue: true
- value: 0
- {{ else }}
- isemptyvalue: false
- value: {{ ge .value.value 0 }}
- {{ end }}
-{{- end }}
+debuggingtrace: null
+type: TIME_SERIES_VALUES
+results:
+ {{- contains .results }}
+ - metric:
+ labels: []
+ values:
+ {{- contains .values }}
+ - id: {{ notEmpty .id }}
+ value: {{ notEmpty .value }}
+ owner: null
+ traceid: null
+ - id: {{ notEmpty .id }}
+ value: null
+ owner: null
+ traceid: null
+ {{- end}}
+ {{- end}}
+error: null
diff --git a/test/e2e/case/istio/als/expected/metrics-has-value.yml
b/test/e2e/case/native-protocols/expected/metrics-no-value.yml
similarity index 92%
copy from test/e2e/case/istio/als/expected/metrics-has-value.yml
copy to test/e2e/case/native-protocols/expected/metrics-no-value.yml
index 445dceb..19fffb9 100644
--- a/test/e2e/case/istio/als/expected/metrics-has-value.yml
+++ b/test/e2e/case/native-protocols/expected/metrics-no-value.yml
@@ -21,11 +21,9 @@ results:
labels: []
values:
{{- contains .values }}
- - id: {{ notEmpty .id }}
- value: {{ .value }}
- traceid: null
- id: {{ notEmpty .id }}
value: null
+ owner: null
traceid: null
{{- end}}
{{- end}}
diff --git
a/test/e2e/case/native-protocols/expected/profile-segment-analyze.yml
b/test/e2e/case/native-protocols/expected/profile-segment-analyze.yml
index e5a8e3e..9471b07 100644
--- a/test/e2e/case/native-protocols/expected/profile-segment-analyze.yml
+++ b/test/e2e/case/native-protocols/expected/profile-segment-analyze.yml
@@ -20,7 +20,7 @@ trees:
{{- contains .elements }}
- id: "{{ notEmpty .id }}"
parentid: "{{ notEmpty .parentid }}"
- codesignature: java.lang.Thread.sleep:-2
+ codesignature: "java.lang.Thread.sleep:-2"
duration: {{ gt .duration 0 }}
durationchildexcluded: {{ gt .durationchildexcluded 0 }}
count: {{ gt .count 0 }}
diff --git a/test/e2e/case/native-protocols/expected/profile-segment-list.yml
b/test/e2e/case/native-protocols/expected/profile-segment-list.yml
index 8d530d5..f0e2d07 100644
--- a/test/e2e/case/native-protocols/expected/profile-segment-list.yml
+++ b/test/e2e/case/native-protocols/expected/profile-segment-list.yml
@@ -22,31 +22,29 @@
duration: {{ gt .duration 0 }}
start: "{{ notEmpty .start }}"
spans:
- {{- contains .spans}}
- - spanid: {{ ge .spanid 0 }}
- parentspanid: {{ .parentspanid }}
- segmentid: {{ notEmpty .segmentid }}
- refs: []
- servicecode: e2e-service-provider
- serviceinstancename: provider1
- starttime: {{ gt .starttime 0 }}
- endtime: {{ gt .endtime 0 }}
- endpointname: POST:/info
- type: Entry
- peer: ""
- component: Tomcat
- iserror: false
- layer: Http
- tags:
- {{- contains .tags }}
- - key: url
- value: {{ notEmpty .value }}
- - key: http.method
- value: POST
- - key: http.status_code
- value: 200
- {{- end }}
- logs: []
- profiled: true
- {{- end}}
+ {{- contains .spans}}
+ - spanid: {{ ge .spanid 0 }}
+ parentspanid: {{ .parentspanid }}
+ segmentid: {{ notEmpty .segmentid }}
+ refs: []
+ servicecode: e2e-service-provider
+ serviceinstancename: provider1
+ starttime: {{ gt .starttime 0 }}
+ endtime: {{ gt .endtime 0 }}
+ endpointname: POST:/info
+ type: Entry
+ peer: ""
+ component: Tomcat
+ iserror: false
+ layer: Http
+ tags:
+ {{- contains .tags }}
+ - key: url
+ value: {{ notEmpty .value }}
+ - key: http.method
+ value: POST
+ {{- end }}
+ logs: []
+ profiled: true
+ {{- end}}
{{- end }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/service.yml
b/test/e2e/case/native-protocols/expected/service.yml
index b9bd7c5..8b2684e 100644
--- a/test/e2e/case/native-protocols/expected/service.yml
+++ b/test/e2e/case/native-protocols/expected/service.yml
@@ -16,16 +16,16 @@
{{- contains . }}
- id: {{ b64enc "e2e-service-provider" }}.1
name: e2e-service-provider
- shortname: e2e-service-provider
group: ""
+ shortname: e2e-service-provider
+ normal: true
layers:
- GENERAL
- normal: true
- id: {{ b64enc "e2e-service-consumer" }}.1
name: e2e-service-consumer
- shortname: e2e-service-consumer
group: ""
+ shortname: e2e-service-consumer
+ normal: true
layers:
- GENERAL
- normal: true
-{{- end }}
\ No newline at end of file
+{{- end }}
diff --git a/test/e2e/case/native-protocols/expected/trace-info-detail.yml
b/test/e2e/case/native-protocols/expected/trace-info-detail.yml
index 68a5cb8..be5a7d8 100644
--- a/test/e2e/case/native-protocols/expected/trace-info-detail.yml
+++ b/test/e2e/case/native-protocols/expected/trace-info-detail.yml
@@ -14,52 +14,65 @@
# limitations under the License.
debuggingtrace: null
-spans:
- {{- contains .spans}}
- - traceid: {{ notEmpty .traceid }}
- attachedevents: []
- segmentid: {{ notEmpty .segmentid }}
- spanid: {{ .spanid }}
- parentspanid: {{ .parentspanid }}
- refs:
- {{- if eq .servicecode "e2e-service-provider" }}
+retrievedtimerange:
+ {{- with .retrievedtimerange }}
+ starttime: {{ gt .starttime 0 }}
+ endtime: {{ gt .endtime 0 }}
+ {{- end }}
+traces:
+ {{- contains .traces }}
+ - spans:
+ {{- contains .spans }}
+ - traceid: {{ notEmpty .traceid }}
+ segmentid: {{ notEmpty .segmentid }}
+ spanid: {{ .spanid }}
+ parentspanid: {{ .parentspanid }}
+ refs:
+ {{- if eq .servicecode "e2e-service-provider" }}
{{- contains .refs }}
- - traceid: {{ notEmpty .traceid }}
- parentsegmentid: {{ notEmpty .parentsegmentid }}
- parentspanid: 1
- type: CROSS_PROCESS
+ - traceid: {{ notEmpty .traceid }}
+ parentsegmentid: {{ notEmpty .parentsegmentid }}
+ parentspanid: 1
+ type: CROSS_PROCESS
{{- end }}
{{- end }}
{{- if eq .servicecode "e2e-service-consumer" }}
- []
+ []
{{- end }}
- servicecode: {{ notEmpty .servicecode }}
- serviceinstancename: {{ notEmpty .serviceinstancename }}
- starttime: {{ gt .starttime 0 }}
- endtime: {{ gt .endtime 0 }}
- endpointname: POST:/info
- type: {{ notEmpty .type }}
- peer:
- {{- if eq .type "Exit" }}
- provider:9090
- {{ else }}
- ""
- {{- end }}
- component:
- {{- if eq .type "Exit" }}
- SpringRestTemplate
- {{- end }}
- {{- if eq .type "Entry" }}
- Tomcat
- {{- end }}
- iserror: false
- layer: Http
- tags:
- {{- contains .tags }}
- - key: http.method
- value: POST
- - key: url
- value: {{ notEmpty .value }}
+ servicecode: {{ notEmpty .servicecode }}
+ serviceinstancename: {{ notEmpty .serviceinstancename }}
+ starttime: {{ gt .starttime 0 }}
+ endtime: {{ gt .endtime 0 }}
+ endpointname:
+ {{- if eq .type "Exit" }}
+ /info
+ {{ else }}
+ POST:/info
+ {{- end }}
+ type: {{ notEmpty .type }}
+ peer:
+ {{- if eq .type "Exit" }}
+ provider:9090
+ {{ else }}
+ ""
{{- end }}
- logs: []
+ component:
+ {{- if eq .type "Exit" }}
+ SpringRestTemplate
+ {{- end }}
+ {{- if eq .type "Entry" }}
+ Tomcat
+ {{- end }}
+ iserror: false
+ layer: Http
+ tags:
+ {{- contains .tags }}
+ - key: http.method
+ value: POST
+ - key: url
+ value: {{ notEmpty .value }}
+ {{- end }}
+ logs: []
+ attachedevents: []
+ {{- end }}
{{- end }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/trace-users-detail.yml
b/test/e2e/case/native-protocols/expected/trace-users-detail.yml
index 4481f43..87f036a 100644
--- a/test/e2e/case/native-protocols/expected/trace-users-detail.yml
+++ b/test/e2e/case/native-protocols/expected/trace-users-detail.yml
@@ -14,30 +14,38 @@
# limitations under the License.
debuggingtrace: null
-spans:
- {{- contains .spans}}
- - traceid: {{ notEmpty .traceid }}
- segmentid: {{ notEmpty .segmentid }}
- attachedevents: []
- spanid: 0
- parentspanid: -1
- refs: []
- servicecode: {{ notEmpty .servicecode }}
- serviceinstancename: {{ notEmpty .serviceinstancename }}
- starttime: {{ gt .starttime 0 }}
- endtime: {{ gt .endtime 0 }}
- endpointname: POST:/users
- type: Entry
- peer: ""
- component: Tomcat
- iserror: false
- layer: Http
- tags:
- {{- contains .tags }}
- - key: http.method
- value: POST
- - key: url
- value: {{ notEmpty .value }}
- {{- end }}
- logs: []
+retrievedtimerange:
+ {{- with .retrievedtimerange }}
+ starttime: {{ gt .starttime 0 }}
+ endtime: {{ gt .endtime 0 }}
+ {{- end }}
+traces:
+ {{- contains .traces }}
+ - spans:
+ {{- with (index .spans 0) }}
+ - traceid: {{ .traceid }}
+ segmentid: {{ .segmentid }}
+ spanid: {{ .spanid }}
+ parentspanid: {{ .parentspanid }}
+ refs: []
+ servicecode: e2e-service-provider
+ serviceinstancename: provider1
+ starttime: {{ gt .starttime 0 }}
+ endtime: {{ gt .endtime 0 }}
+ endpointname: POST:/users
+ type: Entry
+ peer: ""
+ component: Tomcat
+ iserror: false
+ layer: Http
+ tags:
+ {{- contains .tags }}
+ - key: http.method
+ value: POST
+ - key: url
+ value: {{ notEmpty .value }}
+ {{- end }}
+ logs: []
+ attachedevents: []
+ {{- end }}
{{- end }}
\ No newline at end of file
diff --git a/test/e2e/case/native-protocols/expected/traces-list.yml
b/test/e2e/case/native-protocols/expected/traces-list.yml
index e529898..f576ee6 100644
--- a/test/e2e/case/native-protocols/expected/traces-list.yml
+++ b/test/e2e/case/native-protocols/expected/traces-list.yml
@@ -14,14 +14,36 @@
# limitations under the License.
debuggingtrace: null
+retrievedtimerange:
+ {{- with .retrievedtimerange }}
+ starttime: {{ gt .starttime 0 }}
+ endtime: {{ gt .endtime 0 }}
+ {{- end }}
traces:
{{- contains .traces }}
-- segmentid: {{ notEmpty .segmentid }}
- endpointnames:
- - POST:/info
- duration: {{ ge .duration 0 }}
- start: "{{ notEmpty .start}}"
- iserror: false
- traceids:
- - {{ (index .traceids 0) }}
- {{- end }}
\ No newline at end of file
+ - spans:
+ {{- contains .spans }}
+ - traceid: {{ .traceid }}
+ segmentid: {{ .segmentid }}
+ spanid: {{ .spanid }}
+ parentspanid: {{ .parentspanid }}
+ refs: []
+ servicecode: {{ .servicecode }}
+ serviceinstancename: {{ .serviceinstancename }}
+ starttime: {{ gt .starttime 0 }}
+ endtime: {{ gt .endtime 0 }}
+ endpointname: {{ .endpointname }}
+ type: {{ .type }}
+ peer: {{ .peer }}
+ component: {{ .component }}
+ iserror: {{ .iserror }}
+ layer: {{ .layer }}
+ tags:
+ {{- contains .tags }}
+ - key: {{ .key }}
+ value: {{ .value }}
+ {{- end }}
+ logs: []
+ attachedevents: []
+ {{- end }}
+ {{- end }}