this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

do handle resolution in parallel (#242)

This is the proper spec compliant way of doing things.

authored by

Whyrusleeping and committed by
GitHub
01b8b70d 420fa008

+73 -39
+64 -21
api/extra.go
··· 2 2 3 3 import ( 4 4 "context" 5 + "errors" 5 6 "fmt" 6 7 "io" 7 8 "net" 8 9 "net/http" 9 10 "net/url" 10 11 "strings" 12 + "sync" 11 13 "time" 12 14 13 15 "github.com/bluesky-social/indigo/did" 14 16 "github.com/bluesky-social/indigo/xrpc" 15 17 logging "github.com/ipfs/go-log" 18 + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" 16 19 otel "go.opentelemetry.io/otel" 17 20 ) 18 21 ··· 83 86 ctx, span := otel.Tracer("resolver").Start(ctx, "ResolveHandleToDid") 84 87 defer span.End() 85 88 86 - c := http.DefaultClient 89 + var wkres, dnsres string 90 + var wkerr, dnserr error 91 + 92 + var wg sync.WaitGroup 93 + wg.Add(2) 94 + 95 + go func() { 96 + defer wg.Done() 97 + wkres, wkerr = dr.resolveWellKnown(ctx, handle) 98 + if wkerr == nil { 99 + cancel() 100 + } 101 + }() 102 + go func() { 103 + defer wg.Done() 104 + dnsres, dnserr = dr.resolveDNS(ctx, handle) 105 + if dnserr == nil { 106 + cancel() 107 + } 108 + }() 109 + 110 + wg.Wait() 111 + 112 + if dnserr == nil { 113 + return dnsres, nil 114 + } 115 + 116 + if wkerr == nil { 117 + return wkres, nil 118 + } 119 + 120 + return "", errors.Join(fmt.Errorf("no did record found for handle %q", handle), dnserr, wkerr) 121 + } 122 + 123 + func (dr *ProdHandleResolver) resolveWellKnown(ctx context.Context, handle string) (string, error) { 124 + c := http.Client{ 125 + Transport: otelhttp.NewTransport(http.DefaultTransport), 126 + } 87 127 88 128 req, err := http.NewRequest("GET", fmt.Sprintf("https://%s/.well-known/atproto-did", handle), nil) 89 129 if err != nil { ··· 98 138 99 139 req = req.WithContext(ctx) 100 140 101 - resp, wkerr := c.Do(req) 102 - if wkerr == nil && resp.StatusCode == 200 { 103 - if resp.ContentLength > 2048 { 104 - return "", fmt.Errorf("http well-known route returned too much data") 105 - } 141 + resp, err := c.Do(req) 142 + if err != nil { 143 + return "", fmt.Errorf("failed to resolve handle (%s) through HTTP well-known route: %s", handle, err) 144 + } 145 + if resp.StatusCode != 200 { 146 + return "", fmt.Errorf("failed to resolve handle (%s) through HTTP well-known route: status=%d", handle, resp.StatusCode) 147 + } 106 148 107 - b, err := io.ReadAll(io.LimitReader(resp.Body, 2048)) 108 - if err != nil { 109 - return "", fmt.Errorf("failed to read resolved did: %w", err) 110 - } 111 - 112 - parsed, err := did.ParseDID(string(b)) 113 - if err != nil { 114 - return "", err 115 - } 149 + if resp.ContentLength > 2048 { 150 + return "", fmt.Errorf("http well-known route returned too much data") 151 + } 116 152 117 - return parsed.String(), nil 153 + b, err := io.ReadAll(io.LimitReader(resp.Body, 2048)) 154 + if err != nil { 155 + return "", fmt.Errorf("failed to read resolved did: %w", err) 118 156 } 119 - if wkerr != nil { 120 - log.Infof("failed to resolve handle (%s) through HTTP well-known route: %s", handle, wkerr) 121 - } else if resp.StatusCode != 200 { 122 - log.Infof("failed to resolve handle (%s) through HTTP well-known route: status=%d", handle, resp.StatusCode) 157 + 158 + parsed, err := did.ParseDID(string(b)) 159 + if err != nil { 160 + return "", err 123 161 } 162 + 163 + return parsed.String(), nil 164 + } 165 + 166 + func (dr *ProdHandleResolver) resolveDNS(ctx context.Context, handle string) (string, error) { 124 167 125 168 res, err := net.LookupTXT("_atproto." + handle) 126 169 if err != nil { ··· 139 182 } 140 183 } 141 184 142 - return "", fmt.Errorf("no did record found for handle %q", handle) 185 + return "", fmt.Errorf("no did record found") 143 186 } 144 187 145 188 type TestHandleResolver struct {
+5 -3
go.mod
··· 30 30 github.com/labstack/gommon v0.4.0 31 31 github.com/lestrrat-go/jwx/v2 v2.0.11 32 32 github.com/mitchellh/go-homedir v1.1.0 33 - github.com/multiformats/go-multibase v0.2.0 34 33 github.com/multiformats/go-multihash v0.2.1 35 34 github.com/opensearch-project/opensearch-go/v2 v2.2.0 36 35 github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f 37 36 github.com/prometheus/client_golang v1.14.0 37 + github.com/prometheus/client_model v0.3.0 38 38 github.com/stretchr/testify v1.8.4 39 39 github.com/urfave/cli/v2 v2.25.1 40 40 github.com/whyrusleeping/cbor-gen v0.0.0-20230331140348-1f892b517e70 41 41 github.com/whyrusleeping/go-did v0.0.0-20230717231106-35050b2a69a3 42 + gitlab.com/yawning/secp256k1-voi v0.0.0-20230702045112-3980093d98cd 43 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 42 44 go.opentelemetry.io/otel v1.16.0 43 45 go.opentelemetry.io/otel/exporters/jaeger v1.14.0 44 46 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.16.0 ··· 64 66 github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect 65 67 github.com/davecgh/go-spew v1.1.1 // indirect 66 68 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect 69 + github.com/felixge/httpsnoop v1.0.3 // indirect 67 70 github.com/go-kit/log v0.2.1 // indirect 68 71 github.com/go-logfmt/logfmt v0.5.1 // indirect 69 72 github.com/go-logr/logr v1.2.4 // indirect ··· 108 111 github.com/mr-tron/base58 v1.2.0 // indirect 109 112 github.com/multiformats/go-base32 v0.1.0 // indirect 110 113 github.com/multiformats/go-base36 v0.2.0 // indirect 114 + github.com/multiformats/go-multibase v0.2.0 // indirect 111 115 github.com/multiformats/go-multicodec v0.8.1 // indirect 112 116 github.com/multiformats/go-varint v0.0.7 // indirect 113 117 github.com/opentracing/opentracing-go v1.2.0 // indirect 114 118 github.com/pmezard/go-difflib v1.0.0 // indirect 115 - github.com/prometheus/client_model v0.3.0 // indirect 116 119 github.com/prometheus/common v0.40.0 // indirect 117 120 github.com/prometheus/procfs v0.9.0 // indirect 118 121 github.com/prometheus/statsd_exporter v0.22.7 // indirect ··· 122 125 github.com/valyala/bytebufferpool v1.0.0 // indirect 123 126 github.com/valyala/fasttemplate v1.2.2 // indirect 124 127 github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect 125 - gitlab.com/yawning/secp256k1-voi v0.0.0-20230702045112-3980093d98cd // indirect 126 128 go.opencensus.io v0.24.0 // indirect 127 129 go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 // indirect 128 130 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 // indirect
+4 -15
go.sum
··· 35 35 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= 36 36 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 37 37 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= 38 - github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= 39 38 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= 40 39 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= 41 40 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= ··· 91 90 github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 92 91 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 93 92 github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= 94 - github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= 95 93 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 96 94 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 97 95 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 98 96 github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= 99 97 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= 100 98 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= 101 - github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= 102 99 github.com/dustinkirkland/golang-petname v0.0.0-20230626224747-e794b9370d49 h1:6SNWi8VxQeCSwmLuTbEvJd7xvPmdS//zvMBWweZLgck= 103 100 github.com/dustinkirkland/golang-petname v0.0.0-20230626224747-e794b9370d49/go.mod h1:V+Qd57rJe8gd4eiGzZyg4h54VLHmYVVw54iMnlAMrF8= 104 101 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= ··· 108 105 github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= 109 106 github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= 110 107 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= 108 + github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= 109 + github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= 111 110 github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= 112 111 github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= 113 112 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= ··· 190 189 github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= 191 190 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 192 191 github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= 193 - github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= 194 192 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= 195 193 github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= 196 194 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= ··· 209 207 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= 210 208 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= 211 209 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= 212 - github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= 213 210 github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= 214 211 github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= 215 212 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= ··· 260 257 github.com/ipfs/go-ipfs-blockstore v1.3.0 h1:m2EXaWgwTzAfsmt5UdJ7Is6l4gJcaM/A12XwJyvYvMM= 261 258 github.com/ipfs/go-ipfs-blockstore v1.3.0/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE= 262 259 github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ= 263 - github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk= 264 260 github.com/ipfs/go-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7NapWLY8= 265 261 github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= 266 262 github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ= 267 - github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= 268 263 github.com/ipfs/go-ipfs-ds-help v1.1.0 h1:yLE2w9RAsl31LtfMt91tRZcrx+e61O5mDxFRR994w4Q= 269 264 github.com/ipfs/go-ipfs-ds-help v1.1.0/go.mod h1:YR5+6EaebOhfcqVCyqemItCLthrpVNot+rsOU/5IatU= 270 265 github.com/ipfs/go-ipfs-exchange-interface v0.2.0 h1:8lMSJmKogZYNo2jjhUs0izT+dck05pqUw4mWNW9Pw6Y= ··· 317 312 github.com/jackc/pgx/v5 v5.3.0/go.mod h1:t3JDKnCBlYIc0ewLF0Q7B8MXmoIaBOZj/ic7iHozM/8= 318 313 github.com/jackc/puddle/v2 v2.2.0/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= 319 314 github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= 320 - github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= 321 315 github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= 322 316 github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= 323 317 github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= ··· 430 424 github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= 431 425 github.com/multiformats/go-multiaddr v0.8.0 h1:aqjksEcqK+iD/Foe1RRFsGZh8+XFiGo7FgUCZlpv3LU= 432 426 github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= 433 - github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= 434 427 github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= 435 - github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= 436 428 github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= 437 429 github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= 438 430 github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= ··· 520 512 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= 521 513 github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hgR6gDIPg= 522 514 github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= 523 - github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= 524 515 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 525 516 github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= 526 517 github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= ··· 557 548 github.com/whyrusleeping/cbor-gen v0.0.0-20230331140348-1f892b517e70 h1:iNBzUKTsJc9RqStEVX2VYgVHATTU39IuB7g0e8OPWXU= 558 549 github.com/whyrusleeping/cbor-gen v0.0.0-20230331140348-1f892b517e70/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= 559 550 github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E= 560 - github.com/whyrusleeping/go-did v0.0.0-20230707163936-29146f2c84da h1:yVBtzc7Esu+XEe27ymIwAaC27RPmq3eMF8VXimVYxs0= 561 - github.com/whyrusleeping/go-did v0.0.0-20230707163936-29146f2c84da/go.mod h1:39U9RRVr4CKbXpXYopWn+FSH5s+vWu6+RmguSPWAq5s= 562 551 github.com/whyrusleeping/go-did v0.0.0-20230717231106-35050b2a69a3 h1:XdDkrGcquYaXrY3me8Wxc25Wt/q3ATIz1PHmx3NVQg8= 563 552 github.com/whyrusleeping/go-did v0.0.0-20230717231106-35050b2a69a3/go.mod h1:39U9RRVr4CKbXpXYopWn+FSH5s+vWu6+RmguSPWAq5s= 564 - github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= 565 - github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= 566 553 github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= 567 554 github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= 568 555 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= ··· 581 568 go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= 582 569 go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= 583 570 go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= 571 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 h1:pginetY7+onl4qN1vl0xW/V/v6OBZ0vVdH+esuJgvmM= 572 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0/go.mod h1:XiYsayHc36K3EByOO6nbAXnAWbrUxdjUROCEeeROOH8= 584 573 go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s= 585 574 go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4= 586 575 go.opentelemetry.io/otel/exporters/jaeger v1.14.0 h1:CjbUNd4iN2hHmWekmOqZ+zSCU+dzZppG8XsV+A3oc8Q=