Skip to content
This repository was archived by the owner on Mar 15, 2024. It is now read-only.

Commit 773915a

Browse files
committed
Allow submitting a fraction of requests to a mongo database
1 parent d71ffd9 commit 773915a

File tree

5 files changed

+114
-8
lines changed

5 files changed

+114
-8
lines changed

cmd/recorder/main.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ func main() {
2323
dbDSN := flag.String("dbDSN", "", "The database Data Source Name. Alternatively, it may be specified via LASSIE_EVENT_RECORDER_DB_DSN environment variable. If both are present, the environment variable takes precedence.")
2424
logLevel := flag.String("logLevel", "info", "The logging level. Only applied if GOLOG_LOG_LEVEL environment variable is unset.")
2525
metricsListenAddr := flag.String("metricsListenAddr", "0.0.0.0:7777", "The metrics server listen address in address:port format.")
26+
mongoAddr := flag.String("mongo", "", "A Mongo endpoint to write to.")
27+
mongoDB := flag.String("mongoDB", "", "The Mongo DB to write to.")
28+
mongoCollection := flag.String("mongoCollection", "", "The Mongo Collection to write to.")
29+
mongoPercent := flag.Float64("mongoPercent", 0.0, "How many aggregate writes to push to mongo")
2630

2731
flag.Parse()
2832

@@ -45,9 +49,15 @@ func main() {
4549

4650
metrics := metrics.New()
4751

48-
dbUrl := eventrecorder.WithDatabaseDSN(*dbDSN)
49-
metricsOpt := eventrecorder.WithMetrics(metrics)
50-
recorder, err := eventrecorder.New(dbUrl, metricsOpt)
52+
opts := []eventrecorder.Option{
53+
eventrecorder.WithDatabaseDSN(*dbDSN),
54+
eventrecorder.WithMetrics(metrics),
55+
}
56+
if *mongoAddr != "" {
57+
mOpt := eventrecorder.WithMongoSubmissions(*mongoAddr, *mongoDB, *mongoCollection, float32(*mongoPercent))
58+
opts = append(opts, mOpt)
59+
}
60+
recorder, err := eventrecorder.New(opts...)
5161
if err != nil {
5262
logger.Fatalw("Failed to instantiate recorder", "err", err)
5363
}

eventrecorder/config.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,17 @@ type (
1414
// pgxPoolConfig is instantiated by parsing config.dbDSN.
1515
pgxPoolConfig *pgxpool.Config
1616

17+
mongoEndpoint string
18+
mongoDB string
19+
mongoCollection string
20+
mongoPercentile float32
21+
1722
metrics *metrics.Metrics
1823
}
19-
option func(*config) error
24+
Option func(*config) error
2025
)
2126

22-
func newConfig(opts []option) (*config, error) {
27+
func newConfig(opts []Option) (*config, error) {
2328
cfg := &config{}
2429
for _, opt := range opts {
2530
if err := opt(cfg); err != nil {
@@ -37,14 +42,24 @@ func newConfig(opts []option) (*config, error) {
3742
return cfg, nil
3843
}
3944

40-
func WithDatabaseDSN(url string) option {
45+
func WithDatabaseDSN(url string) Option {
4146
return func(cfg *config) error {
4247
cfg.dbDSN = url
4348
return nil
4449
}
4550
}
4651

47-
func WithMetrics(metrics *metrics.Metrics) option {
52+
func WithMongoSubmissions(endpoint, db, collection string, percentage float32) Option {
53+
return func(c *config) error {
54+
c.mongoEndpoint = endpoint
55+
c.mongoDB = db
56+
c.mongoCollection = collection
57+
c.mongoPercentile = percentage
58+
return nil
59+
}
60+
}
61+
62+
func WithMetrics(metrics *metrics.Metrics) Option {
4863
return func(cfg *config) error {
4964
cfg.metrics = metrics
5065
return nil

eventrecorder/recorder.go

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,30 @@ package eventrecorder
33
import (
44
"context"
55
"fmt"
6+
"math/rand"
67
"time"
78

89
"github.com/filecoin-project/lassie/pkg/types"
910
"github.com/ipfs/go-log/v2"
1011
"github.com/jackc/pgx/v5"
1112
"github.com/jackc/pgx/v5/pgconn"
1213
"github.com/jackc/pgx/v5/pgxpool"
14+
"go.mongodb.org/mongo-driver/bson"
15+
"go.mongodb.org/mongo-driver/mongo"
16+
"go.mongodb.org/mongo-driver/mongo/options"
1317
)
1418

1519
var logger = log.Logger("lassie/eventrecorder")
1620

1721
type EventRecorder struct {
1822
cfg *config
1923
db *pgxpool.Pool
24+
25+
mongo *mongo.Client
26+
mc *mongo.Collection
2027
}
2128

22-
func New(opts ...option) (*EventRecorder, error) {
29+
func New(opts ...Option) (*EventRecorder, error) {
2330
cfg, err := newConfig(opts)
2431
if err != nil {
2532
return nil, fmt.Errorf("failed to apply option: %w", err)
@@ -207,6 +214,21 @@ func (r *EventRecorder) RecordAggregateEvents(ctx context.Context, events []Aggr
207214
attempts,
208215
)
209216
}
217+
if r.mongo != nil && rand.Float32() < r.cfg.mongoPercentile {
218+
_, err := r.mc.InsertOne(ctx, bson.D{
219+
{Key: "retrieval_id", Value: event.RetrievalID},
220+
{Key: "instance_id", Value: event.InstanceID},
221+
{Key: "storage_provider_id", Value: event.StorageProviderID},
222+
{Key: "time_to_first_byte_ms", Value: timeToFirstByte.Milliseconds()},
223+
{Key: "bandwidth_bytes_sec", Value: int64(event.Bandwidth)},
224+
{Key: "success", Value: event.Success},
225+
{Key: "start_time", Value: event.StartTime},
226+
{Key: "end_time", Value: event.EndTime},
227+
})
228+
if err != nil {
229+
logger.Infof("failed to report to mongo: %w", err)
230+
}
231+
}
210232
}
211233
batchResult := r.db.SendBatch(ctx, &batchQuery)
212234
err := batchResult.Close()
@@ -230,11 +252,33 @@ func (r *EventRecorder) Start(ctx context.Context) error {
230252
if err != nil {
231253
return fmt.Errorf("failed to instantiate database connection: %w", err)
232254
}
255+
256+
if r.cfg.mongoEndpoint != "" {
257+
r.mongo, err = mongo.NewClient(options.Client().ApplyURI(r.cfg.mongoEndpoint))
258+
if err != nil {
259+
return fmt.Errorf("failed to instantiate mongo database connection: %w", err)
260+
}
261+
timeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
262+
defer cancel()
263+
err = r.mongo.Connect(timeout)
264+
if err != nil {
265+
return fmt.Errorf("failed to connect to mongo: %w", err)
266+
}
267+
}
233268
return nil
234269
}
235270

236271
func (r *EventRecorder) Shutdown() {
237272
logger.Info("Closing database connection...")
238273
r.db.Close()
239274
logger.Info("Database connection closed successfully.")
275+
if r.mongo != nil {
276+
timeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
277+
defer cancel()
278+
err := r.mongo.Disconnect(timeout)
279+
if err != nil {
280+
logger.Warn("failed to close mongo connection: %v", err)
281+
}
282+
r.mc = r.mongo.Database(r.cfg.mongoDB).Collection(r.cfg.mongoCollection)
283+
}
240284
}

go.mod

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require (
99
github.com/jackc/pgx/v5 v5.3.1
1010
github.com/prometheus/client_golang v1.14.0
1111
github.com/stretchr/testify v1.8.2
12+
go.mongodb.org/mongo-driver v1.11.4
1213
go.opentelemetry.io/otel v1.14.0
1314
go.opentelemetry.io/otel/exporters/prometheus v0.37.0
1415
go.opentelemetry.io/otel/metric v0.37.0
@@ -37,6 +38,7 @@ require (
3738
github.com/go-logr/stdr v1.2.2 // indirect
3839
github.com/gogo/protobuf v1.3.2 // indirect
3940
github.com/golang/protobuf v1.5.2 // indirect
41+
github.com/golang/snappy v0.0.4 // indirect
4042
github.com/google/uuid v1.3.0 // indirect
4143
github.com/hannahhoward/cbor-gen-for v0.0.0-20230214144701-5d17c9d5243c // indirect
4244
github.com/hannahhoward/go-pubsub v1.0.0 // indirect
@@ -63,6 +65,7 @@ require (
6365
github.com/jbenet/goprocess v0.1.4 // indirect
6466
github.com/jpillora/backoff v1.0.0 // indirect
6567
github.com/json-iterator/go v1.1.12 // indirect
68+
github.com/klauspost/compress v1.16.0 // indirect
6669
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
6770
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
6871
github.com/libp2p/go-libp2p v0.26.1 // indirect
@@ -72,6 +75,7 @@ require (
7275
github.com/minio/sha256-simd v1.0.0 // indirect
7376
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
7477
github.com/modern-go/reflect2 v1.0.2 // indirect
78+
github.com/montanaflynn/stats v0.6.6 // indirect
7579
github.com/mr-tron/base58 v1.2.0 // indirect
7680
github.com/multiformats/go-base32 v0.1.0 // indirect
7781
github.com/multiformats/go-base36 v0.2.0 // indirect
@@ -82,6 +86,7 @@ require (
8286
github.com/multiformats/go-multistream v0.4.1 // indirect
8387
github.com/multiformats/go-varint v0.0.7 // indirect
8488
github.com/opentracing/opentracing-go v1.2.0 // indirect
89+
github.com/pkg/errors v0.9.1 // indirect
8590
github.com/pmezard/go-difflib v1.0.0 // indirect
8691
github.com/polydawn/refmt v0.89.0 // indirect
8792
github.com/prometheus/client_model v0.3.0 // indirect
@@ -91,7 +96,11 @@ require (
9196
github.com/spaolacci/murmur3 v1.1.0 // indirect
9297
github.com/urfave/cli/v2 v2.24.4 // indirect
9398
github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa // indirect
99+
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
100+
github.com/xdg-go/scram v1.1.1 // indirect
101+
github.com/xdg-go/stringprep v1.0.3 // indirect
94102
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
103+
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
95104
go.opentelemetry.io/otel/trace v1.14.0 // indirect
96105
go.uber.org/atomic v1.10.0 // indirect
97106
go.uber.org/multierr v1.9.0 // indirect

go.sum

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,11 @@ github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgj
9191
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
9292
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
9393
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
94+
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
95+
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
96+
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
9497
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
98+
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
9599
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
96100
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
97101
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -230,6 +234,9 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW
230234
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
231235
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
232236
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
237+
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
238+
github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4=
239+
github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
233240
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
234241
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
235242
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
@@ -272,6 +279,9 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
272279
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
273280
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
274281
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
282+
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
283+
github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ=
284+
github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
275285
github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8=
276286
github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
277287
github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
@@ -359,6 +369,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
359369
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
360370
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
361371
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
372+
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
373+
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
362374
github.com/tj/go-spin v1.1.0 h1:lhdWZsvImxvZ3q1C5OIB7d72DuOwP4O2NdBg9PyzNds=
363375
github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4=
364376
github.com/twmb/murmur3 v1.1.6 h1:mqrRot1BRxm+Yct+vavLMou2/iJt0tNVTTC0QoIjaZg=
@@ -388,17 +400,27 @@ github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa h1:EyA027ZA
388400
github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ=
389401
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E=
390402
github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM=
403+
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
404+
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
405+
github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=
406+
github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
407+
github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs=
408+
github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
391409
github.com/xlab/c-for-go v0.0.0-20200718154222-87b0065af829/go.mod h1:h/1PEBwj7Ym/8kOuMWvO2ujZ6Lt+TMbySEXNhjjR87I=
392410
github.com/xlab/c-for-go v0.0.0-20201112171043-ea6dce5809cb h1:/7/dQyiKnxAOj9L69FhST7uMe17U015XPzX7cy+5ykM=
393411
github.com/xlab/pkgconfig v0.0.0-20170226114623-cea12a0fd245 h1:Sw125DKxZhPUI4JLlWugkzsrlB50jR9v2khiD9FxuSo=
394412
github.com/xlab/pkgconfig v0.0.0-20170226114623-cea12a0fd245/go.mod h1:C+diUUz7pxhNY6KAoLgrTYARGWnt82zWTylZlxT92vk=
395413
github.com/xorcare/golden v0.6.0/go.mod h1:7T39/ZMvaSEZlBPoYfVFmsBLmUl3uz9IuzWj/U6FtvQ=
396414
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
397415
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
416+
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
417+
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
398418
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
399419
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
400420
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
401421
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
422+
go.mongodb.org/mongo-driver v1.11.4 h1:4ayjakA013OdpGyL2K3ZqylTac/rMjrJOMZ1EHizXas=
423+
go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g=
402424
go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM=
403425
go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU=
404426
go.opentelemetry.io/otel/exporters/prometheus v0.37.0 h1:NQc0epfL0xItsmGgSXgfbH2C1fq2VLXkZoDFsfRNHpc=
@@ -440,6 +462,7 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
440462
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
441463
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
442464
golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
465+
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
443466
golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
444467
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
445468
golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2 h1:Jvc7gsqn21cJHCmAWx0LiimpP18LZmUxkT5Mp7EZ1mI=
@@ -460,6 +483,7 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R
460483
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
461484
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
462485
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
486+
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
463487
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
464488
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
465489
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -482,7 +506,9 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
482506
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
483507
golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
484508
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
509+
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
485510
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
511+
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
486512
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
487513
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
488514
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -492,6 +518,8 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXR
492518
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
493519
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
494520
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
521+
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
522+
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
495523
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
496524
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
497525
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

0 commit comments

Comments
 (0)