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

liujun pushed a commit to branch refactor-with-go
in repository https://gitbox.apache.org/repos/asf/dubbo-admin.git


The following commit(s) were added to refs/heads/refactor-with-go by this push:
     new c8e92f86 feat: mock service provider (#1144)
c8e92f86 is described below

commit c8e92f862c173a1ff027a608e932523edda4cd44
Author: Wang Guan <[email protected]>
AuthorDate: Fri May 26 16:37:22 2023 +0800

    feat: mock service provider (#1144)
---
 cmd/admin/main.go                                  |   6 +
 conf/mock_provider.yml                             |  28 +++
 go.mod                                             |  38 +++-
 go.sum                                             |  69 +++++-
 pkg/admin/config/config.go                         |   3 +
 pkg/admin/mapper/mock_rule_mapper.go               |   8 +-
 pkg/admin/mapper/mock_rule_mapper_mock.go          |   9 +-
 pkg/admin/providers/mock/api/mock.pb.go            | 248 +++++++++++++++++++++
 .../mock/api/mock.proto}                           |  26 ++-
 pkg/admin/providers/mock/api/mock_triple.pb.go     | 164 ++++++++++++++
 pkg/admin/providers/mock/mock_provider.go          |  61 +++++
 pkg/admin/services/mock_rule_service.go            |   7 +-
 pkg/admin/services/mock_rule_service_impl.go       |  12 +-
 pkg/admin/services/mock_rule_service_impl_test.go  |   5 +-
 14 files changed, 658 insertions(+), 26 deletions(-)

diff --git a/cmd/admin/main.go b/cmd/admin/main.go
index 0d83716a..5bc1ffd7 100644
--- a/cmd/admin/main.go
+++ b/cmd/admin/main.go
@@ -18,7 +18,11 @@
 package main
 
 import (
+       "os"
+
+       "dubbo.apache.org/dubbo-go/v3/common/constant"
        "github.com/apache/dubbo-admin/pkg/admin/config"
+       mock "github.com/apache/dubbo-admin/pkg/admin/providers/mock"
        "github.com/apache/dubbo-admin/pkg/admin/router"
        "github.com/apache/dubbo-admin/pkg/admin/services"
 )
@@ -36,6 +40,8 @@ func main() {
        defer func() {
                services.DestroySubscribe(config.RegistryCenter)
        }()
+       os.Setenv(constant.ConfigFileEnvKey, config.MockProviderConf)
+       go mock.RunMockServiceServer()
        router := router.InitRouter()
        _ = router.Run(":38080")
 }
diff --git a/conf/mock_provider.yml b/conf/mock_provider.yml
new file mode 100644
index 00000000..8f1700d1
--- /dev/null
+++ b/conf/mock_provider.yml
@@ -0,0 +1,28 @@
+# 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.
+
+dubbo:
+  registries:
+    demoZK:
+      protocol: zookeeper
+      address: 127.0.0.1:2181
+  protocols:
+    triple:
+      name: tri
+      port: 20000
+  provider:
+    services:
+      MockServiceServer:
+        interface: "" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 4aa349c1..c7bae641 100644
--- a/go.mod
+++ b/go.mod
@@ -21,6 +21,7 @@ go 1.19
 require (
        dubbo.apache.org/dubbo-go/v3 v3.0.6-0.20230516071747-5b2397c8b0b0
        github.com/dubbogo/gost v1.13.2
+       github.com/dubbogo/grpc-go v1.42.10
        github.com/evanphx/json-patch/v5 v5.6.0
        github.com/gin-gonic/gin v1.9.0
        github.com/glebarez/sqlite v1.8.0
@@ -56,19 +57,38 @@ require (
 )
 
 require (
+       cloud.google.com/go/compute v1.18.0 // indirect
+       cloud.google.com/go/compute/metadata v0.2.3 // indirect
        github.com/RageCage64/multilinediff v0.2.0 // indirect
+       github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // 
indirect
+       github.com/alibaba/sentinel-golang v1.0.4 // indirect
        github.com/bmatcuk/doublestar/v4 v4.6.0 // indirect
        github.com/braydonk/yaml v0.7.0 // indirect
        github.com/bytedance/sonic v1.8.0 // indirect
+       github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
        github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // 
indirect
+       github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe // indirect
+       github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b // indirect
+       github.com/coreos/go-semver v0.3.0 // indirect
+       github.com/coreos/go-systemd/v22 v22.3.2 // indirect
+       github.com/dlclark/regexp2 v1.7.0 // indirect
        github.com/dustin/go-humanize v1.0.1 // indirect
+       github.com/envoyproxy/go-control-plane v0.11.0 // indirect
+       github.com/envoyproxy/protoc-gen-validate v0.9.1 // indirect
        github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // 
indirect
        github.com/fatih/color v1.13.0 // indirect
        github.com/glebarez/go-sqlite v1.21.1 // indirect
+       github.com/go-co-op/gocron v1.9.0 // indirect
        github.com/go-gorp/gorp/v3 v3.0.5 // indirect
+       github.com/go-logr/stdr v1.2.2 // indirect
+       github.com/go-resty/resty/v2 v2.7.0 // indirect
        github.com/go-sql-driver/mysql v1.7.0 // indirect
        github.com/gosuri/uitable v0.0.4 // indirect
        github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // 
indirect
+       github.com/grpc-ecosystem/grpc-opentracing 
v0.0.0-20180507213350-8e809c8a8645 // indirect
+       github.com/hashicorp/errwrap v1.1.0 // indirect
+       github.com/hashicorp/go-multierror v1.1.1 // indirect
+       github.com/hashicorp/vault/sdk v0.7.0 // indirect
        github.com/huandu/xstrings v1.4.0 // indirect
        github.com/jinzhu/gorm v1.9.2 // indirect
        github.com/jinzhu/inflection v1.0.0 // indirect
@@ -76,17 +96,31 @@ require (
        github.com/klauspost/cpuid/v2 v2.2.3 // indirect
        github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // 
indirect
        github.com/mattn/go-runewidth v0.0.9 // indirect
+       github.com/mitchellh/go-homedir v1.1.0 // indirect
+       github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 // 
indirect
        github.com/opencontainers/go-digest v1.0.0 // indirect
        github.com/opencontainers/image-spec v1.1.0-rc2 // indirect
+       github.com/opentracing/opentracing-go v1.2.0 // indirect
+       github.com/pierrec/lz4 v2.5.2+incompatible // indirect
+       github.com/polarismesh/polaris-go v1.3.0 // indirect
        github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // 
indirect
        github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // 
indirect
+       github.com/robfig/cron/v3 v3.0.1 // indirect
        github.com/shirou/gopsutil/v3 v3.22.2 // indirect
        github.com/shopspring/decimal v1.3.1 // indirect
        github.com/sirupsen/logrus v1.9.0 // indirect
+       github.com/spaolacci/murmur3 v1.1.0 // indirect
        github.com/tklauser/go-sysconf v0.3.10 // indirect
        github.com/tklauser/numcpus v0.4.0 // indirect
        github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
+       github.com/uber/jaeger-client-go v2.29.1+incompatible // indirect
+       github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
        github.com/yusufpapurcu/wmi v1.2.2 // indirect
+       go.etcd.io/etcd/api/v3 v3.5.7 // indirect
+       go.etcd.io/etcd/client/pkg/v3 v3.5.7 // indirect
+       go.etcd.io/etcd/client/v3 v3.5.7 // indirect
+       go.opentelemetry.io/otel v1.11.0 // indirect
+       go.opentelemetry.io/otel/trace v1.11.0 // indirect
        golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
        k8s.io/apiextensions-apiserver v0.26.1 // indirect
        k8s.io/apiserver v0.26.1 // indirect
@@ -131,7 +165,7 @@ require (
        github.com/docker/go-metrics v0.0.1 // indirect
        github.com/docker/go-units v0.4.0 // indirect
        github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5
-       github.com/dubbogo/triple v1.2.2-rc3 // indirect
+       github.com/dubbogo/triple v1.2.2-rc3
        github.com/emicklei/go-restful/v3 v3.10.1 // indirect
        github.com/evanphx/json-patch v5.6.0+incompatible // indirect
        github.com/fsnotify/fsnotify v1.6.0 // indirect
@@ -218,7 +252,7 @@ require (
        github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 
// indirect
        github.com/xeipuuv/gojsonschema v1.2.0 // indirect
        github.com/xlab/treeprint v1.1.0 // indirect
-       go.opencensus.io v0.23.0 // indirect
+       go.opencensus.io v0.24.0 // indirect
        go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect
        go.uber.org/atomic v1.10.0 // indirect
        go.uber.org/multierr v1.9.0 // indirect
diff --git a/go.sum b/go.sum
index 60609266..7afa64a3 100644
--- a/go.sum
+++ b/go.sum
@@ -110,8 +110,12 @@ cloud.google.com/go/compute v1.7.0/go.mod 
h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQH
 cloud.google.com/go/compute v1.10.0/go.mod 
h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU=
 cloud.google.com/go/compute v1.12.0/go.mod 
h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU=
 cloud.google.com/go/compute v1.12.1/go.mod 
h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU=
+cloud.google.com/go/compute v1.18.0 
h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY=
+cloud.google.com/go/compute v1.18.0/go.mod 
h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs=
 cloud.google.com/go/compute/metadata v0.1.0/go.mod 
h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU=
 cloud.google.com/go/compute/metadata v0.2.1/go.mod 
h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM=
+cloud.google.com/go/compute/metadata v0.2.3 
h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
+cloud.google.com/go/compute/metadata v0.2.3/go.mod 
h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
 cloud.google.com/go/contactcenterinsights v1.3.0/go.mod 
h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY=
 cloud.google.com/go/contactcenterinsights v1.4.0/go.mod 
h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck=
 cloud.google.com/go/container v1.6.0/go.mod 
h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg=
@@ -376,6 +380,7 @@ github.com/BurntSushi/toml v1.2.1/go.mod 
h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbi
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod 
h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/DATA-DOG/go-sqlmock v1.5.0 
h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
 github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod 
h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
+github.com/HdrHistogram/hdrhistogram-go v1.1.2 
h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
 github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod 
h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
 github.com/Knetic/govaluate 
v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod 
h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
 github.com/MakeNowJust/heredoc v1.0.0 
h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
@@ -405,7 +410,9 @@ github.com/VividCortex/gohistogram v1.0.0/go.mod 
h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/
 github.com/Workiva/go-datastructures v1.0.52 
h1:PLSK6pwn8mYdaoaCZEMsXBpBotr4HHn9abU0yMQt0NI=
 github.com/Workiva/go-datastructures v1.0.52/go.mod 
h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA=
 github.com/a8m/expect v1.0.0/go.mod 
h1:4IwSCMumY49ScypDnjNbYEjgVeqy1/U2cEs3Lat96eA=
+github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 
h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw=
 github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod 
h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
+github.com/agiledragon/gomonkey v2.0.2+incompatible 
h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw=
 github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod 
h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw=
 github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod 
h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod 
h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@@ -413,6 +420,7 @@ github.com/alecthomas/template 
v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod 
h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod 
h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod 
h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/alibaba/sentinel-golang v1.0.4 
h1:i0wtMvNVdy7vM4DdzYrlC4r/Mpk1OKUUBurKKkWhEo8=
 github.com/alibaba/sentinel-golang v1.0.4/go.mod 
h1:Lag5rIYyJiPOylK8Kku2P+a23gdKMMqzQS7wTnjWEpk=
 github.com/aliyun/alibaba-cloud-sdk-go v1.61.18/go.mod 
h1:v8ESoHo4SyHmuB4b1tJqDHxfTGEciD+yhvOU/5s1Rfk=
 github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 
h1:PpfENOj/vPfhhy9N2OFRjpue0hjM5XqAp2thFmkXXIk=
@@ -475,8 +483,11 @@ github.com/bytedance/sonic v1.5.0/go.mod 
h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1
 github.com/bytedance/sonic v1.8.0 
h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA=
 github.com/bytedance/sonic v1.8.0/go.mod 
h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
 github.com/casbin/casbin/v2 v2.1.2/go.mod 
h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
+github.com/cenkalti/backoff v2.2.1+incompatible 
h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
 github.com/cenkalti/backoff v2.2.1+incompatible/go.mod 
h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
+github.com/cenkalti/backoff/v4 v4.1.3 
h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod 
h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/census-instrumentation/opencensus-proto v0.4.1 
h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g=
 github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod 
h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
 github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod 
h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
 github.com/cespare/xxhash v1.1.0/go.mod 
h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
@@ -500,12 +511,16 @@ github.com/cncf/udpa/go 
v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX
 github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod 
h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
 github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod 
h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
 github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod 
h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
+github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe 
h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk=
+github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod 
h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
 github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b 
h1:ACGZRIr7HsgBKHsueQ1yM4WaVaXh21ynwqsF8M8tXhA=
+github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod 
h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
 github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod 
h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
 github.com/cockroachdb/errors v1.2.4/go.mod 
h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
@@ -518,10 +533,12 @@ github.com/coreos/bbolt v1.3.2/go.mod 
h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkE
 github.com/coreos/etcd v3.3.10+incompatible/go.mod 
h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 github.com/coreos/etcd v3.3.13+incompatible/go.mod 
h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 github.com/coreos/go-semver v0.2.0/go.mod 
h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-semver v0.3.0 
h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
 github.com/coreos/go-semver v0.3.0/go.mod 
h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod 
h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod 
h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/go-systemd/v22 v22.1.0/go.mod 
h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
+github.com/coreos/go-systemd/v22 v22.3.2 
h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
 github.com/coreos/go-systemd/v22 v22.3.2/go.mod 
h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
 github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod 
h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
 github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod 
h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
@@ -544,6 +561,7 @@ github.com/denisenkom/go-mssqldb v0.9.0/go.mod 
h1:xbL0rPBG9cCiLr28tMa8zpbdarY27N
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod 
h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod 
h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
 github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 
h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc=
+github.com/dlclark/regexp2 v1.7.0 
h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo=
 github.com/dlclark/regexp2 v1.7.0/go.mod 
h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
 github.com/docker/cli v20.10.21+incompatible 
h1:qVkgyYUnOLQ98LtXBrwd/duVqPT2X4SHndOuGsfwyhU=
 github.com/docker/cli v20.10.21+incompatible/go.mod 
h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
@@ -572,6 +590,7 @@ github.com/dubbogo/gost v1.13.1/go.mod 
h1:9HMXBv+WBMRWhF3SklpqDjkS/01AKWm2SrVdz/
 github.com/dubbogo/gost v1.13.2 h1:z4dczJ5KYu9CAbHWevzTVI/7a7vGQ1vECfmzKHacov0=
 github.com/dubbogo/gost v1.13.2/go.mod 
h1:2vbZ7bo4PgR7stX1He5XBvQgP6wx4A7q7IFHZU3hVmE=
 github.com/dubbogo/grpc-go v1.42.9/go.mod 
h1:F1T9hnUvYGW4JLK1QNriavpOkhusU677ovPzLkk6zHM=
+github.com/dubbogo/grpc-go v1.42.10 
h1:CoyCdtqKJEar/3rPa6peZbDqYZ/mVsCqAxB6TfTSkhQ=
 github.com/dubbogo/grpc-go v1.42.10/go.mod 
h1:JMkPt1mIHL96GAFeYsMoMjew6f1ROKycikGzZQH1s5U=
 github.com/dubbogo/jsonparser v1.0.1/go.mod 
h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU=
 github.com/dubbogo/net v0.0.4/go.mod 
h1:1CGOnM7X3he+qgGNqjeADuE5vKZQx/eMSeUkpU3ujIc=
@@ -601,8 +620,10 @@ github.com/envoyproxy/go-control-plane 
v0.9.10-0.20210907150352-cf90f659a021/go.
 github.com/envoyproxy/go-control-plane v0.10.0/go.mod 
h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ=
 github.com/envoyproxy/go-control-plane v0.10.1/go.mod 
h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ=
 github.com/envoyproxy/go-control-plane 
v0.10.2-0.20220325020618-49ff273808a1/go.mod 
h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
+github.com/envoyproxy/go-control-plane v0.11.0 
h1:jtLewhRR2vMRNnq2ZZUoCjUlgut+Y0+sDDWPOfwOi1o=
 github.com/envoyproxy/go-control-plane v0.11.0/go.mod 
h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod 
h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/envoyproxy/protoc-gen-validate v0.9.1 
h1:PS7VIOgmSVhWUEeZwTe7z7zouA22Cr590PzXKbZHOVY=
 github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod 
h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w=
 github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 
h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
 github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod 
h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
@@ -623,6 +644,7 @@ github.com/fatih/structs v1.1.0/go.mod 
h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga
 github.com/felixge/httpsnoop v1.0.3 
h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
 github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod 
h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
 github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod 
h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
+github.com/form3tech-oss/jwt-go v3.2.3+incompatible 
h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c=
 github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod 
h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
 github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod 
h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
 github.com/frankban/quicktest v1.10.0/go.mod 
h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y=
@@ -643,6 +665,7 @@ github.com/glebarez/go-sqlite v1.21.1/go.mod 
h1:ISs8MF6yk5cL4n/43rSOmVMGJJjHYr7L
 github.com/glebarez/sqlite v1.8.0 
h1:02X12E2I/4C1n+v90yTqrjRa8yuo7c3KeHI3FRznCvc=
 github.com/glebarez/sqlite v1.8.0/go.mod 
h1:bpET16h1za2KOOMb8+jCp6UBP/iahDpfPQqSaYLTLx8=
 github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod 
h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
+github.com/go-co-op/gocron v1.9.0 
h1:+V+DDenw3ryB7B+tK1bAIC5p0ruw4oX9IqAsdRnGIf0=
 github.com/go-co-op/gocron v1.9.0/go.mod 
h1:DbJm9kdgr1sEvWpHCA7dFFs/PGHPMil9/97EXCRPr4k=
 github.com/go-errors/errors v1.0.1 
h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w=
 github.com/go-errors/errors v1.0.1/go.mod 
h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
@@ -668,6 +691,7 @@ github.com/go-logr/logr v1.2.0/go.mod 
h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV
 github.com/go-logr/logr v1.2.2/go.mod 
h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
 github.com/go-logr/logr v1.2.3/go.mod 
h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod 
h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
 github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A=
 github.com/go-ole/go-ole v1.2.4/go.mod 
h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
@@ -689,6 +713,7 @@ github.com/go-playground/universal-translator v0.18.1 
h1:Bcnm0ZwsGyWbCzImXv+pAJn
 github.com/go-playground/universal-translator v0.18.1/go.mod 
h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
 github.com/go-playground/validator/v10 v10.12.0 
h1:E4gtWgxWxp8YSxExrQFv5BpCahla0PVF2oTTEYaWQGI=
 github.com/go-playground/validator/v10 v10.12.0/go.mod 
h1:hCAPuzYvKdP33pxWa+2+6AIKXEKqjIUyqsNCtbsSJrA=
+github.com/go-resty/resty/v2 v2.7.0 
h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
 github.com/go-resty/resty/v2 v2.7.0/go.mod 
h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
 github.com/go-sql-driver/mysql v1.4.0/go.mod 
h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-sql-driver/mysql v1.5.0/go.mod 
h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
@@ -846,6 +871,7 @@ github.com/googleapis/gax-go/v2 v2.6.0/go.mod 
h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMd
 github.com/googleapis/go-type-adapters v1.0.0/go.mod 
h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
 github.com/googleapis/google-cloud-go-testing 
v0.0.0-20200911160855-bcd43fbb19e8/go.mod 
h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod 
h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 
h1:twflg0XRTjwKpxb/jFExr4HGq6on2dEOmnL6FV+fgPw=
 github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod 
h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gorilla/context v1.1.1/go.mod 
h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
 github.com/gorilla/handlers v1.5.1 
h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
@@ -866,13 +892,17 @@ github.com/grpc-ecosystem/go-grpc-middleware 
v1.0.1-0.20190118093823-f849b5445de
 github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod 
h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 
h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw=
 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod 
h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 
h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod 
h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod 
h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod 
h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod 
h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0 
h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod 
h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
 github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod 
h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 
h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk=
 github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod 
h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w=
+github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 
h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
 github.com/grpc-ecosystem/grpc-opentracing 
v0.0.0-20180507213350-8e809c8a8645/go.mod 
h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
 github.com/hashicorp/consul/api v1.1.0/go.mod 
h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
 github.com/hashicorp/consul/api v1.3.0/go.mod 
h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
@@ -881,6 +911,7 @@ github.com/hashicorp/consul/sdk v0.1.1/go.mod 
h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyN
 github.com/hashicorp/consul/sdk v0.3.0/go.mod 
h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
 github.com/hashicorp/consul/sdk v0.8.0/go.mod 
h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
 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=
 github.com/hashicorp/go-cleanhttp v0.5.0/go.mod 
h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
 github.com/hashicorp/go-cleanhttp v0.5.1/go.mod 
h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
@@ -895,6 +926,7 @@ github.com/hashicorp/go-kms-wrapping/entropy/v2 
v2.0.0/go.mod h1:xvb32K2keAc+R8D
 github.com/hashicorp/go-msgpack v0.5.3/go.mod 
h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
 github.com/hashicorp/go-multierror v1.0.0/go.mod 
h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
 github.com/hashicorp/go-multierror v1.1.0/go.mod 
h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
+github.com/hashicorp/go-multierror v1.1.1 
h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
 github.com/hashicorp/go-multierror v1.1.1/go.mod 
h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
 github.com/hashicorp/go-plugin v1.0.1/go.mod 
h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
 github.com/hashicorp/go-plugin v1.4.5/go.mod 
h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s=
@@ -935,6 +967,7 @@ github.com/hashicorp/serf v0.8.2/go.mod 
h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J
 github.com/hashicorp/serf v0.9.6/go.mod 
h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4=
 github.com/hashicorp/vault/api v1.0.4/go.mod 
h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q=
 github.com/hashicorp/vault/sdk v0.1.13/go.mod 
h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M=
+github.com/hashicorp/vault/sdk v0.7.0 
h1:2pQRO40R1etpKkia5fb4kjrdYMx3BHklPxl1pxpxDHg=
 github.com/hashicorp/vault/sdk v0.7.0/go.mod 
h1:KyfArJkhooyba7gYCKSq8v66QdqJmnbAxtV/OX1+JTs=
 github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod 
h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
 github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod 
h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
@@ -982,6 +1015,7 @@ github.com/jmoiron/sqlx v1.3.5/go.mod 
h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Cc
 github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
 github.com/joho/godotenv v1.3.0/go.mod 
h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/jonboulle/clockwork v0.1.0/go.mod 
h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/jonboulle/clockwork v0.2.2 
h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
 github.com/jonboulle/clockwork v0.2.2/go.mod 
h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
 github.com/josharian/intern v1.0.0 
h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0/go.mod 
h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
@@ -998,6 +1032,7 @@ github.com/json-iterator/go v1.1.12 
h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
 github.com/json-iterator/go v1.1.12/go.mod 
h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod 
h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
 github.com/jstemmer/go-junit-report v0.9.1/go.mod 
h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
+github.com/jtolds/gls v4.20.0+incompatible 
h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
 github.com/jtolds/gls v4.20.0+incompatible/go.mod 
h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod 
h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/julienschmidt/httprouter v1.3.0/go.mod 
h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
@@ -1113,6 +1148,7 @@ github.com/mitchellh/copystructure v1.0.0/go.mod 
h1:SNtv71yrdKgLRyLFxmLdkAbkKEFW
 github.com/mitchellh/copystructure v1.2.0 
h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
 github.com/mitchellh/copystructure v1.2.0/go.mod 
h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
 github.com/mitchellh/go-homedir v1.0.0/go.mod 
h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-homedir v1.1.0 
h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
 github.com/mitchellh/go-homedir v1.1.0/go.mod 
h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
 github.com/mitchellh/go-testing-interface 
v0.0.0-20171004221916-a61a99592b77/go.mod 
h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
 github.com/mitchellh/go-testing-interface v1.0.0/go.mod 
h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
@@ -1177,6 +1213,7 @@ github.com/oklog/run v1.0.0/go.mod 
h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ
 github.com/oklog/ulid v1.3.1/go.mod 
h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
 github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod 
h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
 github.com/olekukonko/tablewriter v0.0.5/go.mod 
h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
+github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 
h1:Yl0tPBa8QPjGmesFh1D0rDy+q1Twx6FyU7VWHi8wZbI=
 github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852/go.mod 
h1:eqOVx5Vwu4gd2mmMZvVZsgIqNSaW3xxRThUJ0k/TPk4=
 github.com/onsi/ginkgo v1.6.0/go.mod 
h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
@@ -1193,6 +1230,7 @@ github.com/opentracing-contrib/go-observer 
v0.0.0-20170622124052-a52f23424492/go
 github.com/opentracing/basictracer-go v1.0.0/go.mod 
h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
 github.com/opentracing/opentracing-go v1.0.2/go.mod 
h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/opentracing/opentracing-go v1.1.0/go.mod 
h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/opentracing/opentracing-go v1.2.0 
h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
 github.com/opentracing/opentracing-go v1.2.0/go.mod 
h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod 
h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
 github.com/openzipkin/zipkin-go v0.1.6/go.mod 
h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
@@ -1215,6 +1253,7 @@ github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod 
h1:uqqh8zWWbv1HBMNONnaR
 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 
h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI=
 github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod 
h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod 
h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pierrec/lz4 v2.5.2+incompatible 
h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI=
 github.com/pierrec/lz4 v2.5.2+incompatible/go.mod 
h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod 
h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
 github.com/pkg/errors v0.8.0/go.mod 
h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -1226,6 +1265,7 @@ github.com/pkg/sftp v1.10.1/go.mod 
h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ
 github.com/pkg/sftp v1.13.1/go.mod 
h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
 github.com/pmezard/go-difflib v1.0.0 
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/polarismesh/polaris-go v1.3.0 
h1:KZKX//ow4OPPoS5+s7h07ptprg+2AcNVGrN6WakC9QM=
 github.com/polarismesh/polaris-go v1.3.0/go.mod 
h1:HsN0ierETIujHpmnnYJ3qkwQw4QGAECuHvBZTDaw1tI=
 github.com/posener/complete v1.1.1/go.mod 
h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
 github.com/posener/complete v1.2.3/go.mod 
h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
@@ -1292,6 +1332,7 @@ github.com/remyoudompheng/bigfft 
v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qq
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec 
h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod 
h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
 github.com/rhnvrm/simples3 v0.6.1/go.mod 
h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA=
+github.com/robfig/cron/v3 v3.0.1 
h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
 github.com/robfig/cron/v3 v3.0.1/go.mod 
h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
 github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod 
h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
 github.com/rogpeppe/fastuuid v1.2.0/go.mod 
h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
@@ -1327,13 +1368,17 @@ github.com/sirupsen/logrus v1.7.0/go.mod 
h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic
 github.com/sirupsen/logrus v1.8.1/go.mod 
h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/sirupsen/logrus v1.9.0 
h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
 github.com/sirupsen/logrus v1.9.0/go.mod 
h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d 
h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod 
h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod 
h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/smartystreets/goconvey v1.6.4 
h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
 github.com/smartystreets/goconvey v1.6.4/go.mod 
h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/soheilhy/cmux v0.1.4/go.mod 
h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
 github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5/go.mod 
h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
+github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=
 github.com/sony/gobreaker v0.4.1/go.mod 
h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod 
h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spaolacci/murmur3 v1.1.0 
h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
 github.com/spaolacci/murmur3 v1.1.0/go.mod 
h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/afero v1.1.2/go.mod 
h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
 github.com/spf13/afero v1.3.3/go.mod 
h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
@@ -1402,12 +1447,15 @@ github.com/tklauser/numcpus v0.4.0/go.mod 
h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hM
 github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod 
h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod 
h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod 
h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 
h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod 
h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/toolkits/concurrent v0.0.0-20150624120057-a4371d70e3e3/go.mod 
h1:QDlpd3qS71vYtakd2hmdpqhJ9nwv6mD6A30bQ1BPBFE=
 github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod 
h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
 github.com/twitchyliquid64/golang-asm v0.15.1 
h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
 github.com/twitchyliquid64/golang-asm v0.15.1/go.mod 
h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
+github.com/uber/jaeger-client-go v2.29.1+incompatible 
h1:R9ec3zO3sGpzs0abd43Y+fBZRJ9uiH6lXyR/+u6brW4=
 github.com/uber/jaeger-client-go v2.29.1+incompatible/go.mod 
h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
+github.com/uber/jaeger-lib v2.4.1+incompatible 
h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
 github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod 
h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
 github.com/ugorji/go v1.1.4/go.mod 
h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
 github.com/ugorji/go v1.2.6/go.mod 
h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0=
@@ -1424,6 +1472,7 @@ github.com/xeipuuv/gojsonreference 
v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHo
 github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod 
h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
 github.com/xeipuuv/gojsonschema v1.2.0 
h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
 github.com/xeipuuv/gojsonschema v1.2.0/go.mod 
h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 
h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod 
h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xlab/treeprint v1.1.0 
h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk=
 github.com/xlab/treeprint v1.1.0/go.mod 
h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0=
@@ -1443,22 +1492,31 @@ github.com/yvasiyarov/newrelic_platform_go 
v0.0.0-20140908184405-b21fdbd4370f h1
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
+go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
+go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 
h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0=
 go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod 
h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
 go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod 
h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw=
 go.etcd.io/etcd/api/v3 v3.5.0/go.mod 
h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
 go.etcd.io/etcd/api/v3 v3.5.4/go.mod 
h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
+go.etcd.io/etcd/api/v3 v3.5.7 h1:sbcmosSVesNrWOJ58ZQFitHMdncusIifYcrBfwrlJSY=
 go.etcd.io/etcd/api/v3 v3.5.7/go.mod 
h1:9qew1gCdDDLu+VwmeG+iFpL+QlpHTo7iubavdVDgCAA=
 go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod 
h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
 go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod 
h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
+go.etcd.io/etcd/client/pkg/v3 v3.5.7 
h1:y3kf5Gbp4e4q7egZdn5T7W9TSHUvkClN6u+Rq9mEOmg=
 go.etcd.io/etcd/client/pkg/v3 v3.5.7/go.mod 
h1:o0Abi1MK86iad3YrWhgUsbGx1pmTS+hrORWc2CamuhY=
 go.etcd.io/etcd/client/v2 v2.305.0-alpha.0/go.mod 
h1:kdV+xzCJ3luEBSIeQyB/OEKkWKd8Zkux4sbDeANrosU=
 go.etcd.io/etcd/client/v2 v2.305.0/go.mod 
h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
+go.etcd.io/etcd/client/v2 v2.305.5 
h1:DktRP60//JJpnPC0VBymAN/7V71GHMdjDCBt4ZPXDjI=
 go.etcd.io/etcd/client/v3 v3.5.0-alpha.0/go.mod 
h1:wKt7jgDgf/OfKiYmCq5WFGxOFAkVMLxiiXgLDFhECr8=
 go.etcd.io/etcd/client/v3 v3.5.4/go.mod 
h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY=
+go.etcd.io/etcd/client/v3 v3.5.7 
h1:u/OhpiuCgYY8awOHlhIhmGIGpxfBU/GZBUP3m/3/Iz4=
 go.etcd.io/etcd/client/v3 v3.5.7/go.mod 
h1:sOWmj9DZUMyAngS7QQwCyAXXAL6WhgTOPLNS/NabQgw=
 go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0/go.mod 
h1:tV31atvwzcybuqejDoY3oaNRTtlD2l/Ot78Pc9w7DMY=
+go.etcd.io/etcd/pkg/v3 v3.5.5 h1:Ablg7T7OkR+AeeeU32kdVhw/AGDsitkKPl7aW73ssjU=
 go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0/go.mod 
h1:FAwse6Zlm5v4tEWZaTjmNhe17Int4Oxbu7+2r0DiD3w=
+go.etcd.io/etcd/raft/v3 v3.5.5 h1:Ibz6XyZ60OYyRopu73lLM/P+qco3YtlZMOhnXNS051I=
 go.etcd.io/etcd/server/v3 v3.5.0-alpha.0/go.mod 
h1:tsKetYpt980ZTpzl/gb+UOJj9RkIyCb1u4wjzMg90BQ=
+go.etcd.io/etcd/server/v3 v3.5.5 
h1:jNjYm/9s+f9A9r6+SC4RvNaz6AqixpOvhrFdT0PvIj0=
 go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
 go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
@@ -1467,11 +1525,20 @@ go.opencensus.io v0.22.2/go.mod 
h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
-go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
 go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
+go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
+go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.35.0 h1:xFSRQBbXF6VvYRf2lqMJXxoB72XI1K/azav8TekHHSw=
+go.opentelemetry.io/otel v1.11.0 
h1:kfToEGMDq6TrVrJ9Vht84Y8y9enykSZzDDZglV0kIEk=
 go.opentelemetry.io/otel v1.11.0/go.mod 
h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk=
+go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0 
h1:TaB+1rQhddO1sF71MpZOZAuSPW1klK2M8XxfrBMfK7Y=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0 
h1:pDDYmo0QadUPal5fwXoY1pmMpFcdyhXOmL5drCrI3vU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0 
h1:KtiUEhQmj/Pa874bVYKGNVdq8NPKiacPbaRRtgXi+t4=
+go.opentelemetry.io/otel/sdk v1.10.0 
h1:jZ6K7sVn04kk/3DNUdJ4mqRlGDiXAVuIG+MMENpTNdY=
+go.opentelemetry.io/otel/trace v1.11.0 
h1:20U/Vj42SX+mASlXLmSGBg6jpI1jQtv682lZtTAOVFI=
 go.opentelemetry.io/otel/trace v1.11.0/go.mod 
h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod 
h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
+go.opentelemetry.io/proto/otlp v0.19.0 
h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw=
 go.opentelemetry.io/proto/otlp v0.19.0/go.mod 
h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
 go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 
h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc=
 go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod 
h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o=
diff --git a/pkg/admin/config/config.go b/pkg/admin/config/config.go
index a25da29a..847b4a12 100644
--- a/pkg/admin/config/config.go
+++ b/pkg/admin/config/config.go
@@ -24,6 +24,7 @@ import (
        "strings"
 
        "dubbo.apache.org/dubbo-go/v3/common"
+
        "dubbo.apache.org/dubbo-go/v3/common/extension"
        "dubbo.apache.org/dubbo-go/v3/config_center"
        "dubbo.apache.org/dubbo-go/v3/metadata/report"
@@ -44,6 +45,8 @@ const (
        confPathKey = "ADMIN_CONFIG_PATH"
 )
 
+const MockProviderConf = "./conf/mock_provider.yml"
+
 type Config struct {
        Admin      Admin      `yaml:"admin"`
        Prometheus Prometheus `yaml:"prometheus"`
diff --git a/pkg/admin/mapper/mock_rule_mapper.go 
b/pkg/admin/mapper/mock_rule_mapper.go
index 5123c547..43f48edd 100644
--- a/pkg/admin/mapper/mock_rule_mapper.go
+++ b/pkg/admin/mapper/mock_rule_mapper.go
@@ -18,6 +18,8 @@
 package mapper
 
 import (
+       "context"
+
        "github.com/apache/dubbo-admin/pkg/admin/config"
        "github.com/apache/dubbo-admin/pkg/admin/model"
 )
@@ -26,7 +28,7 @@ type MockRuleMapper interface {
        Create(mockRule *model.MockRuleEntity) error
        Update(mockRule *model.MockRuleEntity) error
        DeleteById(id int64) error
-       FindByServiceNameAndMethodName(serviceName, methodName string) 
(*model.MockRuleEntity, error)
+       FindByServiceNameAndMethodName(ctx context.Context, serviceName, 
methodName string) (*model.MockRuleEntity, error)
        FindByPage(filter string, offset, limit int) ([]*model.MockRuleEntity, 
int64, error)
 }
 
@@ -44,9 +46,9 @@ func (m *MockRuleMapperImpl) DeleteById(id int64) error {
        return config.DataBase.Delete(&model.MockRuleEntity{}, id).Error
 }
 
-func (m *MockRuleMapperImpl) FindByServiceNameAndMethodName(serviceName, 
methodName string) (*model.MockRuleEntity, error) {
+func (m *MockRuleMapperImpl) FindByServiceNameAndMethodName(ctx 
context.Context, serviceName, methodName string) (*model.MockRuleEntity, error) 
{
        var mockRule model.MockRuleEntity
-       err := config.DataBase.Where("service_name = ? and method_name = ?", 
serviceName, methodName).Limit(1).Find(&mockRule).Error
+       err := config.DataBase.WithContext(ctx).Where("service_name = ? and 
method_name = ?", serviceName, methodName).Limit(1).Find(&mockRule).Error
        return &mockRule, err
 }
 
diff --git a/pkg/admin/mapper/mock_rule_mapper_mock.go 
b/pkg/admin/mapper/mock_rule_mapper_mock.go
index 949133c8..d5cf5734 100644
--- a/pkg/admin/mapper/mock_rule_mapper_mock.go
+++ b/pkg/admin/mapper/mock_rule_mapper_mock.go
@@ -22,6 +22,7 @@
 package mapper
 
 import (
+       context "context"
        reflect "reflect"
 
        model "github.com/apache/dubbo-admin/pkg/admin/model"
@@ -96,18 +97,18 @@ func (mr *MockMockRuleMapperMockRecorder) FindByPage(arg0, 
arg1, arg2 interface{
 }
 
 // FindByServiceNameAndMethodName mocks base method.
-func (m *MockMockRuleMapper) FindByServiceNameAndMethodName(arg0, arg1 string) 
(*model.MockRuleEntity, error) {
+func (m *MockMockRuleMapper) FindByServiceNameAndMethodName(arg0 
context.Context, arg1, arg2 string) (*model.MockRuleEntity, error) {
        m.ctrl.T.Helper()
-       ret := m.ctrl.Call(m, "FindByServiceNameAndMethodName", arg0, arg1)
+       ret := m.ctrl.Call(m, "FindByServiceNameAndMethodName", arg0, arg1, 
arg2)
        ret0, _ := ret[0].(*model.MockRuleEntity)
        ret1, _ := ret[1].(error)
        return ret0, ret1
 }
 
 // FindByServiceNameAndMethodName indicates an expected call of 
FindByServiceNameAndMethodName.
-func (mr *MockMockRuleMapperMockRecorder) FindByServiceNameAndMethodName(arg0, 
arg1 interface{}) *gomock.Call {
+func (mr *MockMockRuleMapperMockRecorder) FindByServiceNameAndMethodName(arg0, 
arg1, arg2 interface{}) *gomock.Call {
        mr.mock.ctrl.T.Helper()
-       return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, 
"FindByServiceNameAndMethodName", 
reflect.TypeOf((*MockMockRuleMapper)(nil).FindByServiceNameAndMethodName), 
arg0, arg1)
+       return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, 
"FindByServiceNameAndMethodName", 
reflect.TypeOf((*MockMockRuleMapper)(nil).FindByServiceNameAndMethodName), 
arg0, arg1, arg2)
 }
 
 // Update mocks base method.
diff --git a/pkg/admin/providers/mock/api/mock.pb.go 
b/pkg/admin/providers/mock/api/mock.pb.go
new file mode 100644
index 00000000..fc0364e4
--- /dev/null
+++ b/pkg/admin/providers/mock/api/mock.pb.go
@@ -0,0 +1,248 @@
+/*
+ * 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.
+ */
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+//     protoc-gen-go v1.28.1
+//     protoc        v3.21.12
+// source: mock.proto
+
+package api
+
+import (
+       protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+       protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+       reflect "reflect"
+       sync "sync"
+)
+
+const (
+       // Verify that this generated code is sufficiently up-to-date.
+       _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+       // Verify that runtime/protoimpl is sufficiently up-to-date.
+       _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type GetMockDataReq struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       ServiceName string `protobuf:"bytes,1,opt,name=serviceName,proto3" 
json:"serviceName,omitempty"`
+       MethodName  string `protobuf:"bytes,2,opt,name=methodName,proto3" 
json:"methodName,omitempty"`
+}
+
+func (x *GetMockDataReq) Reset() {
+       *x = GetMockDataReq{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_mock_proto_msgTypes[0]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *GetMockDataReq) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMockDataReq) ProtoMessage() {}
+
+func (x *GetMockDataReq) ProtoReflect() protoreflect.Message {
+       mi := &file_mock_proto_msgTypes[0]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetMockDataReq.ProtoReflect.Descriptor instead.
+func (*GetMockDataReq) Descriptor() ([]byte, []int) {
+       return file_mock_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GetMockDataReq) GetServiceName() string {
+       if x != nil {
+               return x.ServiceName
+       }
+       return ""
+}
+
+func (x *GetMockDataReq) GetMethodName() string {
+       if x != nil {
+               return x.MethodName
+       }
+       return ""
+}
+
+type GetMockDataResp struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       Rule   string `protobuf:"bytes,1,opt,name=rule,proto3" 
json:"rule,omitempty"`
+       Enable bool   `protobuf:"varint,2,opt,name=enable,proto3" 
json:"enable,omitempty"`
+}
+
+func (x *GetMockDataResp) Reset() {
+       *x = GetMockDataResp{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_mock_proto_msgTypes[1]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *GetMockDataResp) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetMockDataResp) ProtoMessage() {}
+
+func (x *GetMockDataResp) ProtoReflect() protoreflect.Message {
+       mi := &file_mock_proto_msgTypes[1]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetMockDataResp.ProtoReflect.Descriptor instead.
+func (*GetMockDataResp) Descriptor() ([]byte, []int) {
+       return file_mock_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GetMockDataResp) GetRule() string {
+       if x != nil {
+               return x.Rule
+       }
+       return ""
+}
+
+func (x *GetMockDataResp) GetEnable() bool {
+       if x != nil {
+               return x.Enable
+       }
+       return false
+}
+
+var File_mock_proto protoreflect.FileDescriptor
+
+var file_mock_proto_rawDesc = []byte{
+       0x0a, 0x0a, 0x6d, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 
0x12, 0x03, 0x61, 0x70,
+       0x69, 0x22, 0x52, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x63, 0x6b, 
0x44, 0x61, 0x74, 0x61,
+       0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 
0x63, 0x65, 0x4e, 0x61,
+       0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 
0x72, 0x76, 0x69, 0x63,
+       0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x65, 0x74, 
0x68, 0x6f, 0x64, 0x4e,
+       0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 
0x65, 0x74, 0x68, 0x6f,
+       0x64, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 
0x4d, 0x6f, 0x63, 0x6b,
+       0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 
0x72, 0x75, 0x6c, 0x65,
+       0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 
0x12, 0x16, 0x0a, 0x06,
+       0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 
0x52, 0x06, 0x65, 0x6e,
+       0x61, 0x62, 0x6c, 0x65, 0x32, 0x49, 0x0a, 0x0b, 0x4d, 0x6f, 0x63, 0x6b, 
0x53, 0x65, 0x72, 0x76,
+       0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x6f, 
0x63, 0x6b, 0x44, 0x61,
+       0x74, 0x61, 0x12, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 
0x4d, 0x6f, 0x63, 0x6b,
+       0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x61, 0x70, 
0x69, 0x2e, 0x47, 0x65,
+       0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 
0x70, 0x22, 0x00, 0x42,
+       0x08, 0x5a, 0x06, 0x2e, 0x2f, 0x3b, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 
0x72, 0x6f, 0x74, 0x6f,
+       0x33,
+}
+
+var (
+       file_mock_proto_rawDescOnce sync.Once
+       file_mock_proto_rawDescData = file_mock_proto_rawDesc
+)
+
+func file_mock_proto_rawDescGZIP() []byte {
+       file_mock_proto_rawDescOnce.Do(func() {
+               file_mock_proto_rawDescData = 
protoimpl.X.CompressGZIP(file_mock_proto_rawDescData)
+       })
+       return file_mock_proto_rawDescData
+}
+
+var file_mock_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_mock_proto_goTypes = []interface{}{
+       (*GetMockDataReq)(nil),  // 0: api.GetMockDataReq
+       (*GetMockDataResp)(nil), // 1: api.GetMockDataResp
+}
+var file_mock_proto_depIdxs = []int32{
+       0, // 0: api.MockService.GetMockData:input_type -> api.GetMockDataReq
+       1, // 1: api.MockService.GetMockData:output_type -> api.GetMockDataResp
+       1, // [1:2] is the sub-list for method output_type
+       0, // [0:1] is the sub-list for method input_type
+       0, // [0:0] is the sub-list for extension type_name
+       0, // [0:0] is the sub-list for extension extendee
+       0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_mock_proto_init() }
+func file_mock_proto_init() {
+       if File_mock_proto != nil {
+               return
+       }
+       if !protoimpl.UnsafeEnabled {
+               file_mock_proto_msgTypes[0].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*GetMockDataReq); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_mock_proto_msgTypes[1].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*GetMockDataResp); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+       }
+       type x struct{}
+       out := protoimpl.TypeBuilder{
+               File: protoimpl.DescBuilder{
+                       GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+                       RawDescriptor: file_mock_proto_rawDesc,
+                       NumEnums:      0,
+                       NumMessages:   2,
+                       NumExtensions: 0,
+                       NumServices:   1,
+               },
+               GoTypes:           file_mock_proto_goTypes,
+               DependencyIndexes: file_mock_proto_depIdxs,
+               MessageInfos:      file_mock_proto_msgTypes,
+       }.Build()
+       File_mock_proto = out.File
+       file_mock_proto_rawDesc = nil
+       file_mock_proto_goTypes = nil
+       file_mock_proto_depIdxs = nil
+}
diff --git a/pkg/admin/services/mock_rule_service.go 
b/pkg/admin/providers/mock/api/mock.proto
similarity index 57%
copy from pkg/admin/services/mock_rule_service.go
copy to pkg/admin/providers/mock/api/mock.proto
index 3ae5ce4b..10a43d92 100644
--- a/pkg/admin/services/mock_rule_service.go
+++ b/pkg/admin/providers/mock/api/mock.proto
@@ -15,19 +15,21 @@
  * limitations under the License.
  */
 
-package services
+syntax = "proto3";
+package api;
 
-import "github.com/apache/dubbo-admin/pkg/admin/model"
+option go_package = "./;api";
 
-type MockRuleService interface {
-       // create or update mock rule. if the request contains id, then will be 
an update operation.
-       CreateOrUpdateMockRule(mockRule *model.MockRule) error
-
-       // delete the mock rule data by mock rule id.
-       DeleteMockRuleById(id int64) error
-
-       // list the mock rules by filter and return data by page.
-       ListMockRulesByPage(filter string, offset, limit int) 
([]*model.MockRule, int64, error)
+service MockService {
+  rpc GetMockData (GetMockDataReq) returns (GetMockDataResp) {}
+}
 
-       // TODO getMockData method, which depends on the implementation 
corresponding to mock of dubbo-go.
+message GetMockDataReq {
+  string serviceName = 1;
+  string methodName = 2;
 }
+
+message GetMockDataResp {
+  string rule = 1;
+  bool enable = 2;
+}
\ No newline at end of file
diff --git a/pkg/admin/providers/mock/api/mock_triple.pb.go 
b/pkg/admin/providers/mock/api/mock_triple.pb.go
new file mode 100644
index 00000000..b6084d8e
--- /dev/null
+++ b/pkg/admin/providers/mock/api/mock_triple.pb.go
@@ -0,0 +1,164 @@
+/*
+ * 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.
+ */
+
+// Code generated by protoc-gen-go-triple. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-triple v1.0.8
+// - protoc             v3.21.12
+// source: mock.proto
+
+package api
+
+import (
+       context "context"
+       protocol "dubbo.apache.org/dubbo-go/v3/protocol"
+       dubbo3 "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
+       invocation "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
+       grpc_go "github.com/dubbogo/grpc-go"
+       codes "github.com/dubbogo/grpc-go/codes"
+       metadata "github.com/dubbogo/grpc-go/metadata"
+       status "github.com/dubbogo/grpc-go/status"
+       common "github.com/dubbogo/triple/pkg/common"
+       constant "github.com/dubbogo/triple/pkg/common/constant"
+       triple "github.com/dubbogo/triple/pkg/triple"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc_go.SupportPackageIsVersion7
+
+// MockServiceClient is the client API for MockService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please 
refer to 
https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type MockServiceClient interface {
+       GetMockData(ctx context.Context, in *GetMockDataReq, opts 
...grpc_go.CallOption) (*GetMockDataResp, common.ErrorWithAttachment)
+}
+
+type mockServiceClient struct {
+       cc *triple.TripleConn
+}
+
+type MockServiceClientImpl struct {
+       GetMockData func(ctx context.Context, in *GetMockDataReq) 
(*GetMockDataResp, error)
+}
+
+func (c *MockServiceClientImpl) GetDubboStub(cc *triple.TripleConn) 
MockServiceClient {
+       return NewMockServiceClient(cc)
+}
+
+func (c *MockServiceClientImpl) XXX_InterfaceName() string {
+       return "api.MockService"
+}
+
+func NewMockServiceClient(cc *triple.TripleConn) MockServiceClient {
+       return &mockServiceClient{cc}
+}
+
+func (c *mockServiceClient) GetMockData(ctx context.Context, in 
*GetMockDataReq, opts ...grpc_go.CallOption) (*GetMockDataResp, 
common.ErrorWithAttachment) {
+       out := new(GetMockDataResp)
+       interfaceKey := ctx.Value(constant.InterfaceKey).(string)
+       return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetMockData", in, out)
+}
+
+// MockServiceServer is the server API for MockService service.
+// All implementations must embed UnimplementedMockServiceServer
+// for forward compatibility
+type MockServiceServer interface {
+       GetMockData(context.Context, *GetMockDataReq) (*GetMockDataResp, error)
+       mustEmbedUnimplementedMockServiceServer()
+}
+
+// UnimplementedMockServiceServer must be embedded to have forward compatible 
implementations.
+type UnimplementedMockServiceServer struct {
+       proxyImpl protocol.Invoker
+}
+
+func (UnimplementedMockServiceServer) GetMockData(context.Context, 
*GetMockDataReq) (*GetMockDataResp, error) {
+       return nil, status.Errorf(codes.Unimplemented, "method GetMockData not 
implemented")
+}
+func (s *UnimplementedMockServiceServer) XXX_SetProxyImpl(impl 
protocol.Invoker) {
+       s.proxyImpl = impl
+}
+
+func (s *UnimplementedMockServiceServer) XXX_GetProxyImpl() protocol.Invoker {
+       return s.proxyImpl
+}
+
+func (s *UnimplementedMockServiceServer) XXX_ServiceDesc() 
*grpc_go.ServiceDesc {
+       return &MockService_ServiceDesc
+}
+func (s *UnimplementedMockServiceServer) XXX_InterfaceName() string {
+       return "api.MockService"
+}
+
+func (UnimplementedMockServiceServer) 
mustEmbedUnimplementedMockServiceServer() {}
+
+// UnsafeMockServiceServer may be embedded to opt out of forward compatibility 
for this service.
+// Use of this interface is not recommended, as added methods to 
MockServiceServer will
+// result in compilation errors.
+type UnsafeMockServiceServer interface {
+       mustEmbedUnimplementedMockServiceServer()
+}
+
+func RegisterMockServiceServer(s grpc_go.ServiceRegistrar, srv 
MockServiceServer) {
+       s.RegisterService(&MockService_ServiceDesc, srv)
+}
+
+func _MockService_GetMockData_Handler(srv interface{}, ctx context.Context, 
dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) 
(interface{}, error) {
+       in := new(GetMockDataReq)
+       if err := dec(in); err != nil {
+               return nil, err
+       }
+       base := srv.(dubbo3.Dubbo3GrpcService)
+       args := []interface{}{}
+       args = append(args, in)
+       md, _ := metadata.FromIncomingContext(ctx)
+       invAttachment := make(map[string]interface{}, len(md))
+       for k, v := range md {
+               invAttachment[k] = v
+       }
+       invo := invocation.NewRPCInvocation("GetMockData", args, invAttachment)
+       if interceptor == nil {
+               result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+               return result, result.Error()
+       }
+       info := &grpc_go.UnaryServerInfo{
+               Server:     srv,
+               FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
+       }
+       handler := func(ctx context.Context, req interface{}) (interface{}, 
error) {
+               result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+               return result, result.Error()
+       }
+       return interceptor(ctx, in, info, handler)
+}
+
+// MockService_ServiceDesc is the grpc_go.ServiceDesc for MockService service.
+// It's only intended for direct use with grpc_go.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var MockService_ServiceDesc = grpc_go.ServiceDesc{
+       ServiceName: "api.MockService",
+       HandlerType: (*MockServiceServer)(nil),
+       Methods: []grpc_go.MethodDesc{
+               {
+                       MethodName: "GetMockData",
+                       Handler:    _MockService_GetMockData_Handler,
+               },
+       },
+       Streams:  []grpc_go.StreamDesc{},
+       Metadata: "mock.proto",
+}
diff --git a/pkg/admin/providers/mock/mock_provider.go 
b/pkg/admin/providers/mock/mock_provider.go
new file mode 100644
index 00000000..3b13b4fb
--- /dev/null
+++ b/pkg/admin/providers/mock/mock_provider.go
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ */
+
+package mock
+
+import (
+       "context"
+
+       "dubbo.apache.org/dubbo-go/v3/config"
+       _ "dubbo.apache.org/dubbo-go/v3/imports"
+       "github.com/apache/dubbo-admin/pkg/admin/mapper"
+       "github.com/apache/dubbo-admin/pkg/admin/providers/mock/api"
+       "github.com/apache/dubbo-admin/pkg/admin/services"
+       "github.com/apache/dubbo-admin/pkg/logger"
+)
+
+var _ api.MockServiceServer = (*MockServiceServer)(nil)
+
+type MockServiceServer struct {
+       api.UnimplementedMockServiceServer
+       mockRuleService services.MockRuleService
+}
+
+func (s *MockServiceServer) GetMockData(ctx context.Context, req 
*api.GetMockDataReq) (*api.GetMockDataResp, error) {
+       rule, enable, err := s.mockRuleService.GetMockData(ctx, 
req.ServiceName, req.MethodName)
+       if err != nil {
+               return nil, err
+       }
+       return &api.GetMockDataResp{
+               Rule:   rule,
+               Enable: enable,
+       }, nil
+}
+
+func RunMockServiceServer() {
+       var mockRuleService services.MockRuleService = 
&services.MockRuleServiceImpl{
+               MockRuleMapper: &mapper.MockRuleMapperImpl{},
+               Logger:         logger.Logger(),
+       }
+       config.SetProviderService(&MockServiceServer{
+               mockRuleService: mockRuleService,
+       })
+       if err := config.Load(); err != nil {
+               panic(err)
+       }
+       select {}
+}
diff --git a/pkg/admin/services/mock_rule_service.go 
b/pkg/admin/services/mock_rule_service.go
index 3ae5ce4b..ddc93597 100644
--- a/pkg/admin/services/mock_rule_service.go
+++ b/pkg/admin/services/mock_rule_service.go
@@ -17,7 +17,11 @@
 
 package services
 
-import "github.com/apache/dubbo-admin/pkg/admin/model"
+import (
+       "context"
+
+       "github.com/apache/dubbo-admin/pkg/admin/model"
+)
 
 type MockRuleService interface {
        // create or update mock rule. if the request contains id, then will be 
an update operation.
@@ -30,4 +34,5 @@ type MockRuleService interface {
        ListMockRulesByPage(filter string, offset, limit int) 
([]*model.MockRule, int64, error)
 
        // TODO getMockData method, which depends on the implementation 
corresponding to mock of dubbo-go.
+       GetMockData(ctx context.Context, serviceName, methodName string) (rule 
string, enable bool, err error)
 }
diff --git a/pkg/admin/services/mock_rule_service_impl.go 
b/pkg/admin/services/mock_rule_service_impl.go
index f6889961..2c1ef45a 100644
--- a/pkg/admin/services/mock_rule_service_impl.go
+++ b/pkg/admin/services/mock_rule_service_impl.go
@@ -18,6 +18,7 @@
 package services
 
 import (
+       "context"
        "errors"
 
        "github.com/apache/dubbo-admin/pkg/admin/mapper"
@@ -35,7 +36,7 @@ func (m *MockRuleServiceImpl) CreateOrUpdateMockRule(mockRule 
*model.MockRule) e
                return nil
        }
 
-       existRule, err := 
m.MockRuleMapper.FindByServiceNameAndMethodName(mockRule.ServiceName, 
mockRule.MethodName)
+       existRule, err := 
m.MockRuleMapper.FindByServiceNameAndMethodName(context.TODO(), 
mockRule.ServiceName, mockRule.MethodName)
        if err != nil {
                m.Logger.Error(err.Error())
                return err
@@ -83,3 +84,12 @@ func (m *MockRuleServiceImpl) ListMockRulesByPage(filter 
string, offset, limit i
        }
        return morkRules, total, nil
 }
+
+func (m *MockRuleServiceImpl) GetMockData(ctx context.Context, serviceName, 
methodName string) (rule string, enable bool, err error) {
+       mockRule, err := m.MockRuleMapper.FindByServiceNameAndMethodName(ctx, 
serviceName, methodName)
+       if err != nil {
+               m.Logger.Error(err.Error())
+               return "", false, err
+       }
+       return mockRule.Rule, mockRule.Enable, nil
+}
diff --git a/pkg/admin/services/mock_rule_service_impl_test.go 
b/pkg/admin/services/mock_rule_service_impl_test.go
index b98be6ad..ec277e29 100644
--- a/pkg/admin/services/mock_rule_service_impl_test.go
+++ b/pkg/admin/services/mock_rule_service_impl_test.go
@@ -18,6 +18,7 @@
 package services
 
 import (
+       "context"
        "reflect"
        "testing"
 
@@ -36,9 +37,9 @@ func TestMockRuleServiceImpl_CreateOrUpdateMockRule(t 
*testing.T) {
        mockExistData := &model.MockRule{ID: 1, ServiceName: "testService2", 
MethodName: "testMethod2", Rule: "exampleRule", Enable: true}
        updateData := &model.MockRule{ID: 1, ServiceName: "testService2", 
MethodName: "testMethod2", Rule: "exampleRuleAfterUpdate", Enable: true}
 
-       
mockMockRuleMapper.EXPECT().FindByServiceNameAndMethodName(createData.ServiceName,
 createData.MethodName).Return(mockUnExistData.ToMockRuleEntity(), nil)
+       
mockMockRuleMapper.EXPECT().FindByServiceNameAndMethodName(context.Background(),
 createData.ServiceName, 
createData.MethodName).Return(mockUnExistData.ToMockRuleEntity(), nil)
        
mockMockRuleMapper.EXPECT().Create(createData.ToMockRuleEntity()).Return(nil)
-       
mockMockRuleMapper.EXPECT().FindByServiceNameAndMethodName(mockExistData.ServiceName,
 mockExistData.MethodName).Return(mockExistData.ToMockRuleEntity(), nil)
+       
mockMockRuleMapper.EXPECT().FindByServiceNameAndMethodName(context.Background(),
 mockExistData.ServiceName, 
mockExistData.MethodName).Return(mockExistData.ToMockRuleEntity(), nil)
        
mockMockRuleMapper.EXPECT().Update(updateData.ToMockRuleEntity()).Return(nil)
 
        type args struct {

Reply via email to