From bdb51d26969ef2c239baf9053a84ac8609505156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=85=E5=AD=90?= Date: Thu, 1 Jul 2021 09:49:35 +0800 Subject: [PATCH] feat(examples): add benchmark example (#1134) * feat(examples): add benchmark example * fix examples/benchmark/test.sh * fix: remove go.mod from examples / benchmark --- examples/benchmark/README.md | 14 ++ examples/benchmark/libs.sh | 3 + examples/benchmark/main.go | 197 +++++++++++++++++++ examples/benchmark/test.sh | 86 ++++++++ examples/benchmark/testresults/benchmark.gnu | 22 +++ examples/benchmark/testresults/plot.sh | 10 + examples/benchmark/testresults/plot_mac.sh | 10 + examples/benchmark/testresults/transpose.sh | 6 + examples/benchmark/testresults/tst.awk | 15 ++ examples/go.mod | 1 + examples/go.sum | 24 ++- 11 files changed, 378 insertions(+), 10 deletions(-) create mode 100644 examples/benchmark/README.md create mode 100644 examples/benchmark/libs.sh create mode 100644 examples/benchmark/main.go create mode 100755 examples/benchmark/test.sh create mode 100644 examples/benchmark/testresults/benchmark.gnu create mode 100644 examples/benchmark/testresults/plot.sh create mode 100644 examples/benchmark/testresults/plot_mac.sh create mode 100644 examples/benchmark/testresults/transpose.sh create mode 100644 examples/benchmark/testresults/tst.awk diff --git a/examples/benchmark/README.md b/examples/benchmark/README.md new file mode 100644 index 000000000..7cec7a561 --- /dev/null +++ b/examples/benchmark/README.md @@ -0,0 +1,14 @@ + +### Explain +This example is condensed by [go-web-framework-benchmark](https://github.com/smallnest/go-web-framework-benchmark) + +### Dependent +- wrk https://github.com/wg/wrk +- gnuplot http://www.gnuplot.info/ + +### Run +```bash +go build -o gowebbenchmark *.go +./test.sh +./testresults/plot.sh or plot_mac.sh +``` diff --git a/examples/benchmark/libs.sh b/examples/benchmark/libs.sh new file mode 100644 index 000000000..3a9ec9b08 --- /dev/null +++ b/examples/benchmark/libs.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +web_frameworks=("kratos" "gin" "echo" "mux") diff --git a/examples/benchmark/main.go b/examples/benchmark/main.go new file mode 100644 index 000000000..fa3ae4f56 --- /dev/null +++ b/examples/benchmark/main.go @@ -0,0 +1,197 @@ +package main + +import ( + "crypto/sha256" + "fmt" + "log" + "math/big" + http2 "net/http" + "os" + "runtime" + "strconv" + "time" + + "github.com/go-kratos/kratos/v2" + "github.com/go-kratos/kratos/v2/transport/http" + + "github.com/gin-gonic/gin" + "github.com/gorilla/mux" + "github.com/labstack/echo/v4" +) + +var ( + port = 8080 + sleepTime = 0 + cpuBound bool + target = 15 + sleepTimeDuration time.Duration + message = []byte("hello world") + samplingPoint = 20 // seconds +) + +func main() { + args := os.Args + argsLen := len(args) + webFramework := "kratos" + if argsLen > 1 { + webFramework = args[1] + } + if argsLen > 2 { + sleepTime, _ = strconv.Atoi(args[2]) + if sleepTime == -1 { + cpuBound = true + sleepTime = 0 + } + } + if argsLen > 3 { + port, _ = strconv.Atoi(args[3]) + } + if argsLen > 4 { + samplingPoint, _ = strconv.Atoi(args[4]) + } + sleepTimeDuration = time.Duration(sleepTime) * time.Millisecond + samplingPointDuration := time.Duration(samplingPoint) * time.Second + + go func() { + time.Sleep(samplingPointDuration) + var mem runtime.MemStats + runtime.ReadMemStats(&mem) + var u uint64 = 1024 * 1024 + fmt.Printf("TotalAlloc: %d\n", mem.TotalAlloc/u) + fmt.Printf("Alloc: %d\n", mem.Alloc/u) + fmt.Printf("HeapAlloc: %d\n", mem.HeapAlloc/u) + fmt.Printf("HeapSys: %d\n", mem.HeapSys/u) + }() + + switch webFramework { + case "kratos": + KratosServer() + case "gin": + GinServer() + case "echo": + EchoServer() + case "mux": + MuxServer() + default: + fmt.Println("--------------------------------------------------------------------") + fmt.Println("------------- Unknown framework given!!! Check libs.sh -------------") + fmt.Println("------------- Unknown framework given!!! Check libs.sh -------------") + fmt.Println("------------- Unknown framework given!!! Check libs.sh -------------") + fmt.Println("--------------------------------------------------------------------") + } +} + +func KratosServer() { + httpSrv := http.NewServer( + http.Address(":" + strconv.Itoa(port)), + ) + httpSrv.HandleFunc("/", kratosHandle) + app := kratos.New( + kratos.Name("benchmark"), + kratos.Server( + httpSrv, + ), + ) + + if err := app.Run(); err != nil { + log.Fatal(err) + } +} + +func kratosHandle(w http2.ResponseWriter, q *http2.Request) { + if cpuBound { + pow(target) + } else { + if sleepTime > 0 { + time.Sleep(sleepTimeDuration) + } else { + runtime.Gosched() + } + } + w.Write(message) +} + +func GinServer() { + gin.SetMode(gin.ReleaseMode) + mux := gin.New() + mux.GET("/", ginHandler) + mux.Run(":" + strconv.Itoa(port)) +} + +func ginHandler(c *gin.Context) { + if cpuBound { + pow(target) + } else { + if sleepTime > 0 { + time.Sleep(sleepTimeDuration) + } else { + runtime.Gosched() + } + } + c.Writer.Write(message) +} + +func EchoServer() { + e := echo.New() + e.GET("/", echoHandler) + e.Start(":" + strconv.Itoa(port)) +} + +func echoHandler(c echo.Context) error { + if cpuBound { + pow(target) + } else { + if sleepTime > 0 { + time.Sleep(sleepTimeDuration) + } else { + runtime.Gosched() + } + } + c.Response().Write(message) + return nil +} + +func MuxServer() { + r := mux.NewRouter() + r.HandleFunc("/", muxHandle) + http2.Handle("/", r) + http2.ListenAndServe(":"+strconv.Itoa(port), r) +} + +func muxHandle(w http2.ResponseWriter, q *http2.Request) { + if cpuBound { + pow(target) + } else { + if sleepTime > 0 { + time.Sleep(sleepTimeDuration) + } else { + runtime.Gosched() + } + } + w.Write(message) +} + +func pow(targetBits int) { + target := big.NewInt(1) + target.Lsh(target, uint(256-targetBits)) + + var hashInt big.Int + var hash [32]byte + nonce := 0 + + for { + data := "hello world " + strconv.Itoa(nonce) + hash = sha256.Sum256([]byte(data)) + hashInt.SetBytes(hash[:]) + + if hashInt.Cmp(target) == -1 { + break + } else { + nonce++ + } + + if nonce%100 == 0 { + runtime.Gosched() + } + } +} diff --git a/examples/benchmark/test.sh b/examples/benchmark/test.sh new file mode 100755 index 000000000..1be93019b --- /dev/null +++ b/examples/benchmark/test.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +server_bin_name="gowebbenchmark" + +. ./libs.sh + +length=${#web_frameworks[@]} + +test_result=() + +cpu_cores=`cat /proc/cpuinfo|grep processor|wc -l` +if [ $cpu_cores -eq 0 ] +then + cpu_cores=1 +fi + +test_web_framework() +{ + echo "testing web framework: $2" + ./$server_bin_name $2 $3 & + sleep 2 + + throughput=`wrk -t$cpu_cores -c$4 -d30s http://127.0.0.1:8080/ | grep Requests/sec | awk '{print $2}'` + echo "throughput: $throughput requests/second" + test_result[$1]=$throughput + + pkill -9 $server_bin_name + sleep 2 + echo "finsihed testing $2" + echo +} + +test_all() +{ + echo "###################################" + echo " " + echo " ProcessingTime $1ms " + echo " Concurrency $2 " + echo " " + echo "###################################" + for ((i=0; i<$length; i++)) + do + test_web_framework $i ${web_frameworks[$i]} $1 $2 + done +} + + +pkill -9 $server_bin_name + +echo ","$(IFS=$','; echo "${web_frameworks[*]}" ) > processtime.csv +test_all 0 5000 +echo "0 ms,"$(IFS=$','; echo "${test_result[*]}" ) >> processtime.csv +test_all 10 5000 +echo "10 ms,"$(IFS=$','; echo "${test_result[*]}" ) >> processtime.csv +test_all 100 5000 +echo "100 ms,"$(IFS=$','; echo "${test_result[*]}" ) >> processtime.csv +test_all 500 5000 +echo "500 ms,"$(IFS=$','; echo "${test_result[*]}" ) >> processtime.csv + + +echo ","$(IFS=$','; echo "${web_frameworks[*]}" ) > concurrency.csv +test_all 30 100 +echo "100,"$(IFS=$','; echo "${test_result[*]}" ) >> concurrency.csv +test_all 30 1000 +echo "1000,"$(IFS=$','; echo "${test_result[*]}" ) >> concurrency.csv +test_all 30 5000 +echo "5000,"$(IFS=$','; echo "${test_result[*]}" ) >> concurrency.csv + + +test_all -1 5000 +echo ","$(IFS=$','; echo "${web_frameworks[*]}" ) > cpubound.csv +echo "cpu-bound,"$(IFS=$','; echo "${test_result[*]}" ) >> cpubound.csv + +echo ","$(IFS=$','; echo "${web_frameworks[*]}" ) > cpubound-concurrency.csv +test_all -1 100 +echo "100,"$(IFS=$','; echo "${test_result[*]}" ) >> cpubound-concurrency.csv +test_all -1 1000 +echo "1000,"$(IFS=$','; echo "${test_result[*]}" ) >> cpubound-concurrency.csv +test_all -1 5000 +echo "5000,"$(IFS=$','; echo "${test_result[*]}" ) >> cpubound-concurrency.csv + + +mv -f processtime.csv ./testresults +mv -f concurrency.csv ./testresults +mv -f cpubound.csv ./testresults +mv -f cpubound-concurrency.csv ./testresults diff --git a/examples/benchmark/testresults/benchmark.gnu b/examples/benchmark/testresults/benchmark.gnu new file mode 100644 index 000000000..a7eee7a26 --- /dev/null +++ b/examples/benchmark/testresults/benchmark.gnu @@ -0,0 +1,22 @@ +reset +set title "Benchmark of different processing time" +set boxwidth 0.9 +set datafile separator "," +set style data histogram +set style histogram clustered gap 2 +set style fill solid 0.7 border +set border lw 0.8 + +set ylabel "requests / second" +set xtics nomirror rotate by -45 +set ytics nomirror + +set border 1+2 back +set boxwidth -2 + +set grid + +set term pngcairo font "Times Roman,14" enhanced size 1024,600 background rgb "gray80" +set output "../benchmark.png" + +plot 't_processtime.csv' using 2:xticlabels(1) title columnheader(2), '' using 3:xticlabels(1) title columnheader(3), '' using 4:xticlabels(1) title columnheader(4), '' using 5:xticlabels(1) title columnheader(5) diff --git a/examples/benchmark/testresults/plot.sh b/examples/benchmark/testresults/plot.sh new file mode 100644 index 000000000..0eb7b9c55 --- /dev/null +++ b/examples/benchmark/testresults/plot.sh @@ -0,0 +1,10 @@ +#!/bin/bash +m_path=$(dirname $0) +m_path=${m_path/\./$(pwd)} +cd $m_path + +./transpose.sh + +gnuplot benchmark.gnu + +rm -fr t_*.csv diff --git a/examples/benchmark/testresults/plot_mac.sh b/examples/benchmark/testresults/plot_mac.sh new file mode 100644 index 000000000..ab925e0cb --- /dev/null +++ b/examples/benchmark/testresults/plot_mac.sh @@ -0,0 +1,10 @@ +#!/bin/bash +m_path=$(dirname $0) +m_path=${m_path/\./$(pwd)} +cd $m_path + +./transpose.sh + +gnuplot -c benchmark.gnu + +rm -fr t_*.csv diff --git a/examples/benchmark/testresults/transpose.sh b/examples/benchmark/testresults/transpose.sh new file mode 100644 index 000000000..d7cddd144 --- /dev/null +++ b/examples/benchmark/testresults/transpose.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +for file in `ls *.csv` +do + awk -f tst.awk $file > t_$file +done diff --git a/examples/benchmark/testresults/tst.awk b/examples/benchmark/testresults/tst.awk new file mode 100644 index 000000000..d9cca236c --- /dev/null +++ b/examples/benchmark/testresults/tst.awk @@ -0,0 +1,15 @@ +BEGIN { FS=OFS="," } +{ + for (rowNr=1;rowNr<=NF;rowNr++) { + cell[rowNr,NR] = $rowNr + } + maxRows = (NF > maxRows ? NF : maxRows) + maxCols = NR +} +END { + for (rowNr=1;rowNr<=maxRows;rowNr++) { + for (colNr=1;colNr<=maxCols;colNr++) { + printf "%s%s", cell[rowNr,colNr], (colNr < maxCols ? OFS : ORS) + } + } +} diff --git a/examples/go.mod b/examples/go.mod index aba77040a..33c2d2955 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -31,6 +31,7 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/json-iterator/go v1.1.11 // indirect github.com/kr/text v0.2.0 // indirect + github.com/labstack/echo/v4 v4.3.0 github.com/leodido/go-urn v1.2.1 // indirect github.com/mattn/go-isatty v0.0.13 // indirect github.com/nacos-group/nacos-sdk-go v1.0.7 diff --git a/examples/go.sum b/examples/go.sum index a936a3954..0ed8b47a2 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -223,7 +223,6 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/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 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -360,6 +359,10 @@ 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/labstack/echo/v4 v4.3.0 h1:DCP6cbtT+Zu++K6evHOJzSgA2115cPMuCx0xg55q1EQ= +github.com/labstack/echo/v4 v4.3.0/go.mod h1:PvmtTvhVqKDzDQy4d3bWzPjZLzom4iQbAZy2sgZ/qI8= +github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= @@ -376,6 +379,7 @@ github.com/lyft/protoc-gen-star v0.5.1/go.mod h1:9toiA3cC7z5uVbODF7kEQ91Xn7XNFkV 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/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= @@ -383,6 +387,7 @@ github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope 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.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= @@ -574,6 +579,11 @@ github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= 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/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= 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= @@ -600,7 +610,6 @@ go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/otel v0.13.0/go.mod h1:dlSNewoRYikTkotEnxdmuBHgzT+k/idJSfDv/FxEnOY= go.opentelemetry.io/otel v0.16.0/go.mod h1:e4GKElweB8W2gWUqbghw0B8t5MCTccc9212eNHnOHwA= go.opentelemetry.io/otel v0.17.0/go.mod h1:Oqtdxmf7UtEvL037ohlgnaYa1h7GtMh0NcSd9eqkC9s= -go.opentelemetry.io/otel v0.20.0 h1:eaP0Fqu7SXHwvjiqDq83zImeehOHX8doTvU9AwXON8g= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= go.opentelemetry.io/otel v1.0.0-RC1 h1:4CeoX93DNTWt8awGK9JmNXzF9j7TyOu9upscEdtcdXc= go.opentelemetry.io/otel v1.0.0-RC1/go.mod h1:x9tRa9HK4hSSq7jf2TKbqFbtt58/TGk0f9XiEYISI1I= @@ -609,19 +618,16 @@ go.opentelemetry.io/otel/exporters/jaeger v1.0.0-RC1/go.mod h1:FXJnjGCoTQL6nQ8Op go.opentelemetry.io/otel/internal/metric v0.21.0 h1:gZlIBo5O51hZOOZz8vEcuRx/l5dnADadKfpT70AELoo= go.opentelemetry.io/otel/internal/metric v0.21.0/go.mod h1:iOfAaY2YycsXfYD4kaRSbLx2LKmfpKObWBEv9QK5zFo= go.opentelemetry.io/otel/metric v0.17.0/go.mod h1:hUz9lH1rNXyEwWAhIWCMFWKhYtpASgSnObJFnU26dJ0= -go.opentelemetry.io/otel/metric v0.20.0 h1:4kzhXFP+btKm4jwxpjIqjs41A7MakRFUS86bqLHTIw8= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= go.opentelemetry.io/otel/metric v0.21.0 h1:ZtcJlHqVE4l8Su0WOLOd9fEPheJuYEiQ0wr9wv2p25I= go.opentelemetry.io/otel/metric v0.21.0/go.mod h1:JWCt1bjivC4iCrz/aCrM1GSw+ZcvY44KCbaeeRhzHnc= go.opentelemetry.io/otel/oteltest v0.17.0/go.mod h1:JT/LGFxPwpN+nlsTiinSYjdIx3hZIGqHCpChcIZmdoE= -go.opentelemetry.io/otel/oteltest v0.20.0 h1:HiITxCawalo5vQzdHfKeZurV8x7ljcqAgiWzF6Vaeaw= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/oteltest v1.0.0-RC1 h1:G685iP3XiskCwk/z0eIabL55XUl2gk0cljhGk9sB0Yk= go.opentelemetry.io/otel/oteltest v1.0.0-RC1/go.mod h1:+eoIG0gdEOaPNftuy1YScLr1Gb4mL/9lpDkZ0JjMRq4= go.opentelemetry.io/otel/sdk v1.0.0-RC1 h1:Sy2VLOOg24bipyC29PhuMXYNJrLsxkie8hyI7kUlG9Q= go.opentelemetry.io/otel/sdk v1.0.0-RC1/go.mod h1:kj6yPn7Pgt5ByRuwesbaWcRLA+V7BSDg3Hf8xRvsvf8= go.opentelemetry.io/otel/trace v0.17.0/go.mod h1:bIujpqg6ZL6xUTubIUgziI1jSaUPthmabA/ygf/6Cfg= -go.opentelemetry.io/otel/trace v0.20.0 h1:1DL6EXUdcg95gukhuRRvLDO/4X5THh/5dIV52lqtnbw= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= go.opentelemetry.io/otel/trace v1.0.0-RC1 h1:jrjqKJZEibFrDz+umEASeU3LvdVyWKlnTh7XEfwrT58= go.opentelemetry.io/otel/trace v1.0.0-RC1/go.mod h1:86UHmyHWFEtWjfWPSbu0+d0Pf9Q6e1U+3ViBOc+NXAg= @@ -658,6 +664,7 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= 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-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a h1:kr2P4QFmQr29mSLA43kwrOcgcReGTfbE9N577tCTuBc= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -683,9 +690,7 @@ golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKG golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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= @@ -750,6 +755,7 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20190813064441-fde4db37ae7a/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-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -793,6 +799,7 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb 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= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -825,7 +832,6 @@ golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 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/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.4 h1:cVngSRcfgyZCzys3KYOpCFa+4dqX/Oub9tAq00ttGVs= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -877,7 +883,6 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI= google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= @@ -891,7 +896,6 @@ 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.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 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=