MM-27613: Update dependencies (#15294)
https://mattermost.atlassian.net/browse/MM-27613
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
54f86e7fb1
Коммит
f2a8e10216
57
go.mod
57
go.mod
@@ -5,14 +5,13 @@ go 1.14
|
|||||||
require (
|
require (
|
||||||
github.com/Masterminds/squirrel v1.4.0
|
github.com/Masterminds/squirrel v1.4.0
|
||||||
github.com/NYTimes/gziphandler v1.1.1
|
github.com/NYTimes/gziphandler v1.1.1
|
||||||
github.com/RoaringBitmap/roaring v0.4.23 // indirect
|
github.com/RoaringBitmap/roaring v0.5.0 // indirect
|
||||||
github.com/armon/go-metrics v0.3.3 // indirect
|
github.com/armon/go-metrics v0.3.4 // indirect
|
||||||
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1
|
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1
|
||||||
github.com/beevik/etree v1.1.0 // indirect
|
github.com/beevik/etree v1.1.0 // indirect
|
||||||
github.com/blang/semver v3.5.1+incompatible
|
github.com/blang/semver v3.5.1+incompatible
|
||||||
github.com/blevesearch/bleve v1.0.9
|
github.com/blevesearch/bleve v1.0.9
|
||||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
|
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
|
||||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd // indirect
|
|
||||||
github.com/corpix/uarand v0.1.1 // indirect
|
github.com/corpix/uarand v0.1.1 // indirect
|
||||||
github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d // indirect
|
github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d // indirect
|
||||||
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect
|
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect
|
||||||
@@ -27,25 +26,25 @@ require (
|
|||||||
github.com/fortytw2/leaktest v1.3.0 // indirect
|
github.com/fortytw2/leaktest v1.3.0 // indirect
|
||||||
github.com/francoispqt/gojay v1.2.13
|
github.com/francoispqt/gojay v1.2.13
|
||||||
github.com/fsnotify/fsnotify v1.4.9
|
github.com/fsnotify/fsnotify v1.4.9
|
||||||
github.com/getsentry/sentry-go v0.6.1
|
github.com/getsentry/sentry-go v0.7.0
|
||||||
github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a // indirect
|
github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a // indirect
|
||||||
github.com/go-asn1-ber/asn1-ber v1.5.1 // indirect
|
github.com/go-asn1-ber/asn1-ber v1.5.1 // indirect
|
||||||
github.com/go-sql-driver/mysql v1.5.0
|
github.com/go-sql-driver/mysql v1.5.0
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
||||||
|
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
|
||||||
github.com/gorilla/handlers v1.4.2
|
github.com/gorilla/handlers v1.4.2
|
||||||
github.com/gorilla/mux v1.7.4
|
github.com/gorilla/mux v1.7.4
|
||||||
github.com/gorilla/schema v1.1.0
|
github.com/gorilla/schema v1.1.0
|
||||||
github.com/gorilla/websocket v1.4.2
|
github.com/gorilla/websocket v1.4.2
|
||||||
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
|
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
|
||||||
github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c
|
github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c
|
||||||
github.com/hako/durafmt v0.0.0-20200605151348-3a43fc422dd9
|
github.com/hako/durafmt v0.0.0-20200710122514-c0fb7b4da026
|
||||||
github.com/hashicorp/go-hclog v0.14.1
|
github.com/hashicorp/go-hclog v0.14.1
|
||||||
github.com/hashicorp/go-immutable-radix v1.2.0 // indirect
|
github.com/hashicorp/go-immutable-radix v1.2.0 // indirect
|
||||||
github.com/hashicorp/go-msgpack v1.1.5 // indirect
|
github.com/hashicorp/go-msgpack v1.1.5 // indirect
|
||||||
github.com/hashicorp/go-multierror v1.1.0
|
github.com/hashicorp/go-multierror v1.1.0
|
||||||
github.com/hashicorp/go-plugin v1.3.0
|
github.com/hashicorp/go-plugin v1.3.0
|
||||||
github.com/hashicorp/go-sockaddr v1.0.2 // indirect
|
github.com/hashicorp/go-sockaddr v1.0.2 // indirect
|
||||||
github.com/hashicorp/go-uuid v1.0.1 // indirect
|
|
||||||
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
||||||
github.com/hashicorp/memberlist v0.2.2
|
github.com/hashicorp/memberlist v0.2.2
|
||||||
github.com/hashicorp/yamux v0.0.0-20200609203250-aecfd211c9ce // indirect
|
github.com/hashicorp/yamux v0.0.0-20200609203250-aecfd211c9ce // indirect
|
||||||
@@ -53,10 +52,10 @@ require (
|
|||||||
github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7
|
github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7
|
||||||
github.com/jmhodges/levigo v1.0.0 // indirect
|
github.com/jmhodges/levigo v1.0.0 // indirect
|
||||||
github.com/jmoiron/sqlx v1.2.0
|
github.com/jmoiron/sqlx v1.2.0
|
||||||
github.com/jonboulle/clockwork v0.1.0
|
github.com/jonboulle/clockwork v0.2.0 // indirect
|
||||||
github.com/lib/pq v1.7.0
|
github.com/lib/pq v1.8.0
|
||||||
github.com/magiconair/properties v1.8.1 // indirect
|
github.com/magiconair/properties v1.8.1 // indirect
|
||||||
github.com/mailru/easyjson v0.7.1 // indirect
|
github.com/mailru/easyjson v0.7.3 // indirect
|
||||||
github.com/mattermost/go-i18n v1.11.0
|
github.com/mattermost/go-i18n v1.11.0
|
||||||
github.com/mattermost/gorp v1.6.2-0.20200624165429-2595d5e54111
|
github.com/mattermost/gorp v1.6.2-0.20200624165429-2595d5e54111
|
||||||
github.com/mattermost/gosaml2 v0.3.2
|
github.com/mattermost/gosaml2 v0.3.2
|
||||||
@@ -67,21 +66,22 @@ require (
|
|||||||
github.com/mattn/go-colorable v0.1.7 // indirect
|
github.com/mattn/go-colorable v0.1.7 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.9 // indirect
|
github.com/mattn/go-runewidth v0.0.9 // indirect
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible
|
||||||
github.com/miekg/dns v1.1.29 // indirect
|
github.com/miekg/dns v1.1.31 // indirect
|
||||||
github.com/minio/minio-go/v7 v7.0.3
|
github.com/minio/minio-go/v7 v7.0.4
|
||||||
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
|
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
|
||||||
github.com/mitchellh/mapstructure v1.3.2 // indirect
|
github.com/mitchellh/mapstructure v1.3.3 // indirect
|
||||||
github.com/muesli/smartcrop v0.3.0 // indirect
|
github.com/muesli/smartcrop v0.3.0 // indirect
|
||||||
github.com/oklog/run v1.1.0 // indirect
|
github.com/oklog/run v1.1.0 // indirect
|
||||||
github.com/olekukonko/tablewriter v0.0.4 // indirect
|
github.com/olekukonko/tablewriter v0.0.4 // indirect
|
||||||
github.com/olivere/elastic v6.2.33+incompatible // indirect
|
github.com/olivere/elastic v6.2.34+incompatible // indirect
|
||||||
github.com/oov/psd v0.0.0-20200705094106-99303fb2511f
|
github.com/oov/psd v0.0.0-20200705094106-99303fb2511f
|
||||||
github.com/opentracing/opentracing-go v1.1.0
|
github.com/opentracing/opentracing-go v1.2.0
|
||||||
github.com/pborman/uuid v1.2.0
|
github.com/pborman/uuid v1.2.1
|
||||||
github.com/pelletier/go-toml v1.8.0 // indirect
|
github.com/pelletier/go-toml v1.8.0 // indirect
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/prometheus/client_golang v1.7.1
|
github.com/prometheus/client_golang v1.7.1
|
||||||
github.com/prometheus/client_model v0.2.0
|
github.com/prometheus/client_model v0.2.0 // indirect
|
||||||
|
github.com/prometheus/common v0.12.0 // indirect
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 // indirect
|
github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 // indirect
|
||||||
github.com/rs/cors v1.7.0
|
github.com/rs/cors v1.7.0
|
||||||
github.com/rudderlabs/analytics-go v3.2.1+incompatible
|
github.com/rudderlabs/analytics-go v3.2.1+incompatible
|
||||||
@@ -90,43 +90,46 @@ require (
|
|||||||
github.com/segmentio/backo-go v0.0.0-20200129164019-23eae7c10bd3 // indirect
|
github.com/segmentio/backo-go v0.0.0-20200129164019-23eae7c10bd3 // indirect
|
||||||
github.com/sirupsen/logrus v1.6.0
|
github.com/sirupsen/logrus v1.6.0
|
||||||
github.com/smartystreets/assertions v1.0.0 // indirect
|
github.com/smartystreets/assertions v1.0.0 // indirect
|
||||||
github.com/spf13/afero v1.3.1 // indirect
|
github.com/spf13/afero v1.3.4 // indirect
|
||||||
github.com/spf13/cast v1.3.1 // indirect
|
github.com/spf13/cast v1.3.1 // indirect
|
||||||
github.com/spf13/cobra v1.0.0
|
github.com/spf13/cobra v1.0.0
|
||||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
|
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
|
||||||
github.com/stretchr/objx v0.2.0 // indirect
|
github.com/stretchr/objx v0.3.0 // indirect
|
||||||
github.com/stretchr/testify v1.6.1
|
github.com/stretchr/testify v1.6.1
|
||||||
github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect
|
github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect
|
||||||
github.com/throttled/throttled v2.2.4+incompatible
|
github.com/throttled/throttled v2.2.5+incompatible
|
||||||
github.com/tinylib/msgp v1.1.2
|
github.com/tinylib/msgp v1.1.2
|
||||||
github.com/tylerb/graceful v1.2.15
|
github.com/tylerb/graceful v1.2.15
|
||||||
github.com/uber/jaeger-client-go v2.24.0+incompatible
|
github.com/uber/jaeger-client-go v2.25.0+incompatible
|
||||||
github.com/uber/jaeger-lib v2.2.0+incompatible
|
github.com/uber/jaeger-lib v2.2.0+incompatible
|
||||||
github.com/vmihailenco/msgpack/v5 v5.0.0-beta.1
|
github.com/vmihailenco/msgpack/v5 v5.0.0-beta.1
|
||||||
github.com/wiggin77/merror v1.0.2
|
github.com/wiggin77/merror v1.0.2
|
||||||
github.com/wiggin77/srslog v1.0.1
|
github.com/wiggin77/srslog v1.0.1
|
||||||
|
github.com/willf/bitset v1.1.11 // indirect
|
||||||
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect
|
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect
|
||||||
go.etcd.io/bbolt v1.3.5 // indirect
|
go.etcd.io/bbolt v1.3.5 // indirect
|
||||||
go.uber.org/zap v1.15.0
|
go.uber.org/zap v1.15.0
|
||||||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de
|
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de
|
||||||
golang.org/x/image v0.0.0-20200618115811-c13761719519
|
golang.org/x/image v0.0.0-20200801110659-972c09e46d76
|
||||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
|
golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
|
||||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381
|
golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc
|
||||||
golang.org/x/sys v0.0.0-20200805065543-0cf7623e9dbd // indirect
|
golang.org/x/sys v0.0.0-20200817155316-9781c653f443 // indirect
|
||||||
golang.org/x/text v0.3.3
|
golang.org/x/text v0.3.3
|
||||||
golang.org/x/tools v0.0.0-20200806022845-90696ccdc692
|
golang.org/x/tools v0.0.0-20200818005847-188abfa75333
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||||
google.golang.org/appengine v1.6.6 // indirect
|
google.golang.org/appengine v1.6.6 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5 // indirect
|
google.golang.org/genproto v0.0.0-20200815001618-f69a88009b70 // indirect
|
||||||
google.golang.org/grpc v1.30.0 // indirect
|
google.golang.org/grpc v1.31.0 // indirect
|
||||||
google.golang.org/protobuf v1.25.0 // indirect
|
google.golang.org/protobuf v1.25.0 // indirect
|
||||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||||
|
gopkg.in/ini.v1 v1.60.0 // indirect
|
||||||
gopkg.in/mail.v2 v2.3.1
|
gopkg.in/mail.v2 v2.3.1
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0
|
||||||
gopkg.in/olivere/elastic.v6 v6.2.33
|
gopkg.in/olivere/elastic.v6 v6.2.34
|
||||||
gopkg.in/yaml.v2 v2.3.0
|
gopkg.in/yaml.v2 v2.3.0
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3 // indirect
|
honnef.co/go/tools v0.0.1-2020.1.3 // indirect
|
||||||
willnorris.com/go/imageproxy v0.10.0
|
willnorris.com/go/imageproxy v0.10.0
|
||||||
)
|
)
|
||||||
|
|||||||
228
go.sum
228
go.sum
@@ -20,6 +20,7 @@ github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mo
|
|||||||
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||||
github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
|
github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
|
||||||
github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM=
|
github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM=
|
||||||
|
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
|
||||||
github.com/Masterminds/glide v0.13.2/go.mod h1:STyF5vcenH/rUqTEv+/hBXlSTo7KYwg2oc2f4tzPWic=
|
github.com/Masterminds/glide v0.13.2/go.mod h1:STyF5vcenH/rUqTEv+/hBXlSTo7KYwg2oc2f4tzPWic=
|
||||||
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
||||||
github.com/Masterminds/squirrel v1.4.0 h1:he5i/EXixZxrBUWcxzDYMiju9WZ3ld/l7QBNuo/eN3w=
|
github.com/Masterminds/squirrel v1.4.0 h1:he5i/EXixZxrBUWcxzDYMiju9WZ3ld/l7QBNuo/eN3w=
|
||||||
@@ -31,27 +32,36 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE
|
|||||||
github.com/PaulARoy/azurestoragecache v0.0.0-20170906084534-3c249a3ba788/go.mod h1:lY1dZd8HBzJ10eqKERHn3CU59tfhzcAVb2c0ZhIWSOk=
|
github.com/PaulARoy/azurestoragecache v0.0.0-20170906084534-3c249a3ba788/go.mod h1:lY1dZd8HBzJ10eqKERHn3CU59tfhzcAVb2c0ZhIWSOk=
|
||||||
github.com/RoaringBitmap/roaring v0.4.21 h1:WJ/zIlNX4wQZ9x8Ey33O1UaD9TCTakYsdLFSBcTwH+8=
|
github.com/RoaringBitmap/roaring v0.4.21 h1:WJ/zIlNX4wQZ9x8Ey33O1UaD9TCTakYsdLFSBcTwH+8=
|
||||||
github.com/RoaringBitmap/roaring v0.4.21/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
|
github.com/RoaringBitmap/roaring v0.4.21/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
|
||||||
github.com/RoaringBitmap/roaring v0.4.23 h1:gpyfd12QohbqhFO4NVDUdoPOCXsyahYRQhINmlHxKeo=
|
github.com/RoaringBitmap/roaring v0.5.0 h1:0psZZWU0J2AUl29BAylpHAsuBEEhCEfTKl2v5yHtXIg=
|
||||||
github.com/RoaringBitmap/roaring v0.4.23/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
|
github.com/RoaringBitmap/roaring v0.5.0/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
|
||||||
github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0=
|
github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0=
|
||||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
||||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
||||||
|
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=
|
||||||
github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
|
github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
|
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
|
||||||
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
|
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
|
||||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
||||||
|
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
||||||
|
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
|
||||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=
|
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=
|
||||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||||
github.com/armon/go-metrics v0.3.3 h1:a9F4rlj7EWWrbj7BYw8J8+x+ZZkJeqzNyRk8hdPF+ro=
|
github.com/armon/go-metrics v0.3.4 h1:Xqf+7f2Vhl9tsqDYmXhnXInUdcrtgpRNpIA15/uldSc=
|
||||||
github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
github.com/armon/go-metrics v0.3.4/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||||
|
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
|
||||||
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1 h1:9h8f71kuF1pqovnn9h7LTHLEjxzyQaj0j1rQq5nsMM4=
|
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1 h1:9h8f71kuF1pqovnn9h7LTHLEjxzyQaj0j1rQq5nsMM4=
|
||||||
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1/go.mod h1:noBAuukeYOXa0aXGqxr24tADqkwDO2KRD15FsuaZ5a8=
|
github.com/avct/uasurfer v0.0.0-20191028135549-26b5daa857f1/go.mod h1:noBAuukeYOXa0aXGqxr24tADqkwDO2KRD15FsuaZ5a8=
|
||||||
|
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
|
||||||
github.com/aws/aws-sdk-go v1.19.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
github.com/aws/aws-sdk-go v1.19.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||||
|
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||||
|
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
||||||
github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
|
github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
|
||||||
github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs=
|
github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs=
|
||||||
github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
|
github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
|
||||||
@@ -88,6 +98,8 @@ github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4Yn
|
|||||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
||||||
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
|
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
|
||||||
github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
|
github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
|
||||||
|
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
||||||
|
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
||||||
@@ -96,8 +108,10 @@ github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+
|
|||||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
|
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
|
||||||
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
||||||
|
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
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-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
|
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=
|
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=
|
||||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
||||||
github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA=
|
github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA=
|
||||||
@@ -106,8 +120,10 @@ github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkE
|
|||||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
||||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||||
|
github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||||
github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||||
|
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
github.com/corpix/uarand v0.1.1 h1:RMr1TWc9F4n5jiPDzFHtmaUXLKLNUFK0SgCLo4BhX/U=
|
github.com/corpix/uarand v0.1.1 h1:RMr1TWc9F4n5jiPDzFHtmaUXLKLNUFK0SgCLo4BhX/U=
|
||||||
github.com/corpix/uarand v0.1.1/go.mod h1:SFKZvkcRoLqVRFZ4u25xPmp6m9ktANfbpXZ7SJ0/FNU=
|
github.com/corpix/uarand v0.1.1/go.mod h1:SFKZvkcRoLqVRFZ4u25xPmp6m9ktANfbpXZ7SJ0/FNU=
|
||||||
@@ -116,7 +132,9 @@ github.com/couchbase/moss v0.1.0/go.mod h1:9MaHIaRuy9pvLPUJxB8sh8OrLfyDczECVL37g
|
|||||||
github.com/couchbase/vellum v1.0.1 h1:qrj9ohvZedvc51S5KzPfJ6P6z0Vqzv7Lx7k3mVc2WOk=
|
github.com/couchbase/vellum v1.0.1 h1:qrj9ohvZedvc51S5KzPfJ6P6z0Vqzv7Lx7k3mVc2WOk=
|
||||||
github.com/couchbase/vellum v1.0.1/go.mod h1:FcwrEivFpNi24R3jLOs3n+fs5RnuQnQqCLBJ1uAg1W4=
|
github.com/couchbase/vellum v1.0.1/go.mod h1:FcwrEivFpNi24R3jLOs3n+fs5RnuQnQqCLBJ1uAg1W4=
|
||||||
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
|
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
|
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||||
github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d h1:SwD98825d6bdB+pEuTxWOXiSjBrHdOl/UVp75eI7JT8=
|
github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d h1:SwD98825d6bdB+pEuTxWOXiSjBrHdOl/UVp75eI7JT8=
|
||||||
github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8=
|
github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8=
|
||||||
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso=
|
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso=
|
||||||
@@ -138,13 +156,16 @@ github.com/disintegration/imaging v1.6.0/go.mod h1:xuIt+sRxDFrHS0drzXUlCJthkJ8k7
|
|||||||
github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
|
github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
|
||||||
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
|
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
|
||||||
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
|
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
|
||||||
|
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/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||||
github.com/dyatlov/go-opengraph v0.0.0-20180429202543-816b6608b3c8 h1:6muCmMJat6z7qptVrIf/+OWPxsjAfvhw5/6t+FwEkgg=
|
github.com/dyatlov/go-opengraph v0.0.0-20180429202543-816b6608b3c8 h1:6muCmMJat6z7qptVrIf/+OWPxsjAfvhw5/6t+FwEkgg=
|
||||||
github.com/dyatlov/go-opengraph v0.0.0-20180429202543-816b6608b3c8/go.mod h1:nYia/MIs9OyvXXYboPmNOj0gVWo97Wx0sde+ZuKkoM4=
|
github.com/dyatlov/go-opengraph v0.0.0-20180429202543-816b6608b3c8/go.mod h1:nYia/MIs9OyvXXYboPmNOj0gVWo97Wx0sde+ZuKkoM4=
|
||||||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
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/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
|
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473 h1:4cmBvAEBNJaGARUEs3/suWRyfyBfhf7I60WBZq+bv2w=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473 h1:4cmBvAEBNJaGARUEs3/suWRyfyBfhf7I60WBZq+bv2w=
|
||||||
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.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
@@ -170,14 +191,16 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8
|
|||||||
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
|
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
|
||||||
github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk=
|
github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk=
|
||||||
github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY=
|
github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY=
|
||||||
|
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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
|
github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
|
||||||
github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc=
|
github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc=
|
||||||
github.com/getsentry/sentry-go v0.6.1 h1:K84dY1/57OtWhdyr5lbU78Q/+qgzkEyGc/ud+Sipi5k=
|
github.com/getsentry/sentry-go v0.7.0 h1:MR2yfR4vFfv/2+iBuSnkdQwVg7N9cJzihZ6KJu7srwQ=
|
||||||
github.com/getsentry/sentry-go v0.6.1/go.mod h1:0yZBuzSvbZwBnvaF9VwZIMen3kXscY8/uasKtAX1qG8=
|
github.com/getsentry/sentry-go v0.7.0/go.mod h1:pLFpD2Y5RHIKF9Bw3KH6/68DeN2K/XBJd8awjdPnUwg=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
|
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
|
||||||
github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
|
github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
|
||||||
@@ -197,8 +220,10 @@ github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6
|
|||||||
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
|
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
|
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
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-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8=
|
github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8=
|
||||||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||||
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
||||||
@@ -207,6 +232,7 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me
|
|||||||
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
|
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
|
||||||
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
|
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
|
||||||
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
|
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
|
||||||
|
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=
|
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||||
@@ -214,7 +240,9 @@ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF0
|
|||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
|
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
|
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E=
|
github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E=
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
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.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
@@ -266,14 +294,18 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
|
|||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 h1:twflg0XRTjwKpxb/jFExr4HGq6on2dEOmnL6FV+fgPw=
|
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 h1:twflg0XRTjwKpxb/jFExr4HGq6on2dEOmnL6FV+fgPw=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
|
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
|
||||||
|
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||||
github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg=
|
github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg=
|
||||||
github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
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.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
|
github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
|
||||||
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||||
github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY=
|
github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY=
|
||||||
github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
|
github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
|
||||||
|
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.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
@@ -283,18 +315,23 @@ github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc/go.mod h1:Fecb
|
|||||||
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
|
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
|
||||||
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
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=
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
|
github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
|
github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
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/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c h1:fEE5/5VNnYUoBOj2I9TP8Jc+a7lge3QWn9DKE7NCwfc=
|
github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c h1:fEE5/5VNnYUoBOj2I9TP8Jc+a7lge3QWn9DKE7NCwfc=
|
||||||
github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c/go.mod h1:ObS/W+h8RYb1Y7fYivughjxojTmIu5iAIjSrSLCLeqE=
|
github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c/go.mod h1:ObS/W+h8RYb1Y7fYivughjxojTmIu5iAIjSrSLCLeqE=
|
||||||
github.com/hako/durafmt v0.0.0-20200605151348-3a43fc422dd9 h1:IEhIezS5kcD4ZzOwVl8dAyJ9JCi4Xo6tg44Vj/z7UsI=
|
github.com/hako/durafmt v0.0.0-20200710122514-c0fb7b4da026 h1:BpJ2o0OR5FV7vrkDYfXYVJQeMNWa8RhklZOpW2ITAIQ=
|
||||||
github.com/hako/durafmt v0.0.0-20200605151348-3a43fc422dd9/go.mod h1:5Scbynm8dF1XAPwIwkGPqzkM/shndPm79Jd1003hTjE=
|
github.com/hako/durafmt v0.0.0-20200710122514-c0fb7b4da026/go.mod h1:5Scbynm8dF1XAPwIwkGPqzkM/shndPm79Jd1003hTjE=
|
||||||
|
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
|
||||||
|
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
|
||||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
||||||
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
|
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
|
||||||
github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU=
|
github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU=
|
||||||
github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
||||||
@@ -313,14 +350,17 @@ github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+
|
|||||||
github.com/hashicorp/go-plugin v1.3.0 h1:4d/wJojzvHV1I4i/rrjVaeuyxWrLzDE1mDCyDy8fXS8=
|
github.com/hashicorp/go-plugin v1.3.0 h1:4d/wJojzvHV1I4i/rrjVaeuyxWrLzDE1mDCyDy8fXS8=
|
||||||
github.com/hashicorp/go-plugin v1.3.0/go.mod h1:F9eH4LrE/ZsRdbwhfjs9k9HoDUwAHnYtXdgmf1AVNs0=
|
github.com/hashicorp/go-plugin v1.3.0/go.mod h1:F9eH4LrE/ZsRdbwhfjs9k9HoDUwAHnYtXdgmf1AVNs0=
|
||||||
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
||||||
|
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-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
||||||
github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
|
github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
|
||||||
github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
|
github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
|
||||||
|
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
|
||||||
github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM=
|
github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM=
|
||||||
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||||
github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=
|
github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=
|
||||||
github.com/hashicorp/go-uuid v1.0.1/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-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
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 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
|
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
|
||||||
@@ -329,18 +369,24 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l
|
|||||||
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||||
|
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
|
||||||
|
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
|
||||||
|
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
||||||
github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g=
|
github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g=
|
||||||
github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
|
github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
|
||||||
|
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
|
||||||
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
||||||
github.com/hashicorp/yamux v0.0.0-20200609203250-aecfd211c9ce h1:7UnVY3T/ZnHUrfviiAgIUjg2PXxsQfs5bphsG8F7Keo=
|
github.com/hashicorp/yamux v0.0.0-20200609203250-aecfd211c9ce h1:7UnVY3T/ZnHUrfviiAgIUjg2PXxsQfs5bphsG8F7Keo=
|
||||||
github.com/hashicorp/yamux v0.0.0-20200609203250-aecfd211c9ce/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
github.com/hashicorp/yamux v0.0.0-20200609203250-aecfd211c9ce/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
||||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
|
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
|
||||||
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428 h1:Mo9W14pwbO9VfRe+ygqZ8dFbPpoIK1HFrG/zjTuQ+nc=
|
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428 h1:Mo9W14pwbO9VfRe+ygqZ8dFbPpoIK1HFrG/zjTuQ+nc=
|
||||||
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428/go.mod h1:uhpZMVGznybq1itEKXj6RYw9I71qK4kH+OGMjRC4KEo=
|
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428/go.mod h1:uhpZMVGznybq1itEKXj6RYw9I71qK4kH+OGMjRC4KEo=
|
||||||
github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA=
|
github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
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/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI=
|
github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI=
|
||||||
github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0=
|
github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0=
|
||||||
github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI=
|
github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI=
|
||||||
@@ -358,7 +404,14 @@ github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
|
|||||||
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
|
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
|
||||||
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
|
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
|
||||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||||
|
github.com/jonboulle/clockwork v0.2.0 h1:J2SLSdy7HgElq8ekSl2Mxh6vrRNFxqbXGenYH2I02Vs=
|
||||||
|
github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
|
||||||
|
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||||
|
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||||
|
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||||
|
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
|
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
|
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
|
||||||
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
|
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
|
||||||
@@ -370,6 +423,7 @@ github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0b
|
|||||||
github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U=
|
github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U=
|
||||||
github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
|
github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
|
||||||
github.com/julienschmidt/httprouter v1.2.0/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=
|
github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
|
||||||
github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk=
|
github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk=
|
||||||
github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U=
|
github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U=
|
||||||
@@ -406,16 +460,19 @@ github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6Fm
|
|||||||
github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
|
github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
|
||||||
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
github.com/lib/pq v1.7.0 h1:h93mCPfUSkaul3Ka/VG8uZdmW1uMHDGxzu0NWHuJmHY=
|
github.com/lib/pq v1.8.0 h1:9xohqzkUwzR4Ga4ivdTcawVS89YSDVxXMa3xJX3cGzg=
|
||||||
github.com/lib/pq v1.7.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
|
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 v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
|
github.com/lunixbochs/vtclean v1.0.0/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.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
|
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
|
||||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
|
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
|
||||||
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||||
github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8=
|
github.com/mailru/easyjson v0.7.3 h1:M6wcO9gFHCIPynXGu4iA+NMs//FCgFUWR2jxqV3/+Xk=
|
||||||
github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
github.com/mailru/easyjson v0.7.3/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||||
github.com/marstr/guid v0.0.0-20170427235115-8bdf7d1a087c/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
|
github.com/marstr/guid v0.0.0-20170427235115-8bdf7d1a087c/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
|
||||||
github.com/mattermost/go-i18n v1.11.0 h1:1hLKqn/ZvhZ80OekjVPGYcCrBfMz+YxNNgqS+beL7zE=
|
github.com/mattermost/go-i18n v1.11.0 h1:1hLKqn/ZvhZ80OekjVPGYcCrBfMz+YxNNgqS+beL7zE=
|
||||||
github.com/mattermost/go-i18n v1.11.0/go.mod h1:RyS7FDNQlzF1PsjbJWHRI35exqaKGSO9qD4iv8QjE34=
|
github.com/mattermost/go-i18n v1.11.0/go.mod h1:RyS7FDNQlzF1PsjbJWHRI35exqaKGSO9qD4iv8QjE34=
|
||||||
@@ -425,8 +482,6 @@ github.com/mattermost/gosaml2 v0.3.2 h1:kq2dY5qUe6fPPHra171GVlgo+ycBsEog0gZMetxL
|
|||||||
github.com/mattermost/gosaml2 v0.3.2/go.mod h1:Z429EIOiEi9kbq6yHoApfzlcXpa6dzRDc6pO+Vy2Ksk=
|
github.com/mattermost/gosaml2 v0.3.2/go.mod h1:Z429EIOiEi9kbq6yHoApfzlcXpa6dzRDc6pO+Vy2Ksk=
|
||||||
github.com/mattermost/ldap v0.0.0-20191128190019-9f62ba4b8d4d h1:2DV7VIlEv6J5R5o6tUcb3ZMKJYeeZuWZL7Rv1m23TgQ=
|
github.com/mattermost/ldap v0.0.0-20191128190019-9f62ba4b8d4d h1:2DV7VIlEv6J5R5o6tUcb3ZMKJYeeZuWZL7Rv1m23TgQ=
|
||||||
github.com/mattermost/ldap v0.0.0-20191128190019-9f62ba4b8d4d/go.mod h1:HLbgMEI5K131jpxGazJ97AxfPDt31osq36YS1oxFQPQ=
|
github.com/mattermost/ldap v0.0.0-20191128190019-9f62ba4b8d4d/go.mod h1:HLbgMEI5K131jpxGazJ97AxfPDt31osq36YS1oxFQPQ=
|
||||||
github.com/mattermost/logr v1.0.8 h1:Frkfo+FXGOShiSN3pljflqEMS9AKGySdTHHu36MYPXU=
|
|
||||||
github.com/mattermost/logr v1.0.8/go.mod h1:Mt4DPu1NXMe6JxPdwCC0XBoxXmN9eXOIRPoZarU2PXs=
|
|
||||||
github.com/mattermost/logr v1.0.9 h1:jw6f6CjPC2YfPqzpGVM/vCGuqKLJdVS400ZRTFtEQwQ=
|
github.com/mattermost/logr v1.0.9 h1:jw6f6CjPC2YfPqzpGVM/vCGuqKLJdVS400ZRTFtEQwQ=
|
||||||
github.com/mattermost/logr v1.0.9/go.mod h1:Mt4DPu1NXMe6JxPdwCC0XBoxXmN9eXOIRPoZarU2PXs=
|
github.com/mattermost/logr v1.0.9/go.mod h1:Mt4DPu1NXMe6JxPdwCC0XBoxXmN9eXOIRPoZarU2PXs=
|
||||||
github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0 h1:G9tL6JXRBMzjuD1kkBtcnd42kUiT6QDwxfFYu7adM6o=
|
github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0 h1:G9tL6JXRBMzjuD1kkBtcnd42kUiT6QDwxfFYu7adM6o=
|
||||||
@@ -440,6 +495,7 @@ github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc
|
|||||||
github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw=
|
github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw=
|
||||||
github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||||
github.com/mattn/go-isatty v0.0.3/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.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
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.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
|
||||||
@@ -448,6 +504,7 @@ github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcME
|
|||||||
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
|
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
|
||||||
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
||||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
|
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||||
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||||
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
|
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
|
||||||
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||||
@@ -461,26 +518,32 @@ github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.
|
|||||||
github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ=
|
github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ=
|
||||||
github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
|
github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
|
||||||
github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
|
github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
|
||||||
|
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||||
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
|
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
|
||||||
github.com/miekg/dns v1.1.29 h1:xHBEhR+t5RzcFJjBLJlax2daXOrTYtr9z4WdKEfWFzg=
|
github.com/miekg/dns v1.1.31 h1:sJFOl9BgwbYAWOGEwr61FU28pqsBNdpRBnhGXtO06Oo=
|
||||||
github.com/miekg/dns v1.1.29/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
|
github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
|
||||||
github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4=
|
github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4=
|
||||||
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
|
||||||
github.com/minio/minio-go/v7 v7.0.3 h1:a2VHaXDlKBcB3J5XJhKVfWBRi1+ZmMWFXABQ8TLlWbA=
|
github.com/minio/minio-go/v7 v7.0.4 h1:M9glnGclD87VfttesWzURw7SHqq1XDIYGrfTykBTI50=
|
||||||
github.com/minio/minio-go/v7 v7.0.3/go.mod h1:TA0CQCjJZHM5SJj9IjqR0NmpmQJ6bCbXifAJ3mUU6Hw=
|
github.com/minio/minio-go/v7 v7.0.4/go.mod h1:CSt2ETZNs+bIIhWTse0mcZKZWMGrFU7Er7RR0TmkDYk=
|
||||||
github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
|
github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
|
||||||
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
|
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
|
||||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
||||||
|
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
|
github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
|
||||||
|
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
|
||||||
github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
|
github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
|
||||||
github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
|
github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
|
||||||
github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
|
github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
|
||||||
|
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
|
||||||
|
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
|
||||||
|
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
|
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
|
||||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg=
|
github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8=
|
||||||
github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
@@ -497,8 +560,15 @@ github.com/muesli/smartcrop v0.2.1-0.20181030220600-548bbf0c0965/go.mod h1:i2fCI
|
|||||||
github.com/muesli/smartcrop v0.3.0 h1:JTlSkmxWg/oQ1TcLDoypuirdE8Y/jzNirQeLkxpA6Oc=
|
github.com/muesli/smartcrop v0.3.0 h1:JTlSkmxWg/oQ1TcLDoypuirdE8Y/jzNirQeLkxpA6Oc=
|
||||||
github.com/muesli/smartcrop v0.3.0/go.mod h1:i2fCI/UorTfgEpPPLWiFBv4pye+YAG78RwcQLUkocpI=
|
github.com/muesli/smartcrop v0.3.0/go.mod h1:i2fCI/UorTfgEpPPLWiFBv4pye+YAG78RwcQLUkocpI=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
|
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
|
github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
|
||||||
|
github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
|
||||||
|
github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
|
||||||
github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM=
|
github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM=
|
||||||
|
github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
|
||||||
github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4=
|
github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4=
|
||||||
|
github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
|
||||||
|
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/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
|
||||||
github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo=
|
github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo=
|
||||||
github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM=
|
github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM=
|
||||||
@@ -507,15 +577,17 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S
|
|||||||
github.com/ngdinhtoan/glide-cleanup v0.2.0/go.mod h1:UQzsmiDOb8YV3nOsCxK/c9zPpCZVNoHScRE3EO9pVMM=
|
github.com/ngdinhtoan/glide-cleanup v0.2.0/go.mod h1:UQzsmiDOb8YV3nOsCxK/c9zPpCZVNoHScRE3EO9pVMM=
|
||||||
github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
|
github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
|
||||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||||
|
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
|
||||||
github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
|
github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
|
||||||
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
|
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
|
||||||
github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
|
github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
|
||||||
github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
|
github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
|
||||||
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||||
|
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
|
||||||
github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8=
|
github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8=
|
||||||
github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA=
|
github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA=
|
||||||
github.com/olivere/elastic v6.2.33+incompatible h1:SRPB2w2OhJ7iULftDEHsNPRoL2GLREqPMRalVmbZaEw=
|
github.com/olivere/elastic v6.2.34+incompatible h1:GdvWBAqyIyEEUd+J2sSj6EnIaBywz7zZtN+Ps4JCv0g=
|
||||||
github.com/olivere/elastic v6.2.33+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8=
|
github.com/olivere/elastic v6.2.34+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8=
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
|
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
|
||||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
@@ -532,24 +604,38 @@ github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
|
|||||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||||
github.com/oov/psd v0.0.0-20200705094106-99303fb2511f h1:slBBh1GLx3xo0xx0v4HT0pI02+UcOJXTYRlg6QtN60Y=
|
github.com/oov/psd v0.0.0-20200705094106-99303fb2511f h1:slBBh1GLx3xo0xx0v4HT0pI02+UcOJXTYRlg6QtN60Y=
|
||||||
github.com/oov/psd v0.0.0-20200705094106-99303fb2511f/go.mod h1:GHI1bnmAcbp96z6LNfBJvtrjxhaXGkbsk967utPlvL8=
|
github.com/oov/psd v0.0.0-20200705094106-99303fb2511f/go.mod h1:GHI1bnmAcbp96z6LNfBJvtrjxhaXGkbsk967utPlvL8=
|
||||||
|
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=
|
||||||
|
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||||
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
|
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
|
||||||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||||
|
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
|
||||||
|
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
|
||||||
|
github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
|
||||||
github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
|
github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
|
||||||
github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
|
github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
|
||||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
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/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
|
||||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs=
|
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs=
|
||||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||||
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
|
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
|
||||||
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||||
github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
|
github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
|
||||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
||||||
|
github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw=
|
||||||
|
github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
||||||
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
||||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||||
github.com/pelletier/go-toml v1.8.0 h1:Keo9qb7iRJs2voHvunFtuuYFsbWeOBh8/P9v/kVMFtw=
|
github.com/pelletier/go-toml v1.8.0 h1:Keo9qb7iRJs2voHvunFtuuYFsbWeOBh8/P9v/kVMFtw=
|
||||||
github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs=
|
github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs=
|
||||||
|
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
|
||||||
github.com/peterbourgon/diskv v0.0.0-20171120014656-2973218375c3/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
github.com/peterbourgon/diskv v0.0.0-20171120014656-2973218375c3/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||||
github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ=
|
github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ=
|
||||||
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
|
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
|
||||||
|
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
||||||
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
|
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
|
||||||
github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
|
github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
|
||||||
@@ -558,6 +644,7 @@ github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
|||||||
github.com/pkg/errors v0.8.1/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=
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
|
||||||
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
|
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
@@ -569,6 +656,7 @@ github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod
|
|||||||
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
||||||
github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
|
github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
|
||||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||||
|
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
|
||||||
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||||
github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||||
github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA=
|
github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA=
|
||||||
@@ -580,6 +668,7 @@ github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx
|
|||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=
|
||||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
|
github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
|
||||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||||
@@ -588,10 +677,13 @@ github.com/prometheus/common v0.2.0 h1:kUZDBDTdBVBYBj5Tmh2NZLlF60mfjA27rM34b+cVw
|
|||||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
|
||||||
github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U=
|
github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U=
|
||||||
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
|
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
|
||||||
github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
|
github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
|
||||||
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
|
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
|
||||||
|
github.com/prometheus/common v0.12.0 h1:mj4ewtVukAfkS37JU7IXPJPr7zwLEjwgWO6nZo8ROvk=
|
||||||
|
github.com/prometheus/common v0.12.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
|
||||||
github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1 h1:/K3IL0Z1quvmJ7X0A1AwNEK7CRkVK3YwfOU/QAL4WGg=
|
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1 h1:/K3IL0Z1quvmJ7X0A1AwNEK7CRkVK3YwfOU/QAL4WGg=
|
||||||
@@ -621,7 +713,9 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR
|
|||||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd h1:CmH9+J6ZSsIjUK3dcGsnCnO41eRBOnY12zwkn5qVwgc=
|
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd h1:CmH9+J6ZSsIjUK3dcGsnCnO41eRBOnY12zwkn5qVwgc=
|
||||||
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
|
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
|
||||||
|
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
github.com/ryanuber/columnize v2.1.0+incompatible/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 v0.0.0-20180103174451-36e9d2ebbde5/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
github.com/satori/go.uuid v0.0.0-20180103174451-36e9d2ebbde5/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||||
github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw=
|
github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw=
|
||||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
|
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
|
||||||
@@ -664,16 +758,18 @@ github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:s
|
|||||||
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
||||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||||
|
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
|
||||||
github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE=
|
github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE=
|
||||||
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA=
|
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA=
|
||||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||||
github.com/spf13/afero v1.3.1 h1:GPTpEAuNr98px18yNQ66JllNil98wfRZ/5Ukny8FeQA=
|
github.com/spf13/afero v1.3.4 h1:8q6vk3hthlpb2SouZcnBVKboxWQWMDNF38bwholZrJc=
|
||||||
github.com/spf13/afero v1.3.1/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
|
github.com/spf13/afero v1.3.4/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
|
||||||
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
||||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||||
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
|
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
|
||||||
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||||
|
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||||
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
|
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
|
||||||
github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
|
github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
|
||||||
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
||||||
@@ -681,6 +777,7 @@ github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9
|
|||||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||||
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
||||||
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
||||||
|
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
||||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||||
@@ -691,11 +788,14 @@ github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cma
|
|||||||
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM=
|
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM=
|
||||||
github.com/steveyen/gtreap v0.1.0 h1:CjhzTa274PyJLJuMZwIzCO1PfC00oRa8d1Kc78bFXJM=
|
github.com/steveyen/gtreap v0.1.0 h1:CjhzTa274PyJLJuMZwIzCO1PfC00oRa8d1Kc78bFXJM=
|
||||||
github.com/steveyen/gtreap v0.1.0/go.mod h1:kl/5J7XbrOmlIbYIXdRHDDE5QxHqpk0cmkT7Z4dM9/Y=
|
github.com/steveyen/gtreap v0.1.0/go.mod h1:kl/5J7XbrOmlIbYIXdRHDDE5QxHqpk0cmkT7Z4dM9/Y=
|
||||||
|
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||||
|
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||||
|
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.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
|
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
|
github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As=
|
||||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
@@ -710,18 +810,19 @@ github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpP
|
|||||||
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
|
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
|
||||||
github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok=
|
github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok=
|
||||||
github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8=
|
github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8=
|
||||||
github.com/throttled/throttled v2.2.4+incompatible h1:aVKdoH/qT5Mo1Lm/678OkX2pFg7aRpHlTn1tfgaSKxs=
|
github.com/throttled/throttled v2.2.5+incompatible h1:65UB52X0qNTYiT0Sohp8qLYVFwZQPDw85uSa65OljjQ=
|
||||||
github.com/throttled/throttled v2.2.4+incompatible/go.mod h1:0BjlrEGQmvxps+HuXLsyRdqpSRvJpq0PNIsOtqP9Nos=
|
github.com/throttled/throttled v2.2.5+incompatible/go.mod h1:0BjlrEGQmvxps+HuXLsyRdqpSRvJpq0PNIsOtqP9Nos=
|
||||||
github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU=
|
github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU=
|
||||||
github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
|
github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
|
||||||
github.com/tinylib/msgp v1.1.2 h1:gWmO7n0Ys2RBEb7GPYB9Ujq8Mk5p2U08lRnmMcGy6BQ=
|
github.com/tinylib/msgp v1.1.2 h1:gWmO7n0Ys2RBEb7GPYB9Ujq8Mk5p2U08lRnmMcGy6BQ=
|
||||||
github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
|
github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
|
||||||
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
||||||
github.com/tylerb/graceful v1.2.15 h1:B0x01Y8fsJpogzZTkDg6BDi6eMf03s01lEKGdrv83oA=
|
github.com/tylerb/graceful v1.2.15 h1:B0x01Y8fsJpogzZTkDg6BDi6eMf03s01lEKGdrv83oA=
|
||||||
github.com/tylerb/graceful v1.2.15/go.mod h1:LPYTbOYmUTdabwRt0TGhLllQ0MUNbs0Y5q1WXJOI9II=
|
github.com/tylerb/graceful v1.2.15/go.mod h1:LPYTbOYmUTdabwRt0TGhLllQ0MUNbs0Y5q1WXJOI9II=
|
||||||
github.com/uber/jaeger-client-go v2.24.0+incompatible h1:CGchgJcHsDd2jWnaL4XngByMrXoGHh3n8oCqAKx0uMo=
|
github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U=
|
||||||
github.com/uber/jaeger-client-go v2.24.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
|
github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
|
||||||
github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw=
|
github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw=
|
||||||
github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
|
github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
|
||||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||||
@@ -730,6 +831,8 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM
|
|||||||
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
||||||
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
|
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
|
||||||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
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/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
|
github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
|
||||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||||
github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w=
|
github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w=
|
||||||
@@ -750,6 +853,8 @@ github.com/wiggin77/srslog v1.0.1 h1:gA2XjSMy3DrRdX9UqLuDtuVAAshb8bE1NhX1YK0Qe+8
|
|||||||
github.com/wiggin77/srslog v1.0.1/go.mod h1:fehkyYDq1QfuYn60TDPu9YdY2bB85VUW2mvN1WynEls=
|
github.com/wiggin77/srslog v1.0.1/go.mod h1:fehkyYDq1QfuYn60TDPu9YdY2bB85VUW2mvN1WynEls=
|
||||||
github.com/willf/bitset v1.1.10 h1:NotGKqX0KwQ72NUzqrjZq5ipPNDQex9lo3WpaS8L2sc=
|
github.com/willf/bitset v1.1.10 h1:NotGKqX0KwQ72NUzqrjZq5ipPNDQex9lo3WpaS8L2sc=
|
||||||
github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
|
github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
|
||||||
|
github.com/willf/bitset v1.1.11 h1:N7Z7E9UvjW+sGsEl7k/SJrvY2reP1A07MrGuCjIOjRE=
|
||||||
|
github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
|
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
|
||||||
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
|
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
|
||||||
@@ -765,28 +870,38 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
|||||||
github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
|
github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
|
||||||
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
|
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
|
||||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
|
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
go.etcd.io/bbolt v1.3.4 h1:hi1bXHMVrlQh6WwxAy+qZCV/SYIlqo+Ushwdpa4tAKg=
|
go.etcd.io/bbolt v1.3.4 h1:hi1bXHMVrlQh6WwxAy+qZCV/SYIlqo+Ushwdpa4tAKg=
|
||||||
go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
|
go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
|
||||||
go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
|
go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
|
||||||
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
|
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
|
||||||
|
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
|
||||||
go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
|
go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
|
||||||
go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A=
|
go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A=
|
||||||
go.opencensus.io v0.19.2/go.mod h1:NO/8qkisMZLZ1FCsKNqtJPwc8/TaclWyY0B6wcYNg9M=
|
go.opencensus.io v0.19.2/go.mod h1:NO/8qkisMZLZ1FCsKNqtJPwc8/TaclWyY0B6wcYNg9M=
|
||||||
|
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
||||||
|
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
||||||
|
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
|
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.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
|
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||||
go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
|
go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
|
||||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
|
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
|
||||||
go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
|
go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
|
||||||
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
|
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
|
||||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
|
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
|
||||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
|
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
|
||||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
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 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM=
|
go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM=
|
||||||
go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
|
go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
|
||||||
go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
|
go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
|
||||||
golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw=
|
golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw=
|
||||||
golang.org/x/build v0.0.0-20190314133821-5284462c4bec/go.mod h1:atTaCNAy0f16Ah5aV1gMSwgiKVHwu/JncqDpuRr7lS4=
|
golang.org/x/build v0.0.0-20190314133821-5284462c4bec/go.mod h1:atTaCNAy0f16Ah5aV1gMSwgiKVHwu/JncqDpuRr7lS4=
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/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-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||||
@@ -808,8 +923,8 @@ golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86h
|
|||||||
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f h1:FO4MZ3N56GnxbqxGKqh+YTzUWQ2sDwtFQEZgLOxh9Jc=
|
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f h1:FO4MZ3N56GnxbqxGKqh+YTzUWQ2sDwtFQEZgLOxh9Jc=
|
||||||
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/image v0.0.0-20200618115811-c13761719519 h1:1e2ufUJNM3lCHEY5jIgac/7UTjd6cgJNdatjPdFWf34=
|
golang.org/x/image v0.0.0-20200801110659-972c09e46d76 h1:U7GPaoQyQmX+CBRWXKrvRzWTbd+slqeSh8uARsIyhAw=
|
||||||
golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
golang.org/x/image v0.0.0-20200801110659-972c09e46d76/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
@@ -829,9 +944,11 @@ golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73r
|
|||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/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-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@@ -845,6 +962,7 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR
|
|||||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
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-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
@@ -852,6 +970,8 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/
|
|||||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
|
golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
|
||||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
|
golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc h1:zK/HqS5bZxDptfPJNq8v7vJfXtkU7r9TLIoSr1bXaP4=
|
||||||
|
golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
@@ -874,6 +994,7 @@ golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@@ -887,8 +1008,11 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||||||
golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/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-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-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@@ -896,6 +1020,7 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/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-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-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@@ -906,8 +1031,8 @@ golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/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 h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
|
||||||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200805065543-0cf7623e9dbd h1:wefLe/3g5tC0FcXw3NneLA5tHgbyouyZlfcSjNfOdgk=
|
golang.org/x/sys v0.0.0-20200817155316-9781c653f443 h1:X18bCaipMcoJGm27Nv7zr4XYPKGUy92GtqboKC2Hxaw=
|
||||||
golang.org/x/sys v0.0.0-20200805065543-0cf7623e9dbd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
|
||||||
@@ -919,6 +1044,7 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|||||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
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-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-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/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
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-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
@@ -940,9 +1066,10 @@ golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtn
|
|||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
golang.org/x/tools v0.0.0-20200806022845-90696ccdc692 h1:fsn47thVa7Ar/TMyXYlZgOoT7M4+kRpb+KpSAqRQx1w=
|
golang.org/x/tools v0.0.0-20200818005847-188abfa75333 h1:a6ryybeZHQf5qnBc6IwRfVnI/75UmdtJo71f0//8Dqo=
|
||||||
golang.org/x/tools v0.0.0-20200806022845-90696ccdc692/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
golang.org/x/tools v0.0.0-20200818005847-188abfa75333/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
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=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||||
@@ -954,6 +1081,7 @@ google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+
|
|||||||
google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
||||||
google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y=
|
google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y=
|
||||||
google.golang.org/api v0.2.0/go.mod h1:IfRCZScioGtypHNTlz3gFk67J8uePVW7uDTBzXuIkhU=
|
google.golang.org/api v0.2.0/go.mod h1:IfRCZScioGtypHNTlz3gFk67J8uePVW7uDTBzXuIkhU=
|
||||||
|
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
@@ -975,10 +1103,12 @@ google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRn
|
|||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
google.golang.org/genproto v0.0.0-20190321212433-e79c0c59cdb5 h1:VchCZUJA1Lkjn3FxAtLPl4GotxoGt/E8ZIm9nVqbhQ8=
|
google.golang.org/genproto v0.0.0-20190321212433-e79c0c59cdb5 h1:VchCZUJA1Lkjn3FxAtLPl4GotxoGt/E8ZIm9nVqbhQ8=
|
||||||
google.golang.org/genproto v0.0.0-20190321212433-e79c0c59cdb5/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190321212433-e79c0c59cdb5/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
|
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
|
google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
|
||||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5 h1:a/Sqq5B3dGnmxhuJZIHFsIxhEkqElErr5TaU6IqBAj0=
|
google.golang.org/genproto v0.0.0-20200815001618-f69a88009b70 h1:wboULUXGF3c5qdUnKp+6gLAccE6PRpa/czkYvQ4UXv8=
|
||||||
google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20200815001618-f69a88009b70/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
|
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
|
||||||
@@ -986,13 +1116,18 @@ google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3
|
|||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM=
|
google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM=
|
||||||
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
|
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
|
||||||
|
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||||
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||||
|
google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
|
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||||
|
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE=
|
google.golang.org/grpc v1.31.0 h1:T7P4R73V3SSDPhH7WW7ATbfViLtmamH0DKrP3f9AuDI=
|
||||||
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
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-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
@@ -1014,24 +1149,29 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33
|
|||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/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 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
|
||||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
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/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
||||||
gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
|
gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
|
||||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||||
gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww=
|
gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww=
|
||||||
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
|
gopkg.in/ini.v1 v1.60.0 h1:P5ZzC7RJO04094NJYlEnBdFK2wwmnCAy/+7sAzvWs60=
|
||||||
|
gopkg.in/ini.v1 v1.60.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
|
gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
|
||||||
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
|
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
|
||||||
gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
|
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/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
|
||||||
gopkg.in/olivere/elastic.v6 v6.2.33 h1:sDNuzeL3sQN7lruzbV+EE5Uo1H3dQlGlWJAcyNgxz1o=
|
gopkg.in/olivere/elastic.v6 v6.2.34 h1:vSAqG1ubkLbXC0odut53VHtvFBv/UpIG3dp7YmTUjqs=
|
||||||
gopkg.in/olivere/elastic.v6 v6.2.33/go.mod h1:2cTT8Z+/LcArSWpCgvZqBgt3VOqXiy7v00w12Lz8bd4=
|
gopkg.in/olivere/elastic.v6 v6.2.34/go.mod h1:2cTT8Z+/LcArSWpCgvZqBgt3VOqXiy7v00w12Lz8bd4=
|
||||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||||
|
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
||||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/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.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
@@ -1043,6 +1183,8 @@ gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
|
|||||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
|
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
@@ -1053,6 +1195,8 @@ honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXe
|
|||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
|
honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
|
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
||||||
|
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
|
||||||
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
|
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
|
||||||
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
|
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
|
||||||
willnorris.com/go/gifresize v1.0.0 h1:GKS68zjNhHMqkgNTv4iFAO/j/sNcVSOHQ7SqmDAIAmM=
|
willnorris.com/go/gifresize v1.0.0 h1:GKS68zjNhHMqkgNTv4iFAO/j/sNcVSOHQ7SqmDAIAmM=
|
||||||
|
|||||||
6
vendor/github.com/RoaringBitmap/roaring/.travis.yml
сгенерированный
поставляемый
6
vendor/github.com/RoaringBitmap/roaring/.travis.yml
сгенерированный
поставляемый
@@ -8,13 +8,9 @@ install:
|
|||||||
notifications:
|
notifications:
|
||||||
email: false
|
email: false
|
||||||
go:
|
go:
|
||||||
- "1.7.x"
|
|
||||||
- "1.8.x"
|
|
||||||
- "1.9.x"
|
|
||||||
- "1.10.x"
|
|
||||||
- "1.11.x"
|
|
||||||
- "1.12.x"
|
- "1.12.x"
|
||||||
- "1.13.x"
|
- "1.13.x"
|
||||||
|
- "1.14.x"
|
||||||
- tip
|
- tip
|
||||||
|
|
||||||
# whitelist
|
# whitelist
|
||||||
|
|||||||
70
vendor/github.com/RoaringBitmap/roaring/README.md
сгенерированный
поставляемый
70
vendor/github.com/RoaringBitmap/roaring/README.md
сгенерированный
поставляемый
@@ -1,5 +1,9 @@
|
|||||||
roaring [](https://travis-ci.org/RoaringBitmap/roaring) [](https://coveralls.io/github/RoaringBitmap/roaring?branch=master) [](https://godoc.org/github.com/RoaringBitmap/roaring) [](https://goreportcard.com/report/github.com/RoaringBitmap/roaring)
|
roaring [](https://travis-ci.org/RoaringBitmap/roaring) [](https://godoc.org/github.com/RoaringBitmap/roaring) [](https://godoc.org/github.com/RoaringBitmap/roaring/roaring64) [](https://goreportcard.com/report/github.com/RoaringBitmap/roaring)
|
||||||
[](https://cloud.drone.io/RoaringBitmap/roaring)
|
[](https://cloud.drone.io/RoaringBitmap/roaring)
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is a go version of the Roaring bitmap data structure.
|
This is a go version of the Roaring bitmap data structure.
|
||||||
@@ -7,7 +11,7 @@ This is a go version of the Roaring bitmap data structure.
|
|||||||
|
|
||||||
|
|
||||||
Roaring bitmaps are used by several major systems such as [Apache Lucene][lucene] and derivative systems such as [Solr][solr] and
|
Roaring bitmaps are used by several major systems such as [Apache Lucene][lucene] and derivative systems such as [Solr][solr] and
|
||||||
[Elasticsearch][elasticsearch], [Apache Druid (Incubating)][druid], [LinkedIn Pinot][pinot], [Netflix Atlas][atlas], [Apache Spark][spark], [OpenSearchServer][opensearchserver], [Cloud Torrent][cloudtorrent], [Whoosh][whoosh], [Pilosa][pilosa], [Microsoft Visual Studio Team Services (VSTS)][vsts], and eBay's [Apache Kylin][kylin].
|
[Elasticsearch][elasticsearch], [Apache Druid (Incubating)][druid], [LinkedIn Pinot][pinot], [Netflix Atlas][atlas], [Apache Spark][spark], [OpenSearchServer][opensearchserver], [Cloud Torrent][cloudtorrent], [Whoosh][whoosh], [Pilosa][pilosa], [Microsoft Visual Studio Team Services (VSTS)][vsts], and eBay's [Apache Kylin][kylin]. The YouTube SQL Engine, [Google Procella](https://research.google/pubs/pub48388/), uses Roaring bitmaps for indexing.
|
||||||
|
|
||||||
[lucene]: https://lucene.apache.org/
|
[lucene]: https://lucene.apache.org/
|
||||||
[solr]: https://lucene.apache.org/solr/
|
[solr]: https://lucene.apache.org/solr/
|
||||||
@@ -172,10 +176,70 @@ That is, given a fixed overhead for the universe size (x), Roaring
|
|||||||
bitmaps never use more than 2 bytes per integer. You can call
|
bitmaps never use more than 2 bytes per integer. You can call
|
||||||
``BoundSerializedSizeInBytes`` for a more precise estimate.
|
``BoundSerializedSizeInBytes`` for a more precise estimate.
|
||||||
|
|
||||||
|
### 64-bit Roaring
|
||||||
|
|
||||||
|
By default, roaring is used to stored unsigned 32-bit integers. However, we also offer
|
||||||
|
an extension dedicated to 64-bit integers. It supports roughly the same functions:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/RoaringBitmap/roaring/roaring64"
|
||||||
|
"bytes"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// example inspired by https://github.com/fzandona/goroar
|
||||||
|
fmt.Println("==roaring64==")
|
||||||
|
rb1 := roaring64.BitmapOf(1, 2, 3, 4, 5, 100, 1000)
|
||||||
|
fmt.Println(rb1.String())
|
||||||
|
|
||||||
|
rb2 := roaring64.BitmapOf(3, 4, 1000)
|
||||||
|
fmt.Println(rb2.String())
|
||||||
|
|
||||||
|
rb3 := roaring64.New()
|
||||||
|
fmt.Println(rb3.String())
|
||||||
|
|
||||||
|
fmt.Println("Cardinality: ", rb1.GetCardinality())
|
||||||
|
|
||||||
|
fmt.Println("Contains 3? ", rb1.Contains(3))
|
||||||
|
|
||||||
|
rb1.And(rb2)
|
||||||
|
|
||||||
|
rb3.Add(1)
|
||||||
|
rb3.Add(5)
|
||||||
|
|
||||||
|
rb3.Or(rb1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// prints 1, 3, 4, 5, 1000
|
||||||
|
i := rb3.Iterator()
|
||||||
|
for i.HasNext() {
|
||||||
|
fmt.Println(i.Next())
|
||||||
|
}
|
||||||
|
fmt.Println()
|
||||||
|
|
||||||
|
// next we include an example of serialization
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
rb1.WriteTo(buf) // we omit error handling
|
||||||
|
newrb:= roaring64.New()
|
||||||
|
newrb.ReadFrom(buf)
|
||||||
|
if rb1.Equals(newrb) {
|
||||||
|
fmt.Println("I wrote the content to a byte stream and read it back.")
|
||||||
|
}
|
||||||
|
// you can iterate over bitmaps using ReverseIterator(), Iterator, ManyIterator()
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Only the 32-bit roaring format is standard and cross-operable between Java, C++, C and Go. There is no guarantee that the 64-bit versions are compatible.
|
||||||
|
|
||||||
### Documentation
|
### Documentation
|
||||||
|
|
||||||
Current documentation is available at http://godoc.org/github.com/RoaringBitmap/roaring
|
Current documentation is available at http://godoc.org/github.com/RoaringBitmap/roaring and http://godoc.org/github.com/RoaringBitmap/roaring64
|
||||||
|
|
||||||
### Goroutine safety
|
### Goroutine safety
|
||||||
|
|
||||||
|
|||||||
35
vendor/github.com/RoaringBitmap/roaring/arraycontainer.go
сгенерированный
поставляемый
35
vendor/github.com/RoaringBitmap/roaring/arraycontainer.go
сгенерированный
поставляемый
@@ -876,6 +876,41 @@ func (ac *arrayContainer) loadData(bitmapContainer *bitmapContainer) {
|
|||||||
ac.content = make([]uint16, bitmapContainer.cardinality, bitmapContainer.cardinality)
|
ac.content = make([]uint16, bitmapContainer.cardinality, bitmapContainer.cardinality)
|
||||||
bitmapContainer.fillArray(ac.content)
|
bitmapContainer.fillArray(ac.content)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ac *arrayContainer) resetTo(a container) {
|
||||||
|
switch x := a.(type) {
|
||||||
|
case *arrayContainer:
|
||||||
|
ac.realloc(len(x.content))
|
||||||
|
copy(ac.content, x.content)
|
||||||
|
|
||||||
|
case *bitmapContainer:
|
||||||
|
ac.realloc(x.cardinality)
|
||||||
|
x.fillArray(ac.content)
|
||||||
|
|
||||||
|
case *runContainer16:
|
||||||
|
card := int(x.cardinality())
|
||||||
|
ac.realloc(card)
|
||||||
|
cur := 0
|
||||||
|
for _, r := range x.iv {
|
||||||
|
for val := r.start; val <= r.last(); val++ {
|
||||||
|
ac.content[cur] = val
|
||||||
|
cur++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
panic("unsupported container type")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ac *arrayContainer) realloc(size int) {
|
||||||
|
if cap(ac.content) < size {
|
||||||
|
ac.content = make([]uint16, size)
|
||||||
|
} else {
|
||||||
|
ac.content = ac.content[:size]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func newArrayContainer() *arrayContainer {
|
func newArrayContainer() *arrayContainer {
|
||||||
p := new(arrayContainer)
|
p := new(arrayContainer)
|
||||||
return p
|
return p
|
||||||
|
|||||||
53
vendor/github.com/RoaringBitmap/roaring/bitmapcontainer.go
сгенерированный
поставляемый
53
vendor/github.com/RoaringBitmap/roaring/bitmapcontainer.go
сгенерированный
поставляемый
@@ -203,6 +203,33 @@ func (bcmi *bitmapContainerManyIterator) nextMany(hs uint32, buf []uint32) int {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (bcmi *bitmapContainerManyIterator) nextMany64(hs uint64, buf []uint64) int {
|
||||||
|
n := 0
|
||||||
|
base := bcmi.base
|
||||||
|
bitset := bcmi.bitset
|
||||||
|
|
||||||
|
for n < len(buf) {
|
||||||
|
if bitset == 0 {
|
||||||
|
base++
|
||||||
|
if base >= len(bcmi.ptr.bitmap) {
|
||||||
|
bcmi.base = base
|
||||||
|
bcmi.bitset = bitset
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
bitset = bcmi.ptr.bitmap[base]
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
t := bitset & -bitset
|
||||||
|
buf[n] = uint64(((base * 64) + int(popcount(t-1)))) | hs
|
||||||
|
n = n + 1
|
||||||
|
bitset ^= t
|
||||||
|
}
|
||||||
|
|
||||||
|
bcmi.base = base
|
||||||
|
bcmi.bitset = bitset
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
func newBitmapContainerManyIterator(a *bitmapContainer) *bitmapContainerManyIterator {
|
func newBitmapContainerManyIterator(a *bitmapContainer) *bitmapContainerManyIterator {
|
||||||
return &bitmapContainerManyIterator{a, -1, 0}
|
return &bitmapContainerManyIterator{a, -1, 0}
|
||||||
}
|
}
|
||||||
@@ -934,6 +961,32 @@ func (bc *bitmapContainer) loadData(arrayContainer *arrayContainer) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (bc *bitmapContainer) resetTo(a container) {
|
||||||
|
switch x := a.(type) {
|
||||||
|
case *arrayContainer:
|
||||||
|
fill(bc.bitmap, 0)
|
||||||
|
bc.loadData(x)
|
||||||
|
|
||||||
|
case *bitmapContainer:
|
||||||
|
bc.cardinality = x.cardinality
|
||||||
|
copy(bc.bitmap, x.bitmap)
|
||||||
|
|
||||||
|
case *runContainer16:
|
||||||
|
bc.cardinality = len(x.iv)
|
||||||
|
lastEnd := 0
|
||||||
|
for _, r := range x.iv {
|
||||||
|
bc.cardinality += int(r.length)
|
||||||
|
resetBitmapRange(bc.bitmap, lastEnd, int(r.start))
|
||||||
|
lastEnd = int(r.start+r.length) + 1
|
||||||
|
setBitmapRange(bc.bitmap, int(r.start), lastEnd)
|
||||||
|
}
|
||||||
|
resetBitmapRange(bc.bitmap, lastEnd, maxCapacity)
|
||||||
|
|
||||||
|
default:
|
||||||
|
panic("unsupported container type")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (bc *bitmapContainer) toArrayContainer() *arrayContainer {
|
func (bc *bitmapContainer) toArrayContainer() *arrayContainer {
|
||||||
ac := &arrayContainer{}
|
ac := &arrayContainer{}
|
||||||
ac.loadData(bc)
|
ac.loadData(bc)
|
||||||
|
|||||||
117
vendor/github.com/RoaringBitmap/roaring/fastaggregation.go
сгенерированный
поставляемый
117
vendor/github.com/RoaringBitmap/roaring/fastaggregation.go
сгенерированный
поставляемый
@@ -213,3 +213,120 @@ func HeapXor(bitmaps ...*Bitmap) *Bitmap {
|
|||||||
}
|
}
|
||||||
return heap.Pop(&pq).(*item).value
|
return heap.Pop(&pq).(*item).value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AndAny provides a result equivalent to x1.And(FastOr(bitmaps)).
|
||||||
|
// It's optimized to minimize allocations. It also might be faster than separate calls.
|
||||||
|
func (x1 *Bitmap) AndAny(bitmaps ...*Bitmap) {
|
||||||
|
if len(bitmaps) == 0 {
|
||||||
|
return
|
||||||
|
} else if len(bitmaps) == 1 {
|
||||||
|
x1.And(bitmaps[0])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type withPos struct {
|
||||||
|
bitmap *roaringArray
|
||||||
|
pos int
|
||||||
|
key uint16
|
||||||
|
}
|
||||||
|
filters := make([]withPos, 0, len(bitmaps))
|
||||||
|
|
||||||
|
for _, b := range bitmaps {
|
||||||
|
if b.highlowcontainer.size() > 0 {
|
||||||
|
filters = append(filters, withPos{
|
||||||
|
bitmap: &b.highlowcontainer,
|
||||||
|
pos: 0,
|
||||||
|
key: b.highlowcontainer.getKeyAtIndex(0),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
basePos := 0
|
||||||
|
intersections := 0
|
||||||
|
keyContainers := make([]container, 0, len(filters))
|
||||||
|
var (
|
||||||
|
tmpArray *arrayContainer
|
||||||
|
tmpBitmap *bitmapContainer
|
||||||
|
minNextKey uint16
|
||||||
|
)
|
||||||
|
|
||||||
|
for basePos < x1.highlowcontainer.size() && len(filters) > 0 {
|
||||||
|
baseKey := x1.highlowcontainer.getKeyAtIndex(basePos)
|
||||||
|
|
||||||
|
// accumulate containers for current key, find next minimal key in filters
|
||||||
|
// and exclude filters that do not have related values anymore
|
||||||
|
i := 0
|
||||||
|
maxPossibleOr := 0
|
||||||
|
minNextKey = MaxUint16
|
||||||
|
for _, f := range filters {
|
||||||
|
if f.key < baseKey {
|
||||||
|
f.pos = f.bitmap.advanceUntil(baseKey, f.pos)
|
||||||
|
if f.pos == f.bitmap.size() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
f.key = f.bitmap.getKeyAtIndex(f.pos)
|
||||||
|
}
|
||||||
|
|
||||||
|
if f.key == baseKey {
|
||||||
|
cont := f.bitmap.getContainerAtIndex(f.pos)
|
||||||
|
keyContainers = append(keyContainers, cont)
|
||||||
|
maxPossibleOr += cont.getCardinality()
|
||||||
|
|
||||||
|
f.pos++
|
||||||
|
if f.pos == f.bitmap.size() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
f.key = f.bitmap.getKeyAtIndex(f.pos)
|
||||||
|
}
|
||||||
|
|
||||||
|
minNextKey = minOfUint16(minNextKey, f.key)
|
||||||
|
filters[i] = f
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
filters = filters[:i]
|
||||||
|
|
||||||
|
if len(keyContainers) == 0 {
|
||||||
|
basePos = x1.highlowcontainer.advanceUntil(minNextKey, basePos)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var ored container
|
||||||
|
|
||||||
|
if len(keyContainers) == 1 {
|
||||||
|
ored = keyContainers[0]
|
||||||
|
} else {
|
||||||
|
//TODO: special case for run containers?
|
||||||
|
if maxPossibleOr > arrayDefaultMaxSize {
|
||||||
|
if tmpBitmap == nil {
|
||||||
|
tmpBitmap = newBitmapContainer()
|
||||||
|
}
|
||||||
|
tmpBitmap.resetTo(keyContainers[0])
|
||||||
|
for _, c := range keyContainers[1:] {
|
||||||
|
tmpBitmap.ior(c)
|
||||||
|
}
|
||||||
|
ored = tmpBitmap
|
||||||
|
} else {
|
||||||
|
if tmpArray == nil {
|
||||||
|
tmpArray = newArrayContainerCapacity(maxPossibleOr)
|
||||||
|
}
|
||||||
|
tmpArray.realloc(maxPossibleOr)
|
||||||
|
tmpArray.resetTo(keyContainers[0])
|
||||||
|
for _, c := range keyContainers[1:] {
|
||||||
|
tmpArray.ior(c)
|
||||||
|
}
|
||||||
|
ored = tmpArray
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result := x1.highlowcontainer.getWritableContainerAtIndex(basePos).iand(ored)
|
||||||
|
if result.getCardinality() > 0 {
|
||||||
|
x1.highlowcontainer.replaceKeyAndContainerAtIndex(intersections, baseKey, result, false)
|
||||||
|
intersections++
|
||||||
|
}
|
||||||
|
|
||||||
|
keyContainers = keyContainers[:0]
|
||||||
|
basePos = x1.highlowcontainer.advanceUntil(minNextKey, basePos)
|
||||||
|
}
|
||||||
|
|
||||||
|
x1.highlowcontainer.resize(intersections)
|
||||||
|
}
|
||||||
|
|||||||
14
vendor/github.com/RoaringBitmap/roaring/manyiterator.go
сгенерированный
поставляемый
14
vendor/github.com/RoaringBitmap/roaring/manyiterator.go
сгенерированный
поставляемый
@@ -2,6 +2,7 @@ package roaring
|
|||||||
|
|
||||||
type manyIterable interface {
|
type manyIterable interface {
|
||||||
nextMany(hs uint32, buf []uint32) int
|
nextMany(hs uint32, buf []uint32) int
|
||||||
|
nextMany64(hs uint64, buf []uint64) int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (si *shortIterator) nextMany(hs uint32, buf []uint32) int {
|
func (si *shortIterator) nextMany(hs uint32, buf []uint32) int {
|
||||||
@@ -16,3 +17,16 @@ func (si *shortIterator) nextMany(hs uint32, buf []uint32) int {
|
|||||||
si.loc = l
|
si.loc = l
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (si *shortIterator) nextMany64(hs uint64, buf []uint64) int {
|
||||||
|
n := 0
|
||||||
|
l := si.loc
|
||||||
|
s := si.slice
|
||||||
|
for n < len(buf) && l < len(s) {
|
||||||
|
buf[n] = uint64(s[l]) | hs
|
||||||
|
l++
|
||||||
|
n++
|
||||||
|
}
|
||||||
|
si.loc = l
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|||||||
36
vendor/github.com/RoaringBitmap/roaring/roaring.go
сгенерированный
поставляемый
36
vendor/github.com/RoaringBitmap/roaring/roaring.go
сгенерированный
поставляемый
@@ -346,7 +346,9 @@ func newIntReverseIterator(a *Bitmap) *intReverseIterator {
|
|||||||
// ManyIntIterable allows you to iterate over the values in a Bitmap
|
// ManyIntIterable allows you to iterate over the values in a Bitmap
|
||||||
type ManyIntIterable interface {
|
type ManyIntIterable interface {
|
||||||
// pass in a buffer to fill up with values, returns how many values were returned
|
// pass in a buffer to fill up with values, returns how many values were returned
|
||||||
NextMany([]uint32) int
|
NextMany(buf []uint32) int
|
||||||
|
// pass in a buffer to fill up with 64 bit values, returns how many values were returned
|
||||||
|
NextMany64(hs uint64, buf []uint64) int
|
||||||
}
|
}
|
||||||
|
|
||||||
type manyIntIterator struct {
|
type manyIntIterator struct {
|
||||||
@@ -382,6 +384,25 @@ func (ii *manyIntIterator) NextMany(buf []uint32) int {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ii *manyIntIterator) NextMany64(hs64 uint64, buf []uint64) int {
|
||||||
|
n := 0
|
||||||
|
for n < len(buf) {
|
||||||
|
if ii.iter == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
hs := uint64(ii.hs) | hs64
|
||||||
|
moreN := ii.iter.nextMany64(hs, buf[n:])
|
||||||
|
n += moreN
|
||||||
|
if moreN == 0 {
|
||||||
|
ii.pos = ii.pos + 1
|
||||||
|
ii.init()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
func newManyIntIterator(a *Bitmap) *manyIntIterator {
|
func newManyIntIterator(a *Bitmap) *manyIntIterator {
|
||||||
p := new(manyIntIterator)
|
p := new(manyIntIterator)
|
||||||
p.pos = 0
|
p.pos = 0
|
||||||
@@ -678,7 +699,10 @@ func (rb *Bitmap) GetCardinality() uint64 {
|
|||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality())
|
// Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()).
|
||||||
|
// If you pass the smallest value, you get the value 1. If you pass a value that is smaller than the smallest
|
||||||
|
// value, you get 0. Note that this function differs in convention from the Select function since it
|
||||||
|
// return 1 and not 0 on the smallest value.
|
||||||
func (rb *Bitmap) Rank(x uint32) uint64 {
|
func (rb *Bitmap) Rank(x uint32) uint64 {
|
||||||
size := uint64(0)
|
size := uint64(0)
|
||||||
for i := 0; i < rb.highlowcontainer.size(); i++ {
|
for i := 0; i < rb.highlowcontainer.size(); i++ {
|
||||||
@@ -695,7 +719,9 @@ func (rb *Bitmap) Rank(x uint32) uint64 {
|
|||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
||||||
// Select returns the xth integer in the bitmap
|
// Select returns the xth integer in the bitmap. If you pass 0, you get
|
||||||
|
// the smallest element. Note that this function differs in convention from
|
||||||
|
// the Rank function which returns 1 on the smallest value.
|
||||||
func (rb *Bitmap) Select(x uint32) (uint32, error) {
|
func (rb *Bitmap) Select(x uint32) (uint32, error) {
|
||||||
if rb.GetCardinality() <= uint64(x) {
|
if rb.GetCardinality() <= uint64(x) {
|
||||||
return 0, fmt.Errorf("can't find %dth integer in a bitmap with only %d items", x, rb.GetCardinality())
|
return 0, fmt.Errorf("can't find %dth integer in a bitmap with only %d items", x, rb.GetCardinality())
|
||||||
@@ -1555,3 +1581,7 @@ func (rb *Bitmap) Stats() Statistics {
|
|||||||
}
|
}
|
||||||
return stats
|
return stats
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rb *Bitmap) FillLeastSignificant32bits(x []uint64, i uint64, mask uint64) {
|
||||||
|
rb.ManyIterator().NextMany64(mask, x[i:])
|
||||||
|
}
|
||||||
|
|||||||
4
vendor/github.com/RoaringBitmap/roaring/roaringarray.go
сгенерированный
поставляемый
4
vendor/github.com/RoaringBitmap/roaring/roaringarray.go
сгенерированный
поставляемый
@@ -491,11 +491,11 @@ func (ra *roaringArray) writeTo(w io.Writer) (n int64, err error) {
|
|||||||
binary.LittleEndian.PutUint16(buf[2:], uint16(len(ra.keys)-1))
|
binary.LittleEndian.PutUint16(buf[2:], uint16(len(ra.keys)-1))
|
||||||
nw += 2
|
nw += 2
|
||||||
// compute isRun bitmap without temporary allocation
|
// compute isRun bitmap without temporary allocation
|
||||||
var runbitmapslice = buf[nw:nw+isRunSizeInBytes]
|
var runbitmapslice = buf[nw : nw+isRunSizeInBytes]
|
||||||
for i, c := range ra.containers {
|
for i, c := range ra.containers {
|
||||||
switch c.(type) {
|
switch c.(type) {
|
||||||
case *runContainer16:
|
case *runContainer16:
|
||||||
runbitmapslice[i / 8] |= 1<<(uint(i)%8)
|
runbitmapslice[i/8] |= 1 << (uint(i) % 8)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nw += isRunSizeInBytes
|
nw += isRunSizeInBytes
|
||||||
|
|||||||
41
vendor/github.com/RoaringBitmap/roaring/runcontainer.go
сгенерированный
поставляемый
41
vendor/github.com/RoaringBitmap/roaring/runcontainer.go
сгенерированный
поставляемый
@@ -1321,6 +1321,47 @@ func (ri *runIterator16) nextMany(hs uint32, buf []uint32) int {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ri *runIterator16) nextMany64(hs uint64, buf []uint64) int {
|
||||||
|
n := 0
|
||||||
|
|
||||||
|
if !ri.hasNext() {
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
// start and end are inclusive
|
||||||
|
for n < len(buf) {
|
||||||
|
moreVals := 0
|
||||||
|
|
||||||
|
if ri.rc.iv[ri.curIndex].length >= ri.curPosInIndex {
|
||||||
|
// add as many as you can from this seq
|
||||||
|
moreVals = minOfInt(int(ri.rc.iv[ri.curIndex].length-ri.curPosInIndex)+1, len(buf)-n)
|
||||||
|
base := uint64(ri.rc.iv[ri.curIndex].start+ri.curPosInIndex) | hs
|
||||||
|
|
||||||
|
// allows BCE
|
||||||
|
buf2 := buf[n : n+moreVals]
|
||||||
|
for i := range buf2 {
|
||||||
|
buf2[i] = base + uint64(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
// update values
|
||||||
|
n += moreVals
|
||||||
|
}
|
||||||
|
|
||||||
|
if moreVals+int(ri.curPosInIndex) > int(ri.rc.iv[ri.curIndex].length) {
|
||||||
|
ri.curPosInIndex = 0
|
||||||
|
ri.curIndex++
|
||||||
|
|
||||||
|
if ri.curIndex == int64(len(ri.rc.iv)) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ri.curPosInIndex += uint16(moreVals) //moreVals always fits in uint16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
// remove removes key from the container.
|
// remove removes key from the container.
|
||||||
func (rc *runContainer16) removeKey(key uint16) (wasPresent bool) {
|
func (rc *runContainer16) removeKey(key uint16) (wasPresent bool) {
|
||||||
|
|
||||||
|
|||||||
5
vendor/github.com/RoaringBitmap/roaring/util.go
сгенерированный
поставляемый
5
vendor/github.com/RoaringBitmap/roaring/util.go
сгенерированный
поставляемый
@@ -1,6 +1,7 @@
|
|||||||
package roaring
|
package roaring
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"sort"
|
"sort"
|
||||||
)
|
)
|
||||||
@@ -15,7 +16,7 @@ const (
|
|||||||
noOffsetThreshold = 4
|
noOffsetThreshold = 4
|
||||||
|
|
||||||
// MaxUint32 is the largest uint32 value.
|
// MaxUint32 is the largest uint32 value.
|
||||||
MaxUint32 = 4294967295
|
MaxUint32 = math.MaxUint32
|
||||||
|
|
||||||
// MaxRange is One more than the maximum allowed bitmap bit index. For use as an upper
|
// MaxRange is One more than the maximum allowed bitmap bit index. For use as an upper
|
||||||
// bound for ranges.
|
// bound for ranges.
|
||||||
@@ -23,7 +24,7 @@ const (
|
|||||||
|
|
||||||
// MaxUint16 is the largest 16 bit unsigned int.
|
// MaxUint16 is the largest 16 bit unsigned int.
|
||||||
// This is the largest value an interval16 can store.
|
// This is the largest value an interval16 can store.
|
||||||
MaxUint16 = 65535
|
MaxUint16 = math.MaxUint16
|
||||||
|
|
||||||
// Compute wordSizeInBytes, the size of a word in bytes.
|
// Compute wordSizeInBytes, the size of a word in bytes.
|
||||||
_m = ^uint64(0)
|
_m = ^uint64(0)
|
||||||
|
|||||||
2
vendor/github.com/armon/go-metrics/.gitignore
сгенерированный
поставляемый
2
vendor/github.com/armon/go-metrics/.gitignore
сгенерированный
поставляемый
@@ -22,3 +22,5 @@ _testmain.go
|
|||||||
*.exe
|
*.exe
|
||||||
|
|
||||||
/metrics.out
|
/metrics.out
|
||||||
|
|
||||||
|
.idea
|
||||||
|
|||||||
10
vendor/github.com/getsentry/sentry-go/.golangci.yml
сгенерированный
поставляемый
10
vendor/github.com/getsentry/sentry-go/.golangci.yml
сгенерированный
поставляемый
@@ -7,11 +7,11 @@ linters:
|
|||||||
- dogsled
|
- dogsled
|
||||||
- dupl
|
- dupl
|
||||||
- errcheck
|
- errcheck
|
||||||
- gochecknoglobals
|
|
||||||
- gochecknoinits
|
- gochecknoinits
|
||||||
- goconst
|
- goconst
|
||||||
- gocritic
|
- gocritic
|
||||||
- gocyclo
|
- gocyclo
|
||||||
|
- godot
|
||||||
- gofmt
|
- gofmt
|
||||||
- goimports
|
- goimports
|
||||||
- golint
|
- golint
|
||||||
@@ -33,14 +33,8 @@ linters:
|
|||||||
- unparam
|
- unparam
|
||||||
- unused
|
- unused
|
||||||
- varcheck
|
- varcheck
|
||||||
run:
|
- whitespace
|
||||||
skip-dirs:
|
|
||||||
- echo
|
|
||||||
- example/echo
|
|
||||||
issues:
|
issues:
|
||||||
exclude:
|
|
||||||
- "not declared by package utf8"
|
|
||||||
- "unicode/utf8/utf8.go"
|
|
||||||
exclude-rules:
|
exclude-rules:
|
||||||
- path: _test\.go
|
- path: _test\.go
|
||||||
linters:
|
linters:
|
||||||
|
|||||||
3
vendor/github.com/getsentry/sentry-go/.travis.yml
сгенерированный
поставляемый
3
vendor/github.com/getsentry/sentry-go/.travis.yml
сгенерированный
поставляемый
@@ -24,10 +24,11 @@ jobs:
|
|||||||
go test ./... -race
|
go test ./... -race
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- go: master
|
- go: master
|
||||||
|
- env: GO111MODULE=off
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/v1.19.1/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.19.1
|
- curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/v1.27.0/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.27.0
|
||||||
# Fetch origin/master. This is required for `git merge-base` when testing a
|
# Fetch origin/master. This is required for `git merge-base` when testing a
|
||||||
# branch, since Travis clones only the target branch.
|
# branch, since Travis clones only the target branch.
|
||||||
- git fetch origin master:remotes/origin/master
|
- git fetch origin master:remotes/origin/master
|
||||||
|
|||||||
28
vendor/github.com/getsentry/sentry-go/CHANGELOG.md
сгенерированный
поставляемый
28
vendor/github.com/getsentry/sentry-go/CHANGELOG.md
сгенерированный
поставляемый
@@ -1,8 +1,32 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## Unreleased
|
## v0.7.0
|
||||||
|
|
||||||
- "I am running away from my responsibilities. And it feels good." – Michael Scott, Season 4, "Money"
|
- feat: Include original error when event cannot be encoded as JSON (#258)
|
||||||
|
- feat: Use Hub from request context when available (#217, #259)
|
||||||
|
- feat: Extract stack frames from golang.org/x/xerrors (#262)
|
||||||
|
- feat: Make Environment Integration preserve existing context data (#261)
|
||||||
|
- feat: Recover and RecoverWithContext with arbitrary types (#268)
|
||||||
|
- feat: Report bad usage of CaptureMessage and CaptureEvent (#269)
|
||||||
|
- feat: Send debug logging to stderr by default (#266)
|
||||||
|
- feat: Several improvements to documentation (#223, #245, #250, #265)
|
||||||
|
- feat: Example of Recover followed by panic (#241, #247)
|
||||||
|
- feat: Add Transactions and Spans (to support OpenTelemetry Sentry Exporter) (#235, #243, #254)
|
||||||
|
- fix: Set either Frame.Filename or Frame.AbsPath (#233)
|
||||||
|
- fix: Clone requestBody to new Scope (#244)
|
||||||
|
- fix: Synchronize access and mutation of Hub.lastEventID (#264)
|
||||||
|
- fix: Avoid repeated syscalls in prepareEvent (#256)
|
||||||
|
- fix: Do not allocate new RNG for every event (#256)
|
||||||
|
- fix: Remove stale replace directive in go.mod (#255)
|
||||||
|
- fix(http): Deprecate HandleFunc, remove duplication (#260)
|
||||||
|
|
||||||
|
_NOTE:_
|
||||||
|
This version comes packed with several fixes and improvements and no breaking
|
||||||
|
changes.
|
||||||
|
Notably, there is a change in how the SDK reports file names in stack traces
|
||||||
|
that should resolve any ambiguity when looking at stack traces and using the
|
||||||
|
Suspect Commits feature.
|
||||||
|
We recommend all users to upgrade.
|
||||||
|
|
||||||
## v0.6.1
|
## v0.6.1
|
||||||
|
|
||||||
|
|||||||
43
vendor/github.com/getsentry/sentry-go/CONTRIBUTING.md
сгенерированный
поставляемый
43
vendor/github.com/getsentry/sentry-go/CONTRIBUTING.md
сгенерированный
поставляемый
@@ -1,3 +1,45 @@
|
|||||||
|
# Contributing to sentry-go
|
||||||
|
|
||||||
|
Hey, thank you if you're reading this, we welcome your contribution!
|
||||||
|
|
||||||
|
## Sending a Pull Request
|
||||||
|
|
||||||
|
Please help us save time when reviewing your PR by following this simple
|
||||||
|
process:
|
||||||
|
|
||||||
|
1. Is your PR a simple typo fix? Read no further, **click that green "Create
|
||||||
|
pull request" button**!
|
||||||
|
|
||||||
|
2. For more complex PRs that involve behavior changes or new APIs, please
|
||||||
|
consider [opening an **issue**][new-issue] describing the problem you're
|
||||||
|
trying to solve if there's not one already.
|
||||||
|
|
||||||
|
A PR is often one specific solution to a problem and sometimes talking about
|
||||||
|
the problem unfolds new possible solutions. Remember we will be responsible
|
||||||
|
for maintaining the changes later.
|
||||||
|
|
||||||
|
3. Fixing a bug and changing a behavior? Please add automated tests to prevent
|
||||||
|
future regression.
|
||||||
|
|
||||||
|
4. Practice writing good commit messages. We have [commit
|
||||||
|
guidelines][commit-guide].
|
||||||
|
|
||||||
|
5. We have [guidelines for PR submitters][pr-guide]. A short summary:
|
||||||
|
|
||||||
|
- Good PR descriptions are very helpful and most of the time they include
|
||||||
|
**why** something is done and why done in this particular way. Also list
|
||||||
|
other possible solutions that were considered and discarded.
|
||||||
|
- Be your own first reviewer. Make sure your code compiles and passes the
|
||||||
|
existing tests.
|
||||||
|
|
||||||
|
[new-issue]: https://github.com/getsentry/sentry-go/issues/new/choose
|
||||||
|
[commit-guide]: https://develop.sentry.dev/code-review/#commit-guidelines
|
||||||
|
[pr-guide]: https://develop.sentry.dev/code-review/#guidelines-for-submitters
|
||||||
|
|
||||||
|
Please also read through our [SDK Development docs](https://develop.sentry.dev/sdk/).
|
||||||
|
It contains information about SDK features, expected payloads and best practices for
|
||||||
|
contributing to Sentry SDKs.
|
||||||
|
|
||||||
## Community
|
## Community
|
||||||
|
|
||||||
The public-facing channels for support and development of Sentry SDKs can be found on [Discord](https://discord.gg/Ww9hbqr).
|
The public-facing channels for support and development of Sentry SDKs can be found on [Discord](https://discord.gg/Ww9hbqr).
|
||||||
@@ -23,6 +65,7 @@ $ go test -race
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Coverage
|
### Coverage
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ go test -race -coverprofile=coverage.txt -covermode=atomic && go tool cover -html coverage.txt
|
$ go test -race -coverprofile=coverage.txt -covermode=atomic && go tool cover -html coverage.txt
|
||||||
```
|
```
|
||||||
|
|||||||
2
vendor/github.com/getsentry/sentry-go/README.md
сгенерированный
поставляемый
2
vendor/github.com/getsentry/sentry-go/README.md
сгенерированный
поставляемый
@@ -154,7 +154,7 @@ checkout the official documentation:
|
|||||||
|
|
||||||
- [Configuration](https://docs.sentry.io/platforms/go/config)
|
- [Configuration](https://docs.sentry.io/platforms/go/config)
|
||||||
- [Error Reporting](https://docs.sentry.io/error-reporting/quickstart?platform=go)
|
- [Error Reporting](https://docs.sentry.io/error-reporting/quickstart?platform=go)
|
||||||
- [Enriching Error Data](https://docs.sentry.io/enriching-error-data/context?platform=go)
|
- [Enriching Error Data](https://docs.sentry.io/enriching-error-data/additional-data/?platform=go)
|
||||||
- [Transports](https://docs.sentry.io/platforms/go/transports)
|
- [Transports](https://docs.sentry.io/platforms/go/transports)
|
||||||
- [Integrations](https://docs.sentry.io/platforms/go/integrations)
|
- [Integrations](https://docs.sentry.io/platforms/go/integrations)
|
||||||
- [net/http](https://docs.sentry.io/platforms/go/http)
|
- [net/http](https://docs.sentry.io/platforms/go/http)
|
||||||
|
|||||||
175
vendor/github.com/getsentry/sentry-go/client.go
сгенерированный
поставляемый
175
vendor/github.com/getsentry/sentry-go/client.go
сгенерированный
поставляемый
@@ -12,6 +12,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -24,6 +25,40 @@ import (
|
|||||||
// stack trace is often the most useful information.
|
// stack trace is often the most useful information.
|
||||||
const maxErrorDepth = 10
|
const maxErrorDepth = 10
|
||||||
|
|
||||||
|
// hostname is the host name reported by the kernel. It is precomputed once to
|
||||||
|
// avoid syscalls when capturing events.
|
||||||
|
//
|
||||||
|
// The error is ignored because retrieving the host name is best-effort. If the
|
||||||
|
// error is non-nil, there is nothing to do other than retrying. We choose not
|
||||||
|
// to retry for now.
|
||||||
|
var hostname, _ = os.Hostname()
|
||||||
|
|
||||||
|
// lockedRand is a random number generator safe for concurrent use. Its API is
|
||||||
|
// intentionally limited and it is not meant as a full replacement for a
|
||||||
|
// rand.Rand.
|
||||||
|
type lockedRand struct {
|
||||||
|
mu sync.Mutex
|
||||||
|
r *rand.Rand
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float64 returns a pseudo-random number in [0.0,1.0).
|
||||||
|
func (r *lockedRand) Float64() float64 {
|
||||||
|
r.mu.Lock()
|
||||||
|
defer r.mu.Unlock()
|
||||||
|
return r.r.Float64()
|
||||||
|
}
|
||||||
|
|
||||||
|
// rng is the internal random number generator.
|
||||||
|
//
|
||||||
|
// We do not use the global functions from math/rand because, while they are
|
||||||
|
// safe for concurrent use, any package in a build could change the seed and
|
||||||
|
// affect the generated numbers, for instance making them deterministic. On the
|
||||||
|
// other hand, the source returned from rand.NewSource is not safe for
|
||||||
|
// concurrent use, so we need to couple its use with a sync.Mutex.
|
||||||
|
var rng = &lockedRand{
|
||||||
|
r: rand.New(rand.NewSource(time.Now().UnixNano())),
|
||||||
|
}
|
||||||
|
|
||||||
// usageError is used to report to Sentry an SDK usage error.
|
// usageError is used to report to Sentry an SDK usage error.
|
||||||
//
|
//
|
||||||
// It is not exported because it is never returned by any function or method in
|
// It is not exported because it is never returned by any function or method in
|
||||||
@@ -33,17 +68,27 @@ type usageError struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Logger is an instance of log.Logger that is use to provide debug information about running Sentry Client
|
// Logger is an instance of log.Logger that is use to provide debug information about running Sentry Client
|
||||||
// can be enabled by either using `Logger.SetOutput` directly or with `Debug` client option
|
// can be enabled by either using Logger.SetOutput directly or with Debug client option.
|
||||||
var Logger = log.New(ioutil.Discard, "[Sentry] ", log.LstdFlags) //nolint: gochecknoglobals
|
var Logger = log.New(ioutil.Discard, "[Sentry] ", log.LstdFlags)
|
||||||
|
|
||||||
|
// EventProcessor is a function that processes an event.
|
||||||
|
// Event processors are used to change an event before it is sent to Sentry.
|
||||||
type EventProcessor func(event *Event, hint *EventHint) *Event
|
type EventProcessor func(event *Event, hint *EventHint) *Event
|
||||||
|
|
||||||
|
// EventModifier is the interface that wraps the ApplyToEvent method.
|
||||||
|
//
|
||||||
|
// ApplyToEvent changes an event based on external data and/or
|
||||||
|
// an event hint.
|
||||||
type EventModifier interface {
|
type EventModifier interface {
|
||||||
ApplyToEvent(event *Event, hint *EventHint) *Event
|
ApplyToEvent(event *Event, hint *EventHint) *Event
|
||||||
}
|
}
|
||||||
|
|
||||||
var globalEventProcessors []EventProcessor //nolint: gochecknoglobals
|
var globalEventProcessors []EventProcessor
|
||||||
|
|
||||||
|
// AddGlobalEventProcessor adds processor to the global list of event
|
||||||
|
// processors. Global event processors apply to all events.
|
||||||
|
//
|
||||||
|
// Deprecated: Use Scope.AddEventProcessor or Client.AddEventProcessor instead.
|
||||||
func AddGlobalEventProcessor(processor EventProcessor) {
|
func AddGlobalEventProcessor(processor EventProcessor) {
|
||||||
globalEventProcessors = append(globalEventProcessors, processor)
|
globalEventProcessors = append(globalEventProcessors, processor)
|
||||||
}
|
}
|
||||||
@@ -54,14 +99,16 @@ type Integration interface {
|
|||||||
SetupOnce(client *Client)
|
SetupOnce(client *Client)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClientOptions that configures a SDK Client
|
// ClientOptions that configures a SDK Client.
|
||||||
type ClientOptions struct {
|
type ClientOptions struct {
|
||||||
// The DSN to use. If the DSN is not set, the client is effectively disabled.
|
// The DSN to use. If the DSN is not set, the client is effectively
|
||||||
|
// disabled.
|
||||||
Dsn string
|
Dsn string
|
||||||
// In debug mode, the debug information is printed to stdout to help you understand what
|
// In debug mode, the debug information is printed to stdout to help you
|
||||||
// sentry is doing.
|
// understand what sentry is doing.
|
||||||
Debug bool
|
Debug bool
|
||||||
// Configures whether SDK should generate and attach stacktraces to pure capture message calls.
|
// Configures whether SDK should generate and attach stacktraces to pure
|
||||||
|
// capture message calls.
|
||||||
AttachStacktrace bool
|
AttachStacktrace bool
|
||||||
// The sample rate for event submission (0.0 - 1.0, defaults to 1.0).
|
// The sample rate for event submission (0.0 - 1.0, defaults to 1.0).
|
||||||
SampleRate float64
|
SampleRate float64
|
||||||
@@ -73,13 +120,12 @@ type ClientOptions struct {
|
|||||||
BeforeSend func(event *Event, hint *EventHint) *Event
|
BeforeSend func(event *Event, hint *EventHint) *Event
|
||||||
// Before breadcrumb add callback.
|
// Before breadcrumb add callback.
|
||||||
BeforeBreadcrumb func(breadcrumb *Breadcrumb, hint *BreadcrumbHint) *Breadcrumb
|
BeforeBreadcrumb func(breadcrumb *Breadcrumb, hint *BreadcrumbHint) *Breadcrumb
|
||||||
// Integrations to be installed on the current Client, receives default integrations
|
// Integrations to be installed on the current Client, receives default
|
||||||
|
// integrations.
|
||||||
Integrations func([]Integration) []Integration
|
Integrations func([]Integration) []Integration
|
||||||
// io.Writer implementation that should be used with the `Debug` mode
|
// io.Writer implementation that should be used with the Debug mode.
|
||||||
DebugWriter io.Writer
|
DebugWriter io.Writer
|
||||||
// The transport to use.
|
// The transport to use. Defaults to HTTPTransport.
|
||||||
// This is an instance of a struct implementing `Transport` interface.
|
|
||||||
// Defaults to `httpTransport` from `transport.go`
|
|
||||||
Transport Transport
|
Transport Transport
|
||||||
// The server name to be reported.
|
// The server name to be reported.
|
||||||
ServerName string
|
ServerName string
|
||||||
@@ -91,26 +137,27 @@ type ClientOptions struct {
|
|||||||
Environment string
|
Environment string
|
||||||
// Maximum number of breadcrumbs.
|
// Maximum number of breadcrumbs.
|
||||||
MaxBreadcrumbs int
|
MaxBreadcrumbs int
|
||||||
// An optional pointer to `http.Client` that will be used with a default HTTPTransport.
|
// An optional pointer to http.Client that will be used with a default
|
||||||
// Using your own client will make HTTPTransport, HTTPProxy, HTTPSProxy and CaCerts options ignored.
|
// HTTPTransport. Using your own client will make HTTPTransport, HTTPProxy,
|
||||||
|
// HTTPSProxy and CaCerts options ignored.
|
||||||
HTTPClient *http.Client
|
HTTPClient *http.Client
|
||||||
// An optional pointer to `http.Transport` that will be used with a default HTTPTransport.
|
// An optional pointer to http.Transport that will be used with a default
|
||||||
// Using your own transport will make HTTPProxy, HTTPSProxy and CaCerts options ignored.
|
// HTTPTransport. Using your own transport will make HTTPProxy, HTTPSProxy
|
||||||
|
// and CaCerts options ignored.
|
||||||
HTTPTransport http.RoundTripper
|
HTTPTransport http.RoundTripper
|
||||||
// An optional HTTP proxy to use.
|
// An optional HTTP proxy to use.
|
||||||
// This will default to the `http_proxy` environment variable.
|
// This will default to the HTTP_PROXY environment variable.
|
||||||
// or `https_proxy` if that one exists.
|
|
||||||
HTTPProxy string
|
HTTPProxy string
|
||||||
// An optional HTTPS proxy to use.
|
// An optional HTTPS proxy to use.
|
||||||
// This will default to the `HTTPS_PROXY` environment variable
|
// This will default to the HTTPS_PROXY environment variable.
|
||||||
// or `http_proxy` if that one exists.
|
// HTTPS_PROXY takes precedence over HTTP_PROXY for https requests.
|
||||||
HTTPSProxy string
|
HTTPSProxy string
|
||||||
// An optional CaCerts to use.
|
// An optional set of SSL certificates to use.
|
||||||
// Defaults to `gocertifi.CACerts()`.
|
|
||||||
CaCerts *x509.CertPool
|
CaCerts *x509.CertPool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Client is the underlying processor that's used by the main API and `Hub` instances.
|
// Client is the underlying processor that is used by the main API and Hub
|
||||||
|
// instances.
|
||||||
type Client struct {
|
type Client struct {
|
||||||
options ClientOptions
|
options ClientOptions
|
||||||
dsn *Dsn
|
dsn *Dsn
|
||||||
@@ -119,12 +166,12 @@ type Client struct {
|
|||||||
Transport Transport
|
Transport Transport
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewClient creates and returns an instance of `Client` configured using `ClientOptions`.
|
// NewClient creates and returns an instance of Client configured using ClientOptions.
|
||||||
func NewClient(options ClientOptions) (*Client, error) {
|
func NewClient(options ClientOptions) (*Client, error) {
|
||||||
if options.Debug {
|
if options.Debug {
|
||||||
debugWriter := options.DebugWriter
|
debugWriter := options.DebugWriter
|
||||||
if debugWriter == nil {
|
if debugWriter == nil {
|
||||||
debugWriter = os.Stdout
|
debugWriter = os.Stderr
|
||||||
}
|
}
|
||||||
Logger.SetOutput(debugWriter)
|
Logger.SetOutput(debugWriter)
|
||||||
}
|
}
|
||||||
@@ -204,7 +251,7 @@ func (client *Client) AddEventProcessor(processor EventProcessor) {
|
|||||||
client.eventProcessors = append(client.eventProcessors, processor)
|
client.eventProcessors = append(client.eventProcessors, processor)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Options return `ClientOptions` for the current `Client`.
|
// Options return ClientOptions for the current Client.
|
||||||
func (client Client) Options() ClientOptions {
|
func (client Client) Options() ClientOptions {
|
||||||
return client.options
|
return client.options
|
||||||
}
|
}
|
||||||
@@ -224,36 +271,29 @@ func (client *Client) CaptureException(exception error, hint *EventHint, scope E
|
|||||||
// CaptureEvent captures an event on the currently active client if any.
|
// CaptureEvent captures an event on the currently active client if any.
|
||||||
//
|
//
|
||||||
// The event must already be assembled. Typically code would instead use
|
// The event must already be assembled. Typically code would instead use
|
||||||
// the utility methods like `CaptureException`. The return value is the
|
// the utility methods like CaptureException. The return value is the
|
||||||
// event ID. In case Sentry is disabled or event was dropped, the return value will be nil.
|
// event ID. In case Sentry is disabled or event was dropped, the return value will be nil.
|
||||||
func (client *Client) CaptureEvent(event *Event, hint *EventHint, scope EventModifier) *EventID {
|
func (client *Client) CaptureEvent(event *Event, hint *EventHint, scope EventModifier) *EventID {
|
||||||
return client.processEvent(event, hint, scope)
|
return client.processEvent(event, hint, scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recover captures a panic.
|
// Recover captures a panic.
|
||||||
// Returns `EventID` if successfully, or `nil` if there's no error to recover from.
|
// Returns EventID if successfully, or nil if there's no error to recover from.
|
||||||
func (client *Client) Recover(err interface{}, hint *EventHint, scope EventModifier) *EventID {
|
func (client *Client) Recover(err interface{}, hint *EventHint, scope EventModifier) *EventID {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = recover()
|
err = recover()
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
// Normally we would not pass a nil Context, but RecoverWithContext doesn't
|
||||||
if err, ok := err.(error); ok {
|
// use the Context for communicating deadline nor cancelation. All it does
|
||||||
event := client.eventFromException(err, LevelFatal)
|
// is store the Context in the EventHint and there nil means the Context is
|
||||||
return client.CaptureEvent(event, hint, scope)
|
// not available.
|
||||||
}
|
//nolint: staticcheck
|
||||||
|
return client.RecoverWithContext(nil, err, hint, scope)
|
||||||
if err, ok := err.(string); ok {
|
|
||||||
event := client.eventFromMessage(err, LevelFatal)
|
|
||||||
return client.CaptureEvent(event, hint, scope)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recover captures a panic and passes relevant context object.
|
// RecoverWithContext captures a panic and passes relevant context object.
|
||||||
// Returns `EventID` if successfully, or `nil` if there's no error to recover from.
|
// Returns EventID if successfully, or nil if there's no error to recover from.
|
||||||
func (client *Client) RecoverWithContext(
|
func (client *Client) RecoverWithContext(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
err interface{},
|
err interface{},
|
||||||
@@ -263,24 +303,29 @@ func (client *Client) RecoverWithContext(
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
err = recover()
|
err = recover()
|
||||||
}
|
}
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if ctx != nil {
|
||||||
if hint.Context == nil && ctx != nil {
|
if hint == nil {
|
||||||
|
hint = &EventHint{}
|
||||||
|
}
|
||||||
|
if hint.Context == nil {
|
||||||
hint.Context = ctx
|
hint.Context = ctx
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err, ok := err.(error); ok {
|
var event *Event
|
||||||
event := client.eventFromException(err, LevelFatal)
|
switch err := err.(type) {
|
||||||
|
case error:
|
||||||
|
event = client.eventFromException(err, LevelFatal)
|
||||||
|
case string:
|
||||||
|
event = client.eventFromMessage(err, LevelFatal)
|
||||||
|
default:
|
||||||
|
event = client.eventFromMessage(fmt.Sprintf("%#v", err), LevelFatal)
|
||||||
|
}
|
||||||
return client.CaptureEvent(event, hint, scope)
|
return client.CaptureEvent(event, hint, scope)
|
||||||
}
|
|
||||||
|
|
||||||
if err, ok := err.(string); ok {
|
|
||||||
event := client.eventFromMessage(err, LevelFatal)
|
|
||||||
return client.CaptureEvent(event, hint, scope)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flush waits until the underlying Transport sends any buffered events to the
|
// Flush waits until the underlying Transport sends any buffered events to the
|
||||||
@@ -299,6 +344,10 @@ func (client *Client) Flush(timeout time.Duration) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (client *Client) eventFromMessage(message string, level Level) *Event {
|
func (client *Client) eventFromMessage(message string, level Level) *Event {
|
||||||
|
if message == "" {
|
||||||
|
err := usageError{fmt.Errorf("%s called with empty message", callerFunctionName())}
|
||||||
|
return client.eventFromException(err, level)
|
||||||
|
}
|
||||||
event := NewEvent()
|
event := NewEvent()
|
||||||
event.Level = level
|
event.Level = level
|
||||||
event.Message = message
|
event.Message = message
|
||||||
@@ -362,6 +411,11 @@ func reverse(a []Exception) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (client *Client) processEvent(event *Event, hint *EventHint, scope EventModifier) *EventID {
|
func (client *Client) processEvent(event *Event, hint *EventHint, scope EventModifier) *EventID {
|
||||||
|
if event == nil {
|
||||||
|
err := usageError{fmt.Errorf("%s called with nil event", callerFunctionName())}
|
||||||
|
return client.CaptureException(err, hint, scope)
|
||||||
|
}
|
||||||
|
|
||||||
options := client.Options()
|
options := client.Options()
|
||||||
|
|
||||||
// TODO: Reconsider if its worth going away from default implementation
|
// TODO: Reconsider if its worth going away from default implementation
|
||||||
@@ -369,7 +423,7 @@ func (client *Client) processEvent(event *Event, hint *EventHint, scope EventMod
|
|||||||
// which means that if someone uses ClientOptions{} struct directly
|
// which means that if someone uses ClientOptions{} struct directly
|
||||||
// and we would not check for 0 here, we'd skip all events by default
|
// and we would not check for 0 here, we'd skip all events by default
|
||||||
if options.SampleRate != 0.0 {
|
if options.SampleRate != 0.0 {
|
||||||
randomFloat := rand.New(rand.NewSource(time.Now().UnixNano())).Float64()
|
randomFloat := rng.Float64()
|
||||||
if randomFloat > options.SampleRate {
|
if randomFloat > options.SampleRate {
|
||||||
Logger.Println("Event dropped due to SampleRate hit.")
|
Logger.Println("Event dropped due to SampleRate hit.")
|
||||||
return nil
|
return nil
|
||||||
@@ -380,7 +434,8 @@ func (client *Client) processEvent(event *Event, hint *EventHint, scope EventMod
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if options.BeforeSend != nil {
|
// As per spec, transactions do not go through BeforeSend.
|
||||||
|
if event.Type != transactionType && options.BeforeSend != nil {
|
||||||
h := &EventHint{}
|
h := &EventHint{}
|
||||||
if hint != nil {
|
if hint != nil {
|
||||||
h = hint
|
h = hint
|
||||||
@@ -412,7 +467,7 @@ func (client *Client) prepareEvent(event *Event, hint *EventHint, scope EventMod
|
|||||||
if event.ServerName == "" {
|
if event.ServerName == "" {
|
||||||
if client.Options().ServerName != "" {
|
if client.Options().ServerName != "" {
|
||||||
event.ServerName = client.Options().ServerName
|
event.ServerName = client.Options().ServerName
|
||||||
} else if hostname, err := os.Hostname(); err == nil {
|
} else {
|
||||||
event.ServerName = hostname
|
event.ServerName = hostname
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
38
vendor/github.com/getsentry/sentry-go/doc.go
сгенерированный
поставляемый
Обычный файл
38
vendor/github.com/getsentry/sentry-go/doc.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
Package sentry is the official Sentry SDK for Go.
|
||||||
|
|
||||||
|
For more information about Sentry and SDK features please have a look at the
|
||||||
|
documentation site https://docs.sentry.io/platforms/go/.
|
||||||
|
|
||||||
|
Basic Usage
|
||||||
|
|
||||||
|
The first step is to initialize the SDK, providing at a minimum the DSN of your
|
||||||
|
Sentry project. This step is accomplished through a call to sentry.Init.
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
err := sentry.Init(...)
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
A more detailed yet simple example is available at
|
||||||
|
https://github.com/getsentry/sentry-go/blob/master/example/basic/main.go.
|
||||||
|
|
||||||
|
Integrations
|
||||||
|
|
||||||
|
The SDK has support for several Go frameworks, available as subpackages.
|
||||||
|
|
||||||
|
Getting Support
|
||||||
|
|
||||||
|
For paid Sentry.io accounts, head out to https://sentry.io/support.
|
||||||
|
|
||||||
|
For all users, support channels include:
|
||||||
|
Forum: https://forum.sentry.io
|
||||||
|
Discord: https://discord.gg/Ww9hbqr (#go channel)
|
||||||
|
|
||||||
|
If you found an issue with the SDK, please report through
|
||||||
|
https://github.com/getsentry/sentry-go/issues/new/choose.
|
||||||
|
|
||||||
|
For responsibly disclosing a security issue, please follow the steps in
|
||||||
|
https://sentry.io/security/#vulnerability-disclosure.
|
||||||
|
*/
|
||||||
|
package sentry
|
||||||
24
vendor/github.com/getsentry/sentry-go/dsn.go
сгенерированный
поставляемый
24
vendor/github.com/getsentry/sentry-go/dsn.go
сгенерированный
поставляемый
@@ -27,6 +27,8 @@ func (scheme scheme) defaultPort() int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DsnParseError represents an error that occurs if a Sentry
|
||||||
|
// DSN cannot be parsed.
|
||||||
type DsnParseError struct {
|
type DsnParseError struct {
|
||||||
Message string
|
Message string
|
||||||
}
|
}
|
||||||
@@ -46,7 +48,7 @@ type Dsn struct {
|
|||||||
projectID int
|
projectID int
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDsn creates an instance of `Dsn` by parsing provided url in a `string` format.
|
// NewDsn creates an instance of Dsn by parsing provided url in a string format.
|
||||||
// If Dsn is not set the client is effectively disabled.
|
// If Dsn is not set the client is effectively disabled.
|
||||||
func NewDsn(rawURL string) (*Dsn, error) {
|
func NewDsn(rawURL string) (*Dsn, error) {
|
||||||
// Parse
|
// Parse
|
||||||
@@ -123,7 +125,7 @@ func NewDsn(rawURL string) (*Dsn, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// String formats Dsn struct into a valid string url
|
// String formats Dsn struct into a valid string url.
|
||||||
func (dsn Dsn) String() string {
|
func (dsn Dsn) String() string {
|
||||||
var url string
|
var url string
|
||||||
url += fmt.Sprintf("%s://%s", dsn.scheme, dsn.publicKey)
|
url += fmt.Sprintf("%s://%s", dsn.scheme, dsn.publicKey)
|
||||||
@@ -141,9 +143,19 @@ func (dsn Dsn) String() string {
|
|||||||
return url
|
return url
|
||||||
}
|
}
|
||||||
|
|
||||||
// StoreAPIURL returns assembled url to be used in the transport.
|
// StoreAPIURL returns the URL of the store endpoint of the project associated
|
||||||
// It points to configures Sentry instance.
|
// with the DSN.
|
||||||
func (dsn Dsn) StoreAPIURL() *url.URL {
|
func (dsn Dsn) StoreAPIURL() *url.URL {
|
||||||
|
return dsn.getAPIURL("store")
|
||||||
|
}
|
||||||
|
|
||||||
|
// EnvelopeAPIURL returns the URL of the envelope endpoint of the project
|
||||||
|
// associated with the DSN.
|
||||||
|
func (dsn Dsn) EnvelopeAPIURL() *url.URL {
|
||||||
|
return dsn.getAPIURL("envelope")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (dsn Dsn) getAPIURL(s string) *url.URL {
|
||||||
var rawURL string
|
var rawURL string
|
||||||
rawURL += fmt.Sprintf("%s://%s", dsn.scheme, dsn.host)
|
rawURL += fmt.Sprintf("%s://%s", dsn.scheme, dsn.host)
|
||||||
if dsn.port != dsn.scheme.defaultPort() {
|
if dsn.port != dsn.scheme.defaultPort() {
|
||||||
@@ -152,7 +164,7 @@ func (dsn Dsn) StoreAPIURL() *url.URL {
|
|||||||
if dsn.path != "" {
|
if dsn.path != "" {
|
||||||
rawURL += dsn.path
|
rawURL += dsn.path
|
||||||
}
|
}
|
||||||
rawURL += fmt.Sprintf("/api/%d/store/", dsn.projectID)
|
rawURL += fmt.Sprintf("/api/%d/%s/", dsn.projectID, s)
|
||||||
parsedURL, _ := url.Parse(rawURL)
|
parsedURL, _ := url.Parse(rawURL)
|
||||||
return parsedURL
|
return parsedURL
|
||||||
}
|
}
|
||||||
@@ -172,10 +184,12 @@ func (dsn Dsn) RequestHeaders() map[string]string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MarshalJSON converts the Dsn struct to JSON.
|
||||||
func (dsn Dsn) MarshalJSON() ([]byte, error) {
|
func (dsn Dsn) MarshalJSON() ([]byte, error) {
|
||||||
return json.Marshal(dsn.String())
|
return json.Marshal(dsn.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON converts JSON data to the Dsn struct.
|
||||||
func (dsn *Dsn) UnmarshalJSON(data []byte) error {
|
func (dsn *Dsn) UnmarshalJSON(data []byte) error {
|
||||||
var str string
|
var str string
|
||||||
_ = json.Unmarshal(data, &str)
|
_ = json.Unmarshal(data, &str)
|
||||||
|
|||||||
2
vendor/github.com/getsentry/sentry-go/go.mod
сгенерированный
поставляемый
2
vendor/github.com/getsentry/sentry-go/go.mod
сгенерированный
поставляемый
@@ -31,5 +31,3 @@ require (
|
|||||||
github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect
|
github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect
|
||||||
github.com/yudai/pp v2.0.1+incompatible // indirect
|
github.com/yudai/pp v2.0.1+incompatible // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/ugorji/go v1.1.4 => github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43
|
|
||||||
|
|||||||
4
vendor/github.com/getsentry/sentry-go/go.sum
сгенерированный
поставляемый
4
vendor/github.com/getsentry/sentry-go/go.sum
сгенерированный
поставляемый
@@ -170,13 +170,11 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
|
|||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
github.com/ugorji/go v1.1.2/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
|
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||||
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
|
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
|
||||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||||
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648=
|
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648=
|
||||||
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
||||||
github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43 h1:BasDe+IErOQKrMVXab7UayvSlIpiyGwRvuX3EKYY7UA=
|
|
||||||
github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43/go.mod h1:iT03XoTwV7xq/+UGwKO3UbC1nNNlopQiY61beSdrtOA=
|
|
||||||
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
|
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
|
||||||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
||||||
github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc=
|
github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc=
|
||||||
|
|||||||
34
vendor/github.com/getsentry/sentry-go/http/sentryhttp.go
сгенерированный
поставляемый
34
vendor/github.com/getsentry/sentry-go/http/sentryhttp.go
сгенерированный
поставляемый
@@ -50,32 +50,28 @@ func New(options Options) *Handler {
|
|||||||
|
|
||||||
// Handle wraps http.Handler and recovers from caught panics.
|
// Handle wraps http.Handler and recovers from caught panics.
|
||||||
func (h *Handler) Handle(handler http.Handler) http.Handler {
|
func (h *Handler) Handle(handler http.Handler) http.Handler {
|
||||||
|
return h.handle(handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use the Handle method instead.
|
||||||
|
func (h *Handler) HandleFunc(handler http.HandlerFunc) http.HandlerFunc {
|
||||||
|
return h.handle(handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Handler) handle(handler http.Handler) http.HandlerFunc {
|
||||||
return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
|
||||||
hub := sentry.CurrentHub().Clone()
|
ctx := r.Context()
|
||||||
|
hub := sentry.GetHubFromContext(ctx)
|
||||||
|
if hub == nil {
|
||||||
|
hub = sentry.CurrentHub().Clone()
|
||||||
|
}
|
||||||
hub.Scope().SetRequest(r)
|
hub.Scope().SetRequest(r)
|
||||||
ctx := sentry.SetHubOnContext(
|
ctx = sentry.SetHubOnContext(ctx, hub)
|
||||||
r.Context(),
|
|
||||||
hub,
|
|
||||||
)
|
|
||||||
defer h.recoverWithSentry(hub, r)
|
defer h.recoverWithSentry(hub, r)
|
||||||
handler.ServeHTTP(rw, r.WithContext(ctx))
|
handler.ServeHTTP(rw, r.WithContext(ctx))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// HandleFunc wraps http.HandleFunc and recovers from caught panics.
|
|
||||||
func (h *Handler) HandleFunc(handler http.HandlerFunc) http.HandlerFunc {
|
|
||||||
return func(rw http.ResponseWriter, r *http.Request) {
|
|
||||||
hub := sentry.CurrentHub().Clone()
|
|
||||||
hub.Scope().SetRequest(r)
|
|
||||||
ctx := sentry.SetHubOnContext(
|
|
||||||
r.Context(),
|
|
||||||
hub,
|
|
||||||
)
|
|
||||||
defer h.recoverWithSentry(hub, r)
|
|
||||||
handler(rw, r.WithContext(ctx))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Handler) recoverWithSentry(hub *sentry.Hub, r *http.Request) {
|
func (h *Handler) recoverWithSentry(hub *sentry.Hub, r *http.Request) {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
eventID := hub.RecoverWithContext(
|
eventID := hub.RecoverWithContext(
|
||||||
|
|||||||
115
vendor/github.com/getsentry/sentry-go/hub.go
сгенерированный
поставляемый
115
vendor/github.com/getsentry/sentry-go/hub.go
сгенерированный
поставляемый
@@ -8,21 +8,25 @@ import (
|
|||||||
|
|
||||||
type contextKey int
|
type contextKey int
|
||||||
|
|
||||||
// HubContextKey is a context key used to store Hub on any context.Context type
|
// Keys used to store values in a Context. Use with Context.Value to access
|
||||||
const HubContextKey = contextKey(1)
|
// values stored by the SDK.
|
||||||
|
const (
|
||||||
|
// HubContextKey is the key used to store the current Hub.
|
||||||
|
HubContextKey = contextKey(1)
|
||||||
|
// RequestContextKey is the key used to store the current http.Request.
|
||||||
|
RequestContextKey = contextKey(2)
|
||||||
|
)
|
||||||
|
|
||||||
// RequestContextKey is a context key used to store http.Request on the context passed to RecoverWithContext
|
// defaultMaxBreadcrumbs is the default maximum number of breadcrumbs added to
|
||||||
const RequestContextKey = contextKey(2)
|
// an event. Can be overwritten with the maxBreadcrumbs option.
|
||||||
|
|
||||||
// Default maximum number of breadcrumbs added to an event. Can be overwritten `maxBreadcrumbs` option.
|
|
||||||
const defaultMaxBreadcrumbs = 30
|
const defaultMaxBreadcrumbs = 30
|
||||||
|
|
||||||
// Absolute maximum number of breadcrumbs added to an event.
|
// maxBreadcrumbs is the absolute maximum number of breadcrumbs added to an
|
||||||
// The `maxBreadcrumbs` option cannot be higher than this value.
|
// event. The maxBreadcrumbs option cannot be set higher than this value.
|
||||||
const maxBreadcrumbs = 100
|
const maxBreadcrumbs = 100
|
||||||
|
|
||||||
// Initial instance of the Hub that has no `Client` bound and an empty `Scope`
|
// currentHub is the initial Hub with no Client bound and an empty Scope.
|
||||||
var currentHub = NewHub(nil, NewScope()) //nolint: gochecknoglobals
|
var currentHub = NewHub(nil, NewScope())
|
||||||
|
|
||||||
// Hub is the central object that manages scopes and clients.
|
// Hub is the central object that manages scopes and clients.
|
||||||
//
|
//
|
||||||
@@ -31,7 +35,7 @@ var currentHub = NewHub(nil, NewScope()) //nolint: gochecknoglobals
|
|||||||
//
|
//
|
||||||
// In most situations developers do not need to interface the hub. Instead
|
// In most situations developers do not need to interface the hub. Instead
|
||||||
// toplevel convenience functions are exposed that will automatically dispatch
|
// toplevel convenience functions are exposed that will automatically dispatch
|
||||||
// to global (`CurrentHub`) hub. In some situations this might not be
|
// to global (CurrentHub) hub. In some situations this might not be
|
||||||
// possible in which case it might become necessary to manually work with the
|
// possible in which case it might become necessary to manually work with the
|
||||||
// hub. This is for instance the case when working with async code.
|
// hub. This is for instance the case when working with async code.
|
||||||
type Hub struct {
|
type Hub struct {
|
||||||
@@ -64,7 +68,7 @@ func (l *layer) SetClient(c *Client) {
|
|||||||
|
|
||||||
type stack []*layer
|
type stack []*layer
|
||||||
|
|
||||||
// NewHub returns an instance of a `Hub` with provided `Client` and `Scope` bound.
|
// NewHub returns an instance of a Hub with provided Client and Scope bound.
|
||||||
func NewHub(client *Client, scope *Scope) *Hub {
|
func NewHub(client *Client, scope *Scope) *Hub {
|
||||||
hub := Hub{
|
hub := Hub{
|
||||||
stack: &stack{{
|
stack: &stack{{
|
||||||
@@ -75,13 +79,16 @@ func NewHub(client *Client, scope *Scope) *Hub {
|
|||||||
return &hub
|
return &hub
|
||||||
}
|
}
|
||||||
|
|
||||||
// CurrentHub returns an instance of previously initialized `Hub` stored in the global namespace.
|
// CurrentHub returns an instance of previously initialized Hub stored in the global namespace.
|
||||||
func CurrentHub() *Hub {
|
func CurrentHub() *Hub {
|
||||||
return currentHub
|
return currentHub
|
||||||
}
|
}
|
||||||
|
|
||||||
// LastEventID returns an ID of last captured event for the current `Hub`.
|
// LastEventID returns an ID of last captured event for the current Hub.
|
||||||
func (hub *Hub) LastEventID() EventID {
|
func (hub *Hub) LastEventID() EventID {
|
||||||
|
hub.mu.RLock()
|
||||||
|
defer hub.mu.RUnlock()
|
||||||
|
|
||||||
return hub.lastEventID
|
return hub.lastEventID
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,7 +123,7 @@ func (hub *Hub) Clone() *Hub {
|
|||||||
return NewHub(top.Client(), scope)
|
return NewHub(top.Client(), scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scope returns top-level `Scope` of the current `Hub` or `nil` if no `Scope` is bound.
|
// Scope returns top-level Scope of the current Hub or nil if no Scope is bound.
|
||||||
func (hub *Hub) Scope() *Scope {
|
func (hub *Hub) Scope() *Scope {
|
||||||
top := hub.stackTop()
|
top := hub.stackTop()
|
||||||
if top == nil {
|
if top == nil {
|
||||||
@@ -125,7 +132,7 @@ func (hub *Hub) Scope() *Scope {
|
|||||||
return top.scope
|
return top.scope
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scope returns top-level `Client` of the current `Hub` or `nil` if no `Client` is bound.
|
// Client returns top-level Client of the current Hub or nil if no Client is bound.
|
||||||
func (hub *Hub) Client() *Client {
|
func (hub *Hub) Client() *Client {
|
||||||
top := hub.stackTop()
|
top := hub.stackTop()
|
||||||
if top == nil {
|
if top == nil {
|
||||||
@@ -134,7 +141,7 @@ func (hub *Hub) Client() *Client {
|
|||||||
return top.Client()
|
return top.Client()
|
||||||
}
|
}
|
||||||
|
|
||||||
// PushScope pushes a new scope for the current `Hub` and reuses previously bound `Client`.
|
// PushScope pushes a new scope for the current Hub and reuses previously bound Client.
|
||||||
func (hub *Hub) PushScope() *Scope {
|
func (hub *Hub) PushScope() *Scope {
|
||||||
top := hub.stackTop()
|
top := hub.stackTop()
|
||||||
|
|
||||||
@@ -161,7 +168,7 @@ func (hub *Hub) PushScope() *Scope {
|
|||||||
return scope
|
return scope
|
||||||
}
|
}
|
||||||
|
|
||||||
// PushScope pops the most recent scope for the current `Hub`.
|
// PopScope pops the most recent scope for the current Hub.
|
||||||
func (hub *Hub) PopScope() {
|
func (hub *Hub) PopScope() {
|
||||||
hub.mu.Lock()
|
hub.mu.Lock()
|
||||||
defer hub.mu.Unlock()
|
defer hub.mu.Unlock()
|
||||||
@@ -173,7 +180,7 @@ func (hub *Hub) PopScope() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// BindClient binds a new `Client` for the current `Hub`.
|
// BindClient binds a new Client for the current Hub.
|
||||||
func (hub *Hub) BindClient(client *Client) {
|
func (hub *Hub) BindClient(client *Client) {
|
||||||
top := hub.stackTop()
|
top := hub.stackTop()
|
||||||
if top != nil {
|
if top != nil {
|
||||||
@@ -181,36 +188,46 @@ func (hub *Hub) BindClient(client *Client) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithScope temporarily pushes a scope for a single call.
|
// WithScope runs f in an isolated temporary scope.
|
||||||
//
|
//
|
||||||
// A shorthand for:
|
// It is useful when extra data should be sent with a single capture call, for
|
||||||
// PushScope()
|
// instance a different level or tags.
|
||||||
// f(scope)
|
//
|
||||||
// PopScope()
|
// The scope passed to f starts as a clone of the current scope and can be
|
||||||
|
// freely modified without affecting the current scope.
|
||||||
|
//
|
||||||
|
// It is a shorthand for PushScope followed by PopScope.
|
||||||
func (hub *Hub) WithScope(f func(scope *Scope)) {
|
func (hub *Hub) WithScope(f func(scope *Scope)) {
|
||||||
scope := hub.PushScope()
|
scope := hub.PushScope()
|
||||||
defer hub.PopScope()
|
defer hub.PopScope()
|
||||||
f(scope)
|
f(scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConfigureScope invokes a function that can modify the current scope.
|
// ConfigureScope runs f in the current scope.
|
||||||
//
|
//
|
||||||
// The function is passed a mutable reference to the `Scope` so that modifications
|
// It is useful to set data that applies to all events that share the current
|
||||||
// can be performed.
|
// scope.
|
||||||
|
//
|
||||||
|
// Modifying the scope affects all references to the current scope.
|
||||||
|
//
|
||||||
|
// See also WithScope for making isolated temporary changes.
|
||||||
func (hub *Hub) ConfigureScope(f func(scope *Scope)) {
|
func (hub *Hub) ConfigureScope(f func(scope *Scope)) {
|
||||||
scope := hub.Scope()
|
scope := hub.Scope()
|
||||||
f(scope)
|
f(scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CaptureEvent calls the method of a same name on currently bound `Client` instance
|
// CaptureEvent calls the method of a same name on currently bound Client instance
|
||||||
// passing it a top-level `Scope`.
|
// passing it a top-level Scope.
|
||||||
// Returns `EventID` if successfully, or `nil` if there's no `Scope` or `Client` available.
|
// Returns EventID if successfully, or nil if there's no Scope or Client available.
|
||||||
func (hub *Hub) CaptureEvent(event *Event) *EventID {
|
func (hub *Hub) CaptureEvent(event *Event) *EventID {
|
||||||
client, scope := hub.Client(), hub.Scope()
|
client, scope := hub.Client(), hub.Scope()
|
||||||
if client == nil || scope == nil {
|
if client == nil || scope == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
eventID := client.CaptureEvent(event, nil, scope)
|
eventID := client.CaptureEvent(event, nil, scope)
|
||||||
|
|
||||||
|
hub.mu.Lock()
|
||||||
|
defer hub.mu.Unlock()
|
||||||
if eventID != nil {
|
if eventID != nil {
|
||||||
hub.lastEventID = *eventID
|
hub.lastEventID = *eventID
|
||||||
} else {
|
} else {
|
||||||
@@ -219,15 +236,18 @@ func (hub *Hub) CaptureEvent(event *Event) *EventID {
|
|||||||
return eventID
|
return eventID
|
||||||
}
|
}
|
||||||
|
|
||||||
// CaptureMessage calls the method of a same name on currently bound `Client` instance
|
// CaptureMessage calls the method of a same name on currently bound Client instance
|
||||||
// passing it a top-level `Scope`.
|
// passing it a top-level Scope.
|
||||||
// Returns `EventID` if successfully, or `nil` if there's no `Scope` or `Client` available.
|
// Returns EventID if successfully, or nil if there's no Scope or Client available.
|
||||||
func (hub *Hub) CaptureMessage(message string) *EventID {
|
func (hub *Hub) CaptureMessage(message string) *EventID {
|
||||||
client, scope := hub.Client(), hub.Scope()
|
client, scope := hub.Client(), hub.Scope()
|
||||||
if client == nil || scope == nil {
|
if client == nil || scope == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
eventID := client.CaptureMessage(message, nil, scope)
|
eventID := client.CaptureMessage(message, nil, scope)
|
||||||
|
|
||||||
|
hub.mu.Lock()
|
||||||
|
defer hub.mu.Unlock()
|
||||||
if eventID != nil {
|
if eventID != nil {
|
||||||
hub.lastEventID = *eventID
|
hub.lastEventID = *eventID
|
||||||
} else {
|
} else {
|
||||||
@@ -236,15 +256,18 @@ func (hub *Hub) CaptureMessage(message string) *EventID {
|
|||||||
return eventID
|
return eventID
|
||||||
}
|
}
|
||||||
|
|
||||||
// CaptureException calls the method of a same name on currently bound `Client` instance
|
// CaptureException calls the method of a same name on currently bound Client instance
|
||||||
// passing it a top-level `Scope`.
|
// passing it a top-level Scope.
|
||||||
// Returns `EventID` if successfully, or `nil` if there's no `Scope` or `Client` available.
|
// Returns EventID if successfully, or nil if there's no Scope or Client available.
|
||||||
func (hub *Hub) CaptureException(exception error) *EventID {
|
func (hub *Hub) CaptureException(exception error) *EventID {
|
||||||
client, scope := hub.Client(), hub.Scope()
|
client, scope := hub.Client(), hub.Scope()
|
||||||
if client == nil || scope == nil {
|
if client == nil || scope == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
eventID := client.CaptureException(exception, &EventHint{OriginalException: exception}, scope)
|
eventID := client.CaptureException(exception, &EventHint{OriginalException: exception}, scope)
|
||||||
|
|
||||||
|
hub.mu.Lock()
|
||||||
|
defer hub.mu.Unlock()
|
||||||
if eventID != nil {
|
if eventID != nil {
|
||||||
hub.lastEventID = *eventID
|
hub.lastEventID = *eventID
|
||||||
} else {
|
} else {
|
||||||
@@ -294,9 +317,9 @@ func (hub *Hub) AddBreadcrumb(breadcrumb *Breadcrumb, hint *BreadcrumbHint) {
|
|||||||
hub.Scope().AddBreadcrumb(breadcrumb, max)
|
hub.Scope().AddBreadcrumb(breadcrumb, max)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recover calls the method of a same name on currently bound `Client` instance
|
// Recover calls the method of a same name on currently bound Client instance
|
||||||
// passing it a top-level `Scope`.
|
// passing it a top-level Scope.
|
||||||
// Returns `EventID` if successfully, or `nil` if there's no `Scope` or `Client` available.
|
// Returns EventID if successfully, or nil if there's no Scope or Client available.
|
||||||
func (hub *Hub) Recover(err interface{}) *EventID {
|
func (hub *Hub) Recover(err interface{}) *EventID {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = recover()
|
err = recover()
|
||||||
@@ -308,9 +331,9 @@ func (hub *Hub) Recover(err interface{}) *EventID {
|
|||||||
return client.Recover(err, &EventHint{RecoveredException: err}, scope)
|
return client.Recover(err, &EventHint{RecoveredException: err}, scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RecoverWithContext calls the method of a same name on currently bound `Client` instance
|
// RecoverWithContext calls the method of a same name on currently bound Client instance
|
||||||
// passing it a top-level `Scope`.
|
// passing it a top-level Scope.
|
||||||
// Returns `EventID` if successfully, or `nil` if there's no `Scope` or `Client` available.
|
// Returns EventID if successfully, or nil if there's no Scope or Client available.
|
||||||
func (hub *Hub) RecoverWithContext(ctx context.Context, err interface{}) *EventID {
|
func (hub *Hub) RecoverWithContext(ctx context.Context, err interface{}) *EventID {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = recover()
|
err = recover()
|
||||||
@@ -343,14 +366,14 @@ func (hub *Hub) Flush(timeout time.Duration) bool {
|
|||||||
return client.Flush(timeout)
|
return client.Flush(timeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
// HasHubOnContext checks whether `Hub` instance is bound to a given `Context` struct.
|
// HasHubOnContext checks whether Hub instance is bound to a given Context struct.
|
||||||
func HasHubOnContext(ctx context.Context) bool {
|
func HasHubOnContext(ctx context.Context) bool {
|
||||||
_, ok := ctx.Value(HubContextKey).(*Hub)
|
_, ok := ctx.Value(HubContextKey).(*Hub)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetHubFromContext tries to retrieve `Hub` instance from the given `Context` struct
|
// GetHubFromContext tries to retrieve Hub instance from the given Context struct
|
||||||
// or return `nil` if one is not found.
|
// or return nil if one is not found.
|
||||||
func GetHubFromContext(ctx context.Context) *Hub {
|
func GetHubFromContext(ctx context.Context) *Hub {
|
||||||
if hub, ok := ctx.Value(HubContextKey).(*Hub); ok {
|
if hub, ok := ctx.Value(HubContextKey).(*Hub); ok {
|
||||||
return hub
|
return hub
|
||||||
@@ -358,7 +381,7 @@ func GetHubFromContext(ctx context.Context) *Hub {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetHubOnContext stores given `Hub` instance on the `Context` struct and returns a new `Context`.
|
// SetHubOnContext stores given Hub instance on the Context struct and returns a new Context.
|
||||||
func SetHubOnContext(ctx context.Context, hub *Hub) context.Context {
|
func SetHubOnContext(ctx context.Context, hub *Hub) context.Context {
|
||||||
return context.WithValue(ctx, HubContextKey, hub)
|
return context.WithValue(ctx, HubContextKey, hub)
|
||||||
}
|
}
|
||||||
|
|||||||
50
vendor/github.com/getsentry/sentry-go/integrations.go
сгенерированный
поставляемый
50
vendor/github.com/getsentry/sentry-go/integrations.go
сгенерированный
поставляемый
@@ -70,27 +70,49 @@ func (ei *environmentIntegration) SetupOnce(client *Client) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ei *environmentIntegration) processor(event *Event, hint *EventHint) *Event {
|
func (ei *environmentIntegration) processor(event *Event, hint *EventHint) *Event {
|
||||||
|
// Initialize maps as necessary.
|
||||||
if event.Contexts == nil {
|
if event.Contexts == nil {
|
||||||
event.Contexts = make(map[string]interface{})
|
event.Contexts = make(map[string]interface{})
|
||||||
}
|
}
|
||||||
|
for _, name := range []string{"device", "os", "runtime"} {
|
||||||
event.Contexts["device"] = map[string]interface{}{
|
if event.Contexts[name] == nil {
|
||||||
"arch": runtime.GOARCH,
|
event.Contexts[name] = make(map[string]interface{})
|
||||||
"num_cpu": runtime.NumCPU(),
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
event.Contexts["os"] = map[string]interface{}{
|
// Set contextual information preserving existing data. For each context, if
|
||||||
"name": runtime.GOOS,
|
// the existing value is not of type map[string]interface{}, then no
|
||||||
|
// additional information is added.
|
||||||
|
if deviceContext, ok := event.Contexts["device"].(map[string]interface{}); ok {
|
||||||
|
if _, ok := deviceContext["arch"]; !ok {
|
||||||
|
deviceContext["arch"] = runtime.GOARCH
|
||||||
|
}
|
||||||
|
if _, ok := deviceContext["num_cpu"]; !ok {
|
||||||
|
deviceContext["num_cpu"] = runtime.NumCPU()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if osContext, ok := event.Contexts["os"].(map[string]interface{}); ok {
|
||||||
|
if _, ok := osContext["name"]; !ok {
|
||||||
|
osContext["name"] = runtime.GOOS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if runtimeContext, ok := event.Contexts["runtime"].(map[string]interface{}); ok {
|
||||||
|
if _, ok := runtimeContext["name"]; !ok {
|
||||||
|
runtimeContext["name"] = "go"
|
||||||
|
}
|
||||||
|
if _, ok := runtimeContext["version"]; !ok {
|
||||||
|
runtimeContext["version"] = runtime.Version()
|
||||||
|
}
|
||||||
|
if _, ok := runtimeContext["go_numroutines"]; !ok {
|
||||||
|
runtimeContext["go_numroutines"] = runtime.NumGoroutine()
|
||||||
|
}
|
||||||
|
if _, ok := runtimeContext["go_maxprocs"]; !ok {
|
||||||
|
runtimeContext["go_maxprocs"] = runtime.GOMAXPROCS(0)
|
||||||
|
}
|
||||||
|
if _, ok := runtimeContext["go_numcgocalls"]; !ok {
|
||||||
|
runtimeContext["go_numcgocalls"] = runtime.NumCgoCall()
|
||||||
}
|
}
|
||||||
|
|
||||||
event.Contexts["runtime"] = map[string]interface{}{
|
|
||||||
"name": "go",
|
|
||||||
"version": runtime.Version(),
|
|
||||||
"go_numroutines": runtime.NumGoroutine(),
|
|
||||||
"go_maxprocs": runtime.GOMAXPROCS(0),
|
|
||||||
"go_numcgocalls": runtime.NumCgoCall(),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return event
|
return event
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
126
vendor/github.com/getsentry/sentry-go/interfaces.go
сгенерированный
поставляемый
126
vendor/github.com/getsentry/sentry-go/interfaces.go
сгенерированный
поставляемый
@@ -13,9 +13,13 @@ import (
|
|||||||
// Protocol Docs (kinda)
|
// Protocol Docs (kinda)
|
||||||
// https://github.com/getsentry/rust-sentry-types/blob/master/src/protocol/v7.rs
|
// https://github.com/getsentry/rust-sentry-types/blob/master/src/protocol/v7.rs
|
||||||
|
|
||||||
// Level marks the severity of the event
|
// transactionType is the type of a transaction event.
|
||||||
|
const transactionType = "transaction"
|
||||||
|
|
||||||
|
// Level marks the severity of the event.
|
||||||
type Level string
|
type Level string
|
||||||
|
|
||||||
|
// Describes the severity of the event.
|
||||||
const (
|
const (
|
||||||
LevelDebug Level = "debug"
|
LevelDebug Level = "debug"
|
||||||
LevelInfo Level = "info"
|
LevelInfo Level = "info"
|
||||||
@@ -24,7 +28,7 @@ const (
|
|||||||
LevelFatal Level = "fatal"
|
LevelFatal Level = "fatal"
|
||||||
)
|
)
|
||||||
|
|
||||||
// https://docs.sentry.io/development/sdk-dev/event-payloads/sdk/
|
// SdkInfo contains all metadata about about the SDK being used.
|
||||||
type SdkInfo struct {
|
type SdkInfo struct {
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
Version string `json:"version,omitempty"`
|
Version string `json:"version,omitempty"`
|
||||||
@@ -32,6 +36,7 @@ type SdkInfo struct {
|
|||||||
Packages []SdkPackage `json:"packages,omitempty"`
|
Packages []SdkPackage `json:"packages,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SdkPackage describes a package that was installed.
|
||||||
type SdkPackage struct {
|
type SdkPackage struct {
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
Version string `json:"version,omitempty"`
|
Version string `json:"version,omitempty"`
|
||||||
@@ -39,10 +44,13 @@ type SdkPackage struct {
|
|||||||
|
|
||||||
// TODO: This type could be more useful, as map of interface{} is too generic
|
// TODO: This type could be more useful, as map of interface{} is too generic
|
||||||
// and requires a lot of type assertions in beforeBreadcrumb calls
|
// and requires a lot of type assertions in beforeBreadcrumb calls
|
||||||
// plus it could just be `map[string]interface{}` then
|
// plus it could just be map[string]interface{} then.
|
||||||
|
|
||||||
|
// BreadcrumbHint contains information that can be associated with a Breadcrumb.
|
||||||
type BreadcrumbHint map[string]interface{}
|
type BreadcrumbHint map[string]interface{}
|
||||||
|
|
||||||
// https://docs.sentry.io/development/sdk-dev/event-payloads/breadcrumbs/
|
// Breadcrumb specifies an application event that occurred before a Sentry event.
|
||||||
|
// An event may contain one or more breadcrumbs.
|
||||||
type Breadcrumb struct {
|
type Breadcrumb struct {
|
||||||
Category string `json:"category,omitempty"`
|
Category string `json:"category,omitempty"`
|
||||||
Data map[string]interface{} `json:"data,omitempty"`
|
Data map[string]interface{} `json:"data,omitempty"`
|
||||||
@@ -52,6 +60,7 @@ type Breadcrumb struct {
|
|||||||
Type string `json:"type,omitempty"`
|
Type string `json:"type,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MarshalJSON converts the Breadcrumb struct to JSON.
|
||||||
func (b *Breadcrumb) MarshalJSON() ([]byte, error) {
|
func (b *Breadcrumb) MarshalJSON() ([]byte, error) {
|
||||||
type alias Breadcrumb
|
type alias Breadcrumb
|
||||||
// encoding/json doesn't support the "omitempty" option for struct types.
|
// encoding/json doesn't support the "omitempty" option for struct types.
|
||||||
@@ -67,14 +76,11 @@ func (b *Breadcrumb) MarshalJSON() ([]byte, error) {
|
|||||||
alias: (*alias)(b),
|
alias: (*alias)(b),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return json.Marshal(&struct {
|
return json.Marshal((*alias)(b))
|
||||||
*alias
|
|
||||||
}{
|
|
||||||
alias: (*alias)(b),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://docs.sentry.io/development/sdk-dev/event-payloads/user/
|
// User describes the user associated with an Event. If this is used, at least
|
||||||
|
// an ID or an IP address should be provided.
|
||||||
type User struct {
|
type User struct {
|
||||||
Email string `json:"email,omitempty"`
|
Email string `json:"email,omitempty"`
|
||||||
ID string `json:"id,omitempty"`
|
ID string `json:"id,omitempty"`
|
||||||
@@ -82,7 +88,7 @@ type User struct {
|
|||||||
Username string `json:"username,omitempty"`
|
Username string `json:"username,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://docs.sentry.io/development/sdk-dev/event-payloads/request/
|
// Request contains information on a HTTP request related to the event.
|
||||||
type Request struct {
|
type Request struct {
|
||||||
URL string `json:"url,omitempty"`
|
URL string `json:"url,omitempty"`
|
||||||
Method string `json:"method,omitempty"`
|
Method string `json:"method,omitempty"`
|
||||||
@@ -131,7 +137,7 @@ func NewRequest(r *http.Request) *Request {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://docs.sentry.io/development/sdk-dev/event-payloads/exception/
|
// Exception specifies an error that occurred.
|
||||||
type Exception struct {
|
type Exception struct {
|
||||||
Type string `json:"type,omitempty"`
|
Type string `json:"type,omitempty"`
|
||||||
Value string `json:"value,omitempty"`
|
Value string `json:"value,omitempty"`
|
||||||
@@ -141,9 +147,11 @@ type Exception struct {
|
|||||||
RawStacktrace *Stacktrace `json:"raw_stacktrace,omitempty"`
|
RawStacktrace *Stacktrace `json:"raw_stacktrace,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EventID is a hexadecimal string representing a unique uuid4 for an Event.
|
||||||
|
// An EventID must be 32 characters long, lowercase and not have any dashes.
|
||||||
type EventID string
|
type EventID string
|
||||||
|
|
||||||
// https://docs.sentry.io/development/sdk-dev/event-payloads/
|
// Event is the fundamental data structure that is sent to Sentry.
|
||||||
type Event struct {
|
type Event struct {
|
||||||
Breadcrumbs []*Breadcrumb `json:"breadcrumbs,omitempty"`
|
Breadcrumbs []*Breadcrumb `json:"breadcrumbs,omitempty"`
|
||||||
Contexts map[string]interface{} `json:"contexts,omitempty"`
|
Contexts map[string]interface{} `json:"contexts,omitempty"`
|
||||||
@@ -167,30 +175,57 @@ type Event struct {
|
|||||||
Modules map[string]string `json:"modules,omitempty"`
|
Modules map[string]string `json:"modules,omitempty"`
|
||||||
Request *Request `json:"request,omitempty"`
|
Request *Request `json:"request,omitempty"`
|
||||||
Exception []Exception `json:"exception,omitempty"`
|
Exception []Exception `json:"exception,omitempty"`
|
||||||
|
|
||||||
|
// Experimental: This is part of a beta feature of the SDK. The fields below
|
||||||
|
// are only relevant for transactions.
|
||||||
|
Type string `json:"type,omitempty"`
|
||||||
|
StartTimestamp time.Time `json:"start_timestamp"`
|
||||||
|
Spans []*Span `json:"spans,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MarshalJSON converts the Event struct to JSON.
|
||||||
func (e *Event) MarshalJSON() ([]byte, error) {
|
func (e *Event) MarshalJSON() ([]byte, error) {
|
||||||
type alias Event
|
// event aliases Event to allow calling json.Marshal without an infinite
|
||||||
// encoding/json doesn't support the "omitempty" option for struct types.
|
// loop. It preserves all fields of Event while none of the attached
|
||||||
// See https://golang.org/issues/11939.
|
// methods.
|
||||||
// This implementation of MarshalJSON shadows the original Timestamp field
|
type event Event
|
||||||
// forcing it to be omitted when the Timestamp is the zero value of
|
|
||||||
// time.Time.
|
// Transactions are marshaled in the standard way how json.Marshal works.
|
||||||
if e.Timestamp.IsZero() {
|
if e.Type == transactionType {
|
||||||
return json.Marshal(&struct {
|
return json.Marshal((*event)(e))
|
||||||
*alias
|
|
||||||
Timestamp json.RawMessage `json:"timestamp,omitempty"`
|
|
||||||
}{
|
|
||||||
alias: (*alias)(e),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
return json.Marshal(&struct {
|
|
||||||
*alias
|
// errorEvent is like Event with some shadowed fields for customizing the
|
||||||
}{
|
// JSON serialization of regular "error events".
|
||||||
alias: (*alias)(e),
|
type errorEvent struct {
|
||||||
})
|
*event
|
||||||
|
|
||||||
|
// encoding/json doesn't support the omitempty option for struct types.
|
||||||
|
// See https://golang.org/issues/11939.
|
||||||
|
// We shadow the original Event.Timestamp field with a json.RawMessage.
|
||||||
|
// This allows us to include the timestamp when non-zero and omit it
|
||||||
|
// otherwise.
|
||||||
|
Timestamp json.RawMessage `json:"timestamp,omitempty"`
|
||||||
|
|
||||||
|
// The fields below are not part of the regular "error events" and only
|
||||||
|
// make sense to be sent for transactions. They shadow the respective
|
||||||
|
// fields in Event and are meant to remain nil, triggering the omitempty
|
||||||
|
// behavior.
|
||||||
|
Type json.RawMessage `json:"type,omitempty"`
|
||||||
|
StartTimestamp json.RawMessage `json:"start_timestamp,omitempty"`
|
||||||
|
Spans json.RawMessage `json:"spans,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
x := &errorEvent{event: (*event)(e)}
|
||||||
|
if !e.Timestamp.IsZero() {
|
||||||
|
x.Timestamp = append(x.Timestamp, '"')
|
||||||
|
x.Timestamp = e.Timestamp.UTC().AppendFormat(x.Timestamp, time.RFC3339Nano)
|
||||||
|
x.Timestamp = append(x.Timestamp, '"')
|
||||||
|
}
|
||||||
|
return json.Marshal(x)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewEvent creates a new Event.
|
||||||
func NewEvent() *Event {
|
func NewEvent() *Event {
|
||||||
event := Event{
|
event := Event{
|
||||||
Contexts: make(map[string]interface{}),
|
Contexts: make(map[string]interface{}),
|
||||||
@@ -201,6 +236,7 @@ func NewEvent() *Event {
|
|||||||
return &event
|
return &event
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Thread specifies threads that were running at the time of an event.
|
||||||
type Thread struct {
|
type Thread struct {
|
||||||
ID string `json:"id,omitempty"`
|
ID string `json:"id,omitempty"`
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
@@ -210,6 +246,7 @@ type Thread struct {
|
|||||||
Current bool `json:"current,omitempty"`
|
Current bool `json:"current,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EventHint contains information that can be associated with an Event.
|
||||||
type EventHint struct {
|
type EventHint struct {
|
||||||
Data interface{}
|
Data interface{}
|
||||||
EventID string
|
EventID string
|
||||||
@@ -219,3 +256,30 @@ type EventHint struct {
|
|||||||
Request *http.Request
|
Request *http.Request
|
||||||
Response *http.Response
|
Response *http.Response
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TraceContext describes the context of the trace.
|
||||||
|
//
|
||||||
|
// Experimental: This is part of a beta feature of the SDK.
|
||||||
|
type TraceContext struct {
|
||||||
|
TraceID string `json:"trace_id"`
|
||||||
|
SpanID string `json:"span_id"`
|
||||||
|
Op string `json:"op,omitempty"`
|
||||||
|
Description string `json:"description,omitempty"`
|
||||||
|
Status string `json:"status,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Span describes a timed unit of work in a trace.
|
||||||
|
//
|
||||||
|
// Experimental: This is part of a beta feature of the SDK.
|
||||||
|
type Span struct {
|
||||||
|
TraceID string `json:"trace_id"`
|
||||||
|
SpanID string `json:"span_id"`
|
||||||
|
ParentSpanID string `json:"parent_span_id,omitempty"`
|
||||||
|
Op string `json:"op,omitempty"`
|
||||||
|
Description string `json:"description,omitempty"`
|
||||||
|
Status string `json:"status,omitempty"`
|
||||||
|
Tags map[string]string `json:"tags,omitempty"`
|
||||||
|
StartTimestamp time.Time `json:"start_timestamp"`
|
||||||
|
EndTimestamp time.Time `json:"timestamp"`
|
||||||
|
Data map[string]interface{} `json:"data,omitempty"`
|
||||||
|
}
|
||||||
|
|||||||
21
vendor/github.com/getsentry/sentry-go/scope.go
сгенерированный
поставляемый
21
vendor/github.com/getsentry/sentry-go/scope.go
сгенерированный
поставляемый
@@ -11,19 +11,18 @@ import (
|
|||||||
|
|
||||||
// Scope holds contextual data for the current scope.
|
// Scope holds contextual data for the current scope.
|
||||||
//
|
//
|
||||||
// The scope is an object that can cloned efficiently and stores data that
|
// The scope is an object that can cloned efficiently and stores data that is
|
||||||
// is locally relevant to an event. For instance the scope will hold recorded
|
// locally relevant to an event. For instance the scope will hold recorded
|
||||||
// breadcrumbs and similar information.
|
// breadcrumbs and similar information.
|
||||||
//
|
//
|
||||||
// The scope can be interacted with in two ways:
|
// The scope can be interacted with in two ways. First, the scope is routinely
|
||||||
|
// updated with information by functions such as AddBreadcrumb which will modify
|
||||||
|
// the current scope. Second, the current scope can be configured through the
|
||||||
|
// ConfigureScope function or Hub method of the same name.
|
||||||
//
|
//
|
||||||
// 1. the scope is routinely updated with information by functions such as
|
// The scope is meant to be modified but not inspected directly. When preparing
|
||||||
// `AddBreadcrumb` which will modify the currently top-most scope.
|
// an event for reporting, the current client adds information from the current
|
||||||
// 2. the topmost scope can also be configured through the `ConfigureScope`
|
// scope into the event.
|
||||||
// method.
|
|
||||||
//
|
|
||||||
// Note that the scope can only be modified but not inspected.
|
|
||||||
// Only the client can use the scope to extract information currently.
|
|
||||||
type Scope struct {
|
type Scope struct {
|
||||||
mu sync.RWMutex
|
mu sync.RWMutex
|
||||||
breadcrumbs []*Breadcrumb
|
breadcrumbs []*Breadcrumb
|
||||||
@@ -47,6 +46,7 @@ type Scope struct {
|
|||||||
eventProcessors []EventProcessor
|
eventProcessors []EventProcessor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewScope creates a new Scope.
|
||||||
func NewScope() *Scope {
|
func NewScope() *Scope {
|
||||||
scope := Scope{
|
scope := Scope{
|
||||||
breadcrumbs: make([]*Breadcrumb, 0),
|
breadcrumbs: make([]*Breadcrumb, 0),
|
||||||
@@ -309,6 +309,7 @@ func (scope *Scope) Clone() *Scope {
|
|||||||
clone.level = scope.level
|
clone.level = scope.level
|
||||||
clone.transaction = scope.transaction
|
clone.transaction = scope.transaction
|
||||||
clone.request = scope.request
|
clone.request = scope.request
|
||||||
|
clone.requestBody = scope.requestBody
|
||||||
|
|
||||||
return clone
|
return clone
|
||||||
}
|
}
|
||||||
|
|||||||
28
vendor/github.com/getsentry/sentry-go/sentry.go
сгенерированный
поставляемый
28
vendor/github.com/getsentry/sentry-go/sentry.go
сгенерированный
поставляемый
@@ -5,14 +5,15 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Version is the version of the sentry-go SDK.
|
// Version is the version of the SDK.
|
||||||
const Version = "0.6.1"
|
const Version = "0.7.0"
|
||||||
|
|
||||||
// apiVersion is the minimum version of the Sentry API compatible with the
|
// apiVersion is the minimum version of the Sentry API compatible with the
|
||||||
// sentry-go SDK.
|
// sentry-go SDK.
|
||||||
const apiVersion = "7"
|
const apiVersion = "7"
|
||||||
|
|
||||||
// Init initializes whole SDK by creating new `Client` and binding it to the current `Hub`
|
// Init initializes the SDK with options. The returned error is non-nil if
|
||||||
|
// options is invalid, for instance if a malformed DSN is provided.
|
||||||
func Init(options ClientOptions) error {
|
func Init(options ClientOptions) error {
|
||||||
hub := CurrentHub()
|
hub := CurrentHub()
|
||||||
client, err := NewClient(options)
|
client, err := NewClient(options)
|
||||||
@@ -47,7 +48,7 @@ func CaptureException(exception error) *EventID {
|
|||||||
// CaptureEvent captures an event on the currently active client if any.
|
// CaptureEvent captures an event on the currently active client if any.
|
||||||
//
|
//
|
||||||
// The event must already be assembled. Typically code would instead use
|
// The event must already be assembled. Typically code would instead use
|
||||||
// the utility methods like `CaptureException`. The return value is the
|
// the utility methods like CaptureException. The return value is the
|
||||||
// event ID. In case Sentry is disabled or event was dropped, the return value will be nil.
|
// event ID. In case Sentry is disabled or event was dropped, the return value will be nil.
|
||||||
func CaptureEvent(event *Event) *EventID {
|
func CaptureEvent(event *Event) *EventID {
|
||||||
hub := CurrentHub()
|
hub := CurrentHub()
|
||||||
@@ -63,7 +64,7 @@ func Recover() *EventID {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recover captures a panic and passes relevant context object.
|
// RecoverWithContext captures a panic and passes relevant context object.
|
||||||
func RecoverWithContext(ctx context.Context) *EventID {
|
func RecoverWithContext(ctx context.Context) *EventID {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
var hub *Hub
|
var hub *Hub
|
||||||
@@ -79,34 +80,25 @@ func RecoverWithContext(ctx context.Context) *EventID {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithScope temporarily pushes a scope for a single call.
|
// WithScope is a shorthand for CurrentHub().WithScope.
|
||||||
//
|
|
||||||
// This function takes one argument, a callback that executes
|
|
||||||
// in the context of that scope.
|
|
||||||
//
|
|
||||||
// This is useful when extra data should be send with a single capture call
|
|
||||||
// for instance a different level or tags
|
|
||||||
func WithScope(f func(scope *Scope)) {
|
func WithScope(f func(scope *Scope)) {
|
||||||
hub := CurrentHub()
|
hub := CurrentHub()
|
||||||
hub.WithScope(f)
|
hub.WithScope(f)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConfigureScope invokes a function that can modify the current scope.
|
// ConfigureScope is a shorthand for CurrentHub().ConfigureScope.
|
||||||
//
|
|
||||||
// The function is passed a mutable reference to the `Scope` so that modifications
|
|
||||||
// can be performed.
|
|
||||||
func ConfigureScope(f func(scope *Scope)) {
|
func ConfigureScope(f func(scope *Scope)) {
|
||||||
hub := CurrentHub()
|
hub := CurrentHub()
|
||||||
hub.ConfigureScope(f)
|
hub.ConfigureScope(f)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PushScope pushes a new scope.
|
// PushScope is a shorthand for CurrentHub().PushPushScope.
|
||||||
func PushScope() {
|
func PushScope() {
|
||||||
hub := CurrentHub()
|
hub := CurrentHub()
|
||||||
hub.PushScope()
|
hub.PushScope()
|
||||||
}
|
}
|
||||||
|
|
||||||
// PopScope pushes a new scope.
|
// PopScope is a shorthand for CurrentHub().PopScope.
|
||||||
func PopScope() {
|
func PopScope() {
|
||||||
hub := CurrentHub()
|
hub := CurrentHub()
|
||||||
hub.PopScope()
|
hub.PopScope()
|
||||||
|
|||||||
3
vendor/github.com/getsentry/sentry-go/sourcereader.go
сгенерированный
поставляемый
3
vendor/github.com/getsentry/sentry-go/sourcereader.go
сгенерированный
поставляемый
@@ -36,11 +36,12 @@ func (sr *sourceReader) readContextLines(filename string, line, context int) ([]
|
|||||||
return sr.calculateContextLines(lines, line, context)
|
return sr.calculateContextLines(lines, line, context)
|
||||||
}
|
}
|
||||||
|
|
||||||
// `contextLine` points to a line that caused an issue itself, in relation to returned slice
|
|
||||||
func (sr *sourceReader) calculateContextLines(lines [][]byte, line, context int) ([][]byte, int) {
|
func (sr *sourceReader) calculateContextLines(lines [][]byte, line, context int) ([][]byte, int) {
|
||||||
// Stacktrace lines are 1-indexed, slices are 0-indexed
|
// Stacktrace lines are 1-indexed, slices are 0-indexed
|
||||||
line--
|
line--
|
||||||
|
|
||||||
|
// contextLine points to a line that caused an issue itself, in relation to
|
||||||
|
// returned slice.
|
||||||
contextLine := context
|
contextLine := context
|
||||||
|
|
||||||
if lines == nil || line >= len(lines) || line < 0 {
|
if lines == nil || line >= len(lines) || line < 0 {
|
||||||
|
|||||||
91
vendor/github.com/getsentry/sentry-go/stacktrace.go
сгенерированный
поставляемый
91
vendor/github.com/getsentry/sentry-go/stacktrace.go
сгенерированный
поставляемый
@@ -23,7 +23,7 @@ type Stacktrace struct {
|
|||||||
FramesOmitted []uint `json:"frames_omitted,omitempty"`
|
FramesOmitted []uint `json:"frames_omitted,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewStacktrace creates a stacktrace using `runtime.Callers`.
|
// NewStacktrace creates a stacktrace using runtime.Callers.
|
||||||
func NewStacktrace() *Stacktrace {
|
func NewStacktrace() *Stacktrace {
|
||||||
pcs := make([]uintptr, 100)
|
pcs := make([]uintptr, 100)
|
||||||
n := runtime.Callers(1, pcs)
|
n := runtime.Callers(1, pcs)
|
||||||
@@ -42,17 +42,21 @@ func NewStacktrace() *Stacktrace {
|
|||||||
return &stacktrace
|
return &stacktrace
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExtractStacktrace creates a new `Stacktrace` based on the given `error` object.
|
|
||||||
// TODO: Make it configurable so that anyone can provide their own implementation?
|
// TODO: Make it configurable so that anyone can provide their own implementation?
|
||||||
// Use of reflection allows us to not have a hard dependency on any given package, so we don't have to import it
|
// Use of reflection allows us to not have a hard dependency on any given
|
||||||
|
// package, so we don't have to import it.
|
||||||
|
|
||||||
|
// ExtractStacktrace creates a new Stacktrace based on the given error.
|
||||||
func ExtractStacktrace(err error) *Stacktrace {
|
func ExtractStacktrace(err error) *Stacktrace {
|
||||||
method := extractReflectedStacktraceMethod(err)
|
method := extractReflectedStacktraceMethod(err)
|
||||||
|
|
||||||
if !method.IsValid() {
|
var pcs []uintptr
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
pcs := extractPcs(method)
|
if method.IsValid() {
|
||||||
|
pcs = extractPcs(method)
|
||||||
|
} else {
|
||||||
|
pcs = extractXErrorsPC(err)
|
||||||
|
}
|
||||||
|
|
||||||
if len(pcs) == 0 {
|
if len(pcs) == 0 {
|
||||||
return nil
|
return nil
|
||||||
@@ -127,7 +131,34 @@ func extractPcs(method reflect.Value) []uintptr {
|
|||||||
return pcs
|
return pcs
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://docs.sentry.io/development/sdk-dev/event-payloads/stacktrace/
|
// extractXErrorsPC extracts program counters from error values compatible with
|
||||||
|
// the error types from golang.org/x/xerrors.
|
||||||
|
//
|
||||||
|
// It returns nil if err is not compatible with errors from that package or if
|
||||||
|
// no program counters are stored in err.
|
||||||
|
func extractXErrorsPC(err error) []uintptr {
|
||||||
|
// This implementation uses the reflect package to avoid a hard dependency
|
||||||
|
// on third-party packages.
|
||||||
|
|
||||||
|
// We don't know if err matches the expected type. For simplicity, instead
|
||||||
|
// of trying to account for all possible ways things can go wrong, some
|
||||||
|
// assumptions are made and if they are violated the code will panic. We
|
||||||
|
// recover from any panic and ignore it, returning nil.
|
||||||
|
//nolint: errcheck
|
||||||
|
defer func() { recover() }()
|
||||||
|
|
||||||
|
field := reflect.ValueOf(err).Elem().FieldByName("frame") // type Frame struct{ frames [3]uintptr }
|
||||||
|
field = field.FieldByName("frames")
|
||||||
|
field = field.Slice(1, field.Len()) // drop first pc pointing to xerrors.New
|
||||||
|
pc := make([]uintptr, field.Len())
|
||||||
|
for i := 0; i < field.Len(); i++ {
|
||||||
|
pc[i] = uintptr(field.Index(i).Uint())
|
||||||
|
}
|
||||||
|
return pc
|
||||||
|
}
|
||||||
|
|
||||||
|
// Frame represents a function call and it's metadata. Frames are associated
|
||||||
|
// with a Stacktrace.
|
||||||
type Frame struct {
|
type Frame struct {
|
||||||
Function string `json:"function,omitempty"`
|
Function string `json:"function,omitempty"`
|
||||||
Symbol string `json:"symbol,omitempty"`
|
Symbol string `json:"symbol,omitempty"`
|
||||||
@@ -144,30 +175,46 @@ type Frame struct {
|
|||||||
Vars map[string]interface{} `json:"vars,omitempty"`
|
Vars map[string]interface{} `json:"vars,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFrame assembles a stacktrace frame out of `runtime.Frame`.
|
// NewFrame assembles a stacktrace frame out of runtime.Frame.
|
||||||
func NewFrame(f runtime.Frame) Frame {
|
func NewFrame(f runtime.Frame) Frame {
|
||||||
abspath := f.File
|
var abspath, relpath string
|
||||||
filename := f.File
|
// NOTE: f.File paths historically use forward slash as path separator even
|
||||||
|
// on Windows, though this is not yet documented, see
|
||||||
|
// https://golang.org/issues/3335. In any case, filepath.IsAbs can work with
|
||||||
|
// paths with either slash or backslash on Windows.
|
||||||
|
switch {
|
||||||
|
case f.File == "":
|
||||||
|
relpath = unknown
|
||||||
|
// Leave abspath as the empty string to be omitted when serializing
|
||||||
|
// event as JSON.
|
||||||
|
abspath = ""
|
||||||
|
case filepath.IsAbs(f.File):
|
||||||
|
abspath = f.File
|
||||||
|
// TODO: in the general case, it is not trivial to come up with a
|
||||||
|
// "project relative" path with the data we have in run time.
|
||||||
|
// We shall not use filepath.Base because it creates ambiguous paths and
|
||||||
|
// affects the "Suspect Commits" feature.
|
||||||
|
// For now, leave relpath empty to be omitted when serializing the event
|
||||||
|
// as JSON. Improve this later.
|
||||||
|
relpath = ""
|
||||||
|
default:
|
||||||
|
// f.File is a relative path. This may happen when the binary is built
|
||||||
|
// with the -trimpath flag.
|
||||||
|
relpath = f.File
|
||||||
|
// Omit abspath when serializing the event as JSON.
|
||||||
|
abspath = ""
|
||||||
|
}
|
||||||
|
|
||||||
function := f.Function
|
function := f.Function
|
||||||
var pkg string
|
var pkg string
|
||||||
|
|
||||||
if filename != "" {
|
|
||||||
filename = filepath.Base(filename)
|
|
||||||
} else {
|
|
||||||
filename = unknown
|
|
||||||
}
|
|
||||||
|
|
||||||
if abspath == "" {
|
|
||||||
abspath = unknown
|
|
||||||
}
|
|
||||||
|
|
||||||
if function != "" {
|
if function != "" {
|
||||||
pkg, function = splitQualifiedFunctionName(function)
|
pkg, function = splitQualifiedFunctionName(function)
|
||||||
}
|
}
|
||||||
|
|
||||||
frame := Frame{
|
frame := Frame{
|
||||||
AbsPath: abspath,
|
AbsPath: abspath,
|
||||||
Filename: filename,
|
Filename: relpath,
|
||||||
Lineno: f.Line,
|
Lineno: f.Line,
|
||||||
Module: pkg,
|
Module: pkg,
|
||||||
Function: function,
|
Function: function,
|
||||||
|
|||||||
82
vendor/github.com/getsentry/sentry-go/transport.go
сгенерированный
поставляемый
82
vendor/github.com/getsentry/sentry-go/transport.go
сгенерированный
поставляемый
@@ -4,6 +4,8 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
@@ -15,7 +17,7 @@ const defaultBufferSize = 30
|
|||||||
const defaultRetryAfter = time.Second * 60
|
const defaultRetryAfter = time.Second * 60
|
||||||
const defaultTimeout = time.Second * 30
|
const defaultTimeout = time.Second * 30
|
||||||
|
|
||||||
// Transport is used by the `Client` to deliver events to remote server.
|
// Transport is used by the Client to deliver events to remote server.
|
||||||
type Transport interface {
|
type Transport interface {
|
||||||
Flush(timeout time.Duration) bool
|
Flush(timeout time.Duration) bool
|
||||||
Configure(options ClientOptions)
|
Configure(options ClientOptions)
|
||||||
@@ -70,8 +72,10 @@ func getRequestBodyFromEvent(event *Event) []byte {
|
|||||||
return body
|
return body
|
||||||
}
|
}
|
||||||
|
|
||||||
partialMarshallMessage := "Original event couldn't be marshalled. Succeeded by stripping the data " +
|
partialMarshallMessage := fmt.Sprintf("Could not encode original event as JSON. "+
|
||||||
"that uses interface{} type. Please verify that the data you attach to the scope is serializable."
|
"Succeeded by removing Breadcrumbs, Contexts and Extra. "+
|
||||||
|
"Please verify the data you attach to the scope. "+
|
||||||
|
"Error: %s", err)
|
||||||
// Try to serialize the event, with all the contextual data that allows for interface{} stripped.
|
// Try to serialize the event, with all the contextual data that allows for interface{} stripped.
|
||||||
event.Breadcrumbs = nil
|
event.Breadcrumbs = nil
|
||||||
event.Contexts = nil
|
event.Contexts = nil
|
||||||
@@ -92,6 +96,40 @@ func getRequestBodyFromEvent(event *Event) []byte {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getEnvelopeFromBody(body []byte, now time.Time) *bytes.Buffer {
|
||||||
|
var b bytes.Buffer
|
||||||
|
fmt.Fprintf(&b, `{"sent_at":"%s"}`, now.UTC().Format(time.RFC3339Nano))
|
||||||
|
fmt.Fprint(&b, "\n", `{"type":"transaction"}`, "\n")
|
||||||
|
b.Write(body)
|
||||||
|
return &b
|
||||||
|
}
|
||||||
|
|
||||||
|
func getRequestFromEvent(event *Event, dsn *Dsn) (*http.Request, error) {
|
||||||
|
body := getRequestBodyFromEvent(event)
|
||||||
|
if body == nil {
|
||||||
|
return nil, errors.New("event could not be marshalled")
|
||||||
|
}
|
||||||
|
|
||||||
|
if event.Type == transactionType {
|
||||||
|
env := getEnvelopeFromBody(body, time.Now())
|
||||||
|
request, _ := http.NewRequest(
|
||||||
|
http.MethodPost,
|
||||||
|
dsn.EnvelopeAPIURL().String(),
|
||||||
|
env,
|
||||||
|
)
|
||||||
|
|
||||||
|
return request, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
request, _ := http.NewRequest(
|
||||||
|
http.MethodPost,
|
||||||
|
dsn.StoreAPIURL().String(),
|
||||||
|
bytes.NewBuffer(body),
|
||||||
|
)
|
||||||
|
|
||||||
|
return request, nil
|
||||||
|
}
|
||||||
|
|
||||||
// ================================
|
// ================================
|
||||||
// HTTPTransport
|
// HTTPTransport
|
||||||
// ================================
|
// ================================
|
||||||
@@ -103,7 +141,7 @@ type batch struct {
|
|||||||
done chan struct{} // closed to signal completion of all items
|
done chan struct{} // closed to signal completion of all items
|
||||||
}
|
}
|
||||||
|
|
||||||
// HTTPTransport is a default implementation of `Transport` interface used by `Client`.
|
// HTTPTransport is a default implementation of Transport interface used by Client.
|
||||||
type HTTPTransport struct {
|
type HTTPTransport struct {
|
||||||
dsn *Dsn
|
dsn *Dsn
|
||||||
client *http.Client
|
client *http.Client
|
||||||
@@ -124,7 +162,7 @@ type HTTPTransport struct {
|
|||||||
disabledUntil time.Time
|
disabledUntil time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewHTTPTransport returns a new pre-configured instance of HTTPTransport
|
// NewHTTPTransport returns a new pre-configured instance of HTTPTransport.
|
||||||
func NewHTTPTransport() *HTTPTransport {
|
func NewHTTPTransport() *HTTPTransport {
|
||||||
transport := HTTPTransport{
|
transport := HTTPTransport{
|
||||||
BufferSize: defaultBufferSize,
|
BufferSize: defaultBufferSize,
|
||||||
@@ -133,7 +171,7 @@ func NewHTTPTransport() *HTTPTransport {
|
|||||||
return &transport
|
return &transport
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure is called by the `Client` itself, providing it it's own `ClientOptions`.
|
// Configure is called by the Client itself, providing it it's own ClientOptions.
|
||||||
func (t *HTTPTransport) Configure(options ClientOptions) {
|
func (t *HTTPTransport) Configure(options ClientOptions) {
|
||||||
dsn, err := NewDsn(options.Dsn)
|
dsn, err := NewDsn(options.Dsn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -175,7 +213,7 @@ func (t *HTTPTransport) Configure(options ClientOptions) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendEvent assembles a new packet out of `Event` and sends it to remote server.
|
// SendEvent assembles a new packet out of Event and sends it to remote server.
|
||||||
func (t *HTTPTransport) SendEvent(event *Event) {
|
func (t *HTTPTransport) SendEvent(event *Event) {
|
||||||
if t.dsn == nil {
|
if t.dsn == nil {
|
||||||
return
|
return
|
||||||
@@ -187,17 +225,11 @@ func (t *HTTPTransport) SendEvent(event *Event) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
body := getRequestBodyFromEvent(event)
|
request, err := getRequestFromEvent(event, t.dsn)
|
||||||
if body == nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
request, _ := http.NewRequest(
|
|
||||||
http.MethodPost,
|
|
||||||
t.dsn.StoreAPIURL().String(),
|
|
||||||
bytes.NewBuffer(body),
|
|
||||||
)
|
|
||||||
|
|
||||||
for headerKey, headerValue := range t.dsn.RequestHeaders() {
|
for headerKey, headerValue := range t.dsn.RequestHeaders() {
|
||||||
request.Header.Set(headerKey, headerValue)
|
request.Header.Set(headerKey, headerValue)
|
||||||
}
|
}
|
||||||
@@ -332,7 +364,7 @@ func (t *HTTPTransport) worker() {
|
|||||||
// HTTPSyncTransport
|
// HTTPSyncTransport
|
||||||
// ================================
|
// ================================
|
||||||
|
|
||||||
// HTTPSyncTransport is an implementation of `Transport` interface which blocks after each captured event.
|
// HTTPSyncTransport is an implementation of Transport interface which blocks after each captured event.
|
||||||
type HTTPSyncTransport struct {
|
type HTTPSyncTransport struct {
|
||||||
dsn *Dsn
|
dsn *Dsn
|
||||||
client *http.Client
|
client *http.Client
|
||||||
@@ -343,7 +375,7 @@ type HTTPSyncTransport struct {
|
|||||||
Timeout time.Duration
|
Timeout time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewHTTPSyncTransport returns a new pre-configured instance of HTTPSyncTransport
|
// NewHTTPSyncTransport returns a new pre-configured instance of HTTPSyncTransport.
|
||||||
func NewHTTPSyncTransport() *HTTPSyncTransport {
|
func NewHTTPSyncTransport() *HTTPSyncTransport {
|
||||||
transport := HTTPSyncTransport{
|
transport := HTTPSyncTransport{
|
||||||
Timeout: defaultTimeout,
|
Timeout: defaultTimeout,
|
||||||
@@ -352,7 +384,7 @@ func NewHTTPSyncTransport() *HTTPSyncTransport {
|
|||||||
return &transport
|
return &transport
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure is called by the `Client` itself, providing it it's own `ClientOptions`.
|
// Configure is called by the Client itself, providing it it's own ClientOptions.
|
||||||
func (t *HTTPSyncTransport) Configure(options ClientOptions) {
|
func (t *HTTPSyncTransport) Configure(options ClientOptions) {
|
||||||
dsn, err := NewDsn(options.Dsn)
|
dsn, err := NewDsn(options.Dsn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -380,23 +412,17 @@ func (t *HTTPSyncTransport) Configure(options ClientOptions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendEvent assembles a new packet out of `Event` and sends it to remote server.
|
// SendEvent assembles a new packet out of Event and sends it to remote server.
|
||||||
func (t *HTTPSyncTransport) SendEvent(event *Event) {
|
func (t *HTTPSyncTransport) SendEvent(event *Event) {
|
||||||
if t.dsn == nil || time.Now().Before(t.disabledUntil) {
|
if t.dsn == nil || time.Now().Before(t.disabledUntil) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
body := getRequestBodyFromEvent(event)
|
request, err := getRequestFromEvent(event, t.dsn)
|
||||||
if body == nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
request, _ := http.NewRequest(
|
|
||||||
http.MethodPost,
|
|
||||||
t.dsn.StoreAPIURL().String(),
|
|
||||||
bytes.NewBuffer(body),
|
|
||||||
)
|
|
||||||
|
|
||||||
for headerKey, headerValue := range t.dsn.RequestHeaders() {
|
for headerKey, headerValue := range t.dsn.RequestHeaders() {
|
||||||
request.Header.Set(headerKey, headerValue)
|
request.Header.Set(headerKey, headerValue)
|
||||||
}
|
}
|
||||||
@@ -430,7 +456,7 @@ func (t *HTTPSyncTransport) Flush(_ time.Duration) bool {
|
|||||||
// noopTransport
|
// noopTransport
|
||||||
// ================================
|
// ================================
|
||||||
|
|
||||||
// noopTransport is an implementation of `Transport` interface which drops all the events.
|
// noopTransport is an implementation of Transport interface which drops all the events.
|
||||||
// Only used internally when an empty DSN is provided, which effectively disables the SDK.
|
// Only used internally when an empty DSN is provided, which effectively disables the SDK.
|
||||||
type noopTransport struct{}
|
type noopTransport struct{}
|
||||||
|
|
||||||
|
|||||||
6
vendor/github.com/hako/durafmt/durafmt.go
сгенерированный
поставляемый
6
vendor/github.com/hako/durafmt/durafmt.go
сгенерированный
поставляемый
@@ -35,6 +35,10 @@ func (d *Durafmt) LimitFirstN(n int) *Durafmt {
|
|||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *Durafmt) Duration() time.Duration {
|
||||||
|
return d.duration
|
||||||
|
}
|
||||||
|
|
||||||
// Parse creates a new *Durafmt struct, returns error if input is invalid.
|
// Parse creates a new *Durafmt struct, returns error if input is invalid.
|
||||||
func Parse(dinput time.Duration) *Durafmt {
|
func Parse(dinput time.Duration) *Durafmt {
|
||||||
input := dinput.String()
|
input := dinput.String()
|
||||||
@@ -95,7 +99,7 @@ func (d *Durafmt) String() string {
|
|||||||
var years int64
|
var years int64
|
||||||
var shouldConvert = false
|
var shouldConvert = false
|
||||||
|
|
||||||
remainingSecondsToConvert := int64(d.duration/time.Microsecond)
|
remainingSecondsToConvert := int64(d.duration / time.Microsecond)
|
||||||
|
|
||||||
// Convert duration.
|
// Convert duration.
|
||||||
if d.limitUnit == "" {
|
if d.limitUnit == "" {
|
||||||
|
|||||||
12
vendor/github.com/jonboulle/clockwork/.editorconfig
сгенерированный
поставляемый
Обычный файл
12
vendor/github.com/jonboulle/clockwork/.editorconfig
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,12 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
indent_size = 4
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.go]
|
||||||
|
indent_style = tab
|
||||||
2
vendor/github.com/jonboulle/clockwork/.gitignore
сгенерированный
поставляемый
2
vendor/github.com/jonboulle/clockwork/.gitignore
сгенерированный
поставляемый
@@ -1,3 +1,5 @@
|
|||||||
|
/.idea/
|
||||||
|
|
||||||
# Compiled Object files, Static and Dynamic libs (Shared Objects)
|
# Compiled Object files, Static and Dynamic libs (Shared Objects)
|
||||||
*.o
|
*.o
|
||||||
*.a
|
*.a
|
||||||
|
|||||||
5
vendor/github.com/jonboulle/clockwork/.travis.yml
сгенерированный
поставляемый
5
vendor/github.com/jonboulle/clockwork/.travis.yml
сгенерированный
поставляемый
@@ -1,5 +0,0 @@
|
|||||||
language: go
|
|
||||||
go:
|
|
||||||
- 1.3
|
|
||||||
|
|
||||||
sudo: false
|
|
||||||
65
vendor/github.com/jonboulle/clockwork/README.md
сгенерированный
поставляемый
65
vendor/github.com/jonboulle/clockwork/README.md
сгенерированный
поставляемый
@@ -1,61 +1,80 @@
|
|||||||
clockwork
|
# clockwork
|
||||||
=========
|
|
||||||
|
|
||||||
[](https://travis-ci.org/jonboulle/clockwork)
|
[](https://github.com/avelino/awesome-go#utilities)
|
||||||
[](http://godoc.org/github.com/jonboulle/clockwork)
|
|
||||||
|
|
||||||
a simple fake clock for golang
|
[](https://github.com/jonboulle/clockwork/actions?query=workflow%3ACI)
|
||||||
|
[](https://goreportcard.com/report/github.com/jonboulle/clockwork)
|
||||||
|

|
||||||
|
[](https://pkg.go.dev/mod/github.com/jonboulle/clockwork)
|
||||||
|
|
||||||
# Usage
|
**A simple fake clock for Go.**
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
Replace uses of the `time` package with the `clockwork.Clock` interface instead.
|
Replace uses of the `time` package with the `clockwork.Clock` interface instead.
|
||||||
|
|
||||||
For example, instead of using `time.Sleep` directly:
|
For example, instead of using `time.Sleep` directly:
|
||||||
|
|
||||||
```
|
```go
|
||||||
func my_func() {
|
func myFunc() {
|
||||||
time.Sleep(3 * time.Second)
|
time.Sleep(3 * time.Second)
|
||||||
do_something()
|
doSomething()
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
inject a clock and use its `Sleep` method instead:
|
Inject a clock and use its `Sleep` method instead:
|
||||||
|
|
||||||
```
|
```go
|
||||||
func my_func(clock clockwork.Clock) {
|
func myFunc(clock clockwork.Clock) {
|
||||||
clock.Sleep(3 * time.Second)
|
clock.Sleep(3 * time.Second)
|
||||||
do_something()
|
doSomething()
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Now you can easily test `my_func` with a `FakeClock`:
|
Now you can easily test `myFunc` with a `FakeClock`:
|
||||||
|
|
||||||
```
|
```go
|
||||||
func TestMyFunc(t *testing.T) {
|
func TestMyFunc(t *testing.T) {
|
||||||
c := clockwork.NewFakeClock()
|
c := clockwork.NewFakeClock()
|
||||||
|
|
||||||
// Start our sleepy function
|
// Start our sleepy function
|
||||||
my_func(c)
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
|
go func() {
|
||||||
|
myFunc(c)
|
||||||
|
wg.Done()
|
||||||
|
}()
|
||||||
|
|
||||||
// Ensure we wait until my_func is sleeping
|
// Ensure we wait until myFunc is sleeping
|
||||||
c.BlockUntil(1)
|
c.BlockUntil(1)
|
||||||
|
|
||||||
assert_state()
|
assertState()
|
||||||
|
|
||||||
// Advance the FakeClock forward in time
|
// Advance the FakeClock forward in time
|
||||||
c.Advance(3)
|
c.Advance(3 * time.Second)
|
||||||
|
|
||||||
assert_state()
|
// Wait until the function completes
|
||||||
|
wg.Wait()
|
||||||
|
|
||||||
|
assertState()
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
and in production builds, simply inject the real clock instead:
|
and in production builds, simply inject the real clock instead:
|
||||||
```
|
|
||||||
my_func(clockwork.NewRealClock())
|
```go
|
||||||
|
myFunc(clockwork.NewRealClock())
|
||||||
```
|
```
|
||||||
|
|
||||||
See [example_test.go](example_test.go) for a full example.
|
See [example_test.go](example_test.go) for a full example.
|
||||||
|
|
||||||
|
|
||||||
# Credits
|
# Credits
|
||||||
|
|
||||||
clockwork is inspired by @wickman's [threaded fake clock](https://gist.github.com/wickman/3840816), and the [Golang playground](http://blog.golang.org/playground#Faking time)
|
clockwork is inspired by @wickman's [threaded fake clock](https://gist.github.com/wickman/3840816), and the [Golang playground](https://blog.golang.org/playground#TOC_3.1.)
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Apache License, Version 2.0. Please see [License File](LICENSE) for more information.
|
||||||
|
|||||||
26
vendor/github.com/jonboulle/clockwork/clockwork.go
сгенерированный
поставляемый
26
vendor/github.com/jonboulle/clockwork/clockwork.go
сгенерированный
поставляемый
@@ -11,6 +11,8 @@ type Clock interface {
|
|||||||
After(d time.Duration) <-chan time.Time
|
After(d time.Duration) <-chan time.Time
|
||||||
Sleep(d time.Duration)
|
Sleep(d time.Duration)
|
||||||
Now() time.Time
|
Now() time.Time
|
||||||
|
Since(t time.Time) time.Duration
|
||||||
|
NewTicker(d time.Duration) Ticker
|
||||||
}
|
}
|
||||||
|
|
||||||
// FakeClock provides an interface for a clock which can be
|
// FakeClock provides an interface for a clock which can be
|
||||||
@@ -60,6 +62,14 @@ func (rc *realClock) Now() time.Time {
|
|||||||
return time.Now()
|
return time.Now()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rc *realClock) Since(t time.Time) time.Duration {
|
||||||
|
return rc.Now().Sub(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rc *realClock) NewTicker(d time.Duration) Ticker {
|
||||||
|
return &realTicker{time.NewTicker(d)}
|
||||||
|
}
|
||||||
|
|
||||||
type fakeClock struct {
|
type fakeClock struct {
|
||||||
sleepers []*sleeper
|
sleepers []*sleeper
|
||||||
blockers []*blocker
|
blockers []*blocker
|
||||||
@@ -130,6 +140,22 @@ func (fc *fakeClock) Now() time.Time {
|
|||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Since returns the duration that has passed since the given time on the fakeClock
|
||||||
|
func (fc *fakeClock) Since(t time.Time) time.Duration {
|
||||||
|
return fc.Now().Sub(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fc *fakeClock) NewTicker(d time.Duration) Ticker {
|
||||||
|
ft := &fakeTicker{
|
||||||
|
c: make(chan time.Time, 1),
|
||||||
|
stop: make(chan bool, 1),
|
||||||
|
clock: fc,
|
||||||
|
period: d,
|
||||||
|
}
|
||||||
|
go ft.tick()
|
||||||
|
return ft
|
||||||
|
}
|
||||||
|
|
||||||
// Advance advances fakeClock to a new point in time, ensuring channels from any
|
// Advance advances fakeClock to a new point in time, ensuring channels from any
|
||||||
// previous invocations of After are notified appropriately before returning
|
// previous invocations of After are notified appropriately before returning
|
||||||
func (fc *fakeClock) Advance(d time.Duration) {
|
func (fc *fakeClock) Advance(d time.Duration) {
|
||||||
|
|||||||
3
vendor/github.com/jonboulle/clockwork/go.mod
сгенерированный
поставляемый
Обычный файл
3
vendor/github.com/jonboulle/clockwork/go.mod
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,3 @@
|
|||||||
|
module github.com/jonboulle/clockwork
|
||||||
|
|
||||||
|
go 1.13
|
||||||
66
vendor/github.com/jonboulle/clockwork/ticker.go
сгенерированный
поставляемый
Обычный файл
66
vendor/github.com/jonboulle/clockwork/ticker.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,66 @@
|
|||||||
|
package clockwork
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Ticker provides an interface which can be used instead of directly
|
||||||
|
// using the ticker within the time module. The real-time ticker t
|
||||||
|
// provides ticks through t.C which becomes now t.Chan() to make
|
||||||
|
// this channel requirement definable in this interface.
|
||||||
|
type Ticker interface {
|
||||||
|
Chan() <-chan time.Time
|
||||||
|
Stop()
|
||||||
|
}
|
||||||
|
|
||||||
|
type realTicker struct{ *time.Ticker }
|
||||||
|
|
||||||
|
func (rt *realTicker) Chan() <-chan time.Time {
|
||||||
|
return rt.C
|
||||||
|
}
|
||||||
|
|
||||||
|
type fakeTicker struct {
|
||||||
|
c chan time.Time
|
||||||
|
stop chan bool
|
||||||
|
clock FakeClock
|
||||||
|
period time.Duration
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ft *fakeTicker) Chan() <-chan time.Time {
|
||||||
|
return ft.c
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ft *fakeTicker) Stop() {
|
||||||
|
ft.stop <- true
|
||||||
|
}
|
||||||
|
|
||||||
|
// tick sends the tick time to the ticker channel after every period.
|
||||||
|
// Tick events are discarded if the underlying ticker channel does
|
||||||
|
// not have enough capacity.
|
||||||
|
func (ft *fakeTicker) tick() {
|
||||||
|
tick := ft.clock.Now()
|
||||||
|
for {
|
||||||
|
tick = tick.Add(ft.period)
|
||||||
|
remaining := tick.Sub(ft.clock.Now())
|
||||||
|
if remaining <= 0 {
|
||||||
|
// The tick should have already happened. This can happen when
|
||||||
|
// Advance() is called on the fake clock with a duration larger
|
||||||
|
// than this ticker's period.
|
||||||
|
select {
|
||||||
|
case ft.c <- tick:
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-ft.stop:
|
||||||
|
return
|
||||||
|
case <-ft.clock.After(remaining):
|
||||||
|
select {
|
||||||
|
case ft.c <- tick:
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
5
vendor/github.com/josharian/intern/README.md
сгенерированный
поставляемый
Обычный файл
5
vendor/github.com/josharian/intern/README.md
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,5 @@
|
|||||||
|
Docs: https://godoc.org/github.com/josharian/intern
|
||||||
|
|
||||||
|
See also [Go issue 5160](https://golang.org/issue/5160).
|
||||||
|
|
||||||
|
License: MIT
|
||||||
3
vendor/github.com/josharian/intern/go.mod
сгенерированный
поставляемый
Обычный файл
3
vendor/github.com/josharian/intern/go.mod
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,3 @@
|
|||||||
|
module github.com/josharian/intern
|
||||||
|
|
||||||
|
go 1.5
|
||||||
44
vendor/github.com/josharian/intern/intern.go
сгенерированный
поставляемый
Обычный файл
44
vendor/github.com/josharian/intern/intern.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,44 @@
|
|||||||
|
// Package intern interns strings.
|
||||||
|
// Interning is best effort only.
|
||||||
|
// Interned strings may be removed automatically
|
||||||
|
// at any time without notification.
|
||||||
|
// All functions may be called concurrently
|
||||||
|
// with themselves and each other.
|
||||||
|
package intern
|
||||||
|
|
||||||
|
import "sync"
|
||||||
|
|
||||||
|
var (
|
||||||
|
pool sync.Pool = sync.Pool{
|
||||||
|
New: func() interface{} {
|
||||||
|
return make(map[string]string)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// String returns s, interned.
|
||||||
|
func String(s string) string {
|
||||||
|
m := pool.Get().(map[string]string)
|
||||||
|
c, ok := m[s]
|
||||||
|
if ok {
|
||||||
|
pool.Put(m)
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
m[s] = s
|
||||||
|
pool.Put(m)
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bytes returns b converted to a string, interned.
|
||||||
|
func Bytes(b []byte) string {
|
||||||
|
m := pool.Get().(map[string]string)
|
||||||
|
c, ok := m[string(b)]
|
||||||
|
if ok {
|
||||||
|
pool.Put(m)
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
s := string(b)
|
||||||
|
m[s] = s
|
||||||
|
pool.Put(m)
|
||||||
|
return s
|
||||||
|
}
|
||||||
21
vendor/github.com/josharian/intern/license.md
сгенерированный
поставляемый
Обычный файл
21
vendor/github.com/josharian/intern/license.md
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 Josh Bleecher Snyder
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
5
vendor/github.com/lib/pq/README.md
сгенерированный
поставляемый
5
vendor/github.com/lib/pq/README.md
сгенерированный
поставляемый
@@ -19,10 +19,7 @@
|
|||||||
* Unix socket support
|
* Unix socket support
|
||||||
* Notifications: `LISTEN`/`NOTIFY`
|
* Notifications: `LISTEN`/`NOTIFY`
|
||||||
* pgpass support
|
* pgpass support
|
||||||
|
* GSS (Kerberos) auth
|
||||||
## Optional Features
|
|
||||||
|
|
||||||
* GSS (Kerberos) auth (to use, see GoDoc)
|
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
|
|||||||
8
vendor/github.com/lib/pq/conn.go
сгенерированный
поставляемый
8
vendor/github.com/lib/pq/conn.go
сгенерированный
поставляемый
@@ -1074,9 +1074,9 @@ func isDriverSetting(key string) bool {
|
|||||||
return true
|
return true
|
||||||
case "binary_parameters":
|
case "binary_parameters":
|
||||||
return true
|
return true
|
||||||
case "service":
|
case "krbsrvname":
|
||||||
return true
|
return true
|
||||||
case "spn":
|
case "krbspn":
|
||||||
return true
|
return true
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
@@ -1168,13 +1168,13 @@ func (cn *conn) auth(r *readBuf, o values) {
|
|||||||
|
|
||||||
var token []byte
|
var token []byte
|
||||||
|
|
||||||
if spn, ok := o["spn"]; ok {
|
if spn, ok := o["krbspn"]; ok {
|
||||||
// Use the supplied SPN if provided..
|
// Use the supplied SPN if provided..
|
||||||
token, err = cli.GetInitTokenFromSpn(spn)
|
token, err = cli.GetInitTokenFromSpn(spn)
|
||||||
} else {
|
} else {
|
||||||
// Allow the kerberos service name to be overridden
|
// Allow the kerberos service name to be overridden
|
||||||
service := "postgres"
|
service := "postgres"
|
||||||
if val, ok := o["service"]; ok {
|
if val, ok := o["krbsrvname"]; ok {
|
||||||
service = val
|
service = val
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
vendor/github.com/lib/pq/connector.go
сгенерированный
поставляемый
2
vendor/github.com/lib/pq/connector.go
сгенерированный
поставляемый
@@ -27,7 +27,7 @@ func (c *Connector) Connect(ctx context.Context) (driver.Conn, error) {
|
|||||||
return c.open(ctx)
|
return c.open(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Driver returnst the underlying driver of this Connector.
|
// Driver returns the underlying driver of this Connector.
|
||||||
func (c *Connector) Driver() driver.Driver {
|
func (c *Connector) Driver() driver.Driver {
|
||||||
return &Driver{}
|
return &Driver{}
|
||||||
}
|
}
|
||||||
|
|||||||
25
vendor/github.com/lib/pq/copy.go
сгенерированный
поставляемый
25
vendor/github.com/lib/pq/copy.go
сгенерированный
поставляемый
@@ -49,6 +49,7 @@ type copyin struct {
|
|||||||
buffer []byte
|
buffer []byte
|
||||||
rowData chan []byte
|
rowData chan []byte
|
||||||
done chan bool
|
done chan bool
|
||||||
|
driver.Result
|
||||||
|
|
||||||
closed bool
|
closed bool
|
||||||
|
|
||||||
@@ -151,6 +152,8 @@ func (ci *copyin) resploop() {
|
|||||||
switch t {
|
switch t {
|
||||||
case 'C':
|
case 'C':
|
||||||
// complete
|
// complete
|
||||||
|
res, _ := ci.cn.parseComplete(r.string())
|
||||||
|
ci.setResult(res)
|
||||||
case 'N':
|
case 'N':
|
||||||
if n := ci.cn.noticeHandler; n != nil {
|
if n := ci.cn.noticeHandler; n != nil {
|
||||||
n(parseError(&r))
|
n(parseError(&r))
|
||||||
@@ -201,6 +204,22 @@ func (ci *copyin) setError(err error) {
|
|||||||
ci.Unlock()
|
ci.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ci *copyin) setResult(result driver.Result) {
|
||||||
|
ci.Lock()
|
||||||
|
ci.Result = result
|
||||||
|
ci.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ci *copyin) getResult() driver.Result {
|
||||||
|
ci.Lock()
|
||||||
|
result := ci.Result
|
||||||
|
if result == nil {
|
||||||
|
return driver.RowsAffected(0)
|
||||||
|
}
|
||||||
|
ci.Unlock()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
func (ci *copyin) NumInput() int {
|
func (ci *copyin) NumInput() int {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
@@ -231,7 +250,11 @@ func (ci *copyin) Exec(v []driver.Value) (r driver.Result, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(v) == 0 {
|
if len(v) == 0 {
|
||||||
return driver.RowsAffected(0), ci.Close()
|
if err := ci.Close(); err != nil {
|
||||||
|
return driver.RowsAffected(0), err
|
||||||
|
}
|
||||||
|
|
||||||
|
return ci.getResult(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
numValues := len(v)
|
numValues := len(v)
|
||||||
|
|||||||
9
vendor/github.com/lib/pq/doc.go
сгенерированный
поставляемый
9
vendor/github.com/lib/pq/doc.go
сгенерированный
поставляемый
@@ -57,8 +57,6 @@ supported:
|
|||||||
* sslkey - Key file location. The file must contain PEM encoded data.
|
* sslkey - Key file location. The file must contain PEM encoded data.
|
||||||
* sslrootcert - The location of the root certificate file. The file
|
* sslrootcert - The location of the root certificate file. The file
|
||||||
must contain PEM encoded data.
|
must contain PEM encoded data.
|
||||||
* spn - Configures GSS (Kerberos) SPN.
|
|
||||||
* service - GSS (Kerberos) service name to use when constructing the SPN (default is `postgres`).
|
|
||||||
|
|
||||||
Valid values for sslmode are:
|
Valid values for sslmode are:
|
||||||
|
|
||||||
@@ -259,5 +257,12 @@ package:
|
|||||||
This package is in a separate module so that users who don't need Kerberos
|
This package is in a separate module so that users who don't need Kerberos
|
||||||
don't have to download unnecessary dependencies.
|
don't have to download unnecessary dependencies.
|
||||||
|
|
||||||
|
When imported, additional connection string parameters are supported:
|
||||||
|
|
||||||
|
* krbsrvname - GSS (Kerberos) service name when constructing the
|
||||||
|
SPN (default is `postgres`). This will be combined with the host
|
||||||
|
to form the full SPN: `krbsrvname/host`.
|
||||||
|
* krbspn - GSS (Kerberos) SPN. This takes priority over
|
||||||
|
`krbsrvname` if present.
|
||||||
*/
|
*/
|
||||||
package pq
|
package pq
|
||||||
|
|||||||
42
vendor/github.com/mailru/easyjson/Makefile
сгенерированный
поставляемый
42
vendor/github.com/mailru/easyjson/Makefile
сгенерированный
поставляемый
@@ -20,22 +20,38 @@ generate: build
|
|||||||
./tests/reference_to_pointer.go \
|
./tests/reference_to_pointer.go \
|
||||||
./tests/html.go \
|
./tests/html.go \
|
||||||
./tests/unknown_fields.go \
|
./tests/unknown_fields.go \
|
||||||
|
./tests/type_declaration.go \
|
||||||
bin/easyjson -all ./tests/data.go
|
./tests/type_declaration_skip.go \
|
||||||
bin/easyjson -all ./tests/nothing.go
|
./tests/members_escaped.go \
|
||||||
bin/easyjson -all ./tests/errors.go
|
./tests/members_unescaped.go \
|
||||||
bin/easyjson -all ./tests/html.go
|
./tests/intern.go \
|
||||||
|
./tests/nocopy.go \
|
||||||
|
./tests/escaping.go
|
||||||
|
bin/easyjson -all \
|
||||||
|
./tests/data.go \
|
||||||
|
./tests/nothing.go \
|
||||||
|
./tests/errors.go \
|
||||||
|
./tests/html.go \
|
||||||
|
./tests/type_declaration_skip.go
|
||||||
|
bin/easyjson \
|
||||||
|
./tests/nested_easy.go \
|
||||||
|
./tests/named_type.go \
|
||||||
|
./tests/custom_map_key_type.go \
|
||||||
|
./tests/embedded_type.go \
|
||||||
|
./tests/reference_to_pointer.go \
|
||||||
|
./tests/key_marshaler_map.go \
|
||||||
|
./tests/unknown_fields.go \
|
||||||
|
./tests/type_declaration.go \
|
||||||
|
./tests/members_escaped.go \
|
||||||
|
./tests/intern.go \
|
||||||
|
./tests/nocopy.go \
|
||||||
|
./tests/escaping.go \
|
||||||
|
./tests/nested_marshaler.go
|
||||||
bin/easyjson -snake_case ./tests/snake.go
|
bin/easyjson -snake_case ./tests/snake.go
|
||||||
bin/easyjson -omit_empty ./tests/omitempty.go
|
bin/easyjson -omit_empty ./tests/omitempty.go
|
||||||
bin/easyjson -build_tags=use_easyjson ./benchmark/data.go
|
bin/easyjson -build_tags=use_easyjson -disable_members_unescape ./benchmark/data.go
|
||||||
bin/easyjson ./tests/nested_easy.go
|
|
||||||
bin/easyjson ./tests/named_type.go
|
|
||||||
bin/easyjson ./tests/custom_map_key_type.go
|
|
||||||
bin/easyjson ./tests/embedded_type.go
|
|
||||||
bin/easyjson ./tests/reference_to_pointer.go
|
|
||||||
bin/easyjson ./tests/key_marshaler_map.go
|
|
||||||
bin/easyjson -disallow_unknown_fields ./tests/disallow_unknown.go
|
bin/easyjson -disallow_unknown_fields ./tests/disallow_unknown.go
|
||||||
bin/easyjson ./tests/unknown_fields.go
|
bin/easyjson -disable_members_unescape ./tests/members_unescaped.go
|
||||||
|
|
||||||
test: generate
|
test: generate
|
||||||
go test \
|
go test \
|
||||||
|
|||||||
65
vendor/github.com/mailru/easyjson/README.md
сгенерированный
поставляемый
65
vendor/github.com/mailru/easyjson/README.md
сгенерированный
поставляемый
@@ -35,6 +35,10 @@ Usage of easyjson:
|
|||||||
generate marshaler/unmarshalers for all structs in a file
|
generate marshaler/unmarshalers for all structs in a file
|
||||||
-build_tags string
|
-build_tags string
|
||||||
build tags to add to generated file
|
build tags to add to generated file
|
||||||
|
-gen_build_flags string
|
||||||
|
build flags when running the generator while bootstrapping
|
||||||
|
-byte
|
||||||
|
use simple bytes instead of Base64Bytes for slice of bytes
|
||||||
-leave_temps
|
-leave_temps
|
||||||
do not delete temporary files
|
do not delete temporary files
|
||||||
-no_std_marshalers
|
-no_std_marshalers
|
||||||
@@ -55,10 +59,20 @@ Usage of easyjson:
|
|||||||
only generate stubs for marshaler/unmarshaler funcs
|
only generate stubs for marshaler/unmarshaler funcs
|
||||||
-disallow_unknown_fields
|
-disallow_unknown_fields
|
||||||
return error if some unknown field in json appeared
|
return error if some unknown field in json appeared
|
||||||
|
-disable_members_unescape
|
||||||
|
disable unescaping of \uXXXX string sequences in member names
|
||||||
```
|
```
|
||||||
|
|
||||||
Using `-all` will generate marshalers/unmarshalers for all Go structs in the
|
Using `-all` will generate marshalers/unmarshalers for all Go structs in the
|
||||||
file. If `-all` is not provided, then only those structs whose preceding
|
file excluding those structs whose preceding comment starts with `easyjson:skip`.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```go
|
||||||
|
//easyjson:skip
|
||||||
|
type A struct {}
|
||||||
|
```
|
||||||
|
|
||||||
|
If `-all` is not provided, then only those structs whose preceding
|
||||||
comment starts with `easyjson:json` will have marshalers/unmarshalers
|
comment starts with `easyjson:json` will have marshalers/unmarshalers
|
||||||
generated. For example:
|
generated. For example:
|
||||||
|
|
||||||
@@ -76,10 +90,26 @@ Additional option notes:
|
|||||||
|
|
||||||
* `-build_tags` will add the specified build tags to generated Go sources.
|
* `-build_tags` will add the specified build tags to generated Go sources.
|
||||||
|
|
||||||
|
* `-gen_build_flags` will execute the easyjson bootstapping code to launch the
|
||||||
|
actual generator command with provided flags. Multiple arguments should be
|
||||||
|
separated by space e.g. `-gen_build_flags="-mod=mod -x"`.
|
||||||
|
|
||||||
|
## Structure json tag options
|
||||||
|
|
||||||
|
Besides standart json tag options like 'omitempty' the following are supported:
|
||||||
|
|
||||||
|
* 'nocopy' - disables allocation and copying of string values, making them
|
||||||
|
refer to original json buffer memory. This works great for short lived
|
||||||
|
objects which are not hold in memory after decoding and immediate usage.
|
||||||
|
Note if string requires unescaping it will be processed as normally.
|
||||||
|
* 'intern' - string "interning" (deduplication) to save memory when the very
|
||||||
|
same string dictionary values are often met all over the structure.
|
||||||
|
See below for more details.
|
||||||
|
|
||||||
## Generated Marshaler/Unmarshaler Funcs
|
## Generated Marshaler/Unmarshaler Funcs
|
||||||
|
|
||||||
For Go struct types, easyjson generates the funcs `MarshalEasyJSON` /
|
For Go struct types, easyjson generates the funcs `MarshalEasyJSON` /
|
||||||
`UnmarshalEasyJSON` for marshaling/unmarshaling JSON. In turn, these satisify
|
`UnmarshalEasyJSON` for marshaling/unmarshaling JSON. In turn, these satisfy
|
||||||
the `easyjson.Marshaler` and `easyjson.Unmarshaler` interfaces and when used in
|
the `easyjson.Marshaler` and `easyjson.Unmarshaler` interfaces and when used in
|
||||||
conjunction with `easyjson.Marshal` / `easyjson.Unmarshal` avoid unnecessary
|
conjunction with `easyjson.Marshal` / `easyjson.Unmarshal` avoid unnecessary
|
||||||
reflection / type assertions during marshaling/unmarshaling to/from JSON for Go
|
reflection / type assertions during marshaling/unmarshaling to/from JSON for Go
|
||||||
@@ -102,17 +132,17 @@ utility funcs that are available.
|
|||||||
## Controlling easyjson Marshaling and Unmarshaling Behavior
|
## Controlling easyjson Marshaling and Unmarshaling Behavior
|
||||||
|
|
||||||
Go types can provide their own `MarshalEasyJSON` and `UnmarshalEasyJSON` funcs
|
Go types can provide their own `MarshalEasyJSON` and `UnmarshalEasyJSON` funcs
|
||||||
that satisify the `easyjson.Marshaler` / `easyjson.Unmarshaler` interfaces.
|
that satisfy the `easyjson.Marshaler` / `easyjson.Unmarshaler` interfaces.
|
||||||
These will be used by `easyjson.Marshal` and `easyjson.Unmarshal` when defined
|
These will be used by `easyjson.Marshal` and `easyjson.Unmarshal` when defined
|
||||||
for a Go type.
|
for a Go type.
|
||||||
|
|
||||||
Go types can also satisify the `easyjson.Optional` interface, which allows the
|
Go types can also satisfy the `easyjson.Optional` interface, which allows the
|
||||||
type to define its own `omitempty` logic.
|
type to define its own `omitempty` logic.
|
||||||
|
|
||||||
## Type Wrappers
|
## Type Wrappers
|
||||||
|
|
||||||
easyjson provides additional type wrappers defined in the `easyjson/opt`
|
easyjson provides additional type wrappers defined in the `easyjson/opt`
|
||||||
package. These wrap the standard Go primitives and in turn satisify the
|
package. These wrap the standard Go primitives and in turn satisfy the
|
||||||
easyjson interfaces.
|
easyjson interfaces.
|
||||||
|
|
||||||
The `easyjson/opt` type wrappers are useful when needing to distinguish between
|
The `easyjson/opt` type wrappers are useful when needing to distinguish between
|
||||||
@@ -133,6 +163,27 @@ through a call to `buffer.Init()` prior to any marshaling or unmarshaling.
|
|||||||
Please see the [GoDoc listing](https://godoc.org/github.com/mailru/easyjson/buffer)
|
Please see the [GoDoc listing](https://godoc.org/github.com/mailru/easyjson/buffer)
|
||||||
for more information.
|
for more information.
|
||||||
|
|
||||||
|
## String interning
|
||||||
|
|
||||||
|
During unmarshaling, `string` field values can be optionally
|
||||||
|
[interned](https://en.wikipedia.org/wiki/String_interning) to reduce memory
|
||||||
|
allocations and usage by deduplicating strings in memory, at the expense of slightly
|
||||||
|
increased CPU usage.
|
||||||
|
|
||||||
|
This will work effectively only for `string` fields being decoded that have frequently
|
||||||
|
the same value (e.g. if you have a string field that can only assume a small number
|
||||||
|
of possible values).
|
||||||
|
|
||||||
|
To enable string interning, add the `intern` keyword tag to your `json` tag on `string`
|
||||||
|
fields, e.g.:
|
||||||
|
|
||||||
|
```go
|
||||||
|
type Foo struct {
|
||||||
|
UUID string `json:"uuid"` // will not be interned during unmarshaling
|
||||||
|
State string `json:"state,intern"` // will be interned during unmarshaling
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Issues, Notes, and Limitations
|
## Issues, Notes, and Limitations
|
||||||
|
|
||||||
* easyjson is still early in its development. As such, there are likely to be
|
* easyjson is still early in its development. As such, there are likely to be
|
||||||
@@ -174,7 +225,7 @@ for more information.
|
|||||||
needs to be known prior to sending the data. Currently this is not possible
|
needs to be known prior to sending the data. Currently this is not possible
|
||||||
with easyjson's architecture.
|
with easyjson's architecture.
|
||||||
|
|
||||||
* easyjson parser and codegen based on reflection, so it wont works on `package main`
|
* easyjson parser and codegen based on reflection, so it won't work on `package main`
|
||||||
files, because they cant be imported by parser.
|
files, because they cant be imported by parser.
|
||||||
|
|
||||||
## Benchmarks
|
## Benchmarks
|
||||||
@@ -239,7 +290,7 @@ since the memory is not freed between marshaling operations.
|
|||||||
### easyjson vs 'ujson' python module
|
### easyjson vs 'ujson' python module
|
||||||
|
|
||||||
[ujson](https://github.com/esnme/ultrajson) is using C code for parsing, so it
|
[ujson](https://github.com/esnme/ultrajson) is using C code for parsing, so it
|
||||||
is interesting to see how plain golang compares to that. It is imporant to note
|
is interesting to see how plain golang compares to that. It is important to note
|
||||||
that the resulting object for python is slower to access, since the library
|
that the resulting object for python is slower to access, since the library
|
||||||
parses JSON object into dictionaries.
|
parses JSON object into dictionaries.
|
||||||
|
|
||||||
|
|||||||
62
vendor/github.com/mailru/easyjson/buffer/pool.go
сгенерированный
поставляемый
62
vendor/github.com/mailru/easyjson/buffer/pool.go
сгенерированный
поставляемый
@@ -4,6 +4,7 @@ package buffer
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
|
"net"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -52,16 +53,14 @@ func putBuf(buf []byte) {
|
|||||||
|
|
||||||
// getBuf gets a chunk from reuse pool or creates a new one if reuse failed.
|
// getBuf gets a chunk from reuse pool or creates a new one if reuse failed.
|
||||||
func getBuf(size int) []byte {
|
func getBuf(size int) []byte {
|
||||||
if size < config.PooledSize {
|
if size >= config.PooledSize {
|
||||||
return make([]byte, 0, size)
|
|
||||||
}
|
|
||||||
|
|
||||||
if c := buffers[size]; c != nil {
|
if c := buffers[size]; c != nil {
|
||||||
v := c.Get()
|
v := c.Get()
|
||||||
if v != nil {
|
if v != nil {
|
||||||
return v.([]byte)
|
return v.([]byte)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return make([]byte, 0, size)
|
return make([]byte, 0, size)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,9 +77,12 @@ type Buffer struct {
|
|||||||
// EnsureSpace makes sure that the current chunk contains at least s free bytes,
|
// EnsureSpace makes sure that the current chunk contains at least s free bytes,
|
||||||
// possibly creating a new chunk.
|
// possibly creating a new chunk.
|
||||||
func (b *Buffer) EnsureSpace(s int) {
|
func (b *Buffer) EnsureSpace(s int) {
|
||||||
if cap(b.Buf)-len(b.Buf) >= s {
|
if cap(b.Buf)-len(b.Buf) < s {
|
||||||
return
|
b.ensureSpaceSlow(s)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Buffer) ensureSpaceSlow(s int) {
|
||||||
l := len(b.Buf)
|
l := len(b.Buf)
|
||||||
if l > 0 {
|
if l > 0 {
|
||||||
if cap(b.toPool) != cap(b.Buf) {
|
if cap(b.toPool) != cap(b.Buf) {
|
||||||
@@ -105,18 +107,22 @@ func (b *Buffer) EnsureSpace(s int) {
|
|||||||
|
|
||||||
// AppendByte appends a single byte to buffer.
|
// AppendByte appends a single byte to buffer.
|
||||||
func (b *Buffer) AppendByte(data byte) {
|
func (b *Buffer) AppendByte(data byte) {
|
||||||
if cap(b.Buf) == len(b.Buf) { // EnsureSpace won't be inlined.
|
|
||||||
b.EnsureSpace(1)
|
b.EnsureSpace(1)
|
||||||
}
|
|
||||||
b.Buf = append(b.Buf, data)
|
b.Buf = append(b.Buf, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AppendBytes appends a byte slice to buffer.
|
// AppendBytes appends a byte slice to buffer.
|
||||||
func (b *Buffer) AppendBytes(data []byte) {
|
func (b *Buffer) AppendBytes(data []byte) {
|
||||||
for len(data) > 0 {
|
if len(data) <= cap(b.Buf)-len(b.Buf) {
|
||||||
if cap(b.Buf) == len(b.Buf) { // EnsureSpace won't be inlined.
|
b.Buf = append(b.Buf, data...) // fast path
|
||||||
b.EnsureSpace(1)
|
} else {
|
||||||
|
b.appendBytesSlow(data)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Buffer) appendBytesSlow(data []byte) {
|
||||||
|
for len(data) > 0 {
|
||||||
|
b.EnsureSpace(1)
|
||||||
|
|
||||||
sz := cap(b.Buf) - len(b.Buf)
|
sz := cap(b.Buf) - len(b.Buf)
|
||||||
if sz > len(data) {
|
if sz > len(data) {
|
||||||
@@ -128,12 +134,18 @@ func (b *Buffer) AppendBytes(data []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// AppendBytes appends a string to buffer.
|
// AppendString appends a string to buffer.
|
||||||
func (b *Buffer) AppendString(data string) {
|
func (b *Buffer) AppendString(data string) {
|
||||||
for len(data) > 0 {
|
if len(data) <= cap(b.Buf)-len(b.Buf) {
|
||||||
if cap(b.Buf) == len(b.Buf) { // EnsureSpace won't be inlined.
|
b.Buf = append(b.Buf, data...) // fast path
|
||||||
b.EnsureSpace(1)
|
} else {
|
||||||
|
b.appendStringSlow(data)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Buffer) appendStringSlow(data string) {
|
||||||
|
for len(data) > 0 {
|
||||||
|
b.EnsureSpace(1)
|
||||||
|
|
||||||
sz := cap(b.Buf) - len(b.Buf)
|
sz := cap(b.Buf) - len(b.Buf)
|
||||||
if sz > len(data) {
|
if sz > len(data) {
|
||||||
@@ -156,18 +168,14 @@ func (b *Buffer) Size() int {
|
|||||||
|
|
||||||
// DumpTo outputs the contents of a buffer to a writer and resets the buffer.
|
// DumpTo outputs the contents of a buffer to a writer and resets the buffer.
|
||||||
func (b *Buffer) DumpTo(w io.Writer) (written int, err error) {
|
func (b *Buffer) DumpTo(w io.Writer) (written int, err error) {
|
||||||
var n int
|
bufs := net.Buffers(b.bufs)
|
||||||
for _, buf := range b.bufs {
|
if len(b.Buf) > 0 {
|
||||||
if err == nil {
|
bufs = append(bufs, b.Buf)
|
||||||
n, err = w.Write(buf)
|
|
||||||
written += n
|
|
||||||
}
|
|
||||||
putBuf(buf)
|
|
||||||
}
|
}
|
||||||
|
n, err := bufs.WriteTo(w)
|
||||||
|
|
||||||
if err == nil {
|
for _, buf := range b.bufs {
|
||||||
n, err = w.Write(b.Buf)
|
putBuf(buf)
|
||||||
written += n
|
|
||||||
}
|
}
|
||||||
putBuf(b.toPool)
|
putBuf(b.toPool)
|
||||||
|
|
||||||
@@ -175,7 +183,7 @@ func (b *Buffer) DumpTo(w io.Writer) (written int, err error) {
|
|||||||
b.Buf = nil
|
b.Buf = nil
|
||||||
b.toPool = nil
|
b.toPool = nil
|
||||||
|
|
||||||
return
|
return int(n), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildBytes creates a single byte slice with all the contents of the buffer. Data is
|
// BuildBytes creates a single byte slice with all the contents of the buffer. Data is
|
||||||
@@ -192,7 +200,7 @@ func (b *Buffer) BuildBytes(reuse ...[]byte) []byte {
|
|||||||
var ret []byte
|
var ret []byte
|
||||||
size := b.Size()
|
size := b.Size()
|
||||||
|
|
||||||
// If we got a buffer as argument and it is big enought, reuse it.
|
// If we got a buffer as argument and it is big enough, reuse it.
|
||||||
if len(reuse) == 1 && cap(reuse[0]) >= size {
|
if len(reuse) == 1 && cap(reuse[0]) >= size {
|
||||||
ret = reuse[0][:0]
|
ret = reuse[0][:0]
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
2
vendor/github.com/mailru/easyjson/go.mod
сгенерированный
поставляемый
2
vendor/github.com/mailru/easyjson/go.mod
сгенерированный
поставляемый
@@ -1,3 +1,5 @@
|
|||||||
module github.com/mailru/easyjson
|
module github.com/mailru/easyjson
|
||||||
|
|
||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
|
require github.com/josharian/intern v1.0.0
|
||||||
|
|||||||
2
vendor/github.com/mailru/easyjson/go.sum
сгенерированный
поставляемый
Обычный файл
2
vendor/github.com/mailru/easyjson/go.sum
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,2 @@
|
|||||||
|
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||||
|
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||||
26
vendor/github.com/mailru/easyjson/helpers.go
сгенерированный
поставляемый
26
vendor/github.com/mailru/easyjson/helpers.go
сгенерированный
поставляемый
@@ -6,6 +6,7 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
"github.com/mailru/easyjson/jlexer"
|
"github.com/mailru/easyjson/jlexer"
|
||||||
"github.com/mailru/easyjson/jwriter"
|
"github.com/mailru/easyjson/jwriter"
|
||||||
@@ -21,6 +22,12 @@ type Unmarshaler interface {
|
|||||||
UnmarshalEasyJSON(w *jlexer.Lexer)
|
UnmarshalEasyJSON(w *jlexer.Lexer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MarshalerUnmarshaler is an easyjson-compatible marshaler/unmarshaler interface.
|
||||||
|
type MarshalerUnmarshaler interface {
|
||||||
|
Marshaler
|
||||||
|
Unmarshaler
|
||||||
|
}
|
||||||
|
|
||||||
// Optional defines an undefined-test method for a type to integrate with 'omitempty' logic.
|
// Optional defines an undefined-test method for a type to integrate with 'omitempty' logic.
|
||||||
type Optional interface {
|
type Optional interface {
|
||||||
IsDefined() bool
|
IsDefined() bool
|
||||||
@@ -36,9 +43,17 @@ type UnknownsMarshaler interface {
|
|||||||
MarshalUnknowns(w *jwriter.Writer, first bool)
|
MarshalUnknowns(w *jwriter.Writer, first bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isNilInterface(i interface{}) bool {
|
||||||
|
return (*[2]uintptr)(unsafe.Pointer(&i))[1] == 0
|
||||||
|
}
|
||||||
|
|
||||||
// Marshal returns data as a single byte slice. Method is suboptimal as the data is likely to be copied
|
// Marshal returns data as a single byte slice. Method is suboptimal as the data is likely to be copied
|
||||||
// from a chain of smaller chunks.
|
// from a chain of smaller chunks.
|
||||||
func Marshal(v Marshaler) ([]byte, error) {
|
func Marshal(v Marshaler) ([]byte, error) {
|
||||||
|
if isNilInterface(v) {
|
||||||
|
return nullBytes, nil
|
||||||
|
}
|
||||||
|
|
||||||
w := jwriter.Writer{}
|
w := jwriter.Writer{}
|
||||||
v.MarshalEasyJSON(&w)
|
v.MarshalEasyJSON(&w)
|
||||||
return w.BuildBytes()
|
return w.BuildBytes()
|
||||||
@@ -46,6 +61,10 @@ func Marshal(v Marshaler) ([]byte, error) {
|
|||||||
|
|
||||||
// MarshalToWriter marshals the data to an io.Writer.
|
// MarshalToWriter marshals the data to an io.Writer.
|
||||||
func MarshalToWriter(v Marshaler, w io.Writer) (written int, err error) {
|
func MarshalToWriter(v Marshaler, w io.Writer) (written int, err error) {
|
||||||
|
if isNilInterface(v) {
|
||||||
|
return w.Write(nullBytes)
|
||||||
|
}
|
||||||
|
|
||||||
jw := jwriter.Writer{}
|
jw := jwriter.Writer{}
|
||||||
v.MarshalEasyJSON(&jw)
|
v.MarshalEasyJSON(&jw)
|
||||||
return jw.DumpTo(w)
|
return jw.DumpTo(w)
|
||||||
@@ -56,6 +75,13 @@ func MarshalToWriter(v Marshaler, w io.Writer) (written int, err error) {
|
|||||||
// false if an error occurred before any http.ResponseWriter methods were actually
|
// false if an error occurred before any http.ResponseWriter methods were actually
|
||||||
// invoked (in this case a 500 reply is possible).
|
// invoked (in this case a 500 reply is possible).
|
||||||
func MarshalToHTTPResponseWriter(v Marshaler, w http.ResponseWriter) (started bool, written int, err error) {
|
func MarshalToHTTPResponseWriter(v Marshaler, w http.ResponseWriter) (started bool, written int, err error) {
|
||||||
|
if isNilInterface(v) {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.Header().Set("Content-Length", strconv.Itoa(len(nullBytes)))
|
||||||
|
written, err = w.Write(nullBytes)
|
||||||
|
return true, written, err
|
||||||
|
}
|
||||||
|
|
||||||
jw := jwriter.Writer{}
|
jw := jwriter.Writer{}
|
||||||
v.MarshalEasyJSON(&jw)
|
v.MarshalEasyJSON(&jw)
|
||||||
if jw.Error != nil {
|
if jw.Error != nil {
|
||||||
|
|||||||
208
vendor/github.com/mailru/easyjson/jlexer/lexer.go
сгенерированный
поставляемый
208
vendor/github.com/mailru/easyjson/jlexer/lexer.go
сгенерированный
поставляемый
@@ -5,6 +5,7 @@
|
|||||||
package jlexer
|
package jlexer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
@@ -14,6 +15,8 @@ import (
|
|||||||
"unicode"
|
"unicode"
|
||||||
"unicode/utf16"
|
"unicode/utf16"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"github.com/josharian/intern"
|
||||||
)
|
)
|
||||||
|
|
||||||
// tokenKind determines type of a token.
|
// tokenKind determines type of a token.
|
||||||
@@ -33,6 +36,7 @@ type token struct {
|
|||||||
kind tokenKind // Type of a token.
|
kind tokenKind // Type of a token.
|
||||||
|
|
||||||
boolValue bool // Value if a boolean literal token.
|
boolValue bool // Value if a boolean literal token.
|
||||||
|
byteValueCloned bool // true if byteValue was allocated and does not refer to original json body
|
||||||
byteValue []byte // Raw value of a token.
|
byteValue []byte // Raw value of a token.
|
||||||
delimValue byte
|
delimValue byte
|
||||||
}
|
}
|
||||||
@@ -240,23 +244,65 @@ func (r *Lexer) fetchNumber() {
|
|||||||
|
|
||||||
// findStringLen tries to scan into the string literal for ending quote char to determine required size.
|
// findStringLen tries to scan into the string literal for ending quote char to determine required size.
|
||||||
// The size will be exact if no escapes are present and may be inexact if there are escaped chars.
|
// The size will be exact if no escapes are present and may be inexact if there are escaped chars.
|
||||||
func findStringLen(data []byte) (isValid, hasEscapes bool, length int) {
|
func findStringLen(data []byte) (isValid bool, length int) {
|
||||||
delta := 0
|
for {
|
||||||
|
idx := bytes.IndexByte(data, '"')
|
||||||
for i := 0; i < len(data); i++ {
|
if idx == -1 {
|
||||||
switch data[i] {
|
return false, len(data)
|
||||||
case '\\':
|
|
||||||
i++
|
|
||||||
delta++
|
|
||||||
if i < len(data) && data[i] == 'u' {
|
|
||||||
delta++
|
|
||||||
}
|
|
||||||
case '"':
|
|
||||||
return true, (delta > 0), (i - delta)
|
|
||||||
}
|
}
|
||||||
|
if idx == 0 || (idx > 0 && data[idx-1] != '\\') {
|
||||||
|
return true, length + idx
|
||||||
}
|
}
|
||||||
|
|
||||||
return false, false, len(data)
|
// count \\\\\\\ sequences. even number of slashes means quote is not really escaped
|
||||||
|
cnt := 1
|
||||||
|
for idx-cnt-1 >= 0 && data[idx-cnt-1] == '\\' {
|
||||||
|
cnt++
|
||||||
|
}
|
||||||
|
if cnt%2 == 0 {
|
||||||
|
return true, length + idx
|
||||||
|
}
|
||||||
|
|
||||||
|
length += idx + 1
|
||||||
|
data = data[idx+1:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// unescapeStringToken performs unescaping of string token.
|
||||||
|
// if no escaping is needed, original string is returned, otherwise - a new one allocated
|
||||||
|
func (r *Lexer) unescapeStringToken() (err error) {
|
||||||
|
data := r.token.byteValue
|
||||||
|
var unescapedData []byte
|
||||||
|
|
||||||
|
for {
|
||||||
|
i := bytes.IndexByte(data, '\\')
|
||||||
|
if i == -1 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
escapedRune, escapedBytes, err := decodeEscape(data[i:])
|
||||||
|
if err != nil {
|
||||||
|
r.errParse(err.Error())
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if unescapedData == nil {
|
||||||
|
unescapedData = make([]byte, 0, len(r.token.byteValue))
|
||||||
|
}
|
||||||
|
|
||||||
|
var d [4]byte
|
||||||
|
s := utf8.EncodeRune(d[:], escapedRune)
|
||||||
|
unescapedData = append(unescapedData, data[:i]...)
|
||||||
|
unescapedData = append(unescapedData, d[:s]...)
|
||||||
|
|
||||||
|
data = data[i+escapedBytes:]
|
||||||
|
}
|
||||||
|
|
||||||
|
if unescapedData != nil {
|
||||||
|
r.token.byteValue = append(unescapedData, data...)
|
||||||
|
r.token.byteValueCloned = true
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// getu4 decodes \uXXXX from the beginning of s, returning the hex value,
|
// getu4 decodes \uXXXX from the beginning of s, returning the hex value,
|
||||||
@@ -286,36 +332,30 @@ func getu4(s []byte) rune {
|
|||||||
return val
|
return val
|
||||||
}
|
}
|
||||||
|
|
||||||
// processEscape processes a single escape sequence and returns number of bytes processed.
|
// decodeEscape processes a single escape sequence and returns number of bytes processed.
|
||||||
func (r *Lexer) processEscape(data []byte) (int, error) {
|
func decodeEscape(data []byte) (decoded rune, bytesProcessed int, err error) {
|
||||||
if len(data) < 2 {
|
if len(data) < 2 {
|
||||||
return 0, fmt.Errorf("syntax error at %v", string(data))
|
return 0, 0, errors.New("incorrect escape symbol \\ at the end of token")
|
||||||
}
|
}
|
||||||
|
|
||||||
c := data[1]
|
c := data[1]
|
||||||
switch c {
|
switch c {
|
||||||
case '"', '/', '\\':
|
case '"', '/', '\\':
|
||||||
r.token.byteValue = append(r.token.byteValue, c)
|
return rune(c), 2, nil
|
||||||
return 2, nil
|
|
||||||
case 'b':
|
case 'b':
|
||||||
r.token.byteValue = append(r.token.byteValue, '\b')
|
return '\b', 2, nil
|
||||||
return 2, nil
|
|
||||||
case 'f':
|
case 'f':
|
||||||
r.token.byteValue = append(r.token.byteValue, '\f')
|
return '\f', 2, nil
|
||||||
return 2, nil
|
|
||||||
case 'n':
|
case 'n':
|
||||||
r.token.byteValue = append(r.token.byteValue, '\n')
|
return '\n', 2, nil
|
||||||
return 2, nil
|
|
||||||
case 'r':
|
case 'r':
|
||||||
r.token.byteValue = append(r.token.byteValue, '\r')
|
return '\r', 2, nil
|
||||||
return 2, nil
|
|
||||||
case 't':
|
case 't':
|
||||||
r.token.byteValue = append(r.token.byteValue, '\t')
|
return '\t', 2, nil
|
||||||
return 2, nil
|
|
||||||
case 'u':
|
case 'u':
|
||||||
rr := getu4(data)
|
rr := getu4(data)
|
||||||
if rr < 0 {
|
if rr < 0 {
|
||||||
return 0, errors.New("syntax error")
|
return 0, 0, errors.New("incorrectly escaped \\uXXXX sequence")
|
||||||
}
|
}
|
||||||
|
|
||||||
read := 6
|
read := 6
|
||||||
@@ -328,13 +368,10 @@ func (r *Lexer) processEscape(data []byte) (int, error) {
|
|||||||
rr = unicode.ReplacementChar
|
rr = unicode.ReplacementChar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var d [4]byte
|
return rr, read, nil
|
||||||
s := utf8.EncodeRune(d[:], rr)
|
|
||||||
r.token.byteValue = append(r.token.byteValue, d[:s]...)
|
|
||||||
return read, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0, errors.New("syntax error")
|
return 0, 0, errors.New("incorrectly escaped bytes")
|
||||||
}
|
}
|
||||||
|
|
||||||
// fetchString scans a string literal token.
|
// fetchString scans a string literal token.
|
||||||
@@ -342,43 +379,14 @@ func (r *Lexer) fetchString() {
|
|||||||
r.pos++
|
r.pos++
|
||||||
data := r.Data[r.pos:]
|
data := r.Data[r.pos:]
|
||||||
|
|
||||||
isValid, hasEscapes, length := findStringLen(data)
|
isValid, length := findStringLen(data)
|
||||||
if !isValid {
|
if !isValid {
|
||||||
r.pos += length
|
r.pos += length
|
||||||
r.errParse("unterminated string literal")
|
r.errParse("unterminated string literal")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !hasEscapes {
|
|
||||||
r.token.byteValue = data[:length]
|
r.token.byteValue = data[:length]
|
||||||
r.pos += length + 1
|
r.pos += length + 1 // skip closing '"' as well
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
r.token.byteValue = make([]byte, 0, length)
|
|
||||||
p := 0
|
|
||||||
for i := 0; i < len(data); {
|
|
||||||
switch data[i] {
|
|
||||||
case '"':
|
|
||||||
r.pos += i + 1
|
|
||||||
r.token.byteValue = append(r.token.byteValue, data[p:i]...)
|
|
||||||
i++
|
|
||||||
return
|
|
||||||
|
|
||||||
case '\\':
|
|
||||||
r.token.byteValue = append(r.token.byteValue, data[p:i]...)
|
|
||||||
off, err := r.processEscape(data[i:])
|
|
||||||
if err != nil {
|
|
||||||
r.errParse(err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
i += off
|
|
||||||
p = i
|
|
||||||
|
|
||||||
default:
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
r.errParse("unterminated string literal")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// scanToken scans the next token if no token is currently available in the lexer.
|
// scanToken scans the next token if no token is currently available in the lexer.
|
||||||
@@ -602,7 +610,7 @@ func (r *Lexer) Consumed() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Lexer) unsafeString() (string, []byte) {
|
func (r *Lexer) unsafeString(skipUnescape bool) (string, []byte) {
|
||||||
if r.token.kind == tokenUndef && r.Ok() {
|
if r.token.kind == tokenUndef && r.Ok() {
|
||||||
r.FetchToken()
|
r.FetchToken()
|
||||||
}
|
}
|
||||||
@@ -610,6 +618,13 @@ func (r *Lexer) unsafeString() (string, []byte) {
|
|||||||
r.errInvalidToken("string")
|
r.errInvalidToken("string")
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
if !skipUnescape {
|
||||||
|
if err := r.unescapeStringToken(); err != nil {
|
||||||
|
r.errInvalidToken("string")
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bytes := r.token.byteValue
|
bytes := r.token.byteValue
|
||||||
ret := bytesToStr(r.token.byteValue)
|
ret := bytesToStr(r.token.byteValue)
|
||||||
r.consume()
|
r.consume()
|
||||||
@@ -621,13 +636,19 @@ func (r *Lexer) unsafeString() (string, []byte) {
|
|||||||
// Warning: returned string may point to the input buffer, so the string should not outlive
|
// Warning: returned string may point to the input buffer, so the string should not outlive
|
||||||
// the input buffer. Intended pattern of usage is as an argument to a switch statement.
|
// the input buffer. Intended pattern of usage is as an argument to a switch statement.
|
||||||
func (r *Lexer) UnsafeString() string {
|
func (r *Lexer) UnsafeString() string {
|
||||||
ret, _ := r.unsafeString()
|
ret, _ := r.unsafeString(false)
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnsafeBytes returns the byte slice if the token is a string literal.
|
// UnsafeBytes returns the byte slice if the token is a string literal.
|
||||||
func (r *Lexer) UnsafeBytes() []byte {
|
func (r *Lexer) UnsafeBytes() []byte {
|
||||||
_, ret := r.unsafeString()
|
_, ret := r.unsafeString(false)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnsafeFieldName returns current member name string token
|
||||||
|
func (r *Lexer) UnsafeFieldName(skipUnescape bool) string {
|
||||||
|
ret, _ := r.unsafeString(skipUnescape)
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -640,7 +661,34 @@ func (r *Lexer) String() string {
|
|||||||
r.errInvalidToken("string")
|
r.errInvalidToken("string")
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
ret := string(r.token.byteValue)
|
if err := r.unescapeStringToken(); err != nil {
|
||||||
|
r.errInvalidToken("string")
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
var ret string
|
||||||
|
if r.token.byteValueCloned {
|
||||||
|
ret = bytesToStr(r.token.byteValue)
|
||||||
|
} else {
|
||||||
|
ret = string(r.token.byteValue)
|
||||||
|
}
|
||||||
|
r.consume()
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
// StringIntern reads a string literal, and performs string interning on it.
|
||||||
|
func (r *Lexer) StringIntern() string {
|
||||||
|
if r.token.kind == tokenUndef && r.Ok() {
|
||||||
|
r.FetchToken()
|
||||||
|
}
|
||||||
|
if !r.Ok() || r.token.kind != tokenString {
|
||||||
|
r.errInvalidToken("string")
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if err := r.unescapeStringToken(); err != nil {
|
||||||
|
r.errInvalidToken("string")
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
ret := intern.Bytes(r.token.byteValue)
|
||||||
r.consume()
|
r.consume()
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
@@ -839,7 +887,7 @@ func (r *Lexer) Int() int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Lexer) Uint8Str() uint8 {
|
func (r *Lexer) Uint8Str() uint8 {
|
||||||
s, b := r.unsafeString()
|
s, b := r.unsafeString(false)
|
||||||
if !r.Ok() {
|
if !r.Ok() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -856,7 +904,7 @@ func (r *Lexer) Uint8Str() uint8 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Lexer) Uint16Str() uint16 {
|
func (r *Lexer) Uint16Str() uint16 {
|
||||||
s, b := r.unsafeString()
|
s, b := r.unsafeString(false)
|
||||||
if !r.Ok() {
|
if !r.Ok() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -873,7 +921,7 @@ func (r *Lexer) Uint16Str() uint16 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Lexer) Uint32Str() uint32 {
|
func (r *Lexer) Uint32Str() uint32 {
|
||||||
s, b := r.unsafeString()
|
s, b := r.unsafeString(false)
|
||||||
if !r.Ok() {
|
if !r.Ok() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -890,7 +938,7 @@ func (r *Lexer) Uint32Str() uint32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Lexer) Uint64Str() uint64 {
|
func (r *Lexer) Uint64Str() uint64 {
|
||||||
s, b := r.unsafeString()
|
s, b := r.unsafeString(false)
|
||||||
if !r.Ok() {
|
if !r.Ok() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -915,7 +963,7 @@ func (r *Lexer) UintptrStr() uintptr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Lexer) Int8Str() int8 {
|
func (r *Lexer) Int8Str() int8 {
|
||||||
s, b := r.unsafeString()
|
s, b := r.unsafeString(false)
|
||||||
if !r.Ok() {
|
if !r.Ok() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -932,7 +980,7 @@ func (r *Lexer) Int8Str() int8 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Lexer) Int16Str() int16 {
|
func (r *Lexer) Int16Str() int16 {
|
||||||
s, b := r.unsafeString()
|
s, b := r.unsafeString(false)
|
||||||
if !r.Ok() {
|
if !r.Ok() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -949,7 +997,7 @@ func (r *Lexer) Int16Str() int16 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Lexer) Int32Str() int32 {
|
func (r *Lexer) Int32Str() int32 {
|
||||||
s, b := r.unsafeString()
|
s, b := r.unsafeString(false)
|
||||||
if !r.Ok() {
|
if !r.Ok() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -966,7 +1014,7 @@ func (r *Lexer) Int32Str() int32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Lexer) Int64Str() int64 {
|
func (r *Lexer) Int64Str() int64 {
|
||||||
s, b := r.unsafeString()
|
s, b := r.unsafeString(false)
|
||||||
if !r.Ok() {
|
if !r.Ok() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -1004,7 +1052,7 @@ func (r *Lexer) Float32() float32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Lexer) Float32Str() float32 {
|
func (r *Lexer) Float32Str() float32 {
|
||||||
s, b := r.unsafeString()
|
s, b := r.unsafeString(false)
|
||||||
if !r.Ok() {
|
if !r.Ok() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -1037,7 +1085,7 @@ func (r *Lexer) Float64() float64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Lexer) Float64Str() float64 {
|
func (r *Lexer) Float64Str() float64 {
|
||||||
s, b := r.unsafeString()
|
s, b := r.unsafeString(false)
|
||||||
if !r.Ok() {
|
if !r.Ok() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|||||||
6
vendor/github.com/mailru/easyjson/jwriter/writer.go
сгенерированный
поставляемый
6
vendor/github.com/mailru/easyjson/jwriter/writer.go
сгенерированный
поставляемый
@@ -297,11 +297,9 @@ func (w *Writer) String(s string) {
|
|||||||
|
|
||||||
p := 0 // last non-escape symbol
|
p := 0 // last non-escape symbol
|
||||||
|
|
||||||
var escapeTable [128]bool
|
escapeTable := &htmlEscapeTable
|
||||||
if w.NoEscapeHTML {
|
if w.NoEscapeHTML {
|
||||||
escapeTable = htmlNoEscapeTable
|
escapeTable = &htmlNoEscapeTable
|
||||||
} else {
|
|
||||||
escapeTable = htmlEscapeTable
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < len(s); {
|
for i := 0; i < len(s); {
|
||||||
|
|||||||
10
vendor/github.com/mailru/easyjson/unknown_fields.go
сгенерированный
поставляемый
10
vendor/github.com/mailru/easyjson/unknown_fields.go
сгенерированный
поставляемый
@@ -1,8 +1,6 @@
|
|||||||
package easyjson
|
package easyjson
|
||||||
|
|
||||||
import (
|
import (
|
||||||
json "encoding/json"
|
|
||||||
|
|
||||||
jlexer "github.com/mailru/easyjson/jlexer"
|
jlexer "github.com/mailru/easyjson/jlexer"
|
||||||
"github.com/mailru/easyjson/jwriter"
|
"github.com/mailru/easyjson/jwriter"
|
||||||
)
|
)
|
||||||
@@ -10,14 +8,14 @@ import (
|
|||||||
// UnknownFieldsProxy implemets UnknownsUnmarshaler and UnknownsMarshaler
|
// UnknownFieldsProxy implemets UnknownsUnmarshaler and UnknownsMarshaler
|
||||||
// use it as embedded field in your structure to parse and then serialize unknown struct fields
|
// use it as embedded field in your structure to parse and then serialize unknown struct fields
|
||||||
type UnknownFieldsProxy struct {
|
type UnknownFieldsProxy struct {
|
||||||
unknownFields map[string]interface{}
|
unknownFields map[string][]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *UnknownFieldsProxy) UnmarshalUnknown(in *jlexer.Lexer, key string) {
|
func (s *UnknownFieldsProxy) UnmarshalUnknown(in *jlexer.Lexer, key string) {
|
||||||
if s.unknownFields == nil {
|
if s.unknownFields == nil {
|
||||||
s.unknownFields = make(map[string]interface{}, 1)
|
s.unknownFields = make(map[string][]byte, 1)
|
||||||
}
|
}
|
||||||
s.unknownFields[key] = in.Interface()
|
s.unknownFields[key] = in.Raw()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s UnknownFieldsProxy) MarshalUnknowns(out *jwriter.Writer, first bool) {
|
func (s UnknownFieldsProxy) MarshalUnknowns(out *jwriter.Writer, first bool) {
|
||||||
@@ -29,6 +27,6 @@ func (s UnknownFieldsProxy) MarshalUnknowns(out *jwriter.Writer, first bool) {
|
|||||||
}
|
}
|
||||||
out.String(string(key))
|
out.String(string(key))
|
||||||
out.RawByte(':')
|
out.RawByte(':')
|
||||||
out.Raw(json.Marshal(val))
|
out.Raw(val, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
3
vendor/github.com/miekg/dns/README.md
сгенерированный
поставляемый
3
vendor/github.com/miekg/dns/README.md
сгенерированный
поставляемый
@@ -28,6 +28,7 @@ A not-so-up-to-date-list-that-may-be-actually-current:
|
|||||||
* https://github.com/coredns/coredns
|
* https://github.com/coredns/coredns
|
||||||
* https://cloudflare.com
|
* https://cloudflare.com
|
||||||
* https://github.com/abh/geodns
|
* https://github.com/abh/geodns
|
||||||
|
* https://github.com/baidu/bfe
|
||||||
* http://www.statdns.com/
|
* http://www.statdns.com/
|
||||||
* http://www.dnsinspect.com/
|
* http://www.dnsinspect.com/
|
||||||
* https://github.com/chuangbo/jianbing-dictionary-dns
|
* https://github.com/chuangbo/jianbing-dictionary-dns
|
||||||
@@ -70,6 +71,8 @@ A not-so-up-to-date-list-that-may-be-actually-current:
|
|||||||
* https://render.com
|
* https://render.com
|
||||||
* https://github.com/peterzen/goresolver
|
* https://github.com/peterzen/goresolver
|
||||||
* https://github.com/folbricht/routedns
|
* https://github.com/folbricht/routedns
|
||||||
|
* https://domainr.com/
|
||||||
|
* https://zonedb.org/
|
||||||
|
|
||||||
Send pull request if you want to be listed here.
|
Send pull request if you want to be listed here.
|
||||||
|
|
||||||
|
|||||||
37
vendor/github.com/miekg/dns/client.go
сгенерированный
поставляемый
37
vendor/github.com/miekg/dns/client.go
сгенерированный
поставляемый
@@ -124,15 +124,38 @@ func (c *Client) Dial(address string) (conn *Conn, err error) {
|
|||||||
// of 512 bytes
|
// of 512 bytes
|
||||||
// To specify a local address or a timeout, the caller has to set the `Client.Dialer`
|
// To specify a local address or a timeout, the caller has to set the `Client.Dialer`
|
||||||
// attribute appropriately
|
// attribute appropriately
|
||||||
|
|
||||||
func (c *Client) Exchange(m *Msg, address string) (r *Msg, rtt time.Duration, err error) {
|
func (c *Client) Exchange(m *Msg, address string) (r *Msg, rtt time.Duration, err error) {
|
||||||
|
co, err := c.Dial(address)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
defer co.Close()
|
||||||
|
return c.ExchangeWithConn(m, co)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExchangeWithConn has the same behavior as Exchange, just with a predetermined connection
|
||||||
|
// that will be used instead of creating a new one.
|
||||||
|
// Usage pattern with a *dns.Client:
|
||||||
|
// c := new(dns.Client)
|
||||||
|
// // connection management logic goes here
|
||||||
|
//
|
||||||
|
// conn := c.Dial(address)
|
||||||
|
// in, rtt, err := c.ExchangeWithConn(message, conn)
|
||||||
|
//
|
||||||
|
// This allows users of the library to implement their own connection management,
|
||||||
|
// as opposed to Exchange, which will always use new connections and incur the added overhead
|
||||||
|
// that entails when using "tcp" and especially "tcp-tls" clients.
|
||||||
|
func (c *Client) ExchangeWithConn(m *Msg, conn *Conn) (r *Msg, rtt time.Duration, err error) {
|
||||||
if !c.SingleInflight {
|
if !c.SingleInflight {
|
||||||
return c.exchange(m, address)
|
return c.exchange(m, conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
q := m.Question[0]
|
q := m.Question[0]
|
||||||
key := fmt.Sprintf("%s:%d:%d", q.Name, q.Qtype, q.Qclass)
|
key := fmt.Sprintf("%s:%d:%d", q.Name, q.Qtype, q.Qclass)
|
||||||
r, rtt, err, shared := c.group.Do(key, func() (*Msg, time.Duration, error) {
|
r, rtt, err, shared := c.group.Do(key, func() (*Msg, time.Duration, error) {
|
||||||
return c.exchange(m, address)
|
return c.exchange(m, conn)
|
||||||
})
|
})
|
||||||
if r != nil && shared {
|
if r != nil && shared {
|
||||||
r = r.Copy()
|
r = r.Copy()
|
||||||
@@ -141,15 +164,7 @@ func (c *Client) Exchange(m *Msg, address string) (r *Msg, rtt time.Duration, er
|
|||||||
return r, rtt, err
|
return r, rtt, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) exchange(m *Msg, a string) (r *Msg, rtt time.Duration, err error) {
|
func (c *Client) exchange(m *Msg, co *Conn) (r *Msg, rtt time.Duration, err error) {
|
||||||
var co *Conn
|
|
||||||
|
|
||||||
co, err = c.Dial(a)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return nil, 0, err
|
|
||||||
}
|
|
||||||
defer co.Close()
|
|
||||||
|
|
||||||
opt := m.IsEdns0()
|
opt := m.IsEdns0()
|
||||||
// If EDNS0 is used use that for size.
|
// If EDNS0 is used use that for size.
|
||||||
|
|||||||
26
vendor/github.com/miekg/dns/generate.go
сгенерированный
поставляемый
26
vendor/github.com/miekg/dns/generate.go
сгенерированный
поставляемый
@@ -20,13 +20,13 @@ import (
|
|||||||
// of $ after that are interpreted.
|
// of $ after that are interpreted.
|
||||||
func (zp *ZoneParser) generate(l lex) (RR, bool) {
|
func (zp *ZoneParser) generate(l lex) (RR, bool) {
|
||||||
token := l.token
|
token := l.token
|
||||||
step := 1
|
step := int64(1)
|
||||||
if i := strings.IndexByte(token, '/'); i >= 0 {
|
if i := strings.IndexByte(token, '/'); i >= 0 {
|
||||||
if i+1 == len(token) {
|
if i+1 == len(token) {
|
||||||
return zp.setParseError("bad step in $GENERATE range", l)
|
return zp.setParseError("bad step in $GENERATE range", l)
|
||||||
}
|
}
|
||||||
|
|
||||||
s, err := strconv.Atoi(token[i+1:])
|
s, err := strconv.ParseInt(token[i+1:], 10, 64)
|
||||||
if err != nil || s <= 0 {
|
if err != nil || s <= 0 {
|
||||||
return zp.setParseError("bad step in $GENERATE range", l)
|
return zp.setParseError("bad step in $GENERATE range", l)
|
||||||
}
|
}
|
||||||
@@ -40,12 +40,12 @@ func (zp *ZoneParser) generate(l lex) (RR, bool) {
|
|||||||
return zp.setParseError("bad start-stop in $GENERATE range", l)
|
return zp.setParseError("bad start-stop in $GENERATE range", l)
|
||||||
}
|
}
|
||||||
|
|
||||||
start, err := strconv.Atoi(sx[0])
|
start, err := strconv.ParseInt(sx[0], 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return zp.setParseError("bad start in $GENERATE range", l)
|
return zp.setParseError("bad start in $GENERATE range", l)
|
||||||
}
|
}
|
||||||
|
|
||||||
end, err := strconv.Atoi(sx[1])
|
end, err := strconv.ParseInt(sx[1], 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return zp.setParseError("bad stop in $GENERATE range", l)
|
return zp.setParseError("bad stop in $GENERATE range", l)
|
||||||
}
|
}
|
||||||
@@ -75,10 +75,10 @@ func (zp *ZoneParser) generate(l lex) (RR, bool) {
|
|||||||
r := &generateReader{
|
r := &generateReader{
|
||||||
s: s,
|
s: s,
|
||||||
|
|
||||||
cur: start,
|
cur: int(start),
|
||||||
start: start,
|
start: int(start),
|
||||||
end: end,
|
end: int(end),
|
||||||
step: step,
|
step: int(step),
|
||||||
|
|
||||||
file: zp.file,
|
file: zp.file,
|
||||||
lex: &l,
|
lex: &l,
|
||||||
@@ -188,7 +188,7 @@ func (r *generateReader) ReadByte() (byte, error) {
|
|||||||
if errMsg != "" {
|
if errMsg != "" {
|
||||||
return 0, r.parseError(errMsg, si+3+sep)
|
return 0, r.parseError(errMsg, si+3+sep)
|
||||||
}
|
}
|
||||||
if r.start+offset < 0 || r.end+offset > 1<<31-1 {
|
if r.start+offset < 0 || int64(r.end) + int64(offset) > 1<<31-1 {
|
||||||
return 0, r.parseError("bad offset in $GENERATE", si+3+sep)
|
return 0, r.parseError("bad offset in $GENERATE", si+3+sep)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,19 +229,19 @@ func modToPrintf(s string) (string, int, string) {
|
|||||||
return "", 0, "bad base in $GENERATE"
|
return "", 0, "bad base in $GENERATE"
|
||||||
}
|
}
|
||||||
|
|
||||||
offset, err := strconv.Atoi(offStr)
|
offset, err := strconv.ParseInt(offStr, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", 0, "bad offset in $GENERATE"
|
return "", 0, "bad offset in $GENERATE"
|
||||||
}
|
}
|
||||||
|
|
||||||
width, err := strconv.Atoi(widthStr)
|
width, err := strconv.ParseInt(widthStr, 10, 64)
|
||||||
if err != nil || width < 0 || width > 255 {
|
if err != nil || width < 0 || width > 255 {
|
||||||
return "", 0, "bad width in $GENERATE"
|
return "", 0, "bad width in $GENERATE"
|
||||||
}
|
}
|
||||||
|
|
||||||
if width == 0 {
|
if width == 0 {
|
||||||
return "%" + base, offset, ""
|
return "%" + base, int(offset), ""
|
||||||
}
|
}
|
||||||
|
|
||||||
return "%0" + widthStr + base, offset, ""
|
return "%0" + widthStr + base, int(offset), ""
|
||||||
}
|
}
|
||||||
|
|||||||
9
vendor/github.com/miekg/dns/msg.go
сгенерированный
поставляемый
9
vendor/github.com/miekg/dns/msg.go
сгенерированный
поставляемый
@@ -398,19 +398,14 @@ Loop:
|
|||||||
return "", lenmsg, ErrLongDomain
|
return "", lenmsg, ErrLongDomain
|
||||||
}
|
}
|
||||||
for _, b := range msg[off : off+c] {
|
for _, b := range msg[off : off+c] {
|
||||||
switch b {
|
if isDomainNameLabelSpecial(b) {
|
||||||
case '.', '(', ')', ';', ' ', '@':
|
|
||||||
fallthrough
|
|
||||||
case '"', '\\':
|
|
||||||
s = append(s, '\\', b)
|
s = append(s, '\\', b)
|
||||||
default:
|
} else if b < ' ' || b > '~' {
|
||||||
if b < ' ' || b > '~' { // unprintable, use \DDD
|
|
||||||
s = append(s, escapeByte(b)...)
|
s = append(s, escapeByte(b)...)
|
||||||
} else {
|
} else {
|
||||||
s = append(s, b)
|
s = append(s, b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
s = append(s, '.')
|
s = append(s, '.')
|
||||||
off += c
|
off += c
|
||||||
case 0xC0:
|
case 0xC0:
|
||||||
|
|||||||
132
vendor/github.com/miekg/dns/msg_helpers.go
сгенерированный
поставляемый
132
vendor/github.com/miekg/dns/msg_helpers.go
сгенерированный
поставляемый
@@ -423,86 +423,12 @@ Option:
|
|||||||
if off+int(optlen) > len(msg) {
|
if off+int(optlen) > len(msg) {
|
||||||
return nil, len(msg), &Error{err: "overflow unpacking opt"}
|
return nil, len(msg), &Error{err: "overflow unpacking opt"}
|
||||||
}
|
}
|
||||||
switch code {
|
e := makeDataOpt(code)
|
||||||
case EDNS0NSID:
|
|
||||||
e := new(EDNS0_NSID)
|
|
||||||
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
||||||
return nil, len(msg), err
|
return nil, len(msg), err
|
||||||
}
|
}
|
||||||
edns = append(edns, e)
|
edns = append(edns, e)
|
||||||
off += int(optlen)
|
off += int(optlen)
|
||||||
case EDNS0SUBNET:
|
|
||||||
e := new(EDNS0_SUBNET)
|
|
||||||
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
|
||||||
return nil, len(msg), err
|
|
||||||
}
|
|
||||||
edns = append(edns, e)
|
|
||||||
off += int(optlen)
|
|
||||||
case EDNS0COOKIE:
|
|
||||||
e := new(EDNS0_COOKIE)
|
|
||||||
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
|
||||||
return nil, len(msg), err
|
|
||||||
}
|
|
||||||
edns = append(edns, e)
|
|
||||||
off += int(optlen)
|
|
||||||
case EDNS0EXPIRE:
|
|
||||||
e := new(EDNS0_EXPIRE)
|
|
||||||
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
|
||||||
return nil, len(msg), err
|
|
||||||
}
|
|
||||||
edns = append(edns, e)
|
|
||||||
off += int(optlen)
|
|
||||||
case EDNS0UL:
|
|
||||||
e := new(EDNS0_UL)
|
|
||||||
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
|
||||||
return nil, len(msg), err
|
|
||||||
}
|
|
||||||
edns = append(edns, e)
|
|
||||||
off += int(optlen)
|
|
||||||
case EDNS0LLQ:
|
|
||||||
e := new(EDNS0_LLQ)
|
|
||||||
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
|
||||||
return nil, len(msg), err
|
|
||||||
}
|
|
||||||
edns = append(edns, e)
|
|
||||||
off += int(optlen)
|
|
||||||
case EDNS0DAU:
|
|
||||||
e := new(EDNS0_DAU)
|
|
||||||
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
|
||||||
return nil, len(msg), err
|
|
||||||
}
|
|
||||||
edns = append(edns, e)
|
|
||||||
off += int(optlen)
|
|
||||||
case EDNS0DHU:
|
|
||||||
e := new(EDNS0_DHU)
|
|
||||||
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
|
||||||
return nil, len(msg), err
|
|
||||||
}
|
|
||||||
edns = append(edns, e)
|
|
||||||
off += int(optlen)
|
|
||||||
case EDNS0N3U:
|
|
||||||
e := new(EDNS0_N3U)
|
|
||||||
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
|
||||||
return nil, len(msg), err
|
|
||||||
}
|
|
||||||
edns = append(edns, e)
|
|
||||||
off += int(optlen)
|
|
||||||
case EDNS0PADDING:
|
|
||||||
e := new(EDNS0_PADDING)
|
|
||||||
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
|
||||||
return nil, len(msg), err
|
|
||||||
}
|
|
||||||
edns = append(edns, e)
|
|
||||||
off += int(optlen)
|
|
||||||
default:
|
|
||||||
e := new(EDNS0_LOCAL)
|
|
||||||
e.Code = code
|
|
||||||
if err := e.unpack(msg[off : off+int(optlen)]); err != nil {
|
|
||||||
return nil, len(msg), err
|
|
||||||
}
|
|
||||||
edns = append(edns, e)
|
|
||||||
off += int(optlen)
|
|
||||||
}
|
|
||||||
|
|
||||||
if off < len(msg) {
|
if off < len(msg) {
|
||||||
goto Option
|
goto Option
|
||||||
@@ -511,6 +437,35 @@ Option:
|
|||||||
return edns, off, nil
|
return edns, off, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func makeDataOpt(code uint16) EDNS0 {
|
||||||
|
switch code {
|
||||||
|
case EDNS0NSID:
|
||||||
|
return new(EDNS0_NSID)
|
||||||
|
case EDNS0SUBNET:
|
||||||
|
return new(EDNS0_SUBNET)
|
||||||
|
case EDNS0COOKIE:
|
||||||
|
return new(EDNS0_COOKIE)
|
||||||
|
case EDNS0EXPIRE:
|
||||||
|
return new(EDNS0_EXPIRE)
|
||||||
|
case EDNS0UL:
|
||||||
|
return new(EDNS0_UL)
|
||||||
|
case EDNS0LLQ:
|
||||||
|
return new(EDNS0_LLQ)
|
||||||
|
case EDNS0DAU:
|
||||||
|
return new(EDNS0_DAU)
|
||||||
|
case EDNS0DHU:
|
||||||
|
return new(EDNS0_DHU)
|
||||||
|
case EDNS0N3U:
|
||||||
|
return new(EDNS0_N3U)
|
||||||
|
case EDNS0PADDING:
|
||||||
|
return new(EDNS0_PADDING)
|
||||||
|
default:
|
||||||
|
e := new(EDNS0_LOCAL)
|
||||||
|
e.Code = code
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func packDataOpt(options []EDNS0, msg []byte, off int) (int, error) {
|
func packDataOpt(options []EDNS0, msg []byte, off int) (int, error) {
|
||||||
for _, el := range options {
|
for _, el := range options {
|
||||||
b, err := el.pack()
|
b, err := el.pack()
|
||||||
@@ -521,9 +476,7 @@ func packDataOpt(options []EDNS0, msg []byte, off int) (int, error) {
|
|||||||
binary.BigEndian.PutUint16(msg[off+2:], uint16(len(b))) // Length
|
binary.BigEndian.PutUint16(msg[off+2:], uint16(len(b))) // Length
|
||||||
off += 4
|
off += 4
|
||||||
if off+len(b) > len(msg) {
|
if off+len(b) > len(msg) {
|
||||||
copy(msg[off:], b)
|
return len(msg), &Error{err: "overflow packing opt"}
|
||||||
off = len(msg)
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
// Actual data
|
// Actual data
|
||||||
copy(msg[off:off+len(b)], b)
|
copy(msg[off:off+len(b)], b)
|
||||||
@@ -783,28 +736,31 @@ func unpackDataAplPrefix(msg []byte, off int) (APLPrefix, int, error) {
|
|||||||
if int(prefix) > 8*len(ip) {
|
if int(prefix) > 8*len(ip) {
|
||||||
return APLPrefix{}, len(msg), &Error{err: "APL prefix too long"}
|
return APLPrefix{}, len(msg), &Error{err: "APL prefix too long"}
|
||||||
}
|
}
|
||||||
|
|
||||||
afdlen := int(nlen & 0x7f)
|
afdlen := int(nlen & 0x7f)
|
||||||
if (int(prefix)+7)/8 != afdlen {
|
if afdlen > len(ip) {
|
||||||
return APLPrefix{}, len(msg), &Error{err: "invalid APL address length"}
|
return APLPrefix{}, len(msg), &Error{err: "APL length too long"}
|
||||||
}
|
}
|
||||||
if off+afdlen > len(msg) {
|
if off+afdlen > len(msg) {
|
||||||
return APLPrefix{}, len(msg), &Error{err: "overflow unpacking APL address"}
|
return APLPrefix{}, len(msg), &Error{err: "overflow unpacking APL address"}
|
||||||
}
|
}
|
||||||
off += copy(ip, msg[off:off+afdlen])
|
off += copy(ip, msg[off:off+afdlen])
|
||||||
if prefix%8 > 0 {
|
if afdlen > 0 {
|
||||||
last := ip[afdlen-1]
|
last := ip[afdlen-1]
|
||||||
zero := uint8(0xff) >> (prefix % 8)
|
if last == 0 {
|
||||||
if last&zero > 0 {
|
|
||||||
return APLPrefix{}, len(msg), &Error{err: "extra APL address bits"}
|
return APLPrefix{}, len(msg), &Error{err: "extra APL address bits"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ipnet := net.IPNet{
|
||||||
|
IP: ip,
|
||||||
|
Mask: net.CIDRMask(int(prefix), 8*len(ip)),
|
||||||
|
}
|
||||||
|
network := ipnet.IP.Mask(ipnet.Mask)
|
||||||
|
if !network.Equal(ipnet.IP) {
|
||||||
|
return APLPrefix{}, len(msg), &Error{err: "invalid APL address length"}
|
||||||
|
}
|
||||||
|
|
||||||
return APLPrefix{
|
return APLPrefix{
|
||||||
Negation: (nlen & 0x80) != 0,
|
Negation: (nlen & 0x80) != 0,
|
||||||
Network: net.IPNet{
|
Network: ipnet,
|
||||||
IP: ip,
|
|
||||||
Mask: net.CIDRMask(int(prefix), 8*len(ip)),
|
|
||||||
},
|
|
||||||
}, off, nil
|
}, off, nil
|
||||||
}
|
}
|
||||||
|
|||||||
74
vendor/github.com/miekg/dns/scan.go
сгенерированный
поставляемый
74
vendor/github.com/miekg/dns/scan.go
сгенерированный
поставляемый
@@ -87,16 +87,6 @@ type lex struct {
|
|||||||
column int // column in the file
|
column int // column in the file
|
||||||
}
|
}
|
||||||
|
|
||||||
// Token holds the token that are returned when a zone file is parsed.
|
|
||||||
type Token struct {
|
|
||||||
// The scanned resource record when error is not nil.
|
|
||||||
RR
|
|
||||||
// When an error occurred, this has the error specifics.
|
|
||||||
Error *ParseError
|
|
||||||
// A potential comment positioned after the RR and on the same line.
|
|
||||||
Comment string
|
|
||||||
}
|
|
||||||
|
|
||||||
// ttlState describes the state necessary to fill in an omitted RR TTL
|
// ttlState describes the state necessary to fill in an omitted RR TTL
|
||||||
type ttlState struct {
|
type ttlState struct {
|
||||||
ttl uint32 // ttl is the current default TTL
|
ttl uint32 // ttl is the current default TTL
|
||||||
@@ -130,70 +120,6 @@ func ReadRR(r io.Reader, file string) (RR, error) {
|
|||||||
return rr, zp.Err()
|
return rr, zp.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseZone reads a RFC 1035 style zonefile from r. It returns
|
|
||||||
// Tokens on the returned channel, each consisting of either a
|
|
||||||
// parsed RR and optional comment or a nil RR and an error. The
|
|
||||||
// channel is closed by ParseZone when the end of r is reached.
|
|
||||||
//
|
|
||||||
// The string file is used in error reporting and to resolve relative
|
|
||||||
// $INCLUDE directives. The string origin is used as the initial
|
|
||||||
// origin, as if the file would start with an $ORIGIN directive.
|
|
||||||
//
|
|
||||||
// The directives $INCLUDE, $ORIGIN, $TTL and $GENERATE are all
|
|
||||||
// supported. Note that $GENERATE's range support up to a maximum of
|
|
||||||
// of 65535 steps.
|
|
||||||
//
|
|
||||||
// Basic usage pattern when reading from a string (z) containing the
|
|
||||||
// zone data:
|
|
||||||
//
|
|
||||||
// for x := range dns.ParseZone(strings.NewReader(z), "", "") {
|
|
||||||
// if x.Error != nil {
|
|
||||||
// // log.Println(x.Error)
|
|
||||||
// } else {
|
|
||||||
// // Do something with x.RR
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// Comments specified after an RR (and on the same line!) are
|
|
||||||
// returned too:
|
|
||||||
//
|
|
||||||
// foo. IN A 10.0.0.1 ; this is a comment
|
|
||||||
//
|
|
||||||
// The text "; this is comment" is returned in Token.Comment.
|
|
||||||
// Comments inside the RR are returned concatenated along with the
|
|
||||||
// RR. Comments on a line by themselves are discarded.
|
|
||||||
//
|
|
||||||
// To prevent memory leaks it is important to always fully drain the
|
|
||||||
// returned channel. If an error occurs, it will always be the last
|
|
||||||
// Token sent on the channel.
|
|
||||||
//
|
|
||||||
// Deprecated: New users should prefer the ZoneParser API.
|
|
||||||
func ParseZone(r io.Reader, origin, file string) chan *Token {
|
|
||||||
t := make(chan *Token, 10000)
|
|
||||||
go parseZone(r, origin, file, t)
|
|
||||||
return t
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseZone(r io.Reader, origin, file string, t chan *Token) {
|
|
||||||
defer close(t)
|
|
||||||
|
|
||||||
zp := NewZoneParser(r, origin, file)
|
|
||||||
zp.SetIncludeAllowed(true)
|
|
||||||
|
|
||||||
for rr, ok := zp.Next(); ok; rr, ok = zp.Next() {
|
|
||||||
t <- &Token{RR: rr, Comment: zp.Comment()}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := zp.Err(); err != nil {
|
|
||||||
pe, ok := err.(*ParseError)
|
|
||||||
if !ok {
|
|
||||||
pe = &ParseError{file: file, err: err.Error()}
|
|
||||||
}
|
|
||||||
|
|
||||||
t <- &Token{Error: pe}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ZoneParser is a parser for an RFC 1035 style zonefile.
|
// ZoneParser is a parser for an RFC 1035 style zonefile.
|
||||||
//
|
//
|
||||||
// Each parsed RR in the zone is returned sequentially from Next. An
|
// Each parsed RR in the zone is returned sequentially from Next. An
|
||||||
|
|||||||
9
vendor/github.com/miekg/dns/scan_rr.go
сгенерированный
поставляемый
9
vendor/github.com/miekg/dns/scan_rr.go
сгенерированный
поставляемый
@@ -1,6 +1,7 @@
|
|||||||
package dns
|
package dns
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"net"
|
"net"
|
||||||
"strconv"
|
"strconv"
|
||||||
@@ -10,15 +11,15 @@ import (
|
|||||||
// A remainder of the rdata with embedded spaces, return the parsed string (sans the spaces)
|
// A remainder of the rdata with embedded spaces, return the parsed string (sans the spaces)
|
||||||
// or an error
|
// or an error
|
||||||
func endingToString(c *zlexer, errstr string) (string, *ParseError) {
|
func endingToString(c *zlexer, errstr string) (string, *ParseError) {
|
||||||
var s string
|
var buffer bytes.Buffer
|
||||||
l, _ := c.Next() // zString
|
l, _ := c.Next() // zString
|
||||||
for l.value != zNewline && l.value != zEOF {
|
for l.value != zNewline && l.value != zEOF {
|
||||||
if l.err {
|
if l.err {
|
||||||
return s, &ParseError{"", errstr, l}
|
return buffer.String(), &ParseError{"", errstr, l}
|
||||||
}
|
}
|
||||||
switch l.value {
|
switch l.value {
|
||||||
case zString:
|
case zString:
|
||||||
s += l.token
|
buffer.WriteString(l.token)
|
||||||
case zBlank: // Ok
|
case zBlank: // Ok
|
||||||
default:
|
default:
|
||||||
return "", &ParseError{"", errstr, l}
|
return "", &ParseError{"", errstr, l}
|
||||||
@@ -26,7 +27,7 @@ func endingToString(c *zlexer, errstr string) (string, *ParseError) {
|
|||||||
l, _ = c.Next()
|
l, _ = c.Next()
|
||||||
}
|
}
|
||||||
|
|
||||||
return s, nil
|
return buffer.String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// A remainder of the rdata with embedded spaces, split on unquoted whitespace
|
// A remainder of the rdata with embedded spaces, split on unquoted whitespace
|
||||||
|
|||||||
74
vendor/github.com/miekg/dns/tsig.go
сгенерированный
поставляемый
74
vendor/github.com/miekg/dns/tsig.go
сгенерированный
поставляемый
@@ -18,7 +18,9 @@ import (
|
|||||||
const (
|
const (
|
||||||
HmacMD5 = "hmac-md5.sig-alg.reg.int."
|
HmacMD5 = "hmac-md5.sig-alg.reg.int."
|
||||||
HmacSHA1 = "hmac-sha1."
|
HmacSHA1 = "hmac-sha1."
|
||||||
|
HmacSHA224 = "hmac-sha224."
|
||||||
HmacSHA256 = "hmac-sha256."
|
HmacSHA256 = "hmac-sha256."
|
||||||
|
HmacSHA384 = "hmac-sha384."
|
||||||
HmacSHA512 = "hmac-sha512."
|
HmacSHA512 = "hmac-sha512."
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -111,7 +113,10 @@ func TsigGenerate(m *Msg, secret, requestMAC string, timersOnly bool) ([]byte, s
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
}
|
}
|
||||||
buf := tsigBuffer(mbuf, rr, requestMAC, timersOnly)
|
buf, err := tsigBuffer(mbuf, rr, requestMAC, timersOnly)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
|
|
||||||
t := new(TSIG)
|
t := new(TSIG)
|
||||||
var h hash.Hash
|
var h hash.Hash
|
||||||
@@ -120,23 +125,23 @@ func TsigGenerate(m *Msg, secret, requestMAC string, timersOnly bool) ([]byte, s
|
|||||||
h = hmac.New(md5.New, rawsecret)
|
h = hmac.New(md5.New, rawsecret)
|
||||||
case HmacSHA1:
|
case HmacSHA1:
|
||||||
h = hmac.New(sha1.New, rawsecret)
|
h = hmac.New(sha1.New, rawsecret)
|
||||||
|
case HmacSHA224:
|
||||||
|
h = hmac.New(sha256.New224, rawsecret)
|
||||||
case HmacSHA256:
|
case HmacSHA256:
|
||||||
h = hmac.New(sha256.New, rawsecret)
|
h = hmac.New(sha256.New, rawsecret)
|
||||||
|
case HmacSHA384:
|
||||||
|
h = hmac.New(sha512.New384, rawsecret)
|
||||||
case HmacSHA512:
|
case HmacSHA512:
|
||||||
h = hmac.New(sha512.New, rawsecret)
|
h = hmac.New(sha512.New, rawsecret)
|
||||||
default:
|
default:
|
||||||
return nil, "", ErrKeyAlg
|
return nil, "", ErrKeyAlg
|
||||||
}
|
}
|
||||||
h.Write(buf)
|
h.Write(buf)
|
||||||
|
// Copy all TSIG fields except MAC and its size, which are filled using the computed digest.
|
||||||
|
*t = *rr
|
||||||
t.MAC = hex.EncodeToString(h.Sum(nil))
|
t.MAC = hex.EncodeToString(h.Sum(nil))
|
||||||
t.MACSize = uint16(len(t.MAC) / 2) // Size is half!
|
t.MACSize = uint16(len(t.MAC) / 2) // Size is half!
|
||||||
|
|
||||||
t.Hdr = RR_Header{Name: rr.Hdr.Name, Rrtype: TypeTSIG, Class: ClassANY, Ttl: 0}
|
|
||||||
t.Fudge = rr.Fudge
|
|
||||||
t.TimeSigned = rr.TimeSigned
|
|
||||||
t.Algorithm = rr.Algorithm
|
|
||||||
t.OrigId = m.Id
|
|
||||||
|
|
||||||
tbuf := make([]byte, Len(t))
|
tbuf := make([]byte, Len(t))
|
||||||
off, err := PackRR(t, tbuf, 0, nil, false)
|
off, err := PackRR(t, tbuf, 0, nil, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -153,6 +158,11 @@ func TsigGenerate(m *Msg, secret, requestMAC string, timersOnly bool) ([]byte, s
|
|||||||
// If the signature does not validate err contains the
|
// If the signature does not validate err contains the
|
||||||
// error, otherwise it is nil.
|
// error, otherwise it is nil.
|
||||||
func TsigVerify(msg []byte, secret, requestMAC string, timersOnly bool) error {
|
func TsigVerify(msg []byte, secret, requestMAC string, timersOnly bool) error {
|
||||||
|
return tsigVerify(msg, secret, requestMAC, timersOnly, uint64(time.Now().Unix()))
|
||||||
|
}
|
||||||
|
|
||||||
|
// actual implementation of TsigVerify, taking the current time ('now') as a parameter for the convenience of tests.
|
||||||
|
func tsigVerify(msg []byte, secret, requestMAC string, timersOnly bool, now uint64) error {
|
||||||
rawsecret, err := fromBase64([]byte(secret))
|
rawsecret, err := fromBase64([]byte(secret))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -168,17 +178,9 @@ func TsigVerify(msg []byte, secret, requestMAC string, timersOnly bool) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
buf := tsigBuffer(stripped, tsig, requestMAC, timersOnly)
|
buf, err := tsigBuffer(stripped, tsig, requestMAC, timersOnly)
|
||||||
|
if err != nil {
|
||||||
// Fudge factor works both ways. A message can arrive before it was signed because
|
return err
|
||||||
// of clock skew.
|
|
||||||
now := uint64(time.Now().Unix())
|
|
||||||
ti := now - tsig.TimeSigned
|
|
||||||
if now < tsig.TimeSigned {
|
|
||||||
ti = tsig.TimeSigned - now
|
|
||||||
}
|
|
||||||
if uint64(tsig.Fudge) < ti {
|
|
||||||
return ErrTime
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var h hash.Hash
|
var h hash.Hash
|
||||||
@@ -187,8 +189,12 @@ func TsigVerify(msg []byte, secret, requestMAC string, timersOnly bool) error {
|
|||||||
h = hmac.New(md5.New, rawsecret)
|
h = hmac.New(md5.New, rawsecret)
|
||||||
case HmacSHA1:
|
case HmacSHA1:
|
||||||
h = hmac.New(sha1.New, rawsecret)
|
h = hmac.New(sha1.New, rawsecret)
|
||||||
|
case HmacSHA224:
|
||||||
|
h = hmac.New(sha256.New224, rawsecret)
|
||||||
case HmacSHA256:
|
case HmacSHA256:
|
||||||
h = hmac.New(sha256.New, rawsecret)
|
h = hmac.New(sha256.New, rawsecret)
|
||||||
|
case HmacSHA384:
|
||||||
|
h = hmac.New(sha512.New384, rawsecret)
|
||||||
case HmacSHA512:
|
case HmacSHA512:
|
||||||
h = hmac.New(sha512.New, rawsecret)
|
h = hmac.New(sha512.New, rawsecret)
|
||||||
default:
|
default:
|
||||||
@@ -198,11 +204,24 @@ func TsigVerify(msg []byte, secret, requestMAC string, timersOnly bool) error {
|
|||||||
if !hmac.Equal(h.Sum(nil), msgMAC) {
|
if !hmac.Equal(h.Sum(nil), msgMAC) {
|
||||||
return ErrSig
|
return ErrSig
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fudge factor works both ways. A message can arrive before it was signed because
|
||||||
|
// of clock skew.
|
||||||
|
// We check this after verifying the signature, following draft-ietf-dnsop-rfc2845bis
|
||||||
|
// instead of RFC2845, in order to prevent a security vulnerability as reported in CVE-2017-3142/3143.
|
||||||
|
ti := now - tsig.TimeSigned
|
||||||
|
if now < tsig.TimeSigned {
|
||||||
|
ti = tsig.TimeSigned - now
|
||||||
|
}
|
||||||
|
if uint64(tsig.Fudge) < ti {
|
||||||
|
return ErrTime
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a wiredata buffer for the MAC calculation.
|
// Create a wiredata buffer for the MAC calculation.
|
||||||
func tsigBuffer(msgbuf []byte, rr *TSIG, requestMAC string, timersOnly bool) []byte {
|
func tsigBuffer(msgbuf []byte, rr *TSIG, requestMAC string, timersOnly bool) ([]byte, error) {
|
||||||
var buf []byte
|
var buf []byte
|
||||||
if rr.TimeSigned == 0 {
|
if rr.TimeSigned == 0 {
|
||||||
rr.TimeSigned = uint64(time.Now().Unix())
|
rr.TimeSigned = uint64(time.Now().Unix())
|
||||||
@@ -219,7 +238,10 @@ func tsigBuffer(msgbuf []byte, rr *TSIG, requestMAC string, timersOnly bool) []b
|
|||||||
m.MACSize = uint16(len(requestMAC) / 2)
|
m.MACSize = uint16(len(requestMAC) / 2)
|
||||||
m.MAC = requestMAC
|
m.MAC = requestMAC
|
||||||
buf = make([]byte, len(requestMAC)) // long enough
|
buf = make([]byte, len(requestMAC)) // long enough
|
||||||
n, _ := packMacWire(m, buf)
|
n, err := packMacWire(m, buf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
buf = buf[:n]
|
buf = buf[:n]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,7 +250,10 @@ func tsigBuffer(msgbuf []byte, rr *TSIG, requestMAC string, timersOnly bool) []b
|
|||||||
tsig := new(timerWireFmt)
|
tsig := new(timerWireFmt)
|
||||||
tsig.TimeSigned = rr.TimeSigned
|
tsig.TimeSigned = rr.TimeSigned
|
||||||
tsig.Fudge = rr.Fudge
|
tsig.Fudge = rr.Fudge
|
||||||
n, _ := packTimerWire(tsig, tsigvar)
|
n, err := packTimerWire(tsig, tsigvar)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
tsigvar = tsigvar[:n]
|
tsigvar = tsigvar[:n]
|
||||||
} else {
|
} else {
|
||||||
tsig := new(tsigWireFmt)
|
tsig := new(tsigWireFmt)
|
||||||
@@ -241,7 +266,10 @@ func tsigBuffer(msgbuf []byte, rr *TSIG, requestMAC string, timersOnly bool) []b
|
|||||||
tsig.Error = rr.Error
|
tsig.Error = rr.Error
|
||||||
tsig.OtherLen = rr.OtherLen
|
tsig.OtherLen = rr.OtherLen
|
||||||
tsig.OtherData = rr.OtherData
|
tsig.OtherData = rr.OtherData
|
||||||
n, _ := packTsigWire(tsig, tsigvar)
|
n, err := packTsigWire(tsig, tsigvar)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
tsigvar = tsigvar[:n]
|
tsigvar = tsigvar[:n]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,7 +279,7 @@ func tsigBuffer(msgbuf []byte, rr *TSIG, requestMAC string, timersOnly bool) []b
|
|||||||
} else {
|
} else {
|
||||||
buf = append(msgbuf, tsigvar...)
|
buf = append(msgbuf, tsigvar...)
|
||||||
}
|
}
|
||||||
return buf
|
return buf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Strip the TSIG from the raw message.
|
// Strip the TSIG from the raw message.
|
||||||
|
|||||||
62
vendor/github.com/miekg/dns/types.go
сгенерированный
поставляемый
62
vendor/github.com/miekg/dns/types.go
сгенерированный
поставляемый
@@ -209,8 +209,11 @@ var CertTypeToString = map[uint16]string{
|
|||||||
|
|
||||||
//go:generate go run types_generate.go
|
//go:generate go run types_generate.go
|
||||||
|
|
||||||
// Question holds a DNS question. There can be multiple questions in the
|
// Question holds a DNS question. Usually there is just one. While the
|
||||||
// question section of a message. Usually there is just one.
|
// original DNS RFCs allow multiple questions in the question section of a
|
||||||
|
// message, in practice it never works. Because most DNS servers see multiple
|
||||||
|
// questions as an error, it is recommended to only have one question per
|
||||||
|
// message.
|
||||||
type Question struct {
|
type Question struct {
|
||||||
Name string `dns:"cdomain-name"` // "cdomain-name" specifies encoding (and may be compressed)
|
Name string `dns:"cdomain-name"` // "cdomain-name" specifies encoding (and may be compressed)
|
||||||
Qtype uint16
|
Qtype uint16
|
||||||
@@ -442,45 +445,38 @@ func sprintName(s string) string {
|
|||||||
var dst strings.Builder
|
var dst strings.Builder
|
||||||
|
|
||||||
for i := 0; i < len(s); {
|
for i := 0; i < len(s); {
|
||||||
if i+1 < len(s) && s[i] == '\\' && s[i+1] == '.' {
|
if s[i] == '.' {
|
||||||
if dst.Len() != 0 {
|
if dst.Len() != 0 {
|
||||||
dst.WriteString(s[i : i+2])
|
dst.WriteByte('.')
|
||||||
}
|
}
|
||||||
i += 2
|
i++
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
b, n := nextByte(s, i)
|
b, n := nextByte(s, i)
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
i++
|
// Drop "dangling" incomplete escapes.
|
||||||
continue
|
if dst.Len() == 0 {
|
||||||
|
return s[:i]
|
||||||
}
|
}
|
||||||
if b == '.' {
|
break
|
||||||
if dst.Len() != 0 {
|
|
||||||
dst.WriteByte('.')
|
|
||||||
}
|
}
|
||||||
i += n
|
if isDomainNameLabelSpecial(b) {
|
||||||
continue
|
|
||||||
}
|
|
||||||
switch b {
|
|
||||||
case ' ', '\'', '@', ';', '(', ')', '"', '\\': // additional chars to escape
|
|
||||||
if dst.Len() == 0 {
|
if dst.Len() == 0 {
|
||||||
dst.Grow(len(s) * 2)
|
dst.Grow(len(s) * 2)
|
||||||
dst.WriteString(s[:i])
|
dst.WriteString(s[:i])
|
||||||
}
|
}
|
||||||
dst.WriteByte('\\')
|
dst.WriteByte('\\')
|
||||||
dst.WriteByte(b)
|
dst.WriteByte(b)
|
||||||
default:
|
} else if b < ' ' || b > '~' { // unprintable, use \DDD
|
||||||
if ' ' <= b && b <= '~' {
|
|
||||||
if dst.Len() != 0 {
|
|
||||||
dst.WriteByte(b)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if dst.Len() == 0 {
|
if dst.Len() == 0 {
|
||||||
dst.Grow(len(s) * 2)
|
dst.Grow(len(s) * 2)
|
||||||
dst.WriteString(s[:i])
|
dst.WriteString(s[:i])
|
||||||
}
|
}
|
||||||
dst.WriteString(escapeByte(b))
|
dst.WriteString(escapeByte(b))
|
||||||
|
} else {
|
||||||
|
if dst.Len() != 0 {
|
||||||
|
dst.WriteByte(b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i += n
|
i += n
|
||||||
@@ -503,15 +499,10 @@ func sprintTxtOctet(s string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
b, n := nextByte(s, i)
|
b, n := nextByte(s, i)
|
||||||
switch {
|
if n == 0 {
|
||||||
case n == 0:
|
|
||||||
i++ // dangling back slash
|
i++ // dangling back slash
|
||||||
case b == '.':
|
} else {
|
||||||
dst.WriteByte('.')
|
writeTXTStringByte(&dst, b)
|
||||||
case b < ' ' || b > '~':
|
|
||||||
dst.WriteString(escapeByte(b))
|
|
||||||
default:
|
|
||||||
dst.WriteByte(b)
|
|
||||||
}
|
}
|
||||||
i += n
|
i += n
|
||||||
}
|
}
|
||||||
@@ -587,6 +578,17 @@ func escapeByte(b byte) string {
|
|||||||
return escapedByteLarge[int(b)*4 : int(b)*4+4]
|
return escapedByteLarge[int(b)*4 : int(b)*4+4]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// isDomainNameLabelSpecial returns true if
|
||||||
|
// a domain name label byte should be prefixed
|
||||||
|
// with an escaping backslash.
|
||||||
|
func isDomainNameLabelSpecial(b byte) bool {
|
||||||
|
switch b {
|
||||||
|
case '.', ' ', '\'', '@', ';', '(', ')', '"', '\\':
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func nextByte(s string, offset int) (byte, int) {
|
func nextByte(s string, offset int) (byte, int) {
|
||||||
if offset >= len(s) {
|
if offset >= len(s) {
|
||||||
return 0, 0
|
return 0, 0
|
||||||
@@ -1118,6 +1120,7 @@ type URI struct {
|
|||||||
Target string `dns:"octet"`
|
Target string `dns:"octet"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rr.Target to be parsed as a sequence of character encoded octets according to RFC 3986
|
||||||
func (rr *URI) String() string {
|
func (rr *URI) String() string {
|
||||||
return rr.Hdr.String() + strconv.Itoa(int(rr.Priority)) +
|
return rr.Hdr.String() + strconv.Itoa(int(rr.Priority)) +
|
||||||
" " + strconv.Itoa(int(rr.Weight)) + " " + sprintTxtOctet(rr.Target)
|
" " + strconv.Itoa(int(rr.Weight)) + " " + sprintTxtOctet(rr.Target)
|
||||||
@@ -1279,6 +1282,7 @@ type CAA struct {
|
|||||||
Value string `dns:"octet"`
|
Value string `dns:"octet"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rr.Value Is the character-string encoding of the value field as specified in RFC 1035, Section 5.1.
|
||||||
func (rr *CAA) String() string {
|
func (rr *CAA) String() string {
|
||||||
return rr.Hdr.String() + strconv.Itoa(int(rr.Flag)) + " " + rr.Tag + " " + sprintTxtOctet(rr.Value)
|
return rr.Hdr.String() + strconv.Itoa(int(rr.Flag)) + " " + rr.Tag + " " + sprintTxtOctet(rr.Value)
|
||||||
}
|
}
|
||||||
|
|||||||
2
vendor/github.com/miekg/dns/version.go
сгенерированный
поставляемый
2
vendor/github.com/miekg/dns/version.go
сгенерированный
поставляемый
@@ -3,7 +3,7 @@ package dns
|
|||||||
import "fmt"
|
import "fmt"
|
||||||
|
|
||||||
// Version is current version of this library.
|
// Version is current version of this library.
|
||||||
var Version = v{1, 1, 29}
|
var Version = v{1, 1, 31}
|
||||||
|
|
||||||
// v holds the version of this library.
|
// v holds the version of this library.
|
||||||
type v struct {
|
type v struct {
|
||||||
|
|||||||
120
vendor/github.com/miekg/dns/zduplicate.go
сгенерированный
поставляемый
120
vendor/github.com/miekg/dns/zduplicate.go
сгенерированный
поставляемый
@@ -104,6 +104,48 @@ func (r1 *CAA) isDuplicate(_r2 RR) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r1 *CDNSKEY) isDuplicate(_r2 RR) bool {
|
||||||
|
r2, ok := _r2.(*CDNSKEY)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
_ = r2
|
||||||
|
if r1.Flags != r2.Flags {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Protocol != r2.Protocol {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Algorithm != r2.Algorithm {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.PublicKey != r2.PublicKey {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r1 *CDS) isDuplicate(_r2 RR) bool {
|
||||||
|
r2, ok := _r2.(*CDS)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
_ = r2
|
||||||
|
if r1.KeyTag != r2.KeyTag {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Algorithm != r2.Algorithm {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.DigestType != r2.DigestType {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Digest != r2.Digest {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (r1 *CERT) isDuplicate(_r2 RR) bool {
|
func (r1 *CERT) isDuplicate(_r2 RR) bool {
|
||||||
r2, ok := _r2.(*CERT)
|
r2, ok := _r2.(*CERT)
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -172,6 +214,27 @@ func (r1 *DHCID) isDuplicate(_r2 RR) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r1 *DLV) isDuplicate(_r2 RR) bool {
|
||||||
|
r2, ok := _r2.(*DLV)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
_ = r2
|
||||||
|
if r1.KeyTag != r2.KeyTag {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Algorithm != r2.Algorithm {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.DigestType != r2.DigestType {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Digest != r2.Digest {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (r1 *DNAME) isDuplicate(_r2 RR) bool {
|
func (r1 *DNAME) isDuplicate(_r2 RR) bool {
|
||||||
r2, ok := _r2.(*DNAME)
|
r2, ok := _r2.(*DNAME)
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -339,6 +402,27 @@ func (r1 *HIP) isDuplicate(_r2 RR) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r1 *KEY) isDuplicate(_r2 RR) bool {
|
||||||
|
r2, ok := _r2.(*KEY)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
_ = r2
|
||||||
|
if r1.Flags != r2.Flags {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Protocol != r2.Protocol {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Algorithm != r2.Algorithm {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.PublicKey != r2.PublicKey {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (r1 *KX) isDuplicate(_r2 RR) bool {
|
func (r1 *KX) isDuplicate(_r2 RR) bool {
|
||||||
r2, ok := _r2.(*KX)
|
r2, ok := _r2.(*KX)
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -849,6 +933,42 @@ func (r1 *RT) isDuplicate(_r2 RR) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r1 *SIG) isDuplicate(_r2 RR) bool {
|
||||||
|
r2, ok := _r2.(*SIG)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
_ = r2
|
||||||
|
if r1.TypeCovered != r2.TypeCovered {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Algorithm != r2.Algorithm {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Labels != r2.Labels {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.OrigTtl != r2.OrigTtl {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Expiration != r2.Expiration {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Inception != r2.Inception {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.KeyTag != r2.KeyTag {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !isDuplicateName(r1.SignerName, r2.SignerName) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if r1.Signature != r2.Signature {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (r1 *SMIMEA) isDuplicate(_r2 RR) bool {
|
func (r1 *SMIMEA) isDuplicate(_r2 RR) bool {
|
||||||
r2, ok := _r2.(*SMIMEA)
|
r2, ok := _r2.(*SMIMEA)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
|||||||
19
vendor/github.com/miekg/dns/ztypes.go
сгенерированный
поставляемый
19
vendor/github.com/miekg/dns/ztypes.go
сгенерированный
поставляемый
@@ -685,8 +685,8 @@ func (rr *ANY) copy() RR {
|
|||||||
}
|
}
|
||||||
func (rr *APL) copy() RR {
|
func (rr *APL) copy() RR {
|
||||||
Prefixes := make([]APLPrefix, len(rr.Prefixes))
|
Prefixes := make([]APLPrefix, len(rr.Prefixes))
|
||||||
for i := range rr.Prefixes {
|
for i, e := range rr.Prefixes {
|
||||||
Prefixes[i] = rr.Prefixes[i].copy()
|
Prefixes[i] = e.copy()
|
||||||
}
|
}
|
||||||
return &APL{rr.Hdr, Prefixes}
|
return &APL{rr.Hdr, Prefixes}
|
||||||
}
|
}
|
||||||
@@ -698,6 +698,12 @@ func (rr *AVC) copy() RR {
|
|||||||
func (rr *CAA) copy() RR {
|
func (rr *CAA) copy() RR {
|
||||||
return &CAA{rr.Hdr, rr.Flag, rr.Tag, rr.Value}
|
return &CAA{rr.Hdr, rr.Flag, rr.Tag, rr.Value}
|
||||||
}
|
}
|
||||||
|
func (rr *CDNSKEY) copy() RR {
|
||||||
|
return &CDNSKEY{*rr.DNSKEY.copy().(*DNSKEY)}
|
||||||
|
}
|
||||||
|
func (rr *CDS) copy() RR {
|
||||||
|
return &CDS{*rr.DS.copy().(*DS)}
|
||||||
|
}
|
||||||
func (rr *CERT) copy() RR {
|
func (rr *CERT) copy() RR {
|
||||||
return &CERT{rr.Hdr, rr.Type, rr.KeyTag, rr.Algorithm, rr.Certificate}
|
return &CERT{rr.Hdr, rr.Type, rr.KeyTag, rr.Algorithm, rr.Certificate}
|
||||||
}
|
}
|
||||||
@@ -712,6 +718,9 @@ func (rr *CSYNC) copy() RR {
|
|||||||
func (rr *DHCID) copy() RR {
|
func (rr *DHCID) copy() RR {
|
||||||
return &DHCID{rr.Hdr, rr.Digest}
|
return &DHCID{rr.Hdr, rr.Digest}
|
||||||
}
|
}
|
||||||
|
func (rr *DLV) copy() RR {
|
||||||
|
return &DLV{*rr.DS.copy().(*DS)}
|
||||||
|
}
|
||||||
func (rr *DNAME) copy() RR {
|
func (rr *DNAME) copy() RR {
|
||||||
return &DNAME{rr.Hdr, rr.Target}
|
return &DNAME{rr.Hdr, rr.Target}
|
||||||
}
|
}
|
||||||
@@ -744,6 +753,9 @@ func (rr *HIP) copy() RR {
|
|||||||
copy(RendezvousServers, rr.RendezvousServers)
|
copy(RendezvousServers, rr.RendezvousServers)
|
||||||
return &HIP{rr.Hdr, rr.HitLength, rr.PublicKeyAlgorithm, rr.PublicKeyLength, rr.Hit, rr.PublicKey, RendezvousServers}
|
return &HIP{rr.Hdr, rr.HitLength, rr.PublicKeyAlgorithm, rr.PublicKeyLength, rr.Hit, rr.PublicKey, RendezvousServers}
|
||||||
}
|
}
|
||||||
|
func (rr *KEY) copy() RR {
|
||||||
|
return &KEY{*rr.DNSKEY.copy().(*DNSKEY)}
|
||||||
|
}
|
||||||
func (rr *KX) copy() RR {
|
func (rr *KX) copy() RR {
|
||||||
return &KX{rr.Hdr, rr.Preference, rr.Exchanger}
|
return &KX{rr.Hdr, rr.Preference, rr.Exchanger}
|
||||||
}
|
}
|
||||||
@@ -847,6 +859,9 @@ func (rr *RRSIG) copy() RR {
|
|||||||
func (rr *RT) copy() RR {
|
func (rr *RT) copy() RR {
|
||||||
return &RT{rr.Hdr, rr.Preference, rr.Host}
|
return &RT{rr.Hdr, rr.Preference, rr.Host}
|
||||||
}
|
}
|
||||||
|
func (rr *SIG) copy() RR {
|
||||||
|
return &SIG{*rr.RRSIG.copy().(*RRSIG)}
|
||||||
|
}
|
||||||
func (rr *SMIMEA) copy() RR {
|
func (rr *SMIMEA) copy() RR {
|
||||||
return &SMIMEA{rr.Hdr, rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate}
|
return &SMIMEA{rr.Hdr, rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate}
|
||||||
}
|
}
|
||||||
|
|||||||
2
vendor/github.com/minio/minio-go/v7/api.go
сгенерированный
поставляемый
2
vendor/github.com/minio/minio-go/v7/api.go
сгенерированный
поставляемый
@@ -108,7 +108,7 @@ type Options struct {
|
|||||||
// Global constants.
|
// Global constants.
|
||||||
const (
|
const (
|
||||||
libraryName = "minio-go"
|
libraryName = "minio-go"
|
||||||
libraryVersion = "v7.0.3"
|
libraryVersion = "v7.0.4"
|
||||||
)
|
)
|
||||||
|
|
||||||
// User Agent should always following the below style.
|
// User Agent should always following the below style.
|
||||||
|
|||||||
2
vendor/github.com/minio/minio-go/v7/go.mod
сгенерированный
поставляемый
2
vendor/github.com/minio/minio-go/v7/go.mod
сгенерированный
поставляемый
@@ -3,6 +3,7 @@ module github.com/minio/minio-go/v7
|
|||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/dustin/go-humanize v1.0.0 // indirect
|
||||||
github.com/google/uuid v1.1.1
|
github.com/google/uuid v1.1.1
|
||||||
github.com/json-iterator/go v1.1.10
|
github.com/json-iterator/go v1.1.10
|
||||||
github.com/klauspost/cpuid v1.3.1 // indirect
|
github.com/klauspost/cpuid v1.3.1 // indirect
|
||||||
@@ -13,6 +14,7 @@ require (
|
|||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.1 // indirect
|
github.com/modern-go/reflect2 v1.0.1 // indirect
|
||||||
github.com/rs/xid v1.2.1
|
github.com/rs/xid v1.2.1
|
||||||
|
github.com/sirupsen/logrus v1.6.0 // indirect
|
||||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a // indirect
|
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a // indirect
|
||||||
github.com/stretchr/testify v1.4.0 // indirect
|
github.com/stretchr/testify v1.4.0 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899
|
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899
|
||||||
|
|||||||
7
vendor/github.com/minio/minio-go/v7/go.sum
сгенерированный
поставляемый
7
vendor/github.com/minio/minio-go/v7/go.sum
сгенерированный
поставляемый
@@ -1,6 +1,8 @@
|
|||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
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/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
|
||||||
|
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
||||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
@@ -14,6 +16,7 @@ github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs
|
|||||||
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||||
github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s=
|
github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s=
|
||||||
github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
|
github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
|
||||||
|
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
@@ -37,11 +40,14 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
|||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
|
github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
|
||||||
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
|
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
|
||||||
|
github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
|
||||||
|
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs=
|
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs=
|
||||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||||
@@ -57,6 +63,7 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R
|
|||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
|
||||||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
|||||||
46
vendor/github.com/minio/minio-go/v7/pkg/replication/replication.go
сгенерированный
поставляемый
46
vendor/github.com/minio/minio-go/v7/pkg/replication/replication.go
сгенерированный
поставляемый
@@ -20,6 +20,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
@@ -34,6 +35,9 @@ type OptionType string
|
|||||||
const (
|
const (
|
||||||
// AddOption specifies addition of rule to config
|
// AddOption specifies addition of rule to config
|
||||||
AddOption OptionType = "Add"
|
AddOption OptionType = "Add"
|
||||||
|
// SetOption specifies modification of existing rule to config
|
||||||
|
SetOption OptionType = "Set"
|
||||||
|
|
||||||
// RemoveOption specifies rule options are for removing a rule
|
// RemoveOption specifies rule options are for removing a rule
|
||||||
RemoveOption OptionType = "Remove"
|
RemoveOption OptionType = "Remove"
|
||||||
// ImportOption is for getting current config
|
// ImportOption is for getting current config
|
||||||
@@ -45,8 +49,8 @@ type Options struct {
|
|||||||
Op OptionType
|
Op OptionType
|
||||||
ID string
|
ID string
|
||||||
Prefix string
|
Prefix string
|
||||||
Disable bool
|
RuleStatus string
|
||||||
Priority int
|
Priority string
|
||||||
TagString string
|
TagString string
|
||||||
StorageClass string
|
StorageClass string
|
||||||
Arn string
|
Arn string
|
||||||
@@ -74,8 +78,7 @@ func (opts Options) Tags() []Tag {
|
|||||||
type Config struct {
|
type Config struct {
|
||||||
XMLName xml.Name `xml:"ReplicationConfiguration" json:"-"`
|
XMLName xml.Name `xml:"ReplicationConfiguration" json:"-"`
|
||||||
Rules []Rule `xml:"Rule" json:"Rules"`
|
Rules []Rule `xml:"Rule" json:"Rules"`
|
||||||
// ReplicationARN is a MinIO only extension and optional for AWS
|
Role string `xml:"Role" json:"Role"`
|
||||||
ReplicationARN string `xml:"ReplicationArn,omitempty" json:"ReplicationArn,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Empty returns true if config is not set
|
// Empty returns true if config is not set
|
||||||
@@ -104,20 +107,32 @@ func (c *Config) AddRule(opts Options) error {
|
|||||||
if opts.ID == "" {
|
if opts.ID == "" {
|
||||||
opts.ID = xid.New().String()
|
opts.ID = xid.New().String()
|
||||||
}
|
}
|
||||||
status := Enabled
|
var status Status
|
||||||
if opts.Disable {
|
// toggle rule status for edit option
|
||||||
|
switch opts.RuleStatus {
|
||||||
|
case "enable":
|
||||||
|
status = Enabled
|
||||||
|
case "disable":
|
||||||
status = Disabled
|
status = Disabled
|
||||||
}
|
}
|
||||||
tokens := strings.Split(opts.Arn, ":")
|
arnStr := opts.Arn
|
||||||
|
if opts.Arn == "" {
|
||||||
|
arnStr = c.Role
|
||||||
|
}
|
||||||
|
tokens := strings.Split(arnStr, ":")
|
||||||
if len(tokens) != 6 {
|
if len(tokens) != 6 {
|
||||||
return fmt.Errorf("invalid format for replication Arn")
|
return fmt.Errorf("invalid format for replication Arn")
|
||||||
}
|
}
|
||||||
if c.ReplicationARN == "" { // for new configurations
|
if c.Role == "" { // for new configurations
|
||||||
c.ReplicationARN = opts.Arn
|
c.Role = opts.Arn
|
||||||
|
}
|
||||||
|
priority, err := strconv.Atoi(opts.Priority)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
newRule := Rule{
|
newRule := Rule{
|
||||||
ID: opts.ID,
|
ID: opts.ID,
|
||||||
Priority: opts.Priority,
|
Priority: priority,
|
||||||
Status: status,
|
Status: status,
|
||||||
Filter: filter,
|
Filter: filter,
|
||||||
Destination: Destination{
|
Destination: Destination{
|
||||||
@@ -138,10 +153,13 @@ func (c *Config) AddRule(opts Options) error {
|
|||||||
if rule.ID != newRule.ID {
|
if rule.ID != newRule.ID {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if newRule.Status == Disabled && rule.ID == newRule.ID {
|
if opts.Priority == "" && rule.ID == newRule.ID {
|
||||||
// inherit priority from existing rule, required field on server
|
// inherit priority from existing rule, required field on server
|
||||||
newRule.Priority = rule.Priority
|
newRule.Priority = rule.Priority
|
||||||
}
|
}
|
||||||
|
if opts.RuleStatus == "" {
|
||||||
|
newRule.Status = rule.Status
|
||||||
|
}
|
||||||
c.Rules[i] = newRule
|
c.Rules[i] = newRule
|
||||||
ruleFound = true
|
ruleFound = true
|
||||||
break
|
break
|
||||||
@@ -150,7 +168,9 @@ func (c *Config) AddRule(opts Options) error {
|
|||||||
if err := newRule.Validate(); err != nil {
|
if err := newRule.Validate(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if !ruleFound && opts.Op == SetOption {
|
||||||
|
return fmt.Errorf("Rule with ID %s not found in replication configuration", opts.ID)
|
||||||
|
}
|
||||||
if !ruleFound {
|
if !ruleFound {
|
||||||
c.Rules = append(c.Rules, newRule)
|
c.Rules = append(c.Rules, newRule)
|
||||||
}
|
}
|
||||||
@@ -197,7 +217,7 @@ func (r Rule) Validate() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.Priority <= 0 && r.Status == Enabled {
|
if r.Priority < 0 && r.Status == Enabled {
|
||||||
return fmt.Errorf("Priority must be set for the rule")
|
return fmt.Errorf("Priority must be set for the rule")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
vendor/github.com/mitchellh/mapstructure/CHANGELOG.md
сгенерированный
поставляемый
4
vendor/github.com/mitchellh/mapstructure/CHANGELOG.md
сгенерированный
поставляемый
@@ -1,3 +1,7 @@
|
|||||||
|
## 1.3.3
|
||||||
|
|
||||||
|
* Decoding maps from maps creates a settable value for decode hooks [GH-203]
|
||||||
|
|
||||||
## 1.3.2
|
## 1.3.2
|
||||||
|
|
||||||
* Decode into interface type with a struct value is supported [GH-187]
|
* Decode into interface type with a struct value is supported [GH-187]
|
||||||
|
|||||||
31
vendor/github.com/mitchellh/mapstructure/mapstructure.go
сгенерированный
поставляемый
31
vendor/github.com/mitchellh/mapstructure/mapstructure.go
сгенерированный
поставляемый
@@ -906,11 +906,22 @@ func (d *Decoder) decodeMapFromStruct(name string, dataVal reflect.Value, val re
|
|||||||
mType := reflect.MapOf(vKeyType, vElemType)
|
mType := reflect.MapOf(vKeyType, vElemType)
|
||||||
vMap := reflect.MakeMap(mType)
|
vMap := reflect.MakeMap(mType)
|
||||||
|
|
||||||
err := d.decode(keyName, x.Interface(), vMap)
|
// Creating a pointer to a map so that other methods can completely
|
||||||
|
// overwrite the map if need be (looking at you decodeMapFromMap). The
|
||||||
|
// indirection allows the underlying map to be settable (CanSet() == true)
|
||||||
|
// where as reflect.MakeMap returns an unsettable map.
|
||||||
|
addrVal := reflect.New(vMap.Type())
|
||||||
|
reflect.Indirect(addrVal).Set(vMap)
|
||||||
|
|
||||||
|
err := d.decode(keyName, x.Interface(), reflect.Indirect(addrVal))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// the underlying map may have been completely overwritten so pull
|
||||||
|
// it indirectly out of the enclosing value.
|
||||||
|
vMap = reflect.Indirect(addrVal)
|
||||||
|
|
||||||
if squash {
|
if squash {
|
||||||
for _, k := range vMap.MapKeys() {
|
for _, k := range vMap.MapKeys() {
|
||||||
valMap.SetMapIndex(k, vMap.MapIndex(k))
|
valMap.SetMapIndex(k, vMap.MapIndex(k))
|
||||||
@@ -1154,13 +1165,23 @@ func (d *Decoder) decodeStruct(name string, data interface{}, val reflect.Value)
|
|||||||
// Not the most efficient way to do this but we can optimize later if
|
// Not the most efficient way to do this but we can optimize later if
|
||||||
// we want to. To convert from struct to struct we go to map first
|
// we want to. To convert from struct to struct we go to map first
|
||||||
// as an intermediary.
|
// as an intermediary.
|
||||||
m := make(map[string]interface{})
|
|
||||||
mval := reflect.Indirect(reflect.ValueOf(&m))
|
// Make a new map to hold our result
|
||||||
if err := d.decodeMapFromStruct(name, dataVal, mval, mval); err != nil {
|
mapType := reflect.TypeOf((map[string]interface{})(nil))
|
||||||
|
mval := reflect.MakeMap(mapType)
|
||||||
|
|
||||||
|
// Creating a pointer to a map so that other methods can completely
|
||||||
|
// overwrite the map if need be (looking at you decodeMapFromMap). The
|
||||||
|
// indirection allows the underlying map to be settable (CanSet() == true)
|
||||||
|
// where as reflect.MakeMap returns an unsettable map.
|
||||||
|
addrVal := reflect.New(mval.Type())
|
||||||
|
|
||||||
|
reflect.Indirect(addrVal).Set(mval)
|
||||||
|
if err := d.decodeMapFromStruct(name, dataVal, reflect.Indirect(addrVal), mval); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
result := d.decodeStructFromMap(name, mval, val)
|
result := d.decodeStructFromMap(name, reflect.Indirect(addrVal), val)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
3
vendor/github.com/olivere/elastic/CONTRIBUTORS
сгенерированный
поставляемый
3
vendor/github.com/olivere/elastic/CONTRIBUTORS
сгенерированный
поставляемый
@@ -40,6 +40,7 @@ Bryan Conklin [@bmconklin](https://github.com/bmconklin)
|
|||||||
Bruce Zhou [@brucez-isell](https://github.com/brucez-isell)
|
Bruce Zhou [@brucez-isell](https://github.com/brucez-isell)
|
||||||
Carl Dunham [@carldunham](https://github.com/carldunham)
|
Carl Dunham [@carldunham](https://github.com/carldunham)
|
||||||
Carl Johan Gustavsson [@cjgu](https://github.com/cjgu)
|
Carl Johan Gustavsson [@cjgu](https://github.com/cjgu)
|
||||||
|
Carson [@carson0321](https://github.com/carson0321)
|
||||||
Cat [@cat-turner](https://github.com/cat-turner)
|
Cat [@cat-turner](https://github.com/cat-turner)
|
||||||
César Jiménez [@cesarjimenez](https://github.com/cesarjimenez)
|
César Jiménez [@cesarjimenez](https://github.com/cesarjimenez)
|
||||||
cforbes [@cforbes](https://github.com/cforbes)
|
cforbes [@cforbes](https://github.com/cforbes)
|
||||||
@@ -56,6 +57,7 @@ Connor Peet [@connor4312](https://github.com/connor4312)
|
|||||||
Conrad Pankoff [@deoxxa](https://github.com/deoxxa)
|
Conrad Pankoff [@deoxxa](https://github.com/deoxxa)
|
||||||
Corey Scott [@corsc](https://github.com/corsc)
|
Corey Scott [@corsc](https://github.com/corsc)
|
||||||
Chris Petersen [@ex-nerd](https://github.com/ex-nerd)
|
Chris Petersen [@ex-nerd](https://github.com/ex-nerd)
|
||||||
|
czxichen [@czxichen](https://github.com/czxichen)
|
||||||
Daniel Barrett [@shendaras](https://github.com/shendaras)
|
Daniel Barrett [@shendaras](https://github.com/shendaras)
|
||||||
Daniel Heckrath [@DanielHeckrath](https://github.com/DanielHeckrath)
|
Daniel Heckrath [@DanielHeckrath](https://github.com/DanielHeckrath)
|
||||||
Daniel Imfeld [@dimfeld](https://github.com/dimfeld)
|
Daniel Imfeld [@dimfeld](https://github.com/dimfeld)
|
||||||
@@ -154,6 +156,7 @@ okhowang [@okhowang](https://github.com/okhowang)
|
|||||||
Orne Brocaar [@brocaar](https://github.com/brocaar)
|
Orne Brocaar [@brocaar](https://github.com/brocaar)
|
||||||
Paul [@eyeamera](https://github.com/eyeamera)
|
Paul [@eyeamera](https://github.com/eyeamera)
|
||||||
Paul Oldenburg [@lr-paul](https://github.com/lr-paul)
|
Paul Oldenburg [@lr-paul](https://github.com/lr-paul)
|
||||||
|
Pedro [@otherview](https://github.com/otherview)
|
||||||
Pete C [@peteclark-ft](https://github.com/peteclark-ft)
|
Pete C [@peteclark-ft](https://github.com/peteclark-ft)
|
||||||
Peter Nagy [@nagypeterjob](https://github.com/nagypeterjob)
|
Peter Nagy [@nagypeterjob](https://github.com/nagypeterjob)
|
||||||
Paolo [@ppiccolo](https://github.com/ppiccolo)
|
Paolo [@ppiccolo](https://github.com/ppiccolo)
|
||||||
|
|||||||
4
vendor/github.com/opentracing/opentracing-go/.travis.yml
сгенерированный
поставляемый
4
vendor/github.com/opentracing/opentracing-go/.travis.yml
сгенерированный
поставляемый
@@ -2,8 +2,8 @@ language: go
|
|||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- go: "1.11.x"
|
- go: "1.13.x"
|
||||||
- go: "1.12.x"
|
- go: "1.14.x"
|
||||||
- go: "tip"
|
- go: "tip"
|
||||||
env:
|
env:
|
||||||
- LINT=true
|
- LINT=true
|
||||||
|
|||||||
17
vendor/github.com/opentracing/opentracing-go/CHANGELOG.md
сгенерированный
поставляемый
17
vendor/github.com/opentracing/opentracing-go/CHANGELOG.md
сгенерированный
поставляемый
@@ -1,6 +1,23 @@
|
|||||||
Changes by Version
|
Changes by Version
|
||||||
==================
|
==================
|
||||||
|
|
||||||
|
|
||||||
|
1.2.0 (2020-07-01)
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* Restore the ability to reset the current span in context to nil (#231) -- Yuri Shkuro
|
||||||
|
* Use error.object per OpenTracing Semantic Conventions (#179) -- Rahman Syed
|
||||||
|
* Convert nil pointer log field value to string "nil" (#230) -- Cyril Tovena
|
||||||
|
* Add Go module support (#215) -- Zaba505
|
||||||
|
* Make SetTag helper types in ext public (#229) -- Blake Edwards
|
||||||
|
* Add log/fields helpers for keys from specification (#226) -- Dmitry Monakhov
|
||||||
|
* Improve noop impementation (#223) -- chanxuehong
|
||||||
|
* Add an extension to Tracer interface for custom go context creation (#220) -- Krzesimir Nowak
|
||||||
|
* Fix typo in comments (#222) -- meteorlxy
|
||||||
|
* Improve documentation for log.Object() to emphasize the requirement to pass immutable arguments (#219) -- 疯狂的小企鹅
|
||||||
|
* [mock] Return ErrInvalidSpanContext if span context is not MockSpanContext (#216) -- Milad Irannejad
|
||||||
|
|
||||||
|
|
||||||
1.1.0 (2019-03-23)
|
1.1.0 (2019-03-23)
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
|||||||
24
vendor/github.com/opentracing/opentracing-go/ext.go
сгенерированный
поставляемый
Обычный файл
24
vendor/github.com/opentracing/opentracing-go/ext.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,24 @@
|
|||||||
|
package opentracing
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TracerContextWithSpanExtension is an extension interface that the
|
||||||
|
// implementation of the Tracer interface may want to implement. It
|
||||||
|
// allows to have some control over the go context when the
|
||||||
|
// ContextWithSpan is invoked.
|
||||||
|
//
|
||||||
|
// The primary purpose of this extension are adapters from opentracing
|
||||||
|
// API to some other tracing API.
|
||||||
|
type TracerContextWithSpanExtension interface {
|
||||||
|
// ContextWithSpanHook gets called by the ContextWithSpan
|
||||||
|
// function, when the Tracer implementation also implements
|
||||||
|
// this interface. It allows to put extra information into the
|
||||||
|
// context and make it available to the callers of the
|
||||||
|
// ContextWithSpan.
|
||||||
|
//
|
||||||
|
// This hook is invoked before the ContextWithSpan function
|
||||||
|
// actually puts the span into the context.
|
||||||
|
ContextWithSpanHook(ctx context.Context, span Span) context.Context
|
||||||
|
}
|
||||||
17
vendor/github.com/opentracing/opentracing-go/ext/field.go
сгенерированный
поставляемый
Обычный файл
17
vendor/github.com/opentracing/opentracing-go/ext/field.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,17 @@
|
|||||||
|
package ext
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/opentracing/opentracing-go"
|
||||||
|
"github.com/opentracing/opentracing-go/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
// LogError sets the error=true tag on the Span and logs err as an "error" event.
|
||||||
|
func LogError(span opentracing.Span, err error, fields ...log.Field) {
|
||||||
|
Error.Set(span, true)
|
||||||
|
ef := []log.Field{
|
||||||
|
log.Event("error"),
|
||||||
|
log.Error(err),
|
||||||
|
}
|
||||||
|
ef = append(ef, fields...)
|
||||||
|
span.LogFields(ef...)
|
||||||
|
}
|
||||||
65
vendor/github.com/opentracing/opentracing-go/ext/tags.go
сгенерированный
поставляемый
65
vendor/github.com/opentracing/opentracing-go/ext/tags.go
сгенерированный
поставляемый
@@ -47,40 +47,40 @@ var (
|
|||||||
|
|
||||||
// Component is a low-cardinality identifier of the module, library,
|
// Component is a low-cardinality identifier of the module, library,
|
||||||
// or package that is generating a span.
|
// or package that is generating a span.
|
||||||
Component = stringTagName("component")
|
Component = StringTagName("component")
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Sampling hint
|
// Sampling hint
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// SamplingPriority determines the priority of sampling this Span.
|
// SamplingPriority determines the priority of sampling this Span.
|
||||||
SamplingPriority = uint16TagName("sampling.priority")
|
SamplingPriority = Uint16TagName("sampling.priority")
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Peer tags. These tags can be emitted by either client-side of
|
// Peer tags. These tags can be emitted by either client-side or
|
||||||
// server-side to describe the other side/service in a peer-to-peer
|
// server-side to describe the other side/service in a peer-to-peer
|
||||||
// communications, like an RPC call.
|
// communications, like an RPC call.
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// PeerService records the service name of the peer.
|
// PeerService records the service name of the peer.
|
||||||
PeerService = stringTagName("peer.service")
|
PeerService = StringTagName("peer.service")
|
||||||
|
|
||||||
// PeerAddress records the address name of the peer. This may be a "ip:port",
|
// PeerAddress records the address name of the peer. This may be a "ip:port",
|
||||||
// a bare "hostname", a FQDN or even a database DSN substring
|
// a bare "hostname", a FQDN or even a database DSN substring
|
||||||
// like "mysql://username@127.0.0.1:3306/dbname"
|
// like "mysql://username@127.0.0.1:3306/dbname"
|
||||||
PeerAddress = stringTagName("peer.address")
|
PeerAddress = StringTagName("peer.address")
|
||||||
|
|
||||||
// PeerHostname records the host name of the peer
|
// PeerHostname records the host name of the peer
|
||||||
PeerHostname = stringTagName("peer.hostname")
|
PeerHostname = StringTagName("peer.hostname")
|
||||||
|
|
||||||
// PeerHostIPv4 records IP v4 host address of the peer
|
// PeerHostIPv4 records IP v4 host address of the peer
|
||||||
PeerHostIPv4 = ipv4Tag("peer.ipv4")
|
PeerHostIPv4 = IPv4TagName("peer.ipv4")
|
||||||
|
|
||||||
// PeerHostIPv6 records IP v6 host address of the peer
|
// PeerHostIPv6 records IP v6 host address of the peer
|
||||||
PeerHostIPv6 = stringTagName("peer.ipv6")
|
PeerHostIPv6 = StringTagName("peer.ipv6")
|
||||||
|
|
||||||
// PeerPort records port number of the peer
|
// PeerPort records port number of the peer
|
||||||
PeerPort = uint16TagName("peer.port")
|
PeerPort = Uint16TagName("peer.port")
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// HTTP Tags
|
// HTTP Tags
|
||||||
@@ -88,46 +88,46 @@ var (
|
|||||||
|
|
||||||
// HTTPUrl should be the URL of the request being handled in this segment
|
// HTTPUrl should be the URL of the request being handled in this segment
|
||||||
// of the trace, in standard URI format. The protocol is optional.
|
// of the trace, in standard URI format. The protocol is optional.
|
||||||
HTTPUrl = stringTagName("http.url")
|
HTTPUrl = StringTagName("http.url")
|
||||||
|
|
||||||
// HTTPMethod is the HTTP method of the request, and is case-insensitive.
|
// HTTPMethod is the HTTP method of the request, and is case-insensitive.
|
||||||
HTTPMethod = stringTagName("http.method")
|
HTTPMethod = StringTagName("http.method")
|
||||||
|
|
||||||
// HTTPStatusCode is the numeric HTTP status code (200, 404, etc) of the
|
// HTTPStatusCode is the numeric HTTP status code (200, 404, etc) of the
|
||||||
// HTTP response.
|
// HTTP response.
|
||||||
HTTPStatusCode = uint16TagName("http.status_code")
|
HTTPStatusCode = Uint16TagName("http.status_code")
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// DB Tags
|
// DB Tags
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// DBInstance is database instance name.
|
// DBInstance is database instance name.
|
||||||
DBInstance = stringTagName("db.instance")
|
DBInstance = StringTagName("db.instance")
|
||||||
|
|
||||||
// DBStatement is a database statement for the given database type.
|
// DBStatement is a database statement for the given database type.
|
||||||
// It can be a query or a prepared statement (i.e., before substitution).
|
// It can be a query or a prepared statement (i.e., before substitution).
|
||||||
DBStatement = stringTagName("db.statement")
|
DBStatement = StringTagName("db.statement")
|
||||||
|
|
||||||
// DBType is a database type. For any SQL database, "sql".
|
// DBType is a database type. For any SQL database, "sql".
|
||||||
// For others, the lower-case database category, e.g. "redis"
|
// For others, the lower-case database category, e.g. "redis"
|
||||||
DBType = stringTagName("db.type")
|
DBType = StringTagName("db.type")
|
||||||
|
|
||||||
// DBUser is a username for accessing database.
|
// DBUser is a username for accessing database.
|
||||||
DBUser = stringTagName("db.user")
|
DBUser = StringTagName("db.user")
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Message Bus Tag
|
// Message Bus Tag
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// MessageBusDestination is an address at which messages can be exchanged
|
// MessageBusDestination is an address at which messages can be exchanged
|
||||||
MessageBusDestination = stringTagName("message_bus.destination")
|
MessageBusDestination = StringTagName("message_bus.destination")
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Error Tag
|
// Error Tag
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// Error indicates that operation represented by the span resulted in an error.
|
// Error indicates that operation represented by the span resulted in an error.
|
||||||
Error = boolTagName("error")
|
Error = BoolTagName("error")
|
||||||
)
|
)
|
||||||
|
|
||||||
// ---
|
// ---
|
||||||
@@ -163,48 +163,53 @@ func RPCServerOption(client opentracing.SpanContext) opentracing.StartSpanOption
|
|||||||
|
|
||||||
// ---
|
// ---
|
||||||
|
|
||||||
type stringTagName string
|
// StringTagName is a common tag name to be set to a string value
|
||||||
|
type StringTagName string
|
||||||
|
|
||||||
// Set adds a string tag to the `span`
|
// Set adds a string tag to the `span`
|
||||||
func (tag stringTagName) Set(span opentracing.Span, value string) {
|
func (tag StringTagName) Set(span opentracing.Span, value string) {
|
||||||
span.SetTag(string(tag), value)
|
span.SetTag(string(tag), value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---
|
// ---
|
||||||
|
|
||||||
type uint32TagName string
|
// Uint32TagName is a common tag name to be set to a uint32 value
|
||||||
|
type Uint32TagName string
|
||||||
|
|
||||||
// Set adds a uint32 tag to the `span`
|
// Set adds a uint32 tag to the `span`
|
||||||
func (tag uint32TagName) Set(span opentracing.Span, value uint32) {
|
func (tag Uint32TagName) Set(span opentracing.Span, value uint32) {
|
||||||
span.SetTag(string(tag), value)
|
span.SetTag(string(tag), value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---
|
// ---
|
||||||
|
|
||||||
type uint16TagName string
|
// Uint16TagName is a common tag name to be set to a uint16 value
|
||||||
|
type Uint16TagName string
|
||||||
|
|
||||||
// Set adds a uint16 tag to the `span`
|
// Set adds a uint16 tag to the `span`
|
||||||
func (tag uint16TagName) Set(span opentracing.Span, value uint16) {
|
func (tag Uint16TagName) Set(span opentracing.Span, value uint16) {
|
||||||
span.SetTag(string(tag), value)
|
span.SetTag(string(tag), value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---
|
// ---
|
||||||
|
|
||||||
type boolTagName string
|
// BoolTagName is a common tag name to be set to a bool value
|
||||||
|
type BoolTagName string
|
||||||
|
|
||||||
// Add adds a bool tag to the `span`
|
// Set adds a bool tag to the `span`
|
||||||
func (tag boolTagName) Set(span opentracing.Span, value bool) {
|
func (tag BoolTagName) Set(span opentracing.Span, value bool) {
|
||||||
span.SetTag(string(tag), value)
|
span.SetTag(string(tag), value)
|
||||||
}
|
}
|
||||||
|
|
||||||
type ipv4Tag string
|
// IPv4TagName is a common tag name to be set to an ipv4 value
|
||||||
|
type IPv4TagName string
|
||||||
|
|
||||||
// Set adds IP v4 host address of the peer as an uint32 value to the `span`, keep this for backward and zipkin compatibility
|
// Set adds IP v4 host address of the peer as an uint32 value to the `span`, keep this for backward and zipkin compatibility
|
||||||
func (tag ipv4Tag) Set(span opentracing.Span, value uint32) {
|
func (tag IPv4TagName) Set(span opentracing.Span, value uint32) {
|
||||||
span.SetTag(string(tag), value)
|
span.SetTag(string(tag), value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetString records IP v4 host address of the peer as a .-separated tuple to the `span`. E.g., "127.0.0.1"
|
// SetString records IP v4 host address of the peer as a .-separated tuple to the `span`. E.g., "127.0.0.1"
|
||||||
func (tag ipv4Tag) SetString(span opentracing.Span, value string) {
|
func (tag IPv4TagName) SetString(span opentracing.Span, value string) {
|
||||||
span.SetTag(string(tag), value)
|
span.SetTag(string(tag), value)
|
||||||
}
|
}
|
||||||
|
|||||||
5
vendor/github.com/opentracing/opentracing-go/go.mod
сгенерированный
поставляемый
Обычный файл
5
vendor/github.com/opentracing/opentracing-go/go.mod
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,5 @@
|
|||||||
|
module github.com/opentracing/opentracing-go
|
||||||
|
|
||||||
|
go 1.14
|
||||||
|
|
||||||
|
require github.com/stretchr/testify v1.3.0
|
||||||
7
vendor/github.com/opentracing/opentracing-go/go.sum
сгенерированный
поставляемый
Обычный файл
7
vendor/github.com/opentracing/opentracing-go/go.sum
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,7 @@
|
|||||||
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
7
vendor/github.com/opentracing/opentracing-go/gocontext.go
сгенерированный
поставляемый
7
vendor/github.com/opentracing/opentracing-go/gocontext.go
сгенерированный
поставляемый
@@ -7,8 +7,13 @@ type contextKey struct{}
|
|||||||
var activeSpanKey = contextKey{}
|
var activeSpanKey = contextKey{}
|
||||||
|
|
||||||
// ContextWithSpan returns a new `context.Context` that holds a reference to
|
// ContextWithSpan returns a new `context.Context` that holds a reference to
|
||||||
// `span`'s SpanContext.
|
// the span. If span is nil, a new context without an active span is returned.
|
||||||
func ContextWithSpan(ctx context.Context, span Span) context.Context {
|
func ContextWithSpan(ctx context.Context, span Span) context.Context {
|
||||||
|
if span != nil {
|
||||||
|
if tracerWithHook, ok := span.Tracer().(TracerContextWithSpanExtension); ok {
|
||||||
|
ctx = tracerWithHook.ContextWithSpanHook(ctx, span)
|
||||||
|
}
|
||||||
|
}
|
||||||
return context.WithValue(ctx, activeSpanKey, span)
|
return context.WithValue(ctx, activeSpanKey, span)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
17
vendor/github.com/opentracing/opentracing-go/log/field.go
сгенерированный
поставляемый
17
vendor/github.com/opentracing/opentracing-go/log/field.go
сгенерированный
поставляемый
@@ -122,16 +122,19 @@ func Float64(key string, val float64) Field {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Error adds an error with the key "error" to a Span.LogFields() record
|
// Error adds an error with the key "error.object" to a Span.LogFields() record
|
||||||
func Error(err error) Field {
|
func Error(err error) Field {
|
||||||
return Field{
|
return Field{
|
||||||
key: "error",
|
key: "error.object",
|
||||||
fieldType: errorType,
|
fieldType: errorType,
|
||||||
interfaceVal: err,
|
interfaceVal: err,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Object adds an object-valued key:value pair to a Span.LogFields() record
|
// Object adds an object-valued key:value pair to a Span.LogFields() record
|
||||||
|
// Please pass in an immutable object, otherwise there may be concurrency issues.
|
||||||
|
// Such as passing in the map, log.Object may result in "fatal error: concurrent map iteration and map write".
|
||||||
|
// Because span is sent asynchronously, it is possible that this map will also be modified.
|
||||||
func Object(key string, obj interface{}) Field {
|
func Object(key string, obj interface{}) Field {
|
||||||
return Field{
|
return Field{
|
||||||
key: key,
|
key: key,
|
||||||
@@ -140,6 +143,16 @@ func Object(key string, obj interface{}) Field {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Event creates a string-valued Field for span logs with key="event" and value=val.
|
||||||
|
func Event(val string) Field {
|
||||||
|
return String("event", val)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Message creates a string-valued Field for span logs with key="message" and value=val.
|
||||||
|
func Message(val string) Field {
|
||||||
|
return String("message", val)
|
||||||
|
}
|
||||||
|
|
||||||
// LazyLogger allows for user-defined, late-bound logging of arbitrary data
|
// LazyLogger allows for user-defined, late-bound logging of arbitrary data
|
||||||
type LazyLogger func(fv Encoder)
|
type LazyLogger func(fv Encoder)
|
||||||
|
|
||||||
|
|||||||
9
vendor/github.com/opentracing/opentracing-go/log/util.go
сгенерированный
поставляемый
9
vendor/github.com/opentracing/opentracing-go/log/util.go
сгенерированный
поставляемый
@@ -1,6 +1,9 @@
|
|||||||
package log
|
package log
|
||||||
|
|
||||||
import "fmt"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
)
|
||||||
|
|
||||||
// InterleavedKVToFields converts keyValues a la Span.LogKV() to a Field slice
|
// InterleavedKVToFields converts keyValues a la Span.LogKV() to a Field slice
|
||||||
// a la Span.LogFields().
|
// a la Span.LogFields().
|
||||||
@@ -46,6 +49,10 @@ func InterleavedKVToFields(keyValues ...interface{}) ([]Field, error) {
|
|||||||
case float64:
|
case float64:
|
||||||
fields[i] = Float64(key, typedVal)
|
fields[i] = Float64(key, typedVal)
|
||||||
default:
|
default:
|
||||||
|
if typedVal == nil || (reflect.ValueOf(typedVal).Kind() == reflect.Ptr && reflect.ValueOf(typedVal).IsNil()) {
|
||||||
|
fields[i] = String(key, "nil")
|
||||||
|
continue
|
||||||
|
}
|
||||||
// When in doubt, coerce to a string
|
// When in doubt, coerce to a string
|
||||||
fields[i] = String(key, fmt.Sprint(typedVal))
|
fields[i] = String(key, fmt.Sprint(typedVal))
|
||||||
}
|
}
|
||||||
|
|||||||
8
vendor/github.com/opentracing/opentracing-go/noop.go
сгенерированный
поставляемый
8
vendor/github.com/opentracing/opentracing-go/noop.go
сгенерированный
поставляемый
@@ -21,9 +21,9 @@ type noopSpan struct{}
|
|||||||
type noopSpanContext struct{}
|
type noopSpanContext struct{}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
defaultNoopSpanContext = noopSpanContext{}
|
defaultNoopSpanContext SpanContext = noopSpanContext{}
|
||||||
defaultNoopSpan = noopSpan{}
|
defaultNoopSpan Span = noopSpan{}
|
||||||
defaultNoopTracer = NoopTracer{}
|
defaultNoopTracer Tracer = NoopTracer{}
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -35,7 +35,7 @@ func (n noopSpanContext) ForeachBaggageItem(handler func(k, v string) bool) {}
|
|||||||
|
|
||||||
// noopSpan:
|
// noopSpan:
|
||||||
func (n noopSpan) Context() SpanContext { return defaultNoopSpanContext }
|
func (n noopSpan) Context() SpanContext { return defaultNoopSpanContext }
|
||||||
func (n noopSpan) SetBaggageItem(key, val string) Span { return defaultNoopSpan }
|
func (n noopSpan) SetBaggageItem(key, val string) Span { return n }
|
||||||
func (n noopSpan) BaggageItem(key string) string { return emptyString }
|
func (n noopSpan) BaggageItem(key string) string { return emptyString }
|
||||||
func (n noopSpan) SetTag(key string, value interface{}) Span { return n }
|
func (n noopSpan) SetTag(key string, value interface{}) Span { return n }
|
||||||
func (n noopSpan) LogFields(fields ...log.Field) {}
|
func (n noopSpan) LogFields(fields ...log.Field) {}
|
||||||
|
|||||||
2
vendor/github.com/pborman/uuid/time.go
сгенерированный
поставляемый
2
vendor/github.com/pborman/uuid/time.go
сгенерированный
поставляемый
@@ -29,7 +29,7 @@ func GetTime() (Time, uint16, error) { return guuid.GetTime() }
|
|||||||
// for
|
// for
|
||||||
func ClockSequence() int { return guuid.ClockSequence() }
|
func ClockSequence() int { return guuid.ClockSequence() }
|
||||||
|
|
||||||
// SetClockSeq sets the clock sequence to the lower 14 bits of seq. Setting to
|
// SetClockSequence sets the clock sequence to the lower 14 bits of seq. Setting to
|
||||||
// -1 causes a new sequence to be generated.
|
// -1 causes a new sequence to be generated.
|
||||||
func SetClockSequence(seq int) { guuid.SetClockSequence(seq) }
|
func SetClockSequence(seq int) { guuid.SetClockSequence(seq) }
|
||||||
|
|
||||||
|
|||||||
2
vendor/github.com/pborman/uuid/version4.go
сгенерированный
поставляемый
2
vendor/github.com/pborman/uuid/version4.go
сгенерированный
поставляемый
@@ -6,7 +6,7 @@ package uuid
|
|||||||
|
|
||||||
import guuid "github.com/google/uuid"
|
import guuid "github.com/google/uuid"
|
||||||
|
|
||||||
// Random returns a Random (Version 4) UUID or panics.
|
// NewRandom returns a Random (Version 4) UUID or panics.
|
||||||
//
|
//
|
||||||
// The strength of the UUIDs is based on the strength of the crypto/rand
|
// The strength of the UUIDs is based on the strength of the crypto/rand
|
||||||
// package.
|
// package.
|
||||||
|
|||||||
2
vendor/github.com/prometheus/common/expfmt/decode.go
сгенерированный
поставляемый
2
vendor/github.com/prometheus/common/expfmt/decode.go
сгенерированный
поставляемый
@@ -164,7 +164,7 @@ func (sd *SampleDecoder) Decode(s *model.Vector) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ExtractSamples builds a slice of samples from the provided metric
|
// ExtractSamples builds a slice of samples from the provided metric
|
||||||
// families. If an error occurrs during sample extraction, it continues to
|
// families. If an error occurs during sample extraction, it continues to
|
||||||
// extract from the remaining metric families. The returned error is the last
|
// extract from the remaining metric families. The returned error is the last
|
||||||
// error that has occurred.
|
// error that has occurred.
|
||||||
func ExtractSamples(o *DecodeOptions, fams ...*dto.MetricFamily) (model.Vector, error) {
|
func ExtractSamples(o *DecodeOptions, fams ...*dto.MetricFamily) (model.Vector, error) {
|
||||||
|
|||||||
2
vendor/github.com/prometheus/common/model/fnv.go
сгенерированный
поставляемый
2
vendor/github.com/prometheus/common/model/fnv.go
сгенерированный
поставляемый
@@ -20,7 +20,7 @@ const (
|
|||||||
prime64 = 1099511628211
|
prime64 = 1099511628211
|
||||||
)
|
)
|
||||||
|
|
||||||
// hashNew initializies a new fnv64a hash value.
|
// hashNew initializes a new fnv64a hash value.
|
||||||
func hashNew() uint64 {
|
func hashNew() uint64 {
|
||||||
return offset64
|
return offset64
|
||||||
}
|
}
|
||||||
|
|||||||
96
vendor/github.com/prometheus/common/model/time.go
сгенерированный
поставляемый
96
vendor/github.com/prometheus/common/model/time.go
сгенерированный
поставляемый
@@ -181,77 +181,77 @@ func (d *Duration) Type() string {
|
|||||||
return "duration"
|
return "duration"
|
||||||
}
|
}
|
||||||
|
|
||||||
var durationRE = regexp.MustCompile("^([0-9]+)(y|w|d|h|m|s|ms)$")
|
var durationRE = regexp.MustCompile("^(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?$")
|
||||||
|
|
||||||
// ParseDuration parses a string into a time.Duration, assuming that a year
|
// ParseDuration parses a string into a time.Duration, assuming that a year
|
||||||
// always has 365d, a week always has 7d, and a day always has 24h.
|
// always has 365d, a week always has 7d, and a day always has 24h.
|
||||||
func ParseDuration(durationStr string) (Duration, error) {
|
func ParseDuration(durationStr string) (Duration, error) {
|
||||||
|
switch durationStr {
|
||||||
|
case "0":
|
||||||
// Allow 0 without a unit.
|
// Allow 0 without a unit.
|
||||||
if durationStr == "0" {
|
|
||||||
return 0, nil
|
return 0, nil
|
||||||
|
case "":
|
||||||
|
return 0, fmt.Errorf("empty duration string")
|
||||||
}
|
}
|
||||||
matches := durationRE.FindStringSubmatch(durationStr)
|
matches := durationRE.FindStringSubmatch(durationStr)
|
||||||
if len(matches) != 3 {
|
if matches == nil {
|
||||||
return 0, fmt.Errorf("not a valid duration string: %q", durationStr)
|
return 0, fmt.Errorf("not a valid duration string: %q", durationStr)
|
||||||
}
|
}
|
||||||
var (
|
var dur time.Duration
|
||||||
n, _ = strconv.Atoi(matches[1])
|
|
||||||
dur = time.Duration(n) * time.Millisecond
|
// Parse the match at pos `pos` in the regex and use `mult` to turn that
|
||||||
)
|
// into ms, then add that value to the total parsed duration.
|
||||||
switch unit := matches[2]; unit {
|
m := func(pos int, mult time.Duration) {
|
||||||
case "y":
|
if matches[pos] == "" {
|
||||||
dur *= 1000 * 60 * 60 * 24 * 365
|
return
|
||||||
case "w":
|
|
||||||
dur *= 1000 * 60 * 60 * 24 * 7
|
|
||||||
case "d":
|
|
||||||
dur *= 1000 * 60 * 60 * 24
|
|
||||||
case "h":
|
|
||||||
dur *= 1000 * 60 * 60
|
|
||||||
case "m":
|
|
||||||
dur *= 1000 * 60
|
|
||||||
case "s":
|
|
||||||
dur *= 1000
|
|
||||||
case "ms":
|
|
||||||
// Value already correct
|
|
||||||
default:
|
|
||||||
return 0, fmt.Errorf("invalid time unit in duration string: %q", unit)
|
|
||||||
}
|
}
|
||||||
|
n, _ := strconv.Atoi(matches[pos])
|
||||||
|
d := time.Duration(n) * time.Millisecond
|
||||||
|
dur += d * mult
|
||||||
|
}
|
||||||
|
|
||||||
|
m(2, 1000*60*60*24*365) // y
|
||||||
|
m(4, 1000*60*60*24*7) // w
|
||||||
|
m(6, 1000*60*60*24) // d
|
||||||
|
m(8, 1000*60*60) // h
|
||||||
|
m(10, 1000*60) // m
|
||||||
|
m(12, 1000) // s
|
||||||
|
m(14, 1) // ms
|
||||||
|
|
||||||
return Duration(dur), nil
|
return Duration(dur), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d Duration) String() string {
|
func (d Duration) String() string {
|
||||||
var (
|
var (
|
||||||
ms = int64(time.Duration(d) / time.Millisecond)
|
ms = int64(time.Duration(d) / time.Millisecond)
|
||||||
unit = "ms"
|
r = ""
|
||||||
)
|
)
|
||||||
if ms == 0 {
|
if ms == 0 {
|
||||||
return "0s"
|
return "0s"
|
||||||
}
|
}
|
||||||
factors := map[string]int64{
|
|
||||||
"y": 1000 * 60 * 60 * 24 * 365,
|
f := func(unit string, mult int64, exact bool) {
|
||||||
"w": 1000 * 60 * 60 * 24 * 7,
|
if exact && ms%mult != 0 {
|
||||||
"d": 1000 * 60 * 60 * 24,
|
return
|
||||||
"h": 1000 * 60 * 60,
|
}
|
||||||
"m": 1000 * 60,
|
if v := ms / mult; v > 0 {
|
||||||
"s": 1000,
|
r += fmt.Sprintf("%d%s", v, unit)
|
||||||
"ms": 1,
|
ms -= v * mult
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch int64(0) {
|
// Only format years and weeks if the remainder is zero, as it is often
|
||||||
case ms % factors["y"]:
|
// easier to read 90d than 12w6d.
|
||||||
unit = "y"
|
f("y", 1000*60*60*24*365, true)
|
||||||
case ms % factors["w"]:
|
f("w", 1000*60*60*24*7, true)
|
||||||
unit = "w"
|
|
||||||
case ms % factors["d"]:
|
f("d", 1000*60*60*24, false)
|
||||||
unit = "d"
|
f("h", 1000*60*60, false)
|
||||||
case ms % factors["h"]:
|
f("m", 1000*60, false)
|
||||||
unit = "h"
|
f("s", 1000, false)
|
||||||
case ms % factors["m"]:
|
f("ms", 1, false)
|
||||||
unit = "m"
|
|
||||||
case ms % factors["s"]:
|
return r
|
||||||
unit = "s"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%v%v", ms/factors[unit], unit)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalYAML implements the yaml.Marshaler interface.
|
// MarshalYAML implements the yaml.Marshaler interface.
|
||||||
|
|||||||
2
vendor/github.com/spf13/afero/go.mod
сгенерированный
поставляемый
2
vendor/github.com/spf13/afero/go.mod
сгенерированный
поставляемый
@@ -3,7 +3,7 @@ module github.com/spf13/afero
|
|||||||
require (
|
require (
|
||||||
github.com/pkg/sftp v1.10.1
|
github.com/pkg/sftp v1.10.1
|
||||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586
|
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586
|
||||||
golang.org/x/text v0.3.0
|
golang.org/x/text v0.3.3
|
||||||
)
|
)
|
||||||
|
|
||||||
go 1.13
|
go 1.13
|
||||||
|
|||||||
9
vendor/github.com/spf13/afero/go.sum
сгенерированный
поставляемый
9
vendor/github.com/spf13/afero/go.sum
сгенерированный
поставляемый
@@ -1,3 +1,4 @@
|
|||||||
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
|
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
|
||||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
||||||
@@ -5,16 +6,24 @@ github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
|||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/sftp v1.10.1 h1:VasscCm72135zRysgrJDKsntdmPN+OuU3+nnHYA9wyc=
|
github.com/pkg/sftp v1.10.1 h1:VasscCm72135zRysgrJDKsntdmPN+OuU3+nnHYA9wyc=
|
||||||
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
|
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
|
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
|
||||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
|||||||
43
vendor/github.com/spf13/afero/memmap.go
сгенерированный
поставляемый
43
vendor/github.com/spf13/afero/memmap.go
сгенерированный
поставляемый
@@ -25,6 +25,8 @@ import (
|
|||||||
"github.com/spf13/afero/mem"
|
"github.com/spf13/afero/mem"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const chmodBits = os.ModePerm | os.ModeSetuid | os.ModeSetgid | os.ModeSticky // Only a subset of bits are allowed to be changed. Documented under os.Chmod()
|
||||||
|
|
||||||
type MemMapFs struct {
|
type MemMapFs struct {
|
||||||
mu sync.RWMutex
|
mu sync.RWMutex
|
||||||
data map[string]*mem.FileData
|
data map[string]*mem.FileData
|
||||||
@@ -40,7 +42,9 @@ func (m *MemMapFs) getData() map[string]*mem.FileData {
|
|||||||
m.data = make(map[string]*mem.FileData)
|
m.data = make(map[string]*mem.FileData)
|
||||||
// Root should always exist, right?
|
// Root should always exist, right?
|
||||||
// TODO: what about windows?
|
// TODO: what about windows?
|
||||||
m.data[FilePathSeparator] = mem.CreateDir(FilePathSeparator)
|
root := mem.CreateDir(FilePathSeparator)
|
||||||
|
mem.SetMode(root, os.ModeDir|0755)
|
||||||
|
m.data[FilePathSeparator] = root
|
||||||
})
|
})
|
||||||
return m.data
|
return m.data
|
||||||
}
|
}
|
||||||
@@ -52,7 +56,7 @@ func (m *MemMapFs) Create(name string) (File, error) {
|
|||||||
m.mu.Lock()
|
m.mu.Lock()
|
||||||
file := mem.CreateFile(name)
|
file := mem.CreateFile(name)
|
||||||
m.getData()[name] = file
|
m.getData()[name] = file
|
||||||
m.registerWithParent(file)
|
m.registerWithParent(file, 0)
|
||||||
m.mu.Unlock()
|
m.mu.Unlock()
|
||||||
return mem.NewFileHandle(file), nil
|
return mem.NewFileHandle(file), nil
|
||||||
}
|
}
|
||||||
@@ -83,14 +87,14 @@ func (m *MemMapFs) findParent(f *mem.FileData) *mem.FileData {
|
|||||||
return pfile
|
return pfile
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MemMapFs) registerWithParent(f *mem.FileData) {
|
func (m *MemMapFs) registerWithParent(f *mem.FileData, perm os.FileMode) {
|
||||||
if f == nil {
|
if f == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
parent := m.findParent(f)
|
parent := m.findParent(f)
|
||||||
if parent == nil {
|
if parent == nil {
|
||||||
pdir := filepath.Dir(filepath.Clean(f.Name()))
|
pdir := filepath.Dir(filepath.Clean(f.Name()))
|
||||||
err := m.lockfreeMkdir(pdir, 0777)
|
err := m.lockfreeMkdir(pdir, perm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//log.Println("Mkdir error:", err)
|
//log.Println("Mkdir error:", err)
|
||||||
return
|
return
|
||||||
@@ -119,13 +123,15 @@ func (m *MemMapFs) lockfreeMkdir(name string, perm os.FileMode) error {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
item := mem.CreateDir(name)
|
item := mem.CreateDir(name)
|
||||||
|
mem.SetMode(item, os.ModeDir|perm)
|
||||||
m.getData()[name] = item
|
m.getData()[name] = item
|
||||||
m.registerWithParent(item)
|
m.registerWithParent(item, perm)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {
|
func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {
|
||||||
|
perm &= chmodBits
|
||||||
name = normalizePath(name)
|
name = normalizePath(name)
|
||||||
|
|
||||||
m.mu.RLock()
|
m.mu.RLock()
|
||||||
@@ -137,13 +143,12 @@ func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {
|
|||||||
|
|
||||||
m.mu.Lock()
|
m.mu.Lock()
|
||||||
item := mem.CreateDir(name)
|
item := mem.CreateDir(name)
|
||||||
|
mem.SetMode(item, os.ModeDir|perm)
|
||||||
m.getData()[name] = item
|
m.getData()[name] = item
|
||||||
m.registerWithParent(item)
|
m.registerWithParent(item, perm)
|
||||||
m.mu.Unlock()
|
m.mu.Unlock()
|
||||||
|
|
||||||
m.Chmod(name, perm|os.ModeDir)
|
return m.setFileMode(name, perm|os.ModeDir)
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MemMapFs) MkdirAll(path string, perm os.FileMode) error {
|
func (m *MemMapFs) MkdirAll(path string, perm os.FileMode) error {
|
||||||
@@ -210,6 +215,7 @@ func (m *MemMapFs) lockfreeOpen(name string) (*mem.FileData, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
|
func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
|
||||||
|
perm &= chmodBits
|
||||||
chmod := false
|
chmod := false
|
||||||
file, err := m.openWrite(name)
|
file, err := m.openWrite(name)
|
||||||
if err == nil && (flag&os.O_EXCL > 0) {
|
if err == nil && (flag&os.O_EXCL > 0) {
|
||||||
@@ -240,7 +246,7 @@ func (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, erro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if chmod {
|
if chmod {
|
||||||
m.Chmod(name, perm)
|
return file, m.setFileMode(name, perm)
|
||||||
}
|
}
|
||||||
return file, nil
|
return file, nil
|
||||||
}
|
}
|
||||||
@@ -302,7 +308,7 @@ func (m *MemMapFs) Rename(oldname, newname string) error {
|
|||||||
delete(m.getData(), oldname)
|
delete(m.getData(), oldname)
|
||||||
mem.ChangeFileName(fileData, newname)
|
mem.ChangeFileName(fileData, newname)
|
||||||
m.getData()[newname] = fileData
|
m.getData()[newname] = fileData
|
||||||
m.registerWithParent(fileData)
|
m.registerWithParent(fileData, 0)
|
||||||
m.mu.Unlock()
|
m.mu.Unlock()
|
||||||
m.mu.RLock()
|
m.mu.RLock()
|
||||||
} else {
|
} else {
|
||||||
@@ -321,6 +327,21 @@ func (m *MemMapFs) Stat(name string) (os.FileInfo, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *MemMapFs) Chmod(name string, mode os.FileMode) error {
|
func (m *MemMapFs) Chmod(name string, mode os.FileMode) error {
|
||||||
|
mode &= chmodBits
|
||||||
|
|
||||||
|
m.mu.RLock()
|
||||||
|
f, ok := m.getData()[name]
|
||||||
|
m.mu.RUnlock()
|
||||||
|
if !ok {
|
||||||
|
return &os.PathError{Op: "chmod", Path: name, Err: ErrFileNotFound}
|
||||||
|
}
|
||||||
|
prevOtherBits := mem.GetFileInfo(f).Mode() & ^chmodBits
|
||||||
|
|
||||||
|
mode = prevOtherBits | mode
|
||||||
|
return m.setFileMode(name, mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MemMapFs) setFileMode(name string, mode os.FileMode) error {
|
||||||
name = normalizePath(name)
|
name = normalizePath(name)
|
||||||
|
|
||||||
m.mu.RLock()
|
m.mu.RLock()
|
||||||
|
|||||||
74
vendor/github.com/stretchr/objx/accessors.go
сгенерированный
поставляемый
74
vendor/github.com/stretchr/objx/accessors.go
сгенерированный
поставляемый
@@ -1,6 +1,7 @@
|
|||||||
package objx
|
package objx
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -16,11 +17,18 @@ const (
|
|||||||
// arrayAccesRegexString is the regex used to extract the array number
|
// arrayAccesRegexString is the regex used to extract the array number
|
||||||
// from the access path
|
// from the access path
|
||||||
arrayAccesRegexString = `^(.+)\[([0-9]+)\]$`
|
arrayAccesRegexString = `^(.+)\[([0-9]+)\]$`
|
||||||
|
|
||||||
|
// mapAccessRegexString is the regex used to extract the map key
|
||||||
|
// from the access path
|
||||||
|
mapAccessRegexString = `^([^\[]*)\[([^\]]+)\](.*)$`
|
||||||
)
|
)
|
||||||
|
|
||||||
// arrayAccesRegex is the compiled arrayAccesRegexString
|
// arrayAccesRegex is the compiled arrayAccesRegexString
|
||||||
var arrayAccesRegex = regexp.MustCompile(arrayAccesRegexString)
|
var arrayAccesRegex = regexp.MustCompile(arrayAccesRegexString)
|
||||||
|
|
||||||
|
// mapAccessRegex is the compiled mapAccessRegexString
|
||||||
|
var mapAccessRegex = regexp.MustCompile(mapAccessRegexString)
|
||||||
|
|
||||||
// Get gets the value using the specified selector and
|
// Get gets the value using the specified selector and
|
||||||
// returns it inside a new Obj object.
|
// returns it inside a new Obj object.
|
||||||
//
|
//
|
||||||
@@ -70,13 +78,45 @@ func getIndex(s string) (int, string) {
|
|||||||
return -1, s
|
return -1, s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getKey returns the key which is held in s by two brackets.
|
||||||
|
// It also returns the next selector.
|
||||||
|
func getKey(s string) (string, string) {
|
||||||
|
selSegs := strings.SplitN(s, PathSeparator, 2)
|
||||||
|
thisSel := selSegs[0]
|
||||||
|
nextSel := ""
|
||||||
|
|
||||||
|
if len(selSegs) > 1 {
|
||||||
|
nextSel = selSegs[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
mapMatches := mapAccessRegex.FindStringSubmatch(s)
|
||||||
|
if len(mapMatches) > 0 {
|
||||||
|
if _, err := strconv.Atoi(mapMatches[2]); err != nil {
|
||||||
|
thisSel = mapMatches[1]
|
||||||
|
nextSel = "[" + mapMatches[2] + "]" + mapMatches[3]
|
||||||
|
|
||||||
|
if thisSel == "" {
|
||||||
|
thisSel = mapMatches[2]
|
||||||
|
nextSel = mapMatches[3]
|
||||||
|
}
|
||||||
|
|
||||||
|
if nextSel == "" {
|
||||||
|
selSegs = []string{"", ""}
|
||||||
|
} else if nextSel[0] == '.' {
|
||||||
|
nextSel = nextSel[1:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return thisSel, nextSel
|
||||||
|
}
|
||||||
|
|
||||||
// access accesses the object using the selector and performs the
|
// access accesses the object using the selector and performs the
|
||||||
// appropriate action.
|
// appropriate action.
|
||||||
func access(current interface{}, selector string, value interface{}, isSet bool) interface{} {
|
func access(current interface{}, selector string, value interface{}, isSet bool) interface{} {
|
||||||
selSegs := strings.SplitN(selector, PathSeparator, 2)
|
thisSel, nextSel := getKey(selector)
|
||||||
thisSel := selSegs[0]
|
|
||||||
index := -1
|
|
||||||
|
|
||||||
|
index := -1
|
||||||
if strings.Contains(thisSel, "[") {
|
if strings.Contains(thisSel, "[") {
|
||||||
index, thisSel = getIndex(thisSel)
|
index, thisSel = getIndex(thisSel)
|
||||||
}
|
}
|
||||||
@@ -88,7 +128,7 @@ func access(current interface{}, selector string, value interface{}, isSet bool)
|
|||||||
switch current.(type) {
|
switch current.(type) {
|
||||||
case map[string]interface{}:
|
case map[string]interface{}:
|
||||||
curMSI := current.(map[string]interface{})
|
curMSI := current.(map[string]interface{})
|
||||||
if len(selSegs) <= 1 && isSet {
|
if nextSel == "" && isSet {
|
||||||
curMSI[thisSel] = value
|
curMSI[thisSel] = value
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -102,9 +142,10 @@ func access(current interface{}, selector string, value interface{}, isSet bool)
|
|||||||
default:
|
default:
|
||||||
current = nil
|
current = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// do we need to access the item of an array?
|
// do we need to access the item of an array?
|
||||||
if index > -1 {
|
if index > -1 {
|
||||||
if array, ok := current.([]interface{}); ok {
|
if array, ok := interSlice(current); ok {
|
||||||
if index < len(array) {
|
if index < len(array) {
|
||||||
current = array[index]
|
current = array[index]
|
||||||
} else {
|
} else {
|
||||||
@@ -112,8 +153,27 @@ func access(current interface{}, selector string, value interface{}, isSet bool)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(selSegs) > 1 {
|
if nextSel != "" {
|
||||||
current = access(current, selSegs[1], value, isSet)
|
current = access(current, nextSel, value, isSet)
|
||||||
}
|
}
|
||||||
return current
|
return current
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func interSlice(slice interface{}) ([]interface{}, bool) {
|
||||||
|
if array, ok := slice.([]interface{}); ok {
|
||||||
|
return array, ok
|
||||||
|
}
|
||||||
|
|
||||||
|
s := reflect.ValueOf(slice)
|
||||||
|
if s.Kind() != reflect.Slice {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
|
||||||
|
ret := make([]interface{}, s.Len())
|
||||||
|
|
||||||
|
for i := 0; i < s.Len(); i++ {
|
||||||
|
ret[i] = s.Index(i).Interface()
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret, true
|
||||||
|
}
|
||||||
|
|||||||
22
vendor/github.com/throttled/throttled/.travis.yml
сгенерированный
поставляемый
22
vendor/github.com/throttled/throttled/.travis.yml
сгенерированный
поставляемый
@@ -1,22 +0,0 @@
|
|||||||
sudo: false
|
|
||||||
|
|
||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- "1.9"
|
|
||||||
- "1.10"
|
|
||||||
- "1.11"
|
|
||||||
# 1.x builds the latest in that series. Also try to add other versions here
|
|
||||||
# as they come up so that we're pretty sure that we're maintaining
|
|
||||||
# backwards compatibility.
|
|
||||||
- 1.x
|
|
||||||
|
|
||||||
notifications:
|
|
||||||
email: false
|
|
||||||
|
|
||||||
services:
|
|
||||||
- redis-server
|
|
||||||
|
|
||||||
install: make get-deps
|
|
||||||
|
|
||||||
script: make
|
|
||||||
4
vendor/github.com/throttled/throttled/CHANGELOG.md
сгенерированный
поставляемый
4
vendor/github.com/throttled/throttled/CHANGELOG.md
сгенерированный
поставляемый
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
## 2.2.5 - 2020-08-01
|
||||||
|
* [#67](https://github.com/throttled/throttled/pull/67) Bug fix: Fix TTL in `SetIfNotExistsWithTTL`
|
||||||
|
* [#74](https://github.com/throttled/throttled/pull/74) Bug fix: Always select DB for Redigo store, even when DB is configured to 0
|
||||||
|
|
||||||
## 2.2.4 - 2018-11-19
|
## 2.2.4 - 2018-11-19
|
||||||
* [#52](https://github.com/throttled/throttled/pull/52) Handle the possibility of `RemoteAddr` without port in `VaryBy`
|
* [#52](https://github.com/throttled/throttled/pull/52) Handle the possibility of `RemoteAddr` without port in `VaryBy`
|
||||||
|
|
||||||
|
|||||||
39
vendor/github.com/throttled/throttled/Makefile
сгенерированный
поставляемый
39
vendor/github.com/throttled/throttled/Makefile
сгенерированный
поставляемый
@@ -1,30 +1,29 @@
|
|||||||
|
.PHONY: all
|
||||||
|
all: build test vet fmt lint
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
build:
|
||||||
|
go build ./...
|
||||||
|
|
||||||
.PHONY: test test-cover bench lint get-deps .go-test .go-test-cover
|
.PHONY: fmt
|
||||||
|
fmt:
|
||||||
test: .go-test bench lint
|
scripts/check_gofmt.sh
|
||||||
|
|
||||||
test-cover: .go-test-cover bench lint
|
|
||||||
|
|
||||||
bench:
|
|
||||||
go test -race -bench=. -cpu=1,2,4
|
|
||||||
|
|
||||||
lint:
|
|
||||||
gofmt -l .
|
|
||||||
go vet ./...
|
|
||||||
which golint # Fail if golint doesn't exist
|
|
||||||
-golint . # Don't fail on golint warnings themselves
|
|
||||||
-golint store # Don't fail on golint warnings themselves
|
|
||||||
|
|
||||||
|
.PHONY: get-deps
|
||||||
get-deps:
|
get-deps:
|
||||||
|
go get github.com/go-redis/redis
|
||||||
go get github.com/gomodule/redigo/redis
|
go get github.com/gomodule/redigo/redis
|
||||||
go get github.com/hashicorp/golang-lru
|
go get github.com/hashicorp/golang-lru
|
||||||
go get golang.org/x/lint/golint
|
go get golang.org/x/lint/golint
|
||||||
go get github.com/go-redis/redis
|
|
||||||
|
|
||||||
.go-test:
|
.PHONY: lint
|
||||||
|
lint:
|
||||||
|
golint -set_exit_status ./...
|
||||||
|
|
||||||
|
.PHONY: test
|
||||||
|
test:
|
||||||
go test ./...
|
go test ./...
|
||||||
|
|
||||||
.go-test-cover:
|
.PHONY: vet
|
||||||
go test -coverprofile=throttled.coverage.out .
|
vet:
|
||||||
go test -coverprofile=store.coverage.out ./store
|
go vet ./...
|
||||||
|
|||||||
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Ссылка в новой задаче
Block a user