diff --git a/go-plugin/Makefile b/go-plugin/Makefile index 6fa8dfe..aef6045 100644 --- a/go-plugin/Makefile +++ b/go-plugin/Makefile @@ -18,6 +18,8 @@ TRANSCODER_OUTPUT = ${TRANSCODER_PREFIX}-${OUTPUT} STEAM_FILTER_PREFIX = filter +TRACE_PREFIX = trace + GIT_VERSION = $(shell git log -1 --pretty=format:%H | head -c 8) PROJECT_NAME = $(shell head -1 go.mod | cut -d' ' -f2) FULL_PROJECT_NAME = $(shell pwd) @@ -26,8 +28,8 @@ FULL_PROJECT_NAME = $(shell pwd) SIDECAR_GITLAB_PROJECT_NAME = gitlab.alipay-inc.com/ant-mesh/mosn SIDECAR_BUILD_IMAGE = mosn-builder -BUILD_IMAGE = golang:1.17.9 -BASE_IMAGE = zonghaishang/delve:v1.7.3 +BUILD_IMAGE = golang:1.20.1 +BASE_IMAGE = zonghaishang/delve:v1.20.1 os_arch:=$(shell uname)_$(shell arch) @@ -70,6 +72,15 @@ transcoder.amd64: transcoder.arm64: GOOS=linux GOARCH=arm64 DOCKER_BUILD_OPTS="--platform=linux/arm64" make transcoder.arch +trace: + make trace.arch + +trace.amd64: + GOOS=linux GOARCH=amd64 DOCKER_BUILD_OPTS="--platform=linux/amd64" make trace.arch + +trace.arm64: + GOOS=linux GOARCH=arm64 DOCKER_BUILD_OPTS="--platform=linux/arm64" make trace.arch + ant: make ant.arch @@ -124,6 +135,22 @@ pkg-trans.amd64: pkg-trans.arm64: GOOS=linux GOARCH=arm64 DOCKER_BUILD_OPTS="--platform=linux/arm64" make pkg-trans.arch +## +pkg-trace: +ifeq ("$(os_arch)","Darwin_arm64") + make pkg-trace.amd64 +else ifeq ("$(os_arch)","Darwin_i386") + make pkg-trace.amd64 +else + make pkg-trace.arch +endif + +pkg-trace.amd64: + GOOS=linux GOARCH=amd64 DOCKER_BUILD_OPTS="--platform=linux/amd64" make pkg-trace.arch + +pkg-trace.arm64: + GOOS=linux GOARCH=arm64 DOCKER_BUILD_OPTS="--platform=linux/arm64" make pkg-trace.arch + pkg-ant: make pkg-ant.arch @@ -207,6 +234,21 @@ transcoder.arch: -w /go/src/${PROJECT_NAME} ${BUILD_IMAGE} \ bash /go/src/${PROJECT_NAME}/etc/script/compile-transcoder.sh +trace.arch: + mkdir -p /tmp/go-build-cache + docker run --rm ${DOCKER_BUILD_OPTS} \ + -e PLUGIN_TRACE=${TARGET} \ + -e PLUGIN_TRACE_PREFIX=${TRACE_PREFIX} \ + -e PLUGIN_PROJECT_NAME=${PROJECT_NAME} \ + -e PLUGIN_OS=${PLUGIN_GOOS} \ + -e PLUGIN_ARCH=${PLUGIN_GOARCH} \ + -e PLUGIN_GIT_VERSION=${GIT_VERSION} \ + -v $(shell go env GOPATH)/pkg/mod/:/go/pkg/mod/ \ + -v ${FULL_PROJECT_NAME}:/go/src/${PROJECT_NAME} \ + -v /tmp/go-build-cache:/root/.cache/go-build \ + -w /go/src/${PROJECT_NAME} ${BUILD_IMAGE} \ + bash /go/src/${PROJECT_NAME}/etc/script/compile-trace.sh + compile-codec: @rm -rf build/codecs/${PLUGIN_TARGET} GO111MODULE=on ${BUILD_OPTS} go build \ @@ -243,15 +285,34 @@ compile-transcoder: cp configs/transcoders/${PLUGIN_TARGET}/*.json build/transcoders/${PLUGIN_TARGET} @echo "compile transcoder ${PLUGIN_TARGET} complete" +compile-trace: + @rm -rf build/traces/${PLUGIN_TARGET} + @rm -rf build/codecs/bundle/support/traces/${PLUGIN_TARGET} + GO111MODULE=on ${BUILD_OPTS} go build \ + --buildmode=plugin -mod=mod \ + -gcflags "all=-N -l" \ + -o ${PLUGIN_TRACE_OUTPUT} ${PLUGIN_PROJECT_NAME}/plugins/traces/${PLUGIN_TARGET}/main + @mkdir -p build/traces/${PLUGIN_TARGET} + mkdir -p build/codecs/bundle/support/traces/${PLUGIN_TARGET} + @mv ${PLUGIN_TRACE_OUTPUT} build/traces/${PLUGIN_TARGET} + @cd build/traces/${PLUGIN_TARGET} && $(shell which md5sum) -b ${PLUGIN_TRACE_OUTPUT} | cut -d' ' -f1 > ${PLUGIN_TRACE_PREFIX}-${PLUGIN_TARGET}.md5 + @cp configs/traces/${PLUGIN_TARGET}/*.json build/traces/${PLUGIN_TARGET} + cp -r build/traces/${PLUGIN_TARGET} build/codecs/bundle/support/traces/ + @echo "compile trace ${PLUGIN_TARGET} complete" + ant.arch: bash ${FULL_PROJECT_NAME}/etc/ant/stop.sh - docker run --rm ${DOCKER_BUILD_OPTS} \ + @test ! -f ~/.netrc && touch ~/.netrc || true + docker run -it --rm ${DOCKER_BUILD_OPTS} \ -e PLUGIN_OS=${PLUGIN_GOOS} \ -e PLUGIN_ARCH=${PLUGIN_GOARCH} \ -e PROJECT_NAME=${PROJECT_NAME} \ + -e GIT_TERMINAL_PROMPT=1 \ -e SIDECAR_PROJECT_NAME=${SIDECAR_GITLAB_PROJECT_NAME} \ -v $(shell go env GOPATH)/pkg/mod/:/go/pkg/mod/ \ -v ${FULL_PROJECT_NAME}:/go/src/${PROJECT_NAME} \ + -v $(shell go env GOCACHE):/root/.cache/go-build \ + -v ~/.netrc:/root/.netrc \ -v $(shell go env GOPATH)/src/${SIDECAR_GITLAB_PROJECT_NAME}:/go/src/${SIDECAR_GITLAB_PROJECT_NAME} \ -w /go/src/${SIDECAR_GITLAB_PROJECT_NAME} ${BUILD_IMAGE} \ bash /go/src/${PROJECT_NAME}/etc/script/compile.sh @@ -310,6 +371,24 @@ pkg-trans.arch: bash /go/src/${PROJECT_NAME}/etc/script/package-transcoder.sh @echo "package transcoder ${TARGET} complete" +pkg-trace.arch: + mkdir -p /tmp/go-build-cache + docker run --rm ${DOCKER_BUILD_OPTS} \ + -e PLUGIN_TRACE=${TARGET} \ + -e PLUGIN_TRACE_PREFIX=${TRACE_PREFIX} \ + -e PLUGIN_PROJECT_NAME=${PROJECT_NAME} \ + -e PLUGIN_OS=${PLUGIN_GOOS} \ + -e PLUGIN_ARCH=${PLUGIN_GOARCH} \ + -e PLUGIN_BUILD_PLATFORM=$(shell uname) \ + -e PLUGIN_BUILD_PLATFORM_ARCH=$(shell arch) \ + -e PLUGIN_GIT_VERSION=${GIT_VERSION} \ + -v ${FULL_PROJECT_NAME}:/go/src/${PROJECT_NAME} \ + -v /tmp/go-build-cache:/root/.cache/go-build \ + -v $(shell go env GOPATH)/pkg/mod/:/go/pkg/mod/ \ + -w /go/src/${PROJECT_NAME} ${BASE_IMAGE} \ + bash /go/src/${PROJECT_NAME}/etc/script/package-trace.sh + @echo "package trace ${TARGET} complete" + pkg-ant.arch: docker run --rm ${DOCKER_BUILD_OPTS} \ -e PLUGIN_OS=${PLUGIN_GOOS} \ diff --git a/go-plugin/build/image/Dockerfile b/go-plugin/build/image/Dockerfile index 4237318..a869122 100644 --- a/go-plugin/build/image/Dockerfile +++ b/go-plugin/build/image/Dockerfile @@ -1,10 +1,10 @@ -FROM golang:1.17.9 +FROM golang:1.20.1 MAINTAINER yiji@apache.org ENV GO111MODULE=on ENV GOPROXY=https://goproxy.cn,direct -RUN go install github.com/go-delve/delve/cmd/dlv@v1.7.3 +RUN go install github.com/go-delve/delve/cmd/dlv@v1.20.1 # install tools. RUN apt update && apt -y install net-tools sudo openbsd-inetd telnet tcpdump zip iptables neovim sysstat iproute2 iftop @@ -18,8 +18,8 @@ WORKDIR /go # how to use this Dockefile ? # docker buildx create --use --name=builder --driver docker-container -# docker buildx build --platform linux/arm64,linux/amd64,linux/386 -t zonghaishang/delve:v1.7.3 . --push +# docker buildx build --platform linux/arm64,linux/amd64,linux/386 -t zonghaishang/delve:v1.20.1 . --push # docker buildx rm builder # how to use this Dockefile build local image for development ? -# docker build -t zonghaishang/delve:v1.7.3 . +# docker build -t zonghaishang/delve:v1.20.1 . diff --git a/go-plugin/configs/traces/skywalking/config.json b/go-plugin/configs/traces/skywalking/config.json new file mode 100644 index 0000000..8c5b84f --- /dev/null +++ b/go-plugin/configs/traces/skywalking/config.json @@ -0,0 +1,10 @@ +{ + "reporter": "gRPC", + "plugin_type": "skywalking", + "backend_service": "${SKY_WALKING_ADDRESS}", + "service_name": "${APPNAME}", + "max_send_queue_size":"${MAX_SEND_QUEUE_SIZE}", + "mosn_generator_span_enabled" :"${MOSN_GENERATOR_SAPN_ENABLED}", + "vmmode":"${VMMODE}", + "pod_name":"${POD_NAME}" +} diff --git a/go-plugin/configs/traces/skywalking/metadata.json b/go-plugin/configs/traces/skywalking/metadata.json new file mode 100644 index 0000000..fcc1235 --- /dev/null +++ b/go-plugin/configs/traces/skywalking/metadata.json @@ -0,0 +1,8 @@ +{ + "name" : "skywalking", + "kind": "trace", + "dependencies": [{ + "mosn_api": "v0.0.0-20211217011300-b851d129be01", + "mosn_pkg": "v0.0.0-20211217101631-d914102d1baf" + }] +} diff --git a/go-plugin/configs/traces/zipkin/config.json b/go-plugin/configs/traces/zipkin/config.json new file mode 100644 index 0000000..806e6ac --- /dev/null +++ b/go-plugin/configs/traces/zipkin/config.json @@ -0,0 +1,13 @@ +{ + "reporter": "http", + "service_name": "${APPNAME}", + "mosn_generator_span_enabled": "${MOSN_GENERATOR_SAPN_ENABLED}", + "http": { + "batch_size": "${BATCH_SIZE}", + "address": "${ZIPKIN_ADDRESS}" + }, + "kafka": { + "topic": "${KAFKA_TOPIC}", + "address": "${ZIPKIN_ADDRESS}" + } +} diff --git a/go-plugin/configs/traces/zipkin/metadata.json b/go-plugin/configs/traces/zipkin/metadata.json new file mode 100644 index 0000000..47797ad --- /dev/null +++ b/go-plugin/configs/traces/zipkin/metadata.json @@ -0,0 +1,8 @@ +{ + "name" : "zipkin", + "kind": "trace", + "dependencies": [{ + "mosn_api": "v0.0.0-20211217011300-b851d129be01", + "mosn_pkg": "v0.0.0-20211217101631-d914102d1baf" + }] +} diff --git a/go-plugin/etc/script/compile-trace.sh b/go-plugin/etc/script/compile-trace.sh new file mode 100644 index 0000000..755d2e0 --- /dev/null +++ b/go-plugin/etc/script/compile-trace.sh @@ -0,0 +1,30 @@ +#!/bin/bash + + +SHELL=/bin/bash + +go env -w GO111MODULE=on +go env -w GOPROXY=https://goproxy.cn,direct +go env -w GOPRIVATE=gitlab.alipay-inc.com,code.alipay.com + +# build trace plugins +if [[ -n "${PLUGIN_TRACE}" ]]; then + tracers=(${PLUGIN_TRACE//,/ }) + rm -rf /go/src/${PLUGIN_PROJECT_NAME}/build/traces + for name in "${tracers[@]}"; do + export PLUGIN_TARGET=${name} + export PLUGIN_TRACE_OUTPUT=${PLUGIN_TRACE_PREFIX}-${PLUGIN_TARGET}.so + if [[ -n "${PLUGIN_GIT_VERSION}" ]]; then + export PLUGIN_TRACE_OUTPUT=${PLUGIN_TRACE_PREFIX}-${PLUGIN_TARGET}-${PLUGIN_GIT_VERSION}.so + fi + # check BUILD_OPTS + if [[ -n ${PLUGIN_OS} && -n ${PLUGIN_ARCH} ]]; then + build_opts="GOOS=${PLUGIN_OS} GOARCH=${PLUGIN_ARCH}" + export BUILD_OPTS=${build_opts} + echo "compiling trace ${name} for ${PLUGIN_OS} ${PLUGIN_ARCH} ..." + else + echo "compiling trace ${name} for linux $(dpkg --print-architecture) ..." + fi + make compile-trace + done +fi diff --git a/go-plugin/etc/script/compile.sh b/go-plugin/etc/script/compile.sh index d9c8a6f..5d3e614 100644 --- a/go-plugin/etc/script/compile.sh +++ b/go-plugin/etc/script/compile.sh @@ -10,10 +10,6 @@ go env -w GOPRIVATE=gitlab.alipay-inc.com,code.alipay.com export PLUGIN_PROJECT=${PROJECT_NAME} export SIDECAR_PROJECT=${SIDECAR_PROJECT_NAME} -# update sidecar dependency. -go mod tidy -go mod download - MAJOR_VERSION=$(cat VERSION) GIT_VERSION=$(git log -1 --pretty=format:%h) @@ -44,6 +40,7 @@ if [ -f mosn ]; then md5sum -b mosn | cut -d' ' -f1 >mosn-${MAJOR_VERSION}-${GIT_VERSION}.md5 mv mosn-${MAJOR_VERSION}-${GIT_VERSION}.md5 "/go/src/${PLUGIN_PROJECT}/build/sidecar/binary/mosn-${MAJOR_VERSION}-${GIT_VERSION}.md5" mv mosn "/go/src/${PLUGIN_PROJECT}/build/sidecar/binary/mosn" + cp "/go/src/${SIDECAR_PROJECT}/go.mod" "/go/src/${PLUGIN_PROJECT}/build/sidecar/binary/local.mod" echo "compile success" else echo "compile failed" diff --git a/go-plugin/etc/script/copy-upgrade-mod.sh b/go-plugin/etc/script/copy-upgrade-mod.sh deleted file mode 100644 index cc1f786..0000000 --- a/go-plugin/etc/script/copy-upgrade-mod.sh +++ /dev/null @@ -1 +0,0 @@ -#!/bin/bash \ No newline at end of file diff --git a/go-plugin/etc/script/package-trace.sh b/go-plugin/etc/script/package-trace.sh new file mode 100644 index 0000000..5a273e2 --- /dev/null +++ b/go-plugin/etc/script/package-trace.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# package trace plugins +if [[ -n "${PLUGIN_TRACE}" ]]; then + if [[ -n ${PLUGIN_OS} && -n ${PLUGIN_ARCH} ]]; then + bash /go/src/"${PLUGIN_PROJECT_NAME}"/etc/script/compile-trace.sh + elif [[ "${PLUGIN_BUILD_PLATFORM}" == "Darwin" && "${PLUGIN_BUILD_PLATFORM_ARCH}" == "arm64" ]]; then + # apple m1 chip compile plugin(amd64) + export PLUGIN_OS="linux" + export PLUGIN_ARCH="amd64" + bash /go/src/"${PLUGIN_PROJECT_NAME}"/etc/script/compile-trace.sh + fi +fi + +pkg_version= +if [[ -f "/go/src/${PLUGIN_PROJECT_NAME}/VERSION.txt" ]]; then + pkg_version=$(cat /go/src/${PLUGIN_PROJECT_NAME}/VERSION.txt) +fi + +# package transcoder plugins +if [[ -n "${PLUGIN_TRACE}" ]]; then + tracers=(${PLUGIN_TRACE//,/ }) + for name in "${tracers[@]}"; do + PLUGIN_TRACE_ZIP_OUTPUT=${name}.zip + if [[ -n "${pkg_version}" ]]; then + PLUGIN_TRACE_ZIP_OUTPUT=${name}-${pkg_version}.zip + fi + rm -rf /go/src/${PLUGIN_PROJECT_NAME}/build/target/traces/${PLUGIN_TRACE_ZIP_OUTPUT} + mkdir -p /go/src/${PLUGIN_PROJECT_NAME}/build/target/traces/ + if [ -d "/go/src/${PLUGIN_PROJECT_NAME}/build/traces/${name}/" ]; then + cd /go/src/${PLUGIN_PROJECT_NAME}/build/traces/ + echo "packaging trace ${name}..." + zip -r /go/src/${PLUGIN_PROJECT_NAME}/build/target/traces/${PLUGIN_TRACE_ZIP_OUTPUT} ${name} \ + -x "stream_filters/*" -x "transcoders/*" -x "mosn_config.json" + fi + done +fi diff --git a/go-plugin/go.mod b/go-plugin/go.mod index b8821e1..0f756f0 100644 --- a/go-plugin/go.mod +++ b/go-plugin/go.mod @@ -1,21 +1,59 @@ module mosn.io/extensions/go-plugin -go 1.14 +go 1.18 require ( + github.com/SkyAPM/go2sky v0.5.0 github.com/apache/dubbo-go-hessian2 v1.9.2 // dubbo - github.com/dubbogo/gost v1.11.25 // indirect github.com/natefinch/lumberjack v2.0.0+incompatible - github.com/stretchr/testify v1.7.0 - github.com/valyala/fasthttp v1.31.0 + github.com/openzipkin/zipkin-go v0.4.1 + github.com/satori/go.uuid v1.2.0 + github.com/stretchr/testify v1.8.1 + github.com/valyala/fasthttp v1.40.0 + google.golang.org/grpc v1.53.0 + mosn.io/api v1.3.0 + mosn.io/pkg v1.3.1-0.20230104081003-9c747062328a +) + +require ( + github.com/Shopify/sarama v1.37.2 // indirect + github.com/andybalholm/brotli v1.0.4 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dubbogo/gost v1.11.25 // indirect + github.com/eapache/go-resiliency v1.3.0 // indirect + github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect + github.com/eapache/queue v1.1.0 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-syslog v1.0.0 // indirect + github.com/hashicorp/go-uuid v1.0.3 // indirect + github.com/jcmturner/aescts/v2 v2.0.0 // indirect + github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect + github.com/jcmturner/gofork v1.7.6 // indirect + github.com/jcmturner/gokrb5/v8 v8.4.3 // indirect + github.com/jcmturner/rpc/v2 v2.0.3 // indirect + github.com/klauspost/compress v1.15.11 // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/pierrec/lz4/v4 v4.1.17 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect go.uber.org/atomic v1.9.0 // indirect - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - mosn.io/api v0.0.0-20211217011300-b851d129be01 - mosn.io/pkg v0.0.0-20211217101631-d914102d1baf + golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 // indirect + golang.org/x/net v0.5.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect + google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) replace ( github.com/klauspost/compress => github.com/klauspost/compress v1.13.5 - github.com/rcrowley/go-metrics => github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 ) diff --git a/go-plugin/go.sum b/go-plugin/go.sum index 143f9e9..5abada7 100644 --- a/go-plugin/go.sum +++ b/go-plugin/go.sum @@ -17,7 +17,17 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/sarama v1.30.0 h1:TOZL6r37xJBDEMLx4yjB77jxbZYXPaDow08TSK6vIL0= +github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fTKCulPVs= +github.com/Shopify/sarama v1.37.2 h1:LoBbU0yJPte0cE5TZCGdlzZRmMgMtZU/XgnUKZg9Cv4= +github.com/Shopify/sarama v1.37.2/go.mod h1:Nxye/E+YPru//Bpaorfhc3JsSGYwCaDDj+R4bK52U5o= +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/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae h1:ePgznFqEG1v3AjMklnK8H7BSc++FDSo7xfK9K7Af+0Y= +github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0= +github.com/Shopify/toxiproxy/v2 v2.5.0 h1:i4LPT+qrSlKNtQf5QliVjdP08GyAH8+BUIc9gT0eahc= +github.com/SkyAPM/go2sky v0.5.0 h1:9RDBQviaeazG7PJMLLnMcU4U++PORbqEls4ix4OEgQw= +github.com/SkyAPM/go2sky v0.5.0/go.mod h1:TANzYw5EvIlTidGWvQxtvO87rM6C746HkM0xkWqnPQw= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= @@ -27,9 +37,8 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF 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/aliyun/alibaba-cloud-sdk-go v1.61.18/go.mod h1:v8ESoHo4SyHmuB4b1tJqDHxfTGEciD+yhvOU/5s1Rfk= -github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.2 h1:JKnhI/XQ75uFBTiuzXpzFrUriDPiZjlOSzh6wXogP0E= -github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/dubbo-go-hessian2 v1.9.2 h1:XuI8KvENSfKiAhiCBS4RNihmQDoPNmGWKT3gTui0p9A= github.com/apache/dubbo-go-hessian2 v1.9.2/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE= @@ -59,6 +68,7 @@ github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4 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-20210805033703-aa0b78936158/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= @@ -83,19 +93,20 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/dubbogo/getty v1.3.4/go.mod h1:36f+gH/ekaqcDWKbxNBQk9b9HXcGtaI6YHxp4YTntX8= -github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= -github.com/dubbogo/gost v1.5.2/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8= github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8= -github.com/dubbogo/gost v1.11.16/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI= github.com/dubbogo/gost v1.11.25 h1:jFxE+YPh+ajrkHz7AxaaqYNMdKMDf/yfI1D+ZFoxfW0= github.com/dubbogo/gost v1.11.25/go.mod h1:iovrPhv0hyakhQGVr4jwiECBL9HXNuBY4VV3HWK5pM0= -github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= +github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-resiliency v1.3.0 h1:RRL0nge+cWGlxXbUzJ7yMcq6w2XBEr19dCN6HECGaT0= +github.com/eapache/go-resiliency v1.3.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= @@ -103,13 +114,19 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF 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.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= 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.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= @@ -122,12 +139,9 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -143,6 +157,7 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -157,8 +172,12 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq 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 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -166,21 +185,29 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw 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.4/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.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -189,21 +216,30 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf 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/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= 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= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= 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.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= 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.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -217,8 +253,23 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= +github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= +github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= +github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= +github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8= +github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg= +github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= +github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= +github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.4.2 h1:6ZIM6b/JJN0X8UM43ZOM6Z4SJzla+a/u7scXFJzodkA= +github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= +github.com/jcmturner/gokrb5/v8 v8.4.3 h1:iTonLeSJOn7MVUtyMT+arAn5AKAPrkilzhGw8wE/Tq8= +github.com/jcmturner/gokrb5/v8 v8.4.3/go.mod h1:dqRwJGXznQrzw6cWmyo6kH+E7jksEQG/CyVWsJEsJO0= +github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= +github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag= -github.com/jinzhu/copier v0.3.2/go.mod h1:24xnZezI2Yqac9J61UC6/dG/k76ttpq0DdJI3QmUvro= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= @@ -231,31 +282,6 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ansiterm v0.0.0-20160907234532-b99631de12cf/go.mod h1:UJSiEoRfvx3hP73CvoARgeLjaIOjybY9vj8PUPPFGeU= -github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c/go.mod h1:nD0vlnrUjcjJhqN5WuCWZyzfd5AHZAC9/ajvbSx69xA= -github.com/juju/cmd v0.0.0-20171107070456-e74f39857ca0/go.mod h1:yWJQHl73rdSX4DHVKGqkAip+huBslxRwS8m9CrOLq18= -github.com/juju/collections v0.0.0-20200605021417-0d0ec82b7271/go.mod h1:5XgO71dV1JClcOJE+4dzdn4HrI5LiyKd7PlVG6eZYhY= -github.com/juju/errors v0.0.0-20150916125642-1b5e39b83d18/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= -github.com/juju/errors v0.0.0-20190930114154-d42613fe1ab9/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= -github.com/juju/errors v0.0.0-20200330140219-3fe23663418f/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= -github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= -github.com/juju/httpprof v0.0.0-20141217160036-14bf14c30767/go.mod h1:+MaLYz4PumRkkyHYeXJ2G5g5cIW0sli2bOfpmbaMV/g= -github.com/juju/loggo v0.0.0-20170605014607-8232ab8918d9/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= -github.com/juju/loggo v0.0.0-20200526014432-9ce3a2e09b5e/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= -github.com/juju/mgo/v2 v2.0.0-20210302023703-70d5d206e208/go.mod h1:0OChplkvPTZ174D2FYZXg4IB9hbEwyHkD+zT+/eK+Fg= -github.com/juju/mutex v0.0.0-20171110020013-1fe2a4bf0a3a/go.mod h1:Y3oOzHH8CQ0Ppt0oCKJ2JFO81/EsWenH5AEqigLH+yY= -github.com/juju/retry v0.0.0-20151029024821-62c620325291/go.mod h1:OohPQGsr4pnxwD5YljhQ+TZnuVRYpa5irjugL1Yuif4= -github.com/juju/retry v0.0.0-20180821225755-9058e192b216/go.mod h1:OohPQGsr4pnxwD5YljhQ+TZnuVRYpa5irjugL1Yuif4= -github.com/juju/testing v0.0.0-20180402130637-44801989f0f7/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= -github.com/juju/testing v0.0.0-20190723135506-ce30eb24acd2/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= -github.com/juju/testing v0.0.0-20210324180055-18c50b0c2098/go.mod h1:7lxZW0B50+xdGFkvhAb8bwAGt6IU87JB1H9w4t8MNVM= -github.com/juju/utils v0.0.0-20180424094159-2000ea4ff043/go.mod h1:6/KLg8Wz/y2KVGWEpkK9vMNGkOnu4k/cqs8Z1fKjTOk= -github.com/juju/utils v0.0.0-20200116185830-d40c2fe10647/go.mod h1:6/KLg8Wz/y2KVGWEpkK9vMNGkOnu4k/cqs8Z1fKjTOk= -github.com/juju/utils/v2 v2.0.0-20200923005554-4646bfea2ef1/go.mod h1:fdlDtQlzundleLLz/ggoYinEt/LmnrpNKcNTABQATNI= -github.com/juju/version v0.0.0-20161031051906-1f41e27e54f2/go.mod h1:kE8gK5X0CImdr7qpSKl3xB2PmpySSmfj7zVbkZFs81U= -github.com/juju/version v0.0.0-20180108022336-b64dbd566305/go.mod h1:kE8gK5X0CImdr7qpSKl3xB2PmpySSmfj7zVbkZFs81U= -github.com/juju/version v0.0.0-20191219164919-81c1be00b9a6/go.mod h1:kE8gK5X0CImdr7qpSKl3xB2PmpySSmfj7zVbkZFs81U= -github.com/julienschmidt/httprouter v1.1.1-0.20151013225520-77a895ad01eb/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= @@ -272,28 +298,19 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE= github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8= github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lunixbochs/vtclean v0.0.0-20160125035106-4fbf7632a2c6/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/masterzen/azure-sdk-for-go v3.2.0-beta.0.20161014135628-ee4f0065d00c+incompatible/go.mod h1:mf8fjOu33zCqxUjuiU3I8S1lJMyEAlH+0F2+M5xl3hE= -github.com/masterzen/simplexml v0.0.0-20160608183007-4572e39b1ab9/go.mod h1:kCEbxUJlNDEBNbdQMkPSp6yaKcRXVI6f4ddk8Riv4bc= -github.com/masterzen/winrm v0.0.0-20161014151040-7a535cd943fc/go.mod h1:CfZSN7zwz5gJiFhZJz49Uzk7mEBHIceWmbFmYx7Hf7E= -github.com/masterzen/xmlpath v0.0.0-20140218185901-13f4951698ad/go.mod h1:A0zPC53iKKKcXYxr4ROjpQRQ5FgJXtelNdSmHHuq/tY= -github.com/mattn/go-colorable v0.0.6/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.0-20160806122752-66b8e73f3f5c/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= @@ -325,14 +342,21 @@ github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d/go.mod h1:YUTz3bUH2ZwIWBy3CJBeOBEugqcmXREj14T+iG/4k4U= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= 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/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= @@ -342,6 +366,10 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.4.0 h1:CtfRrOVZtbDj8rt1WXjklw0kqqJQwICrCKmlfUuBUUw= +github.com/openzipkin/zipkin-go v0.4.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ= +github.com/openzipkin/zipkin-go v0.4.1 h1:kNd/ST2yLLWhaWrkgchya40TJabe8Hioj9udfPcEO5A= +github.com/openzipkin/zipkin-go v0.4.1/go.mod h1:qY0VqDSN1pOBN94dBc6w2GJlWLiovAyg7Qt6/I9HecM= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= @@ -349,7 +377,10 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= 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/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= +github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -388,17 +419,17 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rabbitmq/amqp091-go v1.1.0/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= 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= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil v3.20.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= @@ -407,6 +438,7 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= 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/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= @@ -428,12 +460,18 @@ github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3 github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tebeka/strftime v0.1.3/go.mod h1:7wJm3dZlpr4l/oVK0t1HYIc4rMzQ2XJlOMIUJUJH6XQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -441,17 +479,17 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 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/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/toolkits/concurrent v0.0.0-20150624120057-a4371d70e3e3/go.mod h1:QDlpd3qS71vYtakd2hmdpqhJ9nwv6mD6A30bQ1BPBFE= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.14.1-0.20200605121233-ac51d598dc54/go.mod h1:hWrFNtR2Jc1XrK0fDq2Y+MkA7F/v3lYKRDXd2CmSikc= -github.com/valyala/fasthttp v1.31.0 h1:lrauRLII19afgCs2fnWRJ4M5IkV0lo2FqA61uGkNBfE= -github.com/valyala/fasthttp v1.31.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/valyala/fasthttp v1.40.0 h1:CRq/00MfruPGFLTQKY8b+8SfdK60TxNztjRMnH0t1Yc= +github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -470,6 +508,7 @@ go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -485,7 +524,6 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -golang.org/x/crypto v0.0.0-20180214000028-650f4a345ab4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -494,9 +532,14 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 h1:x8vtB3zMecnlqZIwJNUUpwYKYSqCz5jXbiyv0ZJJZeI= +golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -521,7 +564,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180406214816-61147c48b25b/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -541,16 +583,23 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 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-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220725212005-46097bf591d3/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -581,8 +630,11 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -591,7 +643,6 @@ golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200602100848-8d3cce7afc34/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -599,15 +650,26 @@ golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/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-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20181010134911-4d1c5fb19474/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 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.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -642,6 +704,7 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201014170642-d1624618ad65/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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= @@ -672,6 +735,8 @@ google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfG 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-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -686,7 +751,11 @@ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +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.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= +google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= 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= @@ -697,31 +766,29 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= 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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20160105164936-4f90aeace3a2/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v1 v1.0.0-20161222125816-442357a80af5/go.mod h1:u0ALmqvLRxLI95fkdCEWrE6mhWYZW1aMOJHp5YXLHTg= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/httprequest.v1 v1.1.1/go.mod h1:/CkavNL+g3qLOrpFHVrEx4NKepeqR4XTZWNj4sGGjz0= gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20160818015218-f2b6f6c918c4/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637/go.mod h1:BHsqpu/nsuzkT5BpiH1EMZPLyqSMM8JbIavyFACoFNk= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170712054546-1be3d31502d6/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -733,21 +800,19 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= -launchpad.net/xmlpath v0.0.0-20130614043138-000000000004/go.mod h1:vqyExLOM3qBx7mvYRkoxjSCF945s0mbe7YynlKYXtsA= -mosn.io/api v0.0.0-20210204052134-5b9a826795fd/go.mod h1:TBv4bz2f2RbpgdohbVAFRFVOoN8YyEUiLH3jAh752Qc= -mosn.io/api v0.0.0-20211217011300-b851d129be01 h1:65nAZDE6BidyDprKL8OAY4O9BIzWSgVzisAM087tAZI= -mosn.io/api v0.0.0-20211217011300-b851d129be01/go.mod h1:TBv4bz2f2RbpgdohbVAFRFVOoN8YyEUiLH3jAh752Qc= -mosn.io/pkg v0.0.0-20211217101631-d914102d1baf h1:PaYMeKbmtMnhnzzQyKQifxAtkKrCv5uti8Tr00WvX+Y= -mosn.io/pkg v0.0.0-20211217101631-d914102d1baf/go.mod h1:tK3Vbw6CcVeJ9H/BGjJ1wn6hRXt4Oxjfq1+gkOM0zG8= +mosn.io/api v1.3.0 h1:QhsrbkvYnpvvrC151S0N09TdU2jDODygLVK3Y58ubgg= +mosn.io/api v1.3.0/go.mod h1:mJX2oRJkrXjLN6hY1Wwrlxj0F+RqEPOMhbf2WhZO+VY= +mosn.io/pkg v1.3.1-0.20230104081003-9c747062328a h1:ymsnQbSR14qQguC6AibcBlXOnCmNWlimZPfn8pjF8pw= +mosn.io/pkg v1.3.1-0.20230104081003-9c747062328a/go.mod h1:bksEtkXis6vzQoU9Q7wwY9bWt7gfrj/l7rjRDu21Vt4= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/go-plugin/pkg/common/ip.go b/go-plugin/pkg/common/ip.go new file mode 100644 index 0000000..1f3124a --- /dev/null +++ b/go-plugin/pkg/common/ip.go @@ -0,0 +1,37 @@ +package common + +import "net" + +var IpV4 = "" + +func init() { + IpV4 = IPV4() +} + +func IPV4() string { + ipv4s := AllIPV4() + if len(ipv4s) > 0 { + return ipv4s[0] + } + return "no-hostname" +} + +func AllIPV4() (ipv4s []string) { + addresses, err := net.InterfaceAddrs() + if err != nil { + return + } + + for _, addr := range addresses { + if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() { + if ipNet.IP.To4() != nil { + ipv4 := ipNet.IP.String() + if ipv4 == "127.0.0.1" || ipv4 == "localhost" { + continue + } + ipv4s = append(ipv4s, ipv4) + } + } + } + return +} diff --git a/go-plugin/pkg/keys/variable.go b/go-plugin/pkg/keys/variable.go new file mode 100644 index 0000000..61a3b47 --- /dev/null +++ b/go-plugin/pkg/keys/variable.go @@ -0,0 +1,69 @@ +package keys + +// Plugin Government key definition +const ( + VarGovernService string = "x-mosn-data-id" + VarGovernTraceID string = "x-mosn-trace-id" + VarGovernTrafficType string = "x-mosn-traffic-type" + VarGovernSourceIP string = "x-mosn-caller-ip" + VarGovernTargetIP string = "x-mosn-target-ip" + VarGovernSourceApp string = "x-mosn-caller-app" + VarGovernTargetApp string = "x-mosn-target-app" + VarGovernSpanID string = "x-mosn-span-id" + VarGovernSourceZone string = "x-mosn-source-zone" + VarGovernSourceDc string = "x-mosn-source-dc" + VarGovernTargetZone string = "x-mosn-target-zone" + VarGovernTargetDc string = "x-mosn-target-dc" + VarDirection string = "x-mosn-direction" + VarScheme string = "x-mosn-scheme" + VarHost string = "x-mosn-host" + VarPath string = "x-mosn-path" + VarPathOriginal string = "x-mosn-path-original" + VarQueryString string = "x-mosn-querystring" + VarMethod string = "x-mosn-method" + VarHeaderStatus string = "x-mosn-status" + VarHeaderRPCService string = "x-mosn-rpc-service" + VarHeaderRPCMethod string = "x-mosn-rpc-method" + VarStreamID string = "stream_id" + VarConnection string = "connection" + VarConnectionID string = "connection_id" + VarListenerPort string = "listener_port" + VarListenerName string = "listener_name" + VarListenerType string = "listener_type" + VarAccessLogs string = "access_logs" + VarAcceptChan string = "accept_chan" + VarAcceptBuffer string = "accept_buffer" + VarConnectionFd string = "connection_fd" + VarTraceSpanKey string = "span_key" + VarTraceId string = "trace_id" + VarProxyGeneralConfig string = "proxy_general_config" + VarConnectionEventListeners string = "connection_event_listeners" + VarUpstreamConnectionID string = "upstream_connection_id" + VarOriRemoteAddr string = "ori_remote_addr" + VarDownStreamProtocol string = "downstream_protocol" + VarUpStreamProtocol string = "upstream_protocol" + VarDownStreamReqHeaders string = "downstream_req_headers" + VarDownStreamRespHeaders string = "downstream_resp_headers" + VarTraceSpan string = "trace_span" + VarStartTime string = "start_time" + VarRequestReceivedDuration string = "request_received_duration" + VarResponseReceivedDuration string = "response_received_duration" + VarRequestFinishedDuration string = "request_finished_duration" + VarProcessTimeDuration string = "process_time_duration" + VarBytesSent string = "bytes_sent" + VarBytesReceived string = "bytes_received" + VarProtocol string = "protocol" + VarResponseCode string = "response_code" + VarDuration string = "duration" + VarResponseFlag string = "response_flag" + VarResponseFlags string = "response_flags" + VarUpstreamLocalAddress string = "upstream_local_address" + VarDownstreamLocalAddress string = "downstream_local_address" + VarDownstreamRemoteAddress string = "downstream_remote_address" + VarUpstreamHost string = "upstream_host" + VarUpstreamTransportFailureReason string = "upstream_transport_failure_reason" + VarUpstreamCluster string = "upstream_cluster" + VarRequestedServerName string = "requested_server_name" + VarRouteName string = "route_name" + VarProtocolConfig string = "protocol_config" +) diff --git a/go-plugin/pkg/trace/span.go b/go-plugin/pkg/trace/span.go new file mode 100644 index 0000000..bcca603 --- /dev/null +++ b/go-plugin/pkg/trace/span.go @@ -0,0 +1,86 @@ +package trace + +import ( + "time" + + uuid "github.com/satori/go.uuid" + "mosn.io/api" + "mosn.io/pkg/log" +) + +const ( + parentSpanID = "-1" +) + +var ProcessFailedFlags = api.NoHealthyUpstream | api.NoRouteFound | api.UpstreamLocalReset | + api.FaultInjected | api.RateLimited | api.DownStreamTerminate | api.ReqEntityTooLarge + +var _ api.Span = NoopSpan{} + +type NoopSpan struct { + tid string + sid string +} + +func NewNooSpan() NoopSpan { + return NoopSpan{ + tid: uuid.NewV4().String(), + sid: uuid.NewV4().String(), + } +} + +func (n NoopSpan) TraceId() string { + return n.tid +} + +func (n NoopSpan) SpanId() string { + return n.sid +} + +func (NoopSpan) ParentSpanId() string { + return parentSpanID +} + +func (NoopSpan) FinishSpan() { + if log.DefaultLogger.GetLogLevel() >= log.DEBUG { + log.DefaultLogger.Debugf("[Noop] [tracer] [span] Unsupported FinishSpan") + } +} + +func (NoopSpan) SetOperation(operation string) { + if log.DefaultLogger.GetLogLevel() >= log.DEBUG { + log.DefaultLogger.Debugf("[Noop] [tracer] [span] Unsupported SetOperation [%s]", operation) + } +} + +func (NoopSpan) SetTag(key uint64, value string) { + if log.DefaultLogger.GetLogLevel() >= log.DEBUG { + log.DefaultLogger.Debugf("[Noop] [tracer] [span] Unsupported SetTag [%d]-[%s]", key, value) + } +} + +func (NoopSpan) Tag(key uint64) string { + if log.DefaultLogger.GetLogLevel() >= log.DEBUG { + log.DefaultLogger.Debugf("[Noop] [tracer] [span] Unsupported Tag [%s]", key) + } + return "" +} + +func (NoopSpan) InjectContext(requestHeaders api.HeaderMap, requestInfo api.RequestInfo) { + if log.DefaultLogger.GetLogLevel() >= log.DEBUG { + log.DefaultLogger.Debugf("[Noop] [tracer] [span] Unsupported InjectContext") + } +} + +func (NoopSpan) SetRequestInfo(requestInfo api.RequestInfo) { + if log.DefaultLogger.GetLogLevel() >= log.DEBUG { + log.DefaultLogger.Debugf("[Noop] [tracer] [span] Unsupported SetRequestInfo") + } +} + +func (NoopSpan) SpawnChild(operationName string, _ time.Time) api.Span { + if log.DefaultLogger.GetLogLevel() >= log.DEBUG { + log.DefaultLogger.Debugf("[Noop] [tracer] [span] Unsupported SpawnChild [%s]", operationName) + } + return nil +} diff --git a/go-plugin/plugins/traces/skywalking/main/config.go b/go-plugin/plugins/traces/skywalking/main/config.go new file mode 100644 index 0000000..fb68517 --- /dev/null +++ b/go-plugin/plugins/traces/skywalking/main/config.go @@ -0,0 +1,23 @@ +package main + +const ( + LogReporter string = "log" + GRPCReporter string = "gRPC" + DefaultServiceName string = "mosn" +) + +type SkyWalkingTraceConfig struct { + Reporter string `json:"reporter"` + BackendService string `json:"backend_service"` + ServiceName string `json:"service_name"` + MaxSendQueueSize string `json:"max_send_queue_size"` + VmMode string `json:"vmmode"` + PodName string `json:"pod_name"` + Authentication string `json:"authentication"` + TLS SkyWalkingTraceTLSConfig `json:"tls"` +} + +type SkyWalkingTraceTLSConfig struct { + CertFile string `json:"cert_file"` + ServerNameOverride string `json:"server_name_override"` +} diff --git a/go-plugin/plugins/traces/skywalking/main/driver.go b/go-plugin/plugins/traces/skywalking/main/driver.go new file mode 100644 index 0000000..b4e8968 --- /dev/null +++ b/go-plugin/plugins/traces/skywalking/main/driver.go @@ -0,0 +1,103 @@ +package main + +import ( + "encoding/json" + "errors" + "mosn.io/extensions/go-plugin/pkg/common" + "strconv" + "sync" + + "github.com/SkyAPM/go2sky" + "github.com/SkyAPM/go2sky/reporter" + "google.golang.org/grpc/credentials" +) + +var ( + ReporterCfgErr = errors.New("SkyWalking tracer support only log and gRPC reporter") + BackendServiceCfgErr = errors.New("SkyWalking tracer must configure the backend_service") + tracerProvider *go2sky.Tracer + skyLock sync.RWMutex + SkyDriverName = "SkyWalking" +) + +func GetTracer(config map[string]interface{}) (*go2sky.Tracer, error) { + skyLock.Lock() + defer skyLock.Unlock() + if tracerProvider != nil { + return tracerProvider, nil + } + cfg, err := parseAndVerifySkyTracerConfig(config) + if err != nil { + return nil, err + } + + var r go2sky.Reporter + if cfg.Reporter == LogReporter { + r, err = reporter.NewLogReporter() + if err != nil { + return nil, err + } + } else if cfg.Reporter == GRPCReporter { + // opts + var opts []reporter.GRPCReporterOption + opts = append(opts, reporter.WithLogger(NewDefaultLogger())) + // max send queue size + if size, _ := strconv.Atoi(cfg.MaxSendQueueSize); size > 0 { + opts = append(opts, reporter.WithMaxSendQueueSize(size)) + } + // auth + if cfg.Authentication != "" { + opts = append(opts, reporter.WithAuthentication(cfg.Authentication)) + } + // tls + if cfg.TLS.CertFile != "" { + cReds, err := credentials.NewClientTLSFromFile(cfg.TLS.CertFile, cfg.TLS.ServerNameOverride) + if err != nil { + return nil, err + } + opts = append(opts, reporter.WithTransportCredentials(cReds)) + } + r, err = reporter.NewGRPCReporter(cfg.BackendService, opts...) + if err != nil { + return nil, err + } + } + + serviceName := cfg.ServiceName + if len(serviceName) > 4 { + serviceName = serviceName[0:4] + "::" + serviceName + } else { + serviceName = serviceName + "::" + serviceName + } + currentIP := common.IpV4 + if cfg.VmMode != "" { + tracerProvider, err = go2sky.NewTracer(serviceName, go2sky.WithReporter(r), go2sky.WithInstance(currentIP)) + return tracerProvider, err + } + skyInstanceId := cfg.PodName + tracerProvider, err = go2sky.NewTracer(serviceName, go2sky.WithReporter(r), go2sky.WithInstance(skyInstanceId)) + return tracerProvider, err +} + +func parseAndVerifySkyTracerConfig(cfg map[string]interface{}) (config SkyWalkingTraceConfig, err error) { + data, err := json.Marshal(cfg) + if err != nil { + return config, err + } + // set default value + config.Reporter = LogReporter + config.ServiceName = DefaultServiceName + err = json.Unmarshal(data, &config) + if err != nil { + return config, err + } + + if config.Reporter != LogReporter && config.Reporter != GRPCReporter { + return config, ReporterCfgErr + } + + if config.Reporter == GRPCReporter && config.BackendService == "" { + return config, BackendServiceCfgErr + } + return config, nil +} diff --git a/go-plugin/plugins/traces/skywalking/main/logger.go b/go-plugin/plugins/traces/skywalking/main/logger.go new file mode 100644 index 0000000..cb26887 --- /dev/null +++ b/go-plugin/plugins/traces/skywalking/main/logger.go @@ -0,0 +1,8 @@ +package main + +import "log" + +// NewDefaultLogger Creates a new Log +func NewDefaultLogger() *log.Logger { + return log.Default() +} diff --git a/go-plugin/plugins/traces/skywalking/main/span.go b/go-plugin/plugins/traces/skywalking/main/span.go new file mode 100644 index 0000000..2bdd9a9 --- /dev/null +++ b/go-plugin/plugins/traces/skywalking/main/span.go @@ -0,0 +1,248 @@ +package main + +import ( + "context" + "encoding/json" + "mosn.io/extensions/go-plugin/pkg/common" + "mosn.io/extensions/go-plugin/pkg/keys" + "mosn.io/pkg/variable" + "strconv" + "strings" + "time" + + "github.com/SkyAPM/go2sky" + "github.com/SkyAPM/go2sky/propagation" + la "github.com/SkyAPM/go2sky/reporter/grpc/language-agent" + "mosn.io/api" + "mosn.io/extensions/go-plugin/pkg/trace" + "mosn.io/pkg/log" + "mosn.io/pkg/protocol/http" +) + +type kv struct { + Key string + Value string +} + +type SkySpan struct { + trace.NoopSpan + traceId string + spanId string + parentSpanId string + startTime time.Time + ctx context.Context + + operationName string + kvs []kv + provider *go2sky.Tracer + entrySpan go2sky.Span + entryCtx context.Context + exitSpan go2sky.Span +} + +func NewSpan(ctx context.Context, startTime time.Time, provider *go2sky.Tracer) *SkySpan { + h := &SkySpan{ + startTime: startTime, + ctx: ctx, + provider: provider, + kvs: make([]kv, 0, 10), + } + return h +} + +func (h *SkySpan) TraceId() string { + return h.traceId +} + +func (h *SkySpan) SpanId() string { + return h.spanId +} + +func (h *SkySpan) ParentSpanId() string { + return h.parentSpanId +} + +func (h *SkySpan) InjectContext(headers api.HeaderMap, reqInfo api.RequestInfo) { + upstreamLocalAddress := reqInfo.UpstreamLocalAddress() + if header, ok := headers.(http.RequestHeader); ok { + requestURI := string(header.RequestURI()) + url := strings.Join([]string{"http://", upstreamLocalAddress, requestURI}, "") + h.kvs = append(h.kvs, kv{string(go2sky.TagURL), url}) + h.kvs = append(h.kvs, kv{string(go2sky.TagHTTPMethod), string(header.Method())}) + h.operationName = requestURI + exit, err := h.provider.CreateExitSpan(h.entryCtx, requestURI, upstreamLocalAddress, func(Value string) error { + headers.Set(propagation.Header, Value) + return nil + }) + if err != nil { + log.DefaultLogger.Errorf("[SkyWalking] [tracer] [http1] create exit span error, err: %v", err) + return + } + exit.SetComponent(MOSNComponentID) + exit.SetSpanLayer(la.SpanLayer_Http) + h.exitSpan = exit + } else { + exit, err := h.provider.CreateExitSpan(h.entryCtx, "mosn", upstreamLocalAddress, func(Value string) error { + headers.Set(propagation.Header, Value) + return nil + }) + if err != nil { + log.DefaultLogger.Errorf("[SkyWalking] [tracer] [protocol] create exit span error, err: %v", err) + return + } + exit.SetComponent(MOSNComponentID) + exit.SetSpanLayer(la.SpanLayer_RPCFramework) + h.exitSpan = exit + } +} + +func (h *SkySpan) SetRequestInfo(reqInfo api.RequestInfo) { + h.setRequestInfo(reqInfo) + responseCode := strconv.Itoa(reqInfo.ResponseCode()) + + // end exit span (upstream) + if h.exitSpan != nil { + exit := h.exitSpan + if reqInfo.ResponseCode() != api.SuccessCode { + ok := reqInfo.GetResponseFlag(trace.ProcessFailedFlags) + exit.Tag(go2sky.TagStatusCode, strconv.Itoa(reqInfo.ResponseCode())) + if ok { + exit.Error(time.Now(), "mosn error") + } else { + exit.Error(time.Now(), "biz error") + } + } else { + exit.Tag(go2sky.TagStatusCode, responseCode) + } + kvs := h.ParseVariable(h.ctx) + h.addTag(exit, kvs) + exit.SetOperationName(h.operationName) + exit.End() + h.log(kvs, go2sky.SpanTypeExit) + } + + // entry span (downstream) + entry := h.entrySpan + if reqInfo.ResponseCode() != api.SuccessCode { + ok := reqInfo.GetResponseFlag(trace.ProcessFailedFlags) + entry.Tag(go2sky.TagStatusCode, strconv.Itoa(reqInfo.ResponseCode())) + if ok { + h.entrySpan.Error(time.Now(), "mosn error") + } else { + h.entrySpan.Error(time.Now(), "biz error") + } + } else { + entry.Tag(go2sky.TagStatusCode, responseCode) + } +} + +func (h *SkySpan) setRequestInfo(reqInfo api.RequestInfo) { + if host := reqInfo.UpstreamHost(); host != nil { + h.kvs = append(h.kvs, kv{"upstream.address", host.AddressString()}) + } + if addr := reqInfo.DownstreamRemoteAddress(); addr != nil { + h.kvs = append(h.kvs, kv{"downstream.address", addr.String()}) + } + h.kvs = append(h.kvs, kv{"request.size", strconv.Itoa(int(reqInfo.BytesReceived()))}) + h.kvs = append(h.kvs, kv{"response.size", strconv.Itoa(int(reqInfo.BytesSent()))}) + h.kvs = append(h.kvs, kv{"duration", strconv.Itoa(int(reqInfo.Duration().Nanoseconds()))}) + process := reqInfo.ProcessTimeDuration().Nanoseconds() + if process == 0 { + process = reqInfo.RequestFinishedDuration().Nanoseconds() + } + h.kvs = append(h.kvs, kv{"mosn.process.duration", strconv.Itoa(int(process))}) + h.kvs = append(h.kvs, kv{"mosn.process.request.duration", strconv.Itoa(int(reqInfo.RequestFinishedDuration().Nanoseconds()))}) + h.kvs = append(h.kvs, kv{"mosn.process.response.duration", strconv.Itoa(int(reqInfo.ResponseReceivedDuration().Nanoseconds()))}) + if reqInfo.ResponseCode() != api.SuccessCode { + ok := reqInfo.GetResponseFlag(trace.ProcessFailedFlags) + h.kvs = append(h.kvs, kv{"mosn.process.fail", strconv.FormatBool(ok)}) + } +} + +func (h *SkySpan) FinishSpan() { + if h.entrySpan != nil { + kvs := h.ParseVariable(h.ctx) + h.addTag(h.entrySpan, kvs) + h.entrySpan.SetOperationName(h.operationName) + currentIP := common.IpV4 + h.entrySpan.SetPeer(currentIP) + h.entrySpan.End() + h.log(kvs, go2sky.SpanTypeEntry) + } +} + +func (h *SkySpan) addTag(span go2sky.Span, kvs []kv) { + for _, kv := range kvs { + span.Tag(go2sky.Tag(kv.Key), kv.Value) + } +} + +func (h *SkySpan) SetOperation(operation string) { + h.operationName = operation +} + +func (h *SkySpan) log(_ []kv, _ go2sky.SpanType) { + if log.DefaultLogger.GetLogLevel() >= log.DEBUG { + kvs, _ := json.Marshal(h.kvs) + log.DefaultLogger.Debugf("trace:%s pid:%s parent id:%s operationName:%s,kvs:%s", h.traceId, h.spanId, h.parentSpanId, h.operationName, kvs) + } +} + +func (h *SkySpan) CreateLocalHttpSpan(ctx context.Context, header http.RequestHeader, entry go2sky.Span) { + h.entryCtx = ctx + h.entrySpan = entry + // TODO parent span + // h.parentSpanId = span.SpanContext().SpanID().String() + // h.spanId = strconv.Itoa(int(go2sky.SpanID(ctx))) + h.traceId = go2sky.TraceID(ctx) + requestURI := string(header.RequestURI()) + url := strings.Join([]string{"http://", string(header.Host()), string(header.RequestURI())}, "") + h.kvs = append(h.kvs, kv{"caller.url", url}) + h.kvs = append(h.kvs, kv{"caller.method", string(header.Method())}) + h.operationName = requestURI +} + +func (h *SkySpan) CreateLocalRpcSpan(ctx context.Context, entry go2sky.Span) { + h.entryCtx = ctx + h.entrySpan = entry + // TODO parent span + // h.parentSpanId = span.SpanContext().SpanID().String() + // h.spanId = strconv.Itoa(int(go2sky.SpanID(ctx))) + h.traceId = go2sky.TraceID(ctx) +} + +func (h *SkySpan) ParseVariable(ctx context.Context) []kv { + kvs := make([]kv, len(h.kvs)) + copy(kvs, h.kvs) + + if methodName, _ := variable.GetString(ctx, keys.VarMethod); len(methodName) != 0 { + kvs = append(kvs, kv{"rpc.method", methodName}) + } + if direction, _ := variable.GetString(ctx, keys.VarDirection); len(direction) != 0 { + kvs = append(kvs, kv{"hijack", direction}) + } + + if appName, _ := variable.GetString(ctx, keys.VarGovernTargetApp); len(appName) != 0 { + kvs = append(kvs, kv{"target.app", appName}) + } + if service, _ := variable.GetString(ctx, keys.VarGovernSourceApp); len(service) != 0 { + kvs = append(kvs, kv{"caller.app", service}) + } + dataId, _ := variable.GetString(ctx, keys.VarGovernService) + if len(h.operationName) == 0 { + h.operationName = dataId + } + + dp, _ := variable.GetString(ctx, keys.VarDownStreamProtocol) + if len(dp) != 0 { + kvs = append(kvs, kv{"downstream.protocol", string(dp)}) + } + up, _ := variable.GetString(ctx, keys.VarUpStreamProtocol) + if len(up) != 0 { + kvs = append(kvs, kv{"upstream.protocol", string(up)}) + } else { + kvs = append(kvs, kv{"upstream.protocol", string(dp)}) + } + + return kvs +} diff --git a/go-plugin/plugins/traces/skywalking/main/tracer.go b/go-plugin/plugins/traces/skywalking/main/tracer.go new file mode 100644 index 0000000..3e8168f --- /dev/null +++ b/go-plugin/plugins/traces/skywalking/main/tracer.go @@ -0,0 +1,112 @@ +package main + +import ( + "context" + "strings" + "time" + + "github.com/SkyAPM/go2sky" + la "github.com/SkyAPM/go2sky/reporter/grpc/language-agent" + "mosn.io/api" + "mosn.io/extensions/go-plugin/pkg/trace" + "mosn.io/pkg/log" + "mosn.io/pkg/protocol/http" +) + +const ( + HeadBaggageTraceID = "Sw8" + HeadBaggageLetterTraceID = "sw8" + MOSNComponentID = 5003 +) + +var ( + _ api.Tracer = (*skyTracer)(nil) +) + +type skyTracer struct { + cfg map[string]interface{} + tracerProvider *go2sky.Tracer +} + +func TracerBuilder(cfg map[string]interface{}) (api.Tracer, error) { + tracerProvider, err := GetTracer(cfg) + if err != nil { + return nil, err + } + return &skyTracer{ + cfg: cfg, + tracerProvider: tracerProvider, + }, nil +} + +func (tracer *skyTracer) Start(ctx context.Context, request interface{}, startTime time.Time) api.Span { + switch req := request.(type) { + case http.RequestHeader: + return tracer.httpStart(ctx, req, startTime) + case api.XFrame: + return tracer.frameStart(ctx, req, startTime) + } + return trace.NewNooSpan() +} + +func (tracer *skyTracer) httpStart(ctx context.Context, header http.RequestHeader, startTime time.Time) api.Span { + traceId, ok := tracer.skySpan(ctx, header) + if !ok { + return nil + } + requestURI := string(header.RequestURI()) + entry, nCtx, err := tracer.tracerProvider.CreateEntrySpan(ctx, requestURI, func() (string, error) { + return traceId, nil + }) + if err != nil { + log.DefaultLogger.Errorf("[SkyWalking] [tracer] [http1] create entry span error, err: %v", err) + return nil + } + entry.SetSpanLayer(la.SpanLayer_Http) + entry.SetComponent(MOSNComponentID) + // new span + span := NewSpan(ctx, startTime, tracer.tracerProvider) + span.CreateLocalHttpSpan(nCtx, header, entry) + return span +} + +func (tracer *skyTracer) frameStart(ctx context.Context, xframe api.XFrame, startTime time.Time) api.Span { + traceId, ok := tracer.skySpan(ctx, xframe.GetHeader()) + if !ok { + return nil + } + // ignore heartbeat + if xframe.IsHeartbeatFrame() { + return nil + } + entry, nTtx, err := tracer.tracerProvider.CreateEntrySpan(ctx, "mosn", func() (string, error) { + return traceId, nil + }) + if err != nil { + log.DefaultLogger.Errorf("[SkyWalking] [tracer] [http1] create entry span error, err: %v", err) + return nil + } + entry.SetSpanLayer(la.SpanLayer_RPCFramework) + entry.SetComponent(MOSNComponentID) + // new span + span := NewSpan(ctx, startTime, tracer.tracerProvider) + span.CreateLocalRpcSpan(nTtx, entry) + return span +} + +func (tracer *skyTracer) skySpan(ctx context.Context, header api.HeaderMap) (string, bool) { + v, ok := header.Get(HeadBaggageTraceID) + if ok { + return v, ok + } + v, ok = header.Get(HeadBaggageLetterTraceID) + if ok { + return v, ok + } + enabled, _ := tracer.cfg["mosn_generator_span_enabled"].(string) + if strings.EqualFold(enabled, "true") { + // TODO traceid + return v, true + } + return "", false +} diff --git a/go-plugin/plugins/traces/zipkin/main/config.go b/go-plugin/plugins/traces/zipkin/main/config.go new file mode 100644 index 0000000..aaa7f8e --- /dev/null +++ b/go-plugin/plugins/traces/zipkin/main/config.go @@ -0,0 +1,59 @@ +package main + +import ( + "errors" + "strings" +) + +const ( + ZipkinKafkaReport string = "kafka" + ZipkinHttpReport string = "http" + ZipkinTracer = "Zipkin" +) + +type ZipkinTraceConfig struct { + ServiceName string `json:"service_name"` + Reporter string `json:"reporter"` + SampleRate float64 `json:"sample_rate"` + HttpConfig *HttpReportConfig `json:"http"` + KafkaConfig *KafkaReportConfig `json:"kafka"` +} + +type HttpReportConfig struct { + Timeout int `json:"timeout"` + BatchSize string `json:"batch_size"` + BatchInterval int `json:"batch_interval"` + Address string `json:"address"` +} + +type KafkaReportConfig struct { + Topic string `json:"topic"` + Address string `json:"address"` + Addresses []string `json:"addresses"` +} + +func (z *ZipkinTraceConfig) ValidateZipkinConfig() error { + if z.SampleRate > 1 || z.SampleRate < 0 { + return errors.New("sample rate should between 1.0 and 0.0") + } + + switch z.Reporter { + case ZipkinHttpReport: + if len(z.HttpConfig.Address) == 0 { + return errors.New("http config only support single address") + } + case ZipkinKafkaReport: + if len(z.KafkaConfig.Address) == 0 { + return errors.New("kafka config address can't be empty") + } + z.KafkaConfig.Addresses = strings.Split(z.KafkaConfig.Address, ",") + default: + return errors.New("not support") + } + return nil +} + +func getOperationName(uri []byte) string { + arr := strings.Split(string(uri), "?") + return arr[0] +} diff --git a/go-plugin/plugins/traces/zipkin/main/driver.go b/go-plugin/plugins/traces/zipkin/main/driver.go new file mode 100644 index 0000000..5ad2617 --- /dev/null +++ b/go-plugin/plugins/traces/zipkin/main/driver.go @@ -0,0 +1,65 @@ +package main + +import ( + "encoding/json" + "fmt" + "mosn.io/extensions/go-plugin/pkg/common" + "net" + + "github.com/openzipkin/zipkin-go" + "github.com/openzipkin/zipkin-go/model" + + "mosn.io/pkg/log" +) + +func GetTracer(config map[string]interface{}) (*zipkin.Tracer, error) { + if tracerProvider != nil { + return tracerProvider, nil + } + cfg, err := parseZipkinConfig(config) + if err != nil { + return nil, err + } + reporterBuilder, ok := GetReportBuilder(cfg.Reporter) + if !ok { + return nil, fmt.Errorf("unsupport report type: %s", cfg.Reporter) + } + reporter, err := reporterBuilder(cfg) + if err != nil { + return nil, err + } + + sampler, err := zipkin.NewCountingSampler(cfg.SampleRate) + if err != nil { + return nil, err + } + + localIP := common.IpV4 + localEndpoint := &model.Endpoint{ + ServiceName: cfg.ServiceName, + IPv4: net.ParseIP(localIP), + // Port: localPort, + } + + tracerProvider, err = zipkin.NewTracer(reporter, + zipkin.WithSampler(sampler), + zipkin.WithTraceID128Bit(true), + zipkin.WithSharedSpans(false), + zipkin.WithLocalEndpoint(localEndpoint)) + return tracerProvider, err +} + +// parseZipkinConfig parse and verify zipkin config +func parseZipkinConfig(config map[string]interface{}) (cfg ZipkinTraceConfig, err error) { + data, err := json.Marshal(config) + if err != nil { + return + } + log.DefaultLogger.Infof("[zipkin] [tracer] tracer config: %v", string(data)) + + cfg.ServiceName = "mosn" + if err = json.Unmarshal(data, &cfg); err != nil { + return cfg, err + } + return cfg, cfg.ValidateZipkinConfig() +} diff --git a/go-plugin/plugins/traces/zipkin/main/reporter_factory.go b/go-plugin/plugins/traces/zipkin/main/reporter_factory.go new file mode 100644 index 0000000..638de9d --- /dev/null +++ b/go-plugin/plugins/traces/zipkin/main/reporter_factory.go @@ -0,0 +1,54 @@ +package main + +import ( + "log" + "strconv" + "time" + + "github.com/openzipkin/zipkin-go/reporter" + "github.com/openzipkin/zipkin-go/reporter/http" + "github.com/openzipkin/zipkin-go/reporter/kafka" +) + +var ( + factory = make(map[string]ReporterBuilder) +) + +func init() { + factory[ZipkinHttpReport] = HttpReporterBuilder + factory[ZipkinKafkaReport] = KafkaReporterBuilder +} + +func GetReportBuilder(typ string) (ReporterBuilder, bool) { + if v, ok := factory[typ]; ok { + return v, ok + } + return nil, false +} + +type ReporterBuilder func(ZipkinTraceConfig) (reporter.Reporter, error) + +func HttpReporterBuilder(cfg ZipkinTraceConfig) (reporter.Reporter, error) { + opts := make([]http.ReporterOption, 0, 4) + opts = append(opts, http.Logger(log.Default())) + if cfg.HttpConfig.Timeout > 0 { + opts = append(opts, http.Timeout(time.Second*time.Duration(cfg.HttpConfig.Timeout))) + + } + if cfg.HttpConfig.BatchInterval > 0 { + opts = append(opts, http.BatchInterval(time.Second*time.Duration(cfg.HttpConfig.BatchInterval))) + } + if size, _ := strconv.Atoi(cfg.HttpConfig.BatchSize); size > 0 { + opts = append(opts, http.BatchSize(size)) + } + return http.NewReporter(cfg.HttpConfig.Address, opts...), nil +} + +func KafkaReporterBuilder(cfg ZipkinTraceConfig) (reporter.Reporter, error) { + opts := make([]kafka.ReporterOption, 0, 2) + opts = append(opts, kafka.Logger(log.Default())) + if cfg.KafkaConfig.Topic != "" { + opts = append(opts, kafka.Topic(cfg.KafkaConfig.Topic)) + } + return kafka.NewReporter(cfg.KafkaConfig.Addresses, opts...) +} diff --git a/go-plugin/plugins/traces/zipkin/main/span.go b/go-plugin/plugins/traces/zipkin/main/span.go new file mode 100644 index 0000000..03aba8e --- /dev/null +++ b/go-plugin/plugins/traces/zipkin/main/span.go @@ -0,0 +1,176 @@ +package main + +import ( + "context" + "encoding/json" + "github.com/openzipkin/zipkin-go" + "github.com/openzipkin/zipkin-go/model" + "github.com/openzipkin/zipkin-go/propagation/b3" + "mosn.io/api" + "mosn.io/extensions/go-plugin/pkg/keys" + "mosn.io/extensions/go-plugin/pkg/trace" + "mosn.io/pkg/log" + "mosn.io/pkg/protocol/http" + "mosn.io/pkg/variable" + "net" + "strconv" + "strings" + "time" +) + +type kv struct { + Key string + Value string +} + +type ZipkinSpan struct { + trace.NoopSpan + traceId string + spanId string + parentSpanId string + startTime time.Time + ctx context.Context + + operationName string + kvs []kv + provider *zipkin.Tracer + entrySpan zipkin.Span +} + +func NewSpan(ctx context.Context, startTime time.Time, provider *zipkin.Tracer) *ZipkinSpan { + h := &ZipkinSpan{ + startTime: startTime, + ctx: ctx, + provider: provider, + kvs: make([]kv, 0, 10), + } + return h +} + +func (h *ZipkinSpan) TraceId() string { + return h.traceId +} + +func (h *ZipkinSpan) SpanId() string { + return h.spanId +} + +func (h *ZipkinSpan) ParentSpanId() string { + return h.parentSpanId +} + +func (h *ZipkinSpan) InjectContext(headers api.HeaderMap, reqInfo api.RequestInfo) { + if header, ok := headers.(http.RequestHeader); ok { + host := reqInfo.UpstreamLocalAddress() + requestURI := string(header.RequestURI()) + url := strings.Join([]string{"http://", host, requestURI}, "") + h.kvs = append(h.kvs, kv{"http.url", url}) + h.kvs = append(h.kvs, kv{"http.method", string(header.Method())}) + h.operationName = requestURI + } + trace := b3.BuildSingleHeader(h.entrySpan.Context()) + headers.Set(b3.Context, trace) +} + +func (h *ZipkinSpan) SetRequestInfo(reqInfo api.RequestInfo) { + if host := reqInfo.UpstreamHost(); host != nil { + h.kvs = append(h.kvs, kv{"upstream.address", host.AddressString()}) + addr, _, err := net.SplitHostPort(host.AddressString()) + if err == nil { + endpoint := &model.Endpoint{ + ServiceName: host.Hostname(), + IPv4: net.ParseIP(addr), + } + h.entrySpan.SetRemoteEndpoint(endpoint) + } + } + if addr := reqInfo.DownstreamRemoteAddress(); addr != nil { + h.kvs = append(h.kvs, kv{"downstream.address", addr.String()}) + } + h.kvs = append(h.kvs, kv{"request.size", strconv.Itoa(int(reqInfo.BytesReceived()))}) + h.kvs = append(h.kvs, kv{"response.size", strconv.Itoa(int(reqInfo.BytesSent()))}) + h.kvs = append(h.kvs, kv{"duration", strconv.Itoa(int(reqInfo.Duration().Nanoseconds()))}) + process := reqInfo.ProcessTimeDuration().Nanoseconds() + if process == 0 { + process = reqInfo.RequestFinishedDuration().Nanoseconds() + } + h.kvs = append(h.kvs, kv{"mosn.process.duration", strconv.Itoa(int(process))}) + h.kvs = append(h.kvs, kv{"mosn.process.request.duration", strconv.Itoa(int(reqInfo.RequestFinishedDuration().Nanoseconds()))}) + h.kvs = append(h.kvs, kv{"mosn.process.response.duration", strconv.Itoa(int(reqInfo.ResponseReceivedDuration().Nanoseconds()))}) + if reqInfo.ResponseCode() != api.SuccessCode { + ok := reqInfo.GetResponseFlag(trace.ProcessFailedFlags) + h.kvs = append(h.kvs, kv{"mosn.process.fail", strconv.FormatBool(ok)}) + } +} + +func (h *ZipkinSpan) FinishSpan() { + if h.entrySpan != nil { + kvs := h.ParseVariable(h.ctx) + h.entrySpan.SetName(h.operationName) + h.addTag(h.entrySpan, kvs) + h.entrySpan.Finish() + h.log(kvs) + } +} + +func (h *ZipkinSpan) addTag(span zipkin.Span, kvs []kv) { + for _, kv := range kvs { + span.Tag(kv.Key, kv.Value) + } +} + +func (h *ZipkinSpan) SetOperation(operation string) { + h.operationName = operation +} + +func (h *ZipkinSpan) log(kvs []kv) { + if log.DefaultLogger.GetLogLevel() >= log.DEBUG { + kvs, _ := json.Marshal(h.kvs) + log.DefaultLogger.Debugf("trace:%s pid:%s parentid:%s operationName:%s,kvs:%s", h.traceId, h.spanId, h.parentSpanId, h.operationName, kvs) + } +} + +func (h *ZipkinSpan) CreateLocalSpan(span zipkin.Span) { + h.entrySpan = span + if pid := h.entrySpan.Context().ParentID; pid != nil { + h.parentSpanId = pid.String() + } + h.traceId = h.entrySpan.Context().TraceID.String() + h.spanId = h.entrySpan.Context().ID.String() +} + +func (h *ZipkinSpan) ParseVariable(ctx context.Context) []kv { + kvs := make([]kv, len(h.kvs)) + copy(kvs, h.kvs) + + if methodName, _ := variable.GetString(ctx, keys.VarMethod); len(methodName) != 0 { + kvs = append(kvs, kv{"rpc.method", methodName}) + } + if direction, _ := variable.GetString(ctx, keys.VarDirection); len(direction) != 0 { + kvs = append(kvs, kv{"hijack", direction}) + } + + if appName, _ := variable.GetString(ctx, keys.VarGovernTargetApp); len(appName) != 0 { + kvs = append(kvs, kv{"target.app", appName}) + } + if service, _ := variable.GetString(ctx, keys.VarGovernSourceApp); len(service) != 0 { + kvs = append(kvs, kv{"caller.app", service}) + } + dataId, _ := variable.GetString(ctx, keys.VarGovernService) + kvs = append(kvs, kv{"rpc.service", dataId}) + if len(h.operationName) == 0 { + h.operationName = dataId + } + + dp, _ := variable.GetString(ctx, keys.VarDownStreamProtocol) + if len(dp) != 0 { + kvs = append(kvs, kv{"downstream.protocol", string(dp)}) + } + up, _ := variable.GetString(ctx, keys.VarUpStreamProtocol) + if len(up) != 0 { + kvs = append(kvs, kv{"upstream.protocol", string(up)}) + } else { + kvs = append(kvs, kv{"upstream.protocol", string(dp)}) + } + return kvs +} diff --git a/go-plugin/plugins/traces/zipkin/main/tracer.go b/go-plugin/plugins/traces/zipkin/main/tracer.go new file mode 100644 index 0000000..d6d65b2 --- /dev/null +++ b/go-plugin/plugins/traces/zipkin/main/tracer.go @@ -0,0 +1,147 @@ +package main + +import ( + "context" + "strings" + "time" + + "github.com/openzipkin/zipkin-go" + "github.com/openzipkin/zipkin-go/model" + "github.com/openzipkin/zipkin-go/propagation/b3" + "mosn.io/api" + "mosn.io/extensions/go-plugin/pkg/config" + "mosn.io/extensions/go-plugin/pkg/trace" + "mosn.io/pkg/log" + "mosn.io/pkg/protocol/http" +) + +var ( + tracerProvider *zipkin.Tracer + _ api.Tracer = (*zipkinTracer)(nil) + DefaultSpanName = "mosn" +) + +type zipkinTracer struct { + cfg map[string]interface{} + tracerProvider *zipkin.Tracer + serviceName string +} + +func TracerBuilder(cfg map[string]interface{}) (api.Tracer, error) { + tracerProvider, err := GetTracer(cfg) + if err != nil { + return nil, err + } + serviceName := cfg["service_name"].(string) + return &zipkinTracer{ + cfg: cfg, + serviceName: serviceName, + tracerProvider: tracerProvider, + }, nil +} + +func (tracer *zipkinTracer) Start(ctx context.Context, request interface{}, startTime time.Time) api.Span { + switch req := request.(type) { + case http.RequestHeader: + return tracer.httpStart(ctx, req, startTime) + case api.XFrame: + return tracer.frameStart(ctx, req, startTime) + } + return trace.NewNooSpan() +} + +func (tracer *zipkinTracer) httpStart(ctx context.Context, header http.RequestHeader, startTime time.Time) api.Span { + zctx, err := tracer.zipkinSpan(ctx, header) + if err != nil || zctx == nil { + return nil + } + + span := tracer.tracerProvider.StartSpan( + getOperationName(header.RequestURI()), + zipkin.Parent(*zctx), + zipkin.Kind(tracer.getType(ctx)), + zipkin.StartTime(startTime), + ) + // getLocalHostPort get host and port from context + return tracer.zipkin(ctx, header, span, startTime) +} + +func (tracer *zipkinTracer) frameStart(ctx context.Context, xframe api.XFrame, startTime time.Time) api.Span { + zctx, err := tracer.zipkinSpan(ctx, xframe.GetHeader()) + if err != nil || zctx == nil { + return nil + } + // ignore heartbeat + if xframe.IsHeartbeatFrame() { + return nil + } + span := tracer.tracerProvider.StartSpan(DefaultSpanName, + zipkin.Parent(*zctx), + zipkin.Kind(tracer.getType(ctx)), + zipkin.StartTime(startTime), + ) + return tracer.zipkin(ctx, xframe.GetHeader(), span, startTime) +} + +func (tracer *zipkinTracer) zipkinSpan(bctx context.Context, header api.HeaderMap) (*model.SpanContext, error) { + if ctx, _ := tracer.parseSpanFromHeader(bctx, header); ctx != nil { + return ctx, nil + } + if ctx, _ := tracer.parseSpanFromHeader2(bctx, header); ctx != nil { + return ctx, nil + } + enabled, _ := tracer.cfg["mosn_generator_span_enabled"].(string) + if strings.EqualFold(enabled, "true") { + ctx, err := b3.ParseHeaders("", "", "", "1", "0") + if err != nil { + return nil, err + } + return ctx, nil + } + return nil, nil +} + +func (tracer *zipkinTracer) parseSpanFromHeader(bctx context.Context, header api.HeaderMap) (*model.SpanContext, error) { + singleHeader, ok := header.Get(b3.Context) + if !ok { + return nil, nil + } + ctx, err := b3.ParseSingleHeader(singleHeader) + if err != nil { + log.DefaultLogger.Errorf("[zipkin][parseSpanFromHeader]get span failed,err:%s header:%s", err, singleHeader) + return nil, err + } + return ctx, nil +} + +func (tracer *zipkinTracer) parseSpanFromHeader2(bctx context.Context, header api.HeaderMap) (*model.SpanContext, error) { + var ( + hdrTraceID, ok = header.Get(b3.TraceID) + hdrSpanID, _ = header.Get(b3.SpanID) + hdrParentSpanID, _ = header.Get(b3.ParentSpanID) + hdrSampled, _ = header.Get(b3.Sampled) + hdrFlgs, _ = header.Get(b3.Flags) + ) + if !ok { + return nil, nil + } + ctx, err := b3.ParseHeaders(hdrTraceID, hdrSpanID, hdrParentSpanID, hdrSampled, hdrFlgs) + if err != nil { + log.DefaultLogger.Errorf("[zipkin][parseSpanFromHeader2]get span failed,err:%s", err) + return nil, err + } + return ctx, nil +} + +func (tracer *zipkinTracer) getType(ctx context.Context) model.Kind { + if ltype, ok := config.GetListenerType(ctx); ok && ltype == "ingress" { + return model.Server + } + return model.Client +} + +func (tracer *zipkinTracer) zipkin(ctx context.Context, header api.HeaderMap, span zipkin.Span, startTime time.Time) api.Span { + ospan := NewSpan(ctx, startTime, tracer.tracerProvider) + ospan.CreateLocalSpan(span) + return ospan +}