Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5684f8cb6b | ||
|
|
f7304481b1 |
@@ -1,5 +1,9 @@
|
||||
## main / unreleased
|
||||
|
||||
## v1.3.1 / 2022-02-02
|
||||
* [BUGFIX] Fixed panic when using etcd as ring's kvstore [#1260](https://github.com/grafana/tempo/pull/1260) (@mapno)
|
||||
|
||||
## v1.3.0 / 2022-01-24
|
||||
* [FEATURE]: Add support for [inline environments](https://tanka.dev/inline-environments). [#1184](https://github.com/grafana/tempo/pull/1184) @irizzant
|
||||
* [CHANGE] Search: Add new per-tenant limit `max_bytes_per_tag_values_query` to limit the size of tag-values response. [#1068](https://github.com/grafana/tempo/pull/1068) (@annanay25)
|
||||
* [CHANGE] Reduce MaxSearchBytesPerTrace `ingester.max-search-bytes-per-trace` default to 5KB [#1129](https://github.com/grafana/tempo/pull/1129) @annanay25
|
||||
|
||||
@@ -15,7 +15,7 @@ require (
|
||||
cloud.google.com/go/functions v1.0.0 // indirect
|
||||
cloud.google.com/go/kms v1.1.0 // indirect
|
||||
github.com/google/uuid v1.3.0
|
||||
github.com/grafana/dskit v0.0.0-20211021180445-3bd016e9d7f1
|
||||
github.com/grafana/dskit v0.0.0-20220112093026-95274ccc858d
|
||||
github.com/weaveworks/common v0.0.0-20210913144402-035033b78a78
|
||||
)
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAV
|
||||
cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM=
|
||||
cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY=
|
||||
cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ=
|
||||
cloud.google.com/go v0.92.2/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI=
|
||||
cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI=
|
||||
cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4=
|
||||
cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=
|
||||
@@ -62,6 +63,7 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
|
||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||
cloud.google.com/go/storage v1.18.2 h1:5NQw6tOn3eMm0oE8vTkfjau18kjL79FlMjy/CHTpmoY=
|
||||
cloud.google.com/go/storage v1.18.2/go.mod h1:AiIj7BWXyhO5gGVmYJ+S8tbkCx3yb0IMjua8Aw4naVM=
|
||||
cloud.google.com/go/trace v0.1.0/go.mod h1:wxEwsoeRVPbeSkt7ZC9nWCgmoKQRAoySN7XHW2AmI7g=
|
||||
code.cloudfoundry.org/bytefmt v0.0.0-20190710193110-1eb035ffe2b6/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc=
|
||||
collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE=
|
||||
contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs=
|
||||
@@ -85,6 +87,7 @@ github.com/Azure/azure-sdk-for-go v51.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9mo
|
||||
github.com/Azure/azure-sdk-for-go v52.5.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/azure-sdk-for-go v54.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/azure-sdk-for-go v58.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/azure-sdk-for-go v59.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0=
|
||||
github.com/Azure/azure-storage-blob-go v0.13.0 h1:lgWHvFh+UYBNVQLFHXkvul2f6yOPA9PIH82RTG2cSwc=
|
||||
github.com/Azure/azure-storage-blob-go v0.13.0/go.mod h1:pA9kNqtjUeQF2zOSu4s//nUdBD+e64lEuc4sVnuOfNs=
|
||||
@@ -192,6 +195,7 @@ github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
|
||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||
github.com/QcloudApi/qcloud_sign_golang v0.0.0-20141224014652-e4130a326409/go.mod h1:1pk82RBxDY/JZnPQrtqHlUFfCctgdorsd9M06fMynOM=
|
||||
github.com/SAP/go-hdb v0.14.1/go.mod h1:7fdQLVC2lER3urZLjZCm0AuMQfApof92n3aylBPEkMo=
|
||||
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
|
||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
||||
@@ -276,6 +280,7 @@ github.com/aws/aws-sdk-go v1.40.11/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm
|
||||
github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
||||
github.com/aws/aws-sdk-go v1.42.8/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
||||
github.com/aws/aws-sdk-go v1.42.9/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
||||
github.com/aws/aws-sdk-go v1.42.16/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
||||
github.com/aws/aws-sdk-go v1.42.21 h1:ffd+rwCDBiJMYqNssW+oe9uPes4gQNfbYH9vH2Y1fo0=
|
||||
github.com/aws/aws-sdk-go v1.42.21/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
||||
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
||||
@@ -294,6 +299,7 @@ github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g=
|
||||
github.com/aws/smithy-go v1.5.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
||||
github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
||||
github.com/baidubce/bce-sdk-go v0.9.81/go.mod h1:zbYJMQwE4IZuyrJiFO8tO8NbtYiKTFTbwh4eIsqjVdg=
|
||||
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc=
|
||||
github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg=
|
||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
||||
@@ -494,6 +500,7 @@ github.com/cortexproject/cortex v1.6.1-0.20210215155036-dfededd9f331/go.mod h1:8
|
||||
github.com/cortexproject/cortex v1.7.1-0.20210224085859-66d6fb5b0d42/go.mod h1:u2dxcHInYbe45wxhLoWVdlFJyDhXewsMcxtnbq/QbH4=
|
||||
github.com/cortexproject/cortex v1.7.1-0.20210316085356-3fedc1108a49/go.mod h1:/DBOW8TzYBTE/U+O7Whs7i7E2eeeZl1iRVDtIqxn5kg=
|
||||
github.com/cortexproject/cortex v1.8.1-0.20210422151339-cf1c444e0905/go.mod h1:xxm4/CLvTmDxwE7yXwtClR4dIvkG4S09o5DygPOgc1U=
|
||||
github.com/cortexproject/cortex v1.10.1-0.20211124141505-4e9fc3a2b5ab/go.mod h1:njSBkQ1wUNx9X4knV/j65Pi4ItlJXX4QwXRKoMflJd8=
|
||||
github.com/cortexproject/cortex v1.10.1-0.20211214110443-07d6cfc4eb84 h1:hWWucked7CXd1ySo4OaZttwGJST57fq/g9FNsLgotlY=
|
||||
github.com/cortexproject/cortex v1.10.1-0.20211214110443-07d6cfc4eb84/go.mod h1:YVKUfeEvo1Nm9xd3LTU6+Rl9u9jglFP/bUPMFy7I+OA=
|
||||
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
|
||||
@@ -557,6 +564,7 @@ github.com/digitalocean/godo v1.57.0/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2x
|
||||
github.com/digitalocean/godo v1.58.0/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2xcz76ulEJRU=
|
||||
github.com/digitalocean/godo v1.60.0/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2xcz76ulEJRU=
|
||||
github.com/digitalocean/godo v1.71.0/go.mod h1:GBmu8MkjZmNARE7IXRPmkbbnocNN8+uBm0xbEVw2LCs=
|
||||
github.com/digitalocean/godo v1.72.0/go.mod h1:GBmu8MkjZmNARE7IXRPmkbbnocNN8+uBm0xbEVw2LCs=
|
||||
github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
|
||||
github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE=
|
||||
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
|
||||
@@ -571,6 +579,7 @@ github.com/docker/docker v20.10.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05b
|
||||
github.com/docker/docker v20.10.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v20.10.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v20.10.10+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v20.10.11+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
|
||||
github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
|
||||
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
|
||||
@@ -591,8 +600,10 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1
|
||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
||||
github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts=
|
||||
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
|
||||
github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw=
|
||||
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
|
||||
github.com/efficientgo/e2e v0.11.2-0.20211027134903-67d538984a47/go.mod h1:vDnF4AAEZmO0mvyFIATeDJPFaSRM7ywaOnKd61zaSoE=
|
||||
github.com/efficientgo/tools/core v0.0.0-20210129205121-421d0828c9a6/go.mod h1:OmVcnJopJL8d3X3sSXTiypGoUSgFq1aDGmlrdi9dn/M=
|
||||
github.com/efficientgo/tools/core v0.0.0-20210829154005-c7bad8450208/go.mod h1:OmVcnJopJL8d3X3sSXTiypGoUSgFq1aDGmlrdi9dn/M=
|
||||
github.com/efficientgo/tools/extkingpin v0.0.0-20210609125236-d73259166f20/go.mod h1:ZV0utlglOczUWv3ih2AbqPSoLoFzdplUYxwV62eZi6Q=
|
||||
github.com/elastic/go-sysinfo v1.0.1/go.mod h1:O/D5m1VpYLwGjCYzEt63g3Z1uO3jXfwyzzjiW90t8cY=
|
||||
github.com/elastic/go-sysinfo v1.1.1/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0=
|
||||
@@ -1035,8 +1046,10 @@ github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/z
|
||||
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/grafana/dskit v0.0.0-20211021180445-3bd016e9d7f1 h1:Qf+/W3Tup0nO21tgJmO14WJK0yyrm4L2UJipZP+Zoow=
|
||||
github.com/grafana/dskit v0.0.0-20211021180445-3bd016e9d7f1/go.mod h1:uPG2nyK4CtgNDmWv7qyzYcdI+S90kHHRWvHnBtEMBXM=
|
||||
github.com/grafana/dskit v0.0.0-20220112093026-95274ccc858d h1:YwUtZIQFjlH6e2b5dFLfW1h/vTkTXNkZqv9qeU8b5h0=
|
||||
github.com/grafana/dskit v0.0.0-20220112093026-95274ccc858d/go.mod h1:M0/dlftwBvH7+hdNNpjMa/CUXD7gsew67mbkCuDlFXE=
|
||||
github.com/grafana/e2e v0.1.0/go.mod h1:+26VJWpczg2OU3D0537acnHSHzhJORpxOs6F+M27tZo=
|
||||
github.com/grafana/gocql v0.0.0-20200605141915-ba5dc39ece85/go.mod h1:crI9WX6p0IhrqB+DqIUHulRW853PaNFf7o4UprV//3I=
|
||||
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||
@@ -1747,8 +1760,9 @@ github.com/prometheus/prometheus v1.8.2-0.20210215121130-6f488061dfb4/go.mod h1:
|
||||
github.com/prometheus/prometheus v1.8.2-0.20210315220929-1cba1741828b/go.mod h1:MS/bpdil77lPbfQeKk6OqVQ9OLnpN3Rszd0hka0EOWE=
|
||||
github.com/prometheus/prometheus v1.8.2-0.20210324152458-c7a62b95cea0/go.mod h1:sf7j/iAbhZahjeC0s3wwMmp5dksrJ/Za1UKdR+j6Hmw=
|
||||
github.com/prometheus/prometheus v1.8.2-0.20210519120135-d95b0972505f/go.mod h1:yUzDYX0hIYu5YVHmpj/JXLOclB6QcLNDgmagD3FUnSU=
|
||||
github.com/prometheus/prometheus v1.8.2-0.20211119115433-692a54649ed7 h1:8rwRA5BKEAWtawaP4ozroDm3xMDrp9POAoT3HkQ3ZHw=
|
||||
github.com/prometheus/prometheus v1.8.2-0.20211119115433-692a54649ed7/go.mod h1:outfylaI89+D5IO87TRPRmxfucIobTO3Rb0l2TKqpj0=
|
||||
github.com/prometheus/prometheus v1.8.2-0.20211217191541-41f1a8125e66 h1:Y4Cq+kBfu+yc4dbCUn4syvC2/F6rYhg1UoeyudhPq2o=
|
||||
github.com/prometheus/prometheus v1.8.2-0.20211217191541-41f1a8125e66/go.mod h1:bBByfKZ/sC+obk4CX3GpJ2Ul+fKZGtXneLYFG8C//nc=
|
||||
github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/rabbitmq/amqp091-go v1.1.0/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM=
|
||||
@@ -1896,6 +1910,9 @@ github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG
|
||||
github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
||||
github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.194/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.194/go.mod h1:yrBKWhChnDqNz1xuXdSbWXG56XawEq0G5j1lg4VwBD4=
|
||||
github.com/tencentyun/cos-go-sdk-v5 v0.7.31/go.mod h1:4E4+bQ2gBVJcgEC9Cufwylio4mXOct2iu05WjgEBx1o=
|
||||
github.com/thanos-io/thanos v0.8.1-0.20200109203923-552ffa4c1a0d/go.mod h1:usT/TxtJQ7DzinTt+G9kinDQmRS5sxwu0unVKZ9vdcw=
|
||||
github.com/thanos-io/thanos v0.13.1-0.20200731083140-69b87607decf/go.mod h1:G8caR6G7pSDreRDvFm9wFuyjEBztmr8Ag3kBYpa/fEc=
|
||||
github.com/thanos-io/thanos v0.13.1-0.20200807203500-9b578afb4763/go.mod h1:KyW0a93tsh7v4hXAwo2CVAIRYuZT1Kkf4e04gisQjAg=
|
||||
@@ -1906,8 +1923,9 @@ github.com/thanos-io/thanos v0.13.1-0.20210204123931-82545cdd16fe/go.mod h1:ZLDG
|
||||
github.com/thanos-io/thanos v0.13.1-0.20210224074000-659446cab117/go.mod h1:kdqFpzdkveIKpNNECVJd75RPvgsAifQgJymwCdfev1w=
|
||||
github.com/thanos-io/thanos v0.13.1-0.20210226164558-03dace0a1aa1/go.mod h1:gMCy4oCteKTT7VuXVvXLTPGzzjovX1VPE5p+HgL1hyU=
|
||||
github.com/thanos-io/thanos v0.13.1-0.20210401085038-d7dff0c84d17/go.mod h1:zU8KqE+6A+HksK4wiep8e/3UvCZLm+Wrw9AqZGaAm9k=
|
||||
github.com/thanos-io/thanos v0.22.0 h1:bHTzC0ZaP5rBJ2pOeJ73+hO/p3U4tSshJoR3pumM6sA=
|
||||
github.com/thanos-io/thanos v0.22.0/go.mod h1:SZDWz3phcUcBr4MYFoPFRvl+Z9Nbi45HlwQlwSZSt+Q=
|
||||
github.com/thanos-io/thanos v0.24.0 h1:wG1y9Kx1GTIPA6wJ7EVBaoTEB7BKQfufaZEVyNQFrD8=
|
||||
github.com/thanos-io/thanos v0.24.0/go.mod h1:sfnKJG7cDA41ixNL4gsTJEa3w9Qt8lwAjw+dqRMSDG0=
|
||||
github.com/themihai/gomemcache v0.0.0-20180902122335-24332e2d58ab h1:7ZR3hmisBWw77ZpO1/o86g+JV3VKlk3d48jopJxzTjU=
|
||||
github.com/themihai/gomemcache v0.0.0-20180902122335-24332e2d58ab/go.mod h1:eheTFp954zcWZXCU8d0AT76ftsQOTo4DTqkN/h3k1MY=
|
||||
github.com/tidwall/pretty v0.0.0-20180105212114-65a9db5fad51/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
|
||||
@@ -2025,6 +2043,7 @@ go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3C
|
||||
go.etcd.io/etcd v3.3.25+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI=
|
||||
go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw=
|
||||
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
|
||||
go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
|
||||
go.etcd.io/etcd/client/v2 v2.305.0-alpha.0/go.mod h1:kdV+xzCJ3luEBSIeQyB/OEKkWKd8Zkux4sbDeANrosU=
|
||||
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
|
||||
@@ -2753,11 +2772,13 @@ google.golang.org/genproto v0.0.0-20211016002631-37fc39342514/go.mod h1:5CzLGKJ6
|
||||
google.golang.org/genproto v0.0.0-20211018162055-cf77aa76bad2/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211021150943-2b146023228c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0 h1:c7yRRmuQiVMo+YppNj5MUREXUyc2lPo3DrtYMwaWQ28=
|
||||
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0=
|
||||
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
|
||||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
||||
google.golang.org/grpc/examples v0.0.0-20211119005141-f45e61797429/go.mod h1:gID3PKrg7pWKntu9Ss6zTLJ0ttC0X9IHgREOCZwbCVU=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
|
||||
@@ -25,7 +25,8 @@ require (
|
||||
github.com/google/go-cmp v0.5.6
|
||||
github.com/google/uuid v1.3.0
|
||||
github.com/gorilla/mux v1.8.0
|
||||
github.com/grafana/dskit v0.0.0-20211021180445-3bd016e9d7f1
|
||||
github.com/grafana/dskit v0.0.0-20220112093026-95274ccc858d
|
||||
github.com/grafana/e2e v0.1.0
|
||||
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645
|
||||
github.com/hashicorp/go-hclog v1.0.0
|
||||
github.com/hashicorp/go-plugin v1.4.3
|
||||
@@ -49,13 +50,13 @@ require (
|
||||
github.com/prometheus/client_golang v1.11.0
|
||||
github.com/prometheus/client_model v0.2.0
|
||||
github.com/prometheus/common v0.32.1
|
||||
github.com/prometheus/prometheus v1.8.2-0.20211119115433-692a54649ed7
|
||||
github.com/prometheus/prometheus v1.8.2-0.20211217191541-41f1a8125e66
|
||||
github.com/prometheus/statsd_exporter v0.21.0 // indirect
|
||||
github.com/segmentio/fasthash v0.0.0-20180216231524-a72b379d632e
|
||||
github.com/sirupsen/logrus v1.8.1
|
||||
github.com/spf13/viper v1.9.0
|
||||
github.com/stretchr/testify v1.7.0
|
||||
github.com/thanos-io/thanos v0.22.0
|
||||
github.com/thanos-io/thanos v0.24.0
|
||||
github.com/uber-go/atomic v1.4.0
|
||||
github.com/uber/jaeger-client-go v2.29.1+incompatible
|
||||
github.com/weaveworks/common v0.0.0-20210913144402-035033b78a78
|
||||
@@ -254,7 +255,7 @@ require (
|
||||
github.com/xdg-go/stringprep v1.0.2 // indirect
|
||||
go.etcd.io/bbolt v1.3.6 // indirect
|
||||
go.etcd.io/etcd v3.3.25+incompatible // indirect
|
||||
go.etcd.io/etcd/api/v3 v3.5.0 // indirect
|
||||
go.etcd.io/etcd/api/v3 v3.5.1 // indirect
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.0 // indirect
|
||||
go.etcd.io/etcd/client/v3 v3.5.0 // indirect
|
||||
go.mongodb.org/mongo-driver v1.7.5 // indirect
|
||||
@@ -313,3 +314,8 @@ replace github.com/thanos-io/thanos v0.22.0 => github.com/thanos-io/thanos v0.19
|
||||
// Some funtionalities of the collector have been made internal and it's more difficult to build and configure pipelines in the newer versions.
|
||||
// This is a temporary solution while a new configuration design is discussed for the collector (ref: https://github.com/open-telemetry/opentelemetry-collector/issues/3482).
|
||||
replace go.opentelemetry.io/collector => github.com/grafana/opentelemetry-collector v0.4.1-0.20211201123047-86905635e8f8
|
||||
|
||||
// these have been added due to cortex incompatibilies. they can be removed once we drop cortex as a dependency
|
||||
replace github.com/grafana/dskit => github.com/grafana/dskit v0.0.0-20211021180445-3bd016e9d7f1
|
||||
|
||||
replace github.com/prometheus/prometheus => github.com/prometheus/prometheus v1.8.2-0.20211119115433-692a54649ed7
|
||||
|
||||
@@ -2,13 +2,11 @@ bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxo
|
||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
|
||||
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
|
||||
cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg=
|
||||
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
|
||||
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
|
||||
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
|
||||
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
|
||||
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
|
||||
cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw=
|
||||
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
|
||||
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
|
||||
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
|
||||
@@ -37,7 +35,6 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf
|
||||
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
|
||||
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
||||
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
||||
cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o=
|
||||
cloud.google.com/go/bigtable v1.3.0 h1:PAplkJLXheOLlK5PPyy4/HXtPzHn+1/LaYDWIeGxnio=
|
||||
cloud.google.com/go/bigtable v1.3.0/go.mod h1:z5EyKrPE8OQmeg4h5MNdKvuSnI9CCT49Ki3f23aBzio=
|
||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||
@@ -64,7 +61,6 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7
|
||||
github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U=
|
||||
github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k=
|
||||
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/azure-sdk-for-go v41.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/azure-sdk-for-go v58.3.0+incompatible h1:lb9OWePNuJMiibdxg9XvdbiOldR0Yifge37L4LoOxIs=
|
||||
github.com/Azure/azure-sdk-for-go v58.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/azure-storage-blob-go v0.13.0 h1:lgWHvFh+UYBNVQLFHXkvul2f6yOPA9PIH82RTG2cSwc=
|
||||
@@ -75,16 +71,11 @@ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg6
|
||||
github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
|
||||
github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
|
||||
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
|
||||
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
|
||||
github.com/Azure/go-autorest/autorest v0.10.0/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630=
|
||||
github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
|
||||
github.com/Azure/go-autorest/autorest v0.11.9/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw=
|
||||
github.com/Azure/go-autorest/autorest v0.11.17/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw=
|
||||
github.com/Azure/go-autorest/autorest v0.11.22 h1:bXiQwDjrRmBQOE67bwlvUKAC1EU1yZTPQ38c+bstZws=
|
||||
github.com/Azure/go-autorest/autorest v0.11.22/go.mod h1:BAWYUWGPEtKPzjVkp0Q6an0MJcJDsoh5Z1BFAEFs4Xs=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.2/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
|
||||
@@ -97,27 +88,18 @@ github.com/Azure/go-autorest/autorest/azure/auth v0.5.8 h1:TzPg6B6fTZ0G1zBf3T54a
|
||||
github.com/Azure/go-autorest/autorest/azure/auth v0.5.8/go.mod h1:kxyKZTSfKh8OVFWPAgOgQ/frrJgeYQJPyR5fLFmXko4=
|
||||
github.com/Azure/go-autorest/autorest/azure/cli v0.4.2 h1:dMOmEJfkLKW/7JsokJqkyoYSgmR08hi9KrhjZb+JALY=
|
||||
github.com/Azure/go-autorest/autorest/azure/cli v0.4.2/go.mod h1:7qkJkT+j6b+hIpzMOwPChJhTqS8VbsqqgULzMNRugoM=
|
||||
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
|
||||
github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
|
||||
github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
|
||||
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
|
||||
github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA=
|
||||
github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk=
|
||||
github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE=
|
||||
github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI=
|
||||
github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac=
|
||||
github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E=
|
||||
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
|
||||
github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
|
||||
github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg=
|
||||
github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
|
||||
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
||||
github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
|
||||
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
@@ -159,11 +141,9 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo
|
||||
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=
|
||||
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
|
||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||
github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||
github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
|
||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||
github.com/QcloudApi/qcloud_sign_golang v0.0.0-20141224014652-e4130a326409/go.mod h1:1pk82RBxDY/JZnPQrtqHlUFfCctgdorsd9M06fMynOM=
|
||||
@@ -202,11 +182,9 @@ github.com/alicebob/miniredis/v2 v2.14.3/go.mod h1:gquAfGbzn92jvtrSC69+6zZnwSODV
|
||||
github.com/aliyun/aliyun-oss-go-sdk v2.0.4+incompatible h1:EaK5256H3ELiyaq5O/Zwd6fnghD6DqmZDQmmzzJklUU=
|
||||
github.com/aliyun/aliyun-oss-go-sdk v2.0.4+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
|
||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||
github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q=
|
||||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||
github.com/antonmedv/expr v1.9.0/go.mod h1:5qsM3oLGDND7sDmQGDXHkYfkjYMUX14qsgqmHhwGEk8=
|
||||
github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ=
|
||||
github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0=
|
||||
github.com/apache/arrow/go/arrow v0.0.0-20200601151325-b2287a20f230/go.mod h1:QNYViu/X0HXDHw7m3KXzWSVXIbfUvJqBFe6Gj8/pYA0=
|
||||
github.com/apache/arrow/go/arrow v0.0.0-20200923215132-ac86123a3f01/go.mod h1:QNYViu/X0HXDHw7m3KXzWSVXIbfUvJqBFe6Gj8/pYA0=
|
||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
||||
@@ -217,7 +195,6 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC
|
||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||
github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs=
|
||||
github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||
github.com/armon/go-metrics v0.3.9 h1:O2sNqxBdvq8Eq5xmzljcYzAORli6RWCvEym4cJf9m18=
|
||||
github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
@@ -236,7 +213,6 @@ github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZo
|
||||
github.com/aws/aws-sdk-go v1.17.7/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 v1.29.16/go.mod h1:1KvfttTE3SPKMpo8g2c6jL3ZKfXtFvKscTgahTma5Xg=
|
||||
github.com/aws/aws-sdk-go v1.30.12/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
|
||||
github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
|
||||
github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
||||
github.com/aws/aws-sdk-go v1.38.68/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
||||
@@ -291,7 +267,6 @@ github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2y
|
||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
|
||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
||||
github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c=
|
||||
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
|
||||
github.com/bonitoo-io/go-sql-bigquery v0.3.4-1.4.0/go.mod h1:J4Y6YJm0qTWB9aFziB7cPeSyc6dOZFyJdteSeybVpXQ=
|
||||
github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
|
||||
github.com/bsm/sarama-cluster v2.1.13+incompatible/go.mod h1:r7ao+4tTNXvWm+VRpRJchr2kQhqxgmAp2iEX5W96gMM=
|
||||
@@ -304,7 +279,6 @@ github.com/cactus/go-statsd-client/statsd v0.0.0-20191106001114-12b4e2b38748/go.
|
||||
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
||||
github.com/casbin/casbin/v2 v2.31.6/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
|
||||
github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
|
||||
github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
||||
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
|
||||
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
||||
github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
|
||||
@@ -315,7 +289,6 @@ github.com/census-instrumentation/opencensus-proto v0.3.0 h1:t/LhUZLVitR1Ow2YOnd
|
||||
github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||
github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
|
||||
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
@@ -500,7 +473,6 @@ github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUn
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
||||
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||
github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||
github.com/dgryski/go-sip13 v0.0.0-20200911182023-62edffca9245/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||
github.com/dhui/dktest v0.3.0 h1:kwX5a7EkLcjo7VpsPQSYJcKGbXBXdjI9FGjuUj1jn6I=
|
||||
github.com/dhui/dktest v0.3.0/go.mod h1:cyzIUfGsBEbZ6BT7tnXqAShHSXCZhSNmFl70sZ7c1yc=
|
||||
@@ -556,7 +528,6 @@ github.com/efficientgo/tools/extkingpin v0.0.0-20210609125236-d73259166f20 h1:kM
|
||||
github.com/efficientgo/tools/extkingpin v0.0.0-20210609125236-d73259166f20/go.mod h1:ZV0utlglOczUWv3ih2AbqPSoLoFzdplUYxwV62eZi6Q=
|
||||
github.com/elastic/go-sysinfo v1.1.1/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0=
|
||||
github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU=
|
||||
github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
|
||||
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
|
||||
github.com/ema/qdisc v0.0.0-20190904071900-b82c76788043/go.mod h1:ix4kG2zvdUd8kEKSW0ZTr1XLks0epFpI4j745DXxlNE=
|
||||
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||
@@ -567,7 +538,6 @@ github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPO
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.6.2 h1:JiO+kJTpmYGjEodY7O1Zk8oZcNz1+f30UtwtXoFUPzE=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws=
|
||||
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/facette/natsort v0.0.0-20181210072756-2cd4dd1e2dcb h1:IT4JYU7k4ikYg1SCxNI1/Tieq/NFvh6dzLdgi7eu0tM=
|
||||
@@ -613,8 +583,6 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
|
||||
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
|
||||
github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
|
||||
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
|
||||
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
|
||||
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
|
||||
github.com/go-chi/chi v4.1.0+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
|
||||
github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs=
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
@@ -658,7 +626,6 @@ github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQH
|
||||
github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
|
||||
github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
|
||||
github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
|
||||
github.com/go-openapi/errors v0.19.4/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
|
||||
github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
|
||||
github.com/go-openapi/errors v0.19.7/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
|
||||
github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
|
||||
@@ -666,14 +633,12 @@ github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpX
|
||||
github.com/go-openapi/errors v0.20.0/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
|
||||
github.com/go-openapi/errors v0.20.1 h1:j23mMDtRxMwIobkpId7sWh7Ddcx4ivaoqUbfXx5P+a8=
|
||||
github.com/go-openapi/errors v0.20.1/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
|
||||
github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
|
||||
github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
|
||||
github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
|
||||
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
|
||||
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
|
||||
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||
github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
|
||||
github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
|
||||
github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
|
||||
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
|
||||
@@ -686,7 +651,6 @@ github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf
|
||||
github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
|
||||
github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs=
|
||||
github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI=
|
||||
github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk=
|
||||
github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY=
|
||||
github.com/go-openapi/loads v0.19.6/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc=
|
||||
github.com/go-openapi/loads v0.19.7/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc=
|
||||
@@ -703,13 +667,11 @@ github.com/go-openapi/runtime v0.19.24/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pt
|
||||
github.com/go-openapi/runtime v0.19.29/go.mod h1:BvrQtn6iVb2QmiVXRsFAm6ZCAZBpbVKFfN6QWCp582M=
|
||||
github.com/go-openapi/runtime v0.21.0 h1:giZ8eT26R+/rx6RX2MkYjZPY8vPYVKDhP/mOazrQHzM=
|
||||
github.com/go-openapi/runtime v0.21.0/go.mod h1:aQg+kaIQEn+A2CRSY1TxbM8+sT9g2V3aLc1FbIAnbbs=
|
||||
github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
|
||||
github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
|
||||
github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
|
||||
github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
|
||||
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
|
||||
github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
|
||||
github.com/go-openapi/spec v0.19.7/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
|
||||
github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
|
||||
github.com/go-openapi/spec v0.19.15/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU=
|
||||
github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU=
|
||||
@@ -731,7 +693,6 @@ github.com/go-openapi/strfmt v0.20.2/go.mod h1:43urheQI9dNtE5lTZQfuFJvjYJKPrxicA
|
||||
github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg=
|
||||
github.com/go-openapi/strfmt v0.21.1 h1:G6s2t5V5kGCHLVbSdZ/6lI8Wm4OzoPFkc3/cjAsKQrM=
|
||||
github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k=
|
||||
github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
|
||||
github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
|
||||
github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
|
||||
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||
@@ -746,7 +707,6 @@ github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/
|
||||
github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
|
||||
github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
|
||||
github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo=
|
||||
github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4=
|
||||
github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8=
|
||||
github.com/go-openapi/validate v0.19.12/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0waH08tGe6kAQ4=
|
||||
github.com/go-openapi/validate v0.19.15/go.mod h1:tbn/fdOwYHgrhPBzidZfJC2MIVvs9GA7monOmWBbeCI=
|
||||
@@ -817,7 +777,6 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
|
||||
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.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
||||
github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
||||
github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
||||
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
@@ -850,7 +809,6 @@ github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt
|
||||
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
|
||||
github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
|
||||
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
|
||||
github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
@@ -913,7 +871,6 @@ github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OI
|
||||
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20200417002340-c6e0a841f49a/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20200615235658-03e1cf38a040/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
@@ -941,13 +898,10 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m
|
||||
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
|
||||
github.com/googleapis/gax-go/v2 v2.1.1 h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU=
|
||||
github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
|
||||
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
||||
github.com/googleapis/gnostic v0.4.0/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU=
|
||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
||||
github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
|
||||
github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw=
|
||||
github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
|
||||
github.com/gophercloud/gophercloud v0.10.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss=
|
||||
github.com/gophercloud/gophercloud v0.23.0 h1:I3P10oKlGu3DHP9PrEWMr1ya+/+3Rc9uRHNkRZ9wO7g=
|
||||
github.com/gophercloud/gophercloud v0.23.0/go.mod h1:MRw6uyLj8uCGbIvBlqL7QW67t0QtNZnzydUzewo1Ioc=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
@@ -968,6 +922,8 @@ github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoA
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/grafana/dskit v0.0.0-20211021180445-3bd016e9d7f1 h1:Qf+/W3Tup0nO21tgJmO14WJK0yyrm4L2UJipZP+Zoow=
|
||||
github.com/grafana/dskit v0.0.0-20211021180445-3bd016e9d7f1/go.mod h1:uPG2nyK4CtgNDmWv7qyzYcdI+S90kHHRWvHnBtEMBXM=
|
||||
github.com/grafana/e2e v0.1.0 h1:nThd0U0TjUqyOOupSb+qDd4BOdhqwhR/oYbjoqiMlZk=
|
||||
github.com/grafana/e2e v0.1.0/go.mod h1:+26VJWpczg2OU3D0537acnHSHzhJORpxOs6F+M27tZo=
|
||||
github.com/grafana/gocql v0.0.0-20200605141915-ba5dc39ece85 h1:xLuzPoOzdfNb/RF/IENCw+oLVdZB4G21VPhkHBgwSHY=
|
||||
github.com/grafana/gocql v0.0.0-20200605141915-ba5dc39ece85/go.mod h1:crI9WX6p0IhrqB+DqIUHulRW853PaNFf7o4UprV//3I=
|
||||
github.com/grafana/opentelemetry-collector v0.4.1-0.20211201123047-86905635e8f8 h1:jZAKyumYgG79/hCc+PKux00HpbzXcbjN1wc5fO4p4bU=
|
||||
@@ -985,7 +941,6 @@ github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.2.0.20201207153454-9f6
|
||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.14.4/go.mod h1:6CwZWGDSPRJidgKAtJVvND6soZe6fT7iteq8wDPdhb0=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
|
||||
@@ -994,7 +949,6 @@ github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc
|
||||
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
|
||||
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
|
||||
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
|
||||
github.com/hashicorp/consul/api v1.4.0/go.mod h1:xc8u05kyMa3Wjr9eEAsIAo3dg8+LywT5E/Cl7cNS5nU=
|
||||
github.com/hashicorp/consul/api v1.8.1/go.mod h1:sDjTOq0yUyv5G4h+BqSea7Fn6BU+XbolEz1952UB+mk=
|
||||
github.com/hashicorp/consul/api v1.9.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
|
||||
github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
|
||||
@@ -1002,7 +956,6 @@ github.com/hashicorp/consul/api v1.11.0 h1:Hw/G8TtRvOElqxVIhBzXciiSTbapq8hZ2XKZs
|
||||
github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
|
||||
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
|
||||
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
|
||||
github.com/hashicorp/consul/sdk v0.4.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM=
|
||||
github.com/hashicorp/consul/sdk v0.7.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM=
|
||||
github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU=
|
||||
github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
|
||||
@@ -1016,13 +969,11 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S
|
||||
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
|
||||
github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
|
||||
github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
||||
github.com/hashicorp/go-hclog v0.12.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
||||
github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
||||
github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
||||
github.com/hashicorp/go-hclog v1.0.0 h1:bkKf0BeBXcSYa7f5Fyi9gMuQ8gNsxeiNpZjR6VxNZeo=
|
||||
github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
||||
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||
github.com/hashicorp/go-immutable-radix v1.2.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
|
||||
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
||||
@@ -1062,14 +1013,11 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO
|
||||
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
|
||||
github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY=
|
||||
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
||||
github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
||||
github.com/hashicorp/memberlist v0.2.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
|
||||
github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
|
||||
github.com/hashicorp/memberlist v0.2.3/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
|
||||
github.com/hashicorp/memberlist v0.2.4 h1:OOhYzSvFnkFQXm1ysE8RjXTHsqSRDyP4emusC9K7DYg=
|
||||
github.com/hashicorp/memberlist v0.2.4/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
|
||||
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
|
||||
github.com/hashicorp/serf v0.9.0/go.mod h1:YL0HO+FifKOW2u1ke99DGVu1zhcpZzNwrLIqBC7vbYU=
|
||||
github.com/hashicorp/serf v0.9.5 h1:EBWvyu9tcRszt3Bxp3KNssBMP1KuHWyO51lz9+786iM=
|
||||
github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
|
||||
github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q=
|
||||
@@ -1098,22 +1046,17 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
|
||||
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
||||
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||
github.com/influxdata/flux v0.65.0/go.mod h1:BwN2XG2lMszOoquQaFdPET8FRQfrXiZsWmcMO9rkaVY=
|
||||
github.com/influxdata/flux v0.131.0/go.mod h1:CKvnYe6FHpTj/E0YGI7TcOZdGiYHoToOPSnoa12RtKI=
|
||||
github.com/influxdata/httprouter v1.3.1-0.20191122104820-ee83e2772f69/go.mod h1:pwymjR6SrP3gD3pRj9RJwdl1j5s3doEEV8gS4X9qSzA=
|
||||
github.com/influxdata/influxdb v1.8.0/go.mod h1:SIzcnsjaHRFpmlxpJ4S3NT64qtEKYweNTUMb/vh0OMQ=
|
||||
github.com/influxdata/influxdb v1.9.5/go.mod h1:4uPVvcry9KWQVWLxyT9641qpkRXUBN+xa0MJFFNNLKo=
|
||||
github.com/influxdata/influxdb-client-go/v2 v2.3.1-0.20210518120617-5d1fff431040/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8=
|
||||
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
|
||||
github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
|
||||
github.com/influxdata/influxql v1.1.0/go.mod h1:KpVI7okXjK6PRi3Z5B+mtKZli+R1DnZgb3N+tzevNgo=
|
||||
github.com/influxdata/influxql v1.1.1-0.20210223160523-b6ab99450c93/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk=
|
||||
github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE=
|
||||
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo=
|
||||
github.com/influxdata/pkg-config v0.2.8/go.mod h1:EMS7Ll0S4qkzDk53XS3Z72/egBsPInt+BeRxb0WeSwk=
|
||||
github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8=
|
||||
github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE=
|
||||
github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0=
|
||||
github.com/influxdata/tdigest v0.0.2-0.20210216194612-fc98d27c9e8b/go.mod h1:Z0kXnxzbTC2qrx4NaIzYkE1k66+6oEDQTvL95hQFh5Y=
|
||||
github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po=
|
||||
github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA=
|
||||
@@ -1144,7 +1087,6 @@ github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyX
|
||||
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
|
||||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
|
||||
@@ -1170,7 +1112,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
|
||||
github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o=
|
||||
github.com/jsternberg/zap-logfmt v1.2.0 h1:1v+PK4/B48cy8cfQbxL4FmmNZrjnIMr2BsnyEmXqv2o=
|
||||
github.com/jsternberg/zap-logfmt v1.2.0/go.mod h1:kz+1CUmCutPWABnNkOu9hOHKdT2q3TDYCcsFy9hpqb0=
|
||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||
@@ -1186,7 +1127,6 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW
|
||||
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||
github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||
github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||
github.com/klauspost/compress v1.11.12/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||
@@ -1196,11 +1136,9 @@ github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8
|
||||
github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
|
||||
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/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/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
|
||||
github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg=
|
||||
github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
|
||||
github.com/knadh/koanf v1.3.2/go.mod h1:HZ7HMLIGbrWJUfgtEzfHvzR/rX+eIqQlBNPRr4Vt42s=
|
||||
github.com/knadh/koanf v1.3.3 h1:eNtBOzQDzkzIIPRCJCx/Ha3DeD/ZFwCAp8JxyqoVAls=
|
||||
@@ -1224,7 +1162,6 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/kshvakov/clickhouse v1.3.5/go.mod h1:DMzX7FxRymoNkVgizH0DWAL8Cur7wHLgx3MUnGwJqpE=
|
||||
github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
|
||||
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
|
||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||
github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg=
|
||||
@@ -1252,7 +1189,6 @@ github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc8
|
||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
|
||||
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
|
||||
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
@@ -1308,7 +1244,6 @@ github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyex
|
||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||
github.com/miekg/dns v1.1.22/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/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
|
||||
github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg=
|
||||
github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
|
||||
github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
||||
@@ -1340,7 +1275,6 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4
|
||||
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/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/mitchellh/mapstructure v1.2.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
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/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
@@ -1376,7 +1310,6 @@ github.com/mostynb/go-grpc-compression v1.1.15/go.mod h1:OTK+ha9cKfSY0Pb3ESCzvGh
|
||||
github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSrwhe88TQQ=
|
||||
github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60=
|
||||
github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
|
||||
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg=
|
||||
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
@@ -1512,7 +1445,6 @@ github.com/opentracing-contrib/go-stdlib v1.0.0 h1:TBS7YuVotp8myLon4Pv7BtCBzOTo1
|
||||
github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU=
|
||||
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.0.3-0.20180606204148-bd9c31933947/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=
|
||||
@@ -1527,7 +1459,6 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw
|
||||
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/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE=
|
||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||
github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
|
||||
@@ -1540,7 +1471,6 @@ github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9
|
||||
github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||
github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
|
||||
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
|
||||
github.com/pierrec/cmdflag v0.0.2/go.mod h1:a3zKGZ3cdQUfxjd0RGMLZr8xI3nvpJOB+m6o/1X5BmU=
|
||||
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=
|
||||
@@ -1564,7 +1494,6 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
|
||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
|
||||
github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
|
||||
github.com/prometheus/alertmanager v0.20.0/go.mod h1:9g2i48FAyZW6BtbsnvHtMHQXl2aVtrORKwKVCQ+nbrg=
|
||||
github.com/prometheus/alertmanager v0.23.0/go.mod h1:0MLTrjQI8EuVmvykEhcfr/7X0xmaDAZrqMgxIq3OXHk=
|
||||
github.com/prometheus/alertmanager v0.23.1-0.20210914172521-e35efbddb66a h1:qroc/F4ygaQ0uc2S+Pyk/exMwnSpokGyN1QjfZ1DiWU=
|
||||
github.com/prometheus/alertmanager v0.23.1-0.20210914172521-e35efbddb66a/go.mod h1:U7pGu+z7A9ZKhK8lq1MvIOp5GdVlZjwOYk+S0h3LSbA=
|
||||
@@ -1575,7 +1504,6 @@ 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 v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
||||
github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U=
|
||||
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.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||
@@ -1633,7 +1561,6 @@ github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O
|
||||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
|
||||
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/prometheus/prometheus v0.0.0-20200609090129-a6600f564e3c/go.mod h1:S5n0C6tSgdnwWshBUceRx5G1OsjLv/EeZ9t3wIfEtsY=
|
||||
github.com/prometheus/prometheus v1.8.2-0.20211119115433-692a54649ed7 h1:8rwRA5BKEAWtawaP4ozroDm3xMDrp9POAoT3HkQ3ZHw=
|
||||
github.com/prometheus/prometheus v1.8.2-0.20211119115433-692a54649ed7/go.mod h1:outfylaI89+D5IO87TRPRmxfucIobTO3Rb0l2TKqpj0=
|
||||
github.com/prometheus/statsd_exporter v0.21.0 h1:hA05Q5RFeIjgwKIYEdFd59xu5Wwaznf33yKI+pyX6T8=
|
||||
@@ -1655,7 +1582,6 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
|
||||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||
github.com/rogpeppe/go-internal v1.6.2 h1:aIihoIOHCiLZHxyoNQ+ABL4NKhFTgKLBdMLyEAh98m0=
|
||||
github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
|
||||
github.com/rs/cors v1.8.0 h1:P2KMzcFwrPoSjkF1WLRPsp3UMLyql8L4v9hQpVeK5so=
|
||||
github.com/rs/cors v1.8.0/go.mod h1:EBwu+T5AvHOcXwvZIkQFjUN6s8Czyqw12GL/Y0tUyRM=
|
||||
github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
|
||||
@@ -1670,9 +1596,7 @@ github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYI
|
||||
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
|
||||
github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4=
|
||||
github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4=
|
||||
github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20210223165440-c65ae3540d44 h1:3egqo0Vut6daANFm7tOXdNAa8v5/uLU+sgCJrc88Meo=
|
||||
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20210223165440-c65ae3540d44/go.mod h1:CJJ5VAbozOl0yEw7nHB9+7BXTJbIn6h7W+f6Gau5IP8=
|
||||
github.com/schollz/progressbar/v2 v2.13.2/go.mod h1:6YZjqdthH6SCZKv2rqGryrxPtfmRB/DWZxSMfCXPyD8=
|
||||
@@ -1682,7 +1606,6 @@ github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvW
|
||||
github.com/segmentio/fasthash v0.0.0-20180216231524-a72b379d632e h1:uO75wNGioszjmIzcY/tvdDYKRLVvzggtAmmJkn9j4GQ=
|
||||
github.com/segmentio/fasthash v0.0.0-20180216231524-a72b379d632e/go.mod h1:tm/wZFQ8e24NYaBGIlnO2WGCAi67re4HHuOm0sftE/M=
|
||||
github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo=
|
||||
github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo=
|
||||
github.com/sercand/kuberesolver v2.1.0+incompatible/go.mod h1:lWF3GL0xptCB/vCiJPl/ZshwPsX/n4Y7u0CW9E7aQIQ=
|
||||
github.com/sercand/kuberesolver v2.4.0+incompatible h1:WE2OlRf6wjLxHwNkkFLQGaZcVLEXjMjBPjjEU5vksH8=
|
||||
github.com/sercand/kuberesolver v2.4.0+incompatible/go.mod h1:lWF3GL0xptCB/vCiJPl/ZshwPsX/n4Y7u0CW9E7aQIQ=
|
||||
@@ -1692,7 +1615,6 @@ github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9Nz
|
||||
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk=
|
||||
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
|
||||
github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 h1:pXY9qYc/MP5zdvqWEUH6SjNiu7VhSjuVFTFiTcphaLU=
|
||||
github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
|
||||
github.com/siebenmann/go-kstat v0.0.0-20160321171754-d34789b79745/go.mod h1:G81aIFAMS9ECrwBYR9YxhlPjWgrItd+Kje78O6+uqm8=
|
||||
@@ -1779,14 +1701,14 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.194/go.mod
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.194/go.mod h1:yrBKWhChnDqNz1xuXdSbWXG56XawEq0G5j1lg4VwBD4=
|
||||
github.com/tencentyun/cos-go-sdk-v5 v0.7.31 h1:NujkkOKMJ3IFs1+trCwXOKRCIPQ8qI5Lxul9JkhTg6M=
|
||||
github.com/tencentyun/cos-go-sdk-v5 v0.7.31/go.mod h1:4E4+bQ2gBVJcgEC9Cufwylio4mXOct2iu05WjgEBx1o=
|
||||
github.com/thanos-io/thanos v0.19.1-0.20211208205607-d1acaea2a11a h1:mW3os+I6lAHRXTDC3PNNIhdBEtInPpCDhqvbkZ3q694=
|
||||
github.com/thanos-io/thanos v0.19.1-0.20211208205607-d1acaea2a11a/go.mod h1:LKBxvV7/LiKtF6tbsin4vQxCosambQi6+CET2/5cFiY=
|
||||
github.com/thanos-io/thanos v0.24.0 h1:wG1y9Kx1GTIPA6wJ7EVBaoTEB7BKQfufaZEVyNQFrD8=
|
||||
github.com/thanos-io/thanos v0.24.0/go.mod h1:sfnKJG7cDA41ixNL4gsTJEa3w9Qt8lwAjw+dqRMSDG0=
|
||||
github.com/themihai/gomemcache v0.0.0-20180902122335-24332e2d58ab h1:7ZR3hmisBWw77ZpO1/o86g+JV3VKlk3d48jopJxzTjU=
|
||||
github.com/themihai/gomemcache v0.0.0-20180902122335-24332e2d58ab/go.mod h1:eheTFp954zcWZXCU8d0AT76ftsQOTo4DTqkN/h3k1MY=
|
||||
github.com/tidwall/pretty v0.0.0-20180105212114-65a9db5fad51/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
|
||||
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
|
||||
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
|
||||
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
|
||||
github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
|
||||
github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
|
||||
github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
|
||||
@@ -1797,7 +1719,6 @@ github.com/uber-go/atomic v1.4.0 h1:yOuPqEq4ovnhEjpHmfFwsqBXDYbQeT6Nb0bwD6XnD5o=
|
||||
github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
|
||||
github.com/uber-go/tally v3.3.15+incompatible/go.mod h1:YDTIBxdXyOU/sCWilKB4bgyufu1cEi0jdVnRdxvjnmU=
|
||||
github.com/uber/athenadriver v1.1.4/go.mod h1:tQjho4NzXw55LGfSZEcETuYydpY1vtmixUabHkC1K/E=
|
||||
github.com/uber/jaeger-client-go v2.23.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
|
||||
github.com/uber/jaeger-client-go v2.28.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
|
||||
github.com/uber/jaeger-client-go v2.29.1+incompatible h1:R9ec3zO3sGpzs0abd43Y+fBZRJ9uiH6lXyR/+u6brW4=
|
||||
github.com/uber/jaeger-client-go v2.29.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
|
||||
@@ -1827,7 +1748,6 @@ github.com/weaveworks/common v0.0.0-20210913144402-035033b78a78 h1:UqH2ncSWwCIhZ
|
||||
github.com/weaveworks/common v0.0.0-20210913144402-035033b78a78/go.mod h1:YU9FvnS7kUnRt6HY10G+2qHkwzP3n3Vb1XsXDsJTSp8=
|
||||
github.com/weaveworks/promrus v1.2.0 h1:jOLf6pe6/vss4qGHjXmGz4oDJQA+AOCqEL3FvvZGz7M=
|
||||
github.com/weaveworks/promrus v1.2.0/go.mod h1:SaE82+OJ91yqjrE1rsvBWVzNZKcHYFtMUyS1+Ogs/KA=
|
||||
github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
|
||||
github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
|
||||
github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
|
||||
github.com/willf/bitset v1.1.11 h1:N7Z7E9UvjW+sGsEl7k/SJrvY2reP1A07MrGuCjIOjRE=
|
||||
@@ -1877,8 +1797,9 @@ go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mI
|
||||
go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg=
|
||||
go.etcd.io/etcd v3.3.25+incompatible h1:V1RzkZJj9LqsJRy+TUBgpWSbZXITLB819lstuTFoZOY=
|
||||
go.etcd.io/etcd v3.3.25+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI=
|
||||
go.etcd.io/etcd/api/v3 v3.5.0 h1:GsV3S+OfZEOCNXdtNkBSR7kgLobAa/SO6tCxRa0GAYw=
|
||||
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
|
||||
go.etcd.io/etcd/api/v3 v3.5.1 h1:v28cktvBq+7vGyJXF8G+rWJmj+1XUmMtqcLnH8hDocM=
|
||||
go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.0 h1:2aQv6F436YnN7I4VbI8PPYrBhu+SmrTaADcf8Mi/6PU=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
|
||||
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
|
||||
@@ -1887,9 +1808,7 @@ go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lL
|
||||
go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
|
||||
go.mongodb.org/mongo-driver v1.1.0/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
|
||||
go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
|
||||
go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
|
||||
go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
|
||||
go.mongodb.org/mongo-driver v1.3.2/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
|
||||
go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
|
||||
go.mongodb.org/mongo-driver v1.4.3/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc=
|
||||
go.mongodb.org/mongo-driver v1.4.4/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc=
|
||||
@@ -1991,11 +1910,8 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U
|
||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200422194213-44a606286825/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
@@ -2054,7 +1970,6 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
|
||||
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180530234432-1e491301e022/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=
|
||||
@@ -2086,11 +2001,9 @@ golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLL
|
||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190921015927-1a5e07d1ff72/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-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
@@ -2098,7 +2011,6 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/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-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
@@ -2167,7 +2079,6 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
|
||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
@@ -2215,20 +2126,17 @@ golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@@ -2305,7 +2213,6 @@ golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/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/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
@@ -2332,7 +2239,6 @@ golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxb
|
||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/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-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
@@ -2355,7 +2261,6 @@ golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgw
|
||||
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
@@ -2369,12 +2274,9 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/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-20191125144606-a911d9008d1f/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-20191203134012-c197fd4bf371/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-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/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-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
@@ -2388,7 +2290,6 @@ golang.org/x/tools v0.0.0-20200304024140-c4206d458c3f/go.mod h1:o4KQGtdN14AW+yjs
|
||||
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
||||
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
||||
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
|
||||
golang.org/x/tools v0.0.0-20200422205258-72e4a01eba43/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
@@ -2421,7 +2322,6 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1N
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
|
||||
gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
|
||||
gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
|
||||
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
|
||||
gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
|
||||
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
|
||||
@@ -2483,16 +2383,13 @@ google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRn
|
||||
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||
google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
|
||||
google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
|
||||
google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
|
||||
google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
|
||||
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
@@ -2503,7 +2400,6 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG
|
||||
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200420144010-e5e8543f8aeb/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
@@ -2547,6 +2443,7 @@ google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ6
|
||||
google.golang.org/genproto v0.0.0-20211016002631-37fc39342514/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211021150943-2b146023228c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0 h1:c7yRRmuQiVMo+YppNj5MUREXUyc2lPo3DrtYMwaWQ28=
|
||||
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0=
|
||||
@@ -2582,7 +2479,6 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS
|
||||
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/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE=
|
||||
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
||||
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
|
||||
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
||||
@@ -2607,7 +2503,6 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
@@ -2630,7 +2525,6 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9
|
||||
howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0=
|
||||
k8s.io/api v0.20.4 h1:xZjKidCirayzX6tHONRQyTNDVIR55TYVqgATqo6ZULY=
|
||||
k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
|
||||
k8s.io/apimachinery v0.17.5/go.mod h1:ioIo1G/a+uONV7Tv+ZmCbMG1/a3kVw5YcDdncd8ugQ0=
|
||||
k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
|
||||
k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
|
||||
k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc=
|
||||
@@ -2648,9 +2542,7 @@ k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM=
|
||||
k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
|
||||
k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
|
||||
k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc=
|
||||
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||
k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
||||
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
|
||||
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
@@ -2658,11 +2550,9 @@ k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||
k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
|
||||
k8s.io/klog/v2 v2.20.0 h1:tlyxlSvd63k7axjhuchckaRJm+a92z5GSOrTOQY5sHw=
|
||||
k8s.io/klog/v2 v2.20.0/go.mod h1:Gm8eSIfQN6457haJuPaMxZw4wyP5k+ykPFlrhQDvhvw=
|
||||
k8s.io/kube-openapi v0.0.0-20200316234421-82d701f24f9d/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU=
|
||||
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
|
||||
k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
|
||||
k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
|
||||
k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE=
|
||||
@@ -2672,7 +2562,6 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
||||
sigs.k8s.io/structured-merge-diff/v2 v2.0.1/go.mod h1:Wb7vfKAodbKgf6tn1Kl0VvGj7mRH6DGaRcixXEJXTsE=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno=
|
||||
|
||||
@@ -7,8 +7,8 @@ import (
|
||||
|
||||
util "github.com/grafana/tempo/integration"
|
||||
|
||||
cortex_e2e "github.com/cortexproject/cortex/integration/e2e"
|
||||
cortex_e2e_db "github.com/cortexproject/cortex/integration/e2e/db"
|
||||
"github.com/grafana/e2e"
|
||||
e2e_db "github.com/grafana/e2e/db"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
@@ -17,11 +17,11 @@ const (
|
||||
)
|
||||
|
||||
func TestAllInOne(t *testing.T) {
|
||||
s, err := cortex_e2e.NewScenario("tempo_e2e")
|
||||
s, err := e2e.NewScenario("tempo_e2e")
|
||||
require.NoError(t, err)
|
||||
defer s.Close()
|
||||
|
||||
minio := cortex_e2e_db.NewMinio(9000, "tempo")
|
||||
minio := e2e_db.NewMinio(9000, "tempo")
|
||||
require.NotNil(t, minio)
|
||||
require.NoError(t, s.StartAndWaitReady(minio))
|
||||
|
||||
@@ -40,9 +40,9 @@ func TestAllInOne(t *testing.T) {
|
||||
require.NoError(t, runK6Test(k6, "stress_test_write_path.js"))
|
||||
}
|
||||
|
||||
func runK6Test(k6 *cortex_e2e.ConcreteService, testjs string) error {
|
||||
func runK6Test(k6 *e2e.ConcreteService, testjs string) error {
|
||||
fmt.Println("------ " + testjs + " ------")
|
||||
stdout, stderr, err := k6.Exec(cortex_e2e.NewCommand("k6", "run", "--quiet", "--log-output", "none", filepath.Join(cortex_e2e.ContainerSharedDir, testjs)))
|
||||
stdout, stderr, err := k6.Exec(e2e.NewCommand("k6", "run", "--quiet", "--log-output", "none", filepath.Join(e2e.ContainerSharedDir, testjs)))
|
||||
fmt.Println("------ stdout ------")
|
||||
fmt.Println(stdout)
|
||||
|
||||
@@ -54,12 +54,12 @@ func runK6Test(k6 *cortex_e2e.ConcreteService, testjs string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func newK6Runner(tempo *cortex_e2e.HTTPService) *cortex_e2e.ConcreteService {
|
||||
s := cortex_e2e.NewConcreteService(
|
||||
func newK6Runner(tempo *e2e.HTTPService) *e2e.ConcreteService {
|
||||
s := e2e.NewConcreteService(
|
||||
"k6",
|
||||
k6Image,
|
||||
cortex_e2e.NewCommandWithoutEntrypoint("sh", "-c", "sleep 3600"),
|
||||
cortex_e2e.NewCmdReadinessProbe(cortex_e2e.NewCommand("sh", "-c", "")),
|
||||
e2e.NewCommandWithoutEntrypoint("sh", "-c", "sleep 3600"),
|
||||
e2e.NewCmdReadinessProbe(e2e.NewCommand("sh", "-c", "")),
|
||||
)
|
||||
|
||||
s.SetUser("0") // required so k6 can read the js files passed in
|
||||
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/cortexproject/cortex/integration/e2e"
|
||||
cortex_e2e_db "github.com/cortexproject/cortex/integration/e2e/db"
|
||||
"github.com/grafana/e2e"
|
||||
e2e_db "github.com/grafana/e2e/db"
|
||||
"github.com/grafana/tempo/cmd/tempo/app"
|
||||
util "github.com/grafana/tempo/integration"
|
||||
"github.com/grafana/tempo/tempodb/backend/azure"
|
||||
@@ -36,7 +36,7 @@ func New(scenario *e2e.Scenario, cfg app.Config) (*e2e.HTTPService, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
backendService = cortex_e2e_db.NewMinio(port, "tempo")
|
||||
backendService = e2e_db.NewMinio(port, "tempo")
|
||||
if backendService == nil {
|
||||
return nil, fmt.Errorf("error creating minio backend")
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
cortex_e2e "github.com/cortexproject/cortex/integration/e2e"
|
||||
"github.com/gogo/protobuf/jsonpb"
|
||||
"github.com/grafana/e2e"
|
||||
util "github.com/grafana/tempo/integration"
|
||||
"github.com/grafana/tempo/pkg/tempopb"
|
||||
tempoUtil "github.com/grafana/tempo/pkg/util"
|
||||
@@ -19,7 +19,7 @@ const (
|
||||
)
|
||||
|
||||
func TestCompression(t *testing.T) {
|
||||
s, err := cortex_e2e.NewScenario("tempo_e2e")
|
||||
s, err := e2e.NewScenario("tempo_e2e")
|
||||
require.NoError(t, err)
|
||||
defer s.Close()
|
||||
|
||||
|
||||
+1
-2
@@ -12,8 +12,7 @@ distributor:
|
||||
ingester:
|
||||
lifecycler:
|
||||
ring:
|
||||
kvstore:
|
||||
store: memberlist
|
||||
kvstore: {{ .KVStore }}
|
||||
replication_factor: 3
|
||||
heartbeat_period: 100ms
|
||||
trace_idle_period: 1s
|
||||
+188
-119
@@ -1,16 +1,20 @@
|
||||
package e2e
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
"text/template"
|
||||
"time"
|
||||
|
||||
cortex_e2e "github.com/cortexproject/cortex/integration/e2e"
|
||||
cortex_e2e_db "github.com/cortexproject/cortex/integration/e2e/db"
|
||||
"github.com/grafana/e2e"
|
||||
e2edb "github.com/grafana/e2e/db"
|
||||
jaeger_grpc "github.com/jaegertracing/jaeger/cmd/agent/app/reporter/grpc"
|
||||
thrift "github.com/jaegertracing/jaeger/thrift-gen/jaeger"
|
||||
"github.com/prometheus/prometheus/model/labels"
|
||||
@@ -28,7 +32,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
configMicroservices = "config-microservices.yaml"
|
||||
configMicroservices = "config-microservices.tmpl.yaml"
|
||||
configServerless = "config-serverless.yaml"
|
||||
configHA = "config-scalable-single-binary.yaml"
|
||||
|
||||
@@ -58,7 +62,7 @@ func TestAllInOne(t *testing.T) {
|
||||
|
||||
for _, tc := range testBackends {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
s, err := cortex_e2e.NewScenario("tempo_e2e")
|
||||
s, err := e2e.NewScenario("tempo_e2e")
|
||||
require.NoError(t, err)
|
||||
defer s.Close()
|
||||
|
||||
@@ -87,13 +91,13 @@ func TestAllInOne(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// test metrics
|
||||
require.NoError(t, tempo.WaitSumMetrics(cortex_e2e.Equals(spanCount(expected)), "tempo_distributor_spans_received_total"))
|
||||
require.NoError(t, tempo.WaitSumMetrics(e2e.Equals(spanCount(expected)), "tempo_distributor_spans_received_total"))
|
||||
|
||||
// test echo
|
||||
assertEcho(t, "http://"+tempo.Endpoint(3200)+"/api/echo")
|
||||
|
||||
// ensure trace is created in ingester (trace_idle_time has passed)
|
||||
require.NoError(t, tempo.WaitSumMetrics(cortex_e2e.Equals(1), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, tempo.WaitSumMetrics(e2e.Equals(1), "tempo_ingester_traces_created_total"))
|
||||
|
||||
apiClient := tempoUtil.NewClient("http://"+tempo.Endpoint(3200), "")
|
||||
|
||||
@@ -104,7 +108,7 @@ func TestAllInOne(t *testing.T) {
|
||||
searchAndAssertTrace(t, apiClient, info)
|
||||
|
||||
// flush trace to backend
|
||||
res, err := cortex_e2e.GetRequest("http://" + tempo.Endpoint(3200) + "/flush")
|
||||
res, err := e2e.DoGet("http://" + tempo.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
|
||||
@@ -112,14 +116,14 @@ func TestAllInOne(t *testing.T) {
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
// force clear completed block
|
||||
res, err = cortex_e2e.GetRequest("http://" + tempo.Endpoint(3200) + "/flush")
|
||||
res, err = e2e.DoGet("http://" + tempo.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
|
||||
// test metrics
|
||||
require.NoError(t, tempo.WaitSumMetrics(cortex_e2e.Equals(1), "tempo_ingester_blocks_flushed_total"))
|
||||
require.NoError(t, tempo.WaitSumMetricsWithOptions(cortex_e2e.Equals(1), []string{"tempodb_blocklist_length"}, cortex_e2e.WaitMissingMetrics))
|
||||
require.NoError(t, tempo.WaitSumMetrics(cortex_e2e.Equals(4), "tempo_query_frontend_queries_total"))
|
||||
require.NoError(t, tempo.WaitSumMetrics(e2e.Equals(1), "tempo_ingester_blocks_flushed_total"))
|
||||
require.NoError(t, tempo.WaitSumMetricsWithOptions(e2e.Equals(1), []string{"tempodb_blocklist_length"}, e2e.WaitMissingMetrics))
|
||||
require.NoError(t, tempo.WaitSumMetrics(e2e.Equals(4), "tempo_query_frontend_queries_total"))
|
||||
|
||||
// query trace - should fetch from backend
|
||||
queryAndAssertTrace(t, apiClient, info)
|
||||
@@ -131,130 +135,195 @@ func TestAllInOne(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMicroservices(t *testing.T) {
|
||||
s, err := cortex_e2e.NewScenario("tempo_e2e")
|
||||
require.NoError(t, err)
|
||||
defer s.Close()
|
||||
|
||||
minio := cortex_e2e_db.NewMinio(9000, "tempo")
|
||||
require.NotNil(t, minio)
|
||||
require.NoError(t, s.StartAndWaitReady(minio))
|
||||
|
||||
require.NoError(t, util.CopyFileToSharedDir(s, configMicroservices, "config.yaml"))
|
||||
tempoIngester1 := util.NewTempoIngester(1)
|
||||
tempoIngester2 := util.NewTempoIngester(2)
|
||||
tempoIngester3 := util.NewTempoIngester(3)
|
||||
|
||||
tempoDistributor := util.NewTempoDistributor()
|
||||
tempoQueryFrontend := util.NewTempoQueryFrontend()
|
||||
tempoQuerier := util.NewTempoQuerier()
|
||||
require.NoError(t, s.StartAndWaitReady(tempoIngester1, tempoIngester2, tempoIngester3, tempoDistributor, tempoQueryFrontend, tempoQuerier))
|
||||
|
||||
// wait for active ingesters
|
||||
time.Sleep(1 * time.Second)
|
||||
matchers := []*labels.Matcher{
|
||||
func TestMicroservicesWithKVStores(t *testing.T) {
|
||||
testKVStores := []struct {
|
||||
name string
|
||||
kvconfig func(hostname string, port int) string
|
||||
}{
|
||||
{
|
||||
Type: labels.MatchEqual,
|
||||
Name: "name",
|
||||
Value: "ingester",
|
||||
name: "memberlist",
|
||||
kvconfig: func(string, int) string {
|
||||
return `
|
||||
store: memberlist`
|
||||
},
|
||||
},
|
||||
{
|
||||
Type: labels.MatchEqual,
|
||||
Name: "state",
|
||||
Value: "ACTIVE",
|
||||
name: "etcd",
|
||||
kvconfig: func(hostname string, port int) string {
|
||||
return fmt.Sprintf(`
|
||||
store: etcd
|
||||
etcd:
|
||||
endpoints:
|
||||
- http://%s:%d`, hostname, port)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "consul",
|
||||
kvconfig: func(hostname string, port int) string {
|
||||
return fmt.Sprintf(`
|
||||
store: consul
|
||||
consul:
|
||||
host: http://%s:%d`, hostname, port)
|
||||
},
|
||||
},
|
||||
}
|
||||
require.NoError(t, tempoDistributor.WaitSumMetricsWithOptions(cortex_e2e.Equals(3), []string{`cortex_ring_members`}, cortex_e2e.WithLabelMatchers(matchers...), cortex_e2e.WaitMissingMetrics))
|
||||
|
||||
// Get port for the Jaeger gRPC receiver endpoint
|
||||
c, err := newJaegerGRPCClient(tempoDistributor.Endpoint(14250))
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, c)
|
||||
for _, tc := range testKVStores {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
s, err := e2e.NewScenario("tempo_e2e")
|
||||
require.NoError(t, err)
|
||||
defer s.Close()
|
||||
|
||||
info := tempoUtil.NewTraceInfo(time.Now(), "")
|
||||
require.NoError(t, info.EmitAllBatches(c))
|
||||
// Set up KVStore
|
||||
var kvstore *e2e.HTTPService
|
||||
switch tc.name {
|
||||
case "etcd":
|
||||
kvstore = e2edb.NewETCD()
|
||||
require.NoError(t, s.StartAndWaitReady(kvstore))
|
||||
case "consul":
|
||||
kvstore = e2edb.NewConsul()
|
||||
require.NoError(t, s.StartAndWaitReady(kvstore))
|
||||
case "memberlist":
|
||||
default:
|
||||
t.Errorf("unknown KVStore %s", tc.name)
|
||||
}
|
||||
|
||||
expected, err := info.ConstructTraceFromEpoch()
|
||||
require.NoError(t, err)
|
||||
tmpl, err := template.New(filepath.Base(configMicroservices)).ParseFiles(configMicroservices)
|
||||
require.NoError(t, err)
|
||||
|
||||
// test metrics
|
||||
require.NoError(t, tempoDistributor.WaitSumMetrics(cortex_e2e.Equals(spanCount(expected)), "tempo_distributor_spans_received_total"))
|
||||
KVStoreConfig := tc.kvconfig("", 0)
|
||||
if kvstore != nil {
|
||||
KVStoreConfig = tc.kvconfig(kvstore.Name(), kvstore.HTTPPort())
|
||||
}
|
||||
|
||||
// test echo
|
||||
assertEcho(t, "http://"+tempoQueryFrontend.Endpoint(3200)+"/api/echo")
|
||||
var buf bytes.Buffer
|
||||
kvconfig := map[string]interface{}{
|
||||
"KVStore": KVStoreConfig,
|
||||
}
|
||||
require.NoError(t, tmpl.Execute(&buf, kvconfig))
|
||||
|
||||
// ensure trace is created in ingester (trace_idle_time has passed)
|
||||
require.NoError(t, tempoIngester1.WaitSumMetrics(cortex_e2e.Equals(1), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, tempoIngester2.WaitSumMetrics(cortex_e2e.Equals(1), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, tempoIngester3.WaitSumMetrics(cortex_e2e.Equals(1), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, util.WriteFileToSharedDir(s, "config.yaml", buf.Bytes()))
|
||||
|
||||
apiClient := tempoUtil.NewClient("http://"+tempoQueryFrontend.Endpoint(3200), "")
|
||||
minio := e2edb.NewMinio(9000, "tempo")
|
||||
require.NotNil(t, minio)
|
||||
require.NoError(t, s.StartAndWaitReady(minio))
|
||||
|
||||
// query an in-memory trace
|
||||
queryAndAssertTrace(t, apiClient, info)
|
||||
tempoIngester1 := util.NewTempoIngester(1)
|
||||
tempoIngester2 := util.NewTempoIngester(2)
|
||||
tempoIngester3 := util.NewTempoIngester(3)
|
||||
|
||||
// search an in-memory trace
|
||||
searchAndAssertTrace(t, apiClient, info)
|
||||
tempoDistributor := util.NewTempoDistributor()
|
||||
tempoQueryFrontend := util.NewTempoQueryFrontend()
|
||||
tempoQuerier := util.NewTempoQuerier()
|
||||
require.NoError(t, s.StartAndWaitReady(tempoIngester1, tempoIngester2, tempoIngester3, tempoDistributor, tempoQueryFrontend, tempoQuerier))
|
||||
|
||||
// flush trace to backend
|
||||
res, err := cortex_e2e.GetRequest("http://" + tempoIngester1.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
// wait for active ingesters
|
||||
time.Sleep(1 * time.Second)
|
||||
matchers := []*labels.Matcher{
|
||||
{
|
||||
Type: labels.MatchEqual,
|
||||
Name: "name",
|
||||
Value: "ingester",
|
||||
},
|
||||
{
|
||||
Type: labels.MatchEqual,
|
||||
Name: "state",
|
||||
Value: "ACTIVE",
|
||||
},
|
||||
}
|
||||
require.NoError(t, tempoDistributor.WaitSumMetricsWithOptions(e2e.Equals(3), []string{`cortex_ring_members`}, e2e.WithLabelMatchers(matchers...), e2e.WaitMissingMetrics))
|
||||
|
||||
res, err = cortex_e2e.GetRequest("http://" + tempoIngester2.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
// Get port for the Jaeger gRPC receiver endpoint
|
||||
c, err := newJaegerGRPCClient(tempoDistributor.Endpoint(14250))
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, c)
|
||||
|
||||
res, err = cortex_e2e.GetRequest("http://" + tempoIngester3.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
info := tempoUtil.NewTraceInfo(time.Now(), "")
|
||||
require.NoError(t, info.EmitAllBatches(c))
|
||||
|
||||
// sleep for one maintenance cycle
|
||||
time.Sleep(5 * time.Second)
|
||||
expected, err := info.ConstructTraceFromEpoch()
|
||||
require.NoError(t, err)
|
||||
|
||||
// test metrics
|
||||
for _, i := range []*cortex_e2e.HTTPService{tempoIngester1, tempoIngester2, tempoIngester3} {
|
||||
require.NoError(t, i.WaitSumMetrics(cortex_e2e.Equals(1), "tempo_ingester_blocks_flushed_total"))
|
||||
// test metrics
|
||||
require.NoError(t, tempoDistributor.WaitSumMetrics(e2e.Equals(spanCount(expected)), "tempo_distributor_spans_received_total"))
|
||||
|
||||
// test echo
|
||||
assertEcho(t, "http://"+tempoQueryFrontend.Endpoint(3200)+"/api/echo")
|
||||
|
||||
// ensure trace is created in ingester (trace_idle_time has passed)
|
||||
require.NoError(t, tempoIngester1.WaitSumMetrics(e2e.Equals(1), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, tempoIngester2.WaitSumMetrics(e2e.Equals(1), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, tempoIngester3.WaitSumMetrics(e2e.Equals(1), "tempo_ingester_traces_created_total"))
|
||||
|
||||
apiClient := tempoUtil.NewClient("http://"+tempoQueryFrontend.Endpoint(3200), "")
|
||||
|
||||
// query an in-memory trace
|
||||
queryAndAssertTrace(t, apiClient, info)
|
||||
|
||||
// search an in-memory trace
|
||||
searchAndAssertTrace(t, apiClient, info)
|
||||
|
||||
// flush trace to backend
|
||||
res, err := e2e.DoGet("http://" + tempoIngester1.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
|
||||
res, err = e2e.DoGet("http://" + tempoIngester2.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
|
||||
res, err = e2e.DoGet("http://" + tempoIngester3.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
|
||||
// sleep for one maintenance cycle
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
// test metrics
|
||||
for _, i := range []*e2e.HTTPService{tempoIngester1, tempoIngester2, tempoIngester3} {
|
||||
require.NoError(t, i.WaitSumMetrics(e2e.Equals(1), "tempo_ingester_blocks_flushed_total"))
|
||||
}
|
||||
require.NoError(t, tempoQuerier.WaitSumMetrics(e2e.Equals(3), "tempodb_blocklist_length"))
|
||||
require.NoError(t, tempoQueryFrontend.WaitSumMetrics(e2e.Equals(4), "tempo_query_frontend_queries_total"))
|
||||
|
||||
// query trace - should fetch from backend
|
||||
queryAndAssertTrace(t, apiClient, info)
|
||||
|
||||
// stop an ingester and confirm we can still write and query
|
||||
err = tempoIngester2.Kill()
|
||||
require.NoError(t, err)
|
||||
|
||||
// sleep for heartbeat timeout
|
||||
time.Sleep(1 * time.Second)
|
||||
|
||||
info = tempoUtil.NewTraceInfo(time.Now(), "")
|
||||
require.NoError(t, info.EmitAllBatches(c))
|
||||
|
||||
// query an in-memory trace
|
||||
queryAndAssertTrace(t, apiClient, info)
|
||||
|
||||
// search an in-memory trace
|
||||
searchAndAssertTrace(t, apiClient, info)
|
||||
|
||||
// search the backend. this works b/c we're passing a start/end AND setting query ingesters within min/max to 0
|
||||
now := time.Now()
|
||||
searchAndAssertTraceBackend(t, apiClient, info, now.Add(-20*time.Minute).Unix(), now.Unix())
|
||||
|
||||
// stop another ingester and confirm things fail
|
||||
err = tempoIngester1.Kill()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Error(t, info.EmitBatches(c))
|
||||
})
|
||||
}
|
||||
require.NoError(t, tempoQuerier.WaitSumMetrics(cortex_e2e.Equals(3), "tempodb_blocklist_length"))
|
||||
require.NoError(t, tempoQueryFrontend.WaitSumMetrics(cortex_e2e.Equals(4), "tempo_query_frontend_queries_total"))
|
||||
|
||||
// query trace - should fetch from backend
|
||||
queryAndAssertTrace(t, apiClient, info)
|
||||
|
||||
// stop an ingester and confirm we can still write and query
|
||||
err = tempoIngester2.Kill()
|
||||
require.NoError(t, err)
|
||||
|
||||
// sleep for heartbeat timeout
|
||||
time.Sleep(1 * time.Second)
|
||||
|
||||
info = tempoUtil.NewTraceInfo(time.Now(), "")
|
||||
require.NoError(t, info.EmitAllBatches(c))
|
||||
|
||||
// query an in-memory trace
|
||||
queryAndAssertTrace(t, apiClient, info)
|
||||
|
||||
// search an in-memory trace
|
||||
searchAndAssertTrace(t, apiClient, info)
|
||||
|
||||
// search the backend. this works b/c we're passing a start/end AND setting query ingesters within min/max to 0
|
||||
now := time.Now()
|
||||
searchAndAssertTraceBackend(t, apiClient, info, now.Add(-20*time.Minute).Unix(), now.Unix())
|
||||
|
||||
// stop another ingester and confirm things fail
|
||||
err = tempoIngester1.Kill()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Error(t, info.EmitBatches(c))
|
||||
}
|
||||
|
||||
func TestScalableSingleBinary(t *testing.T) {
|
||||
s, err := cortex_e2e.NewScenario("tempo_e2e")
|
||||
s, err := e2e.NewScenario("tempo_e2e")
|
||||
require.NoError(t, err)
|
||||
defer s.Close()
|
||||
|
||||
minio := cortex_e2e_db.NewMinio(9000, "tempo")
|
||||
minio := e2edb.NewMinio(9000, "tempo")
|
||||
require.NotNil(t, minio)
|
||||
require.NoError(t, s.StartAndWaitReady(minio))
|
||||
|
||||
@@ -263,7 +332,7 @@ func TestScalableSingleBinary(t *testing.T) {
|
||||
|
||||
// start three scalable single binary tempos in parallel
|
||||
var wg sync.WaitGroup
|
||||
var tempo1, tempo2, tempo3 *cortex_e2e.HTTPService
|
||||
var tempo1, tempo2, tempo3 *e2e.HTTPService
|
||||
wg.Add(3)
|
||||
go func() {
|
||||
tempo1 = util.NewTempoScalableSingleBinary(1)
|
||||
@@ -297,9 +366,9 @@ func TestScalableSingleBinary(t *testing.T) {
|
||||
|
||||
t.Logf("tempo1.Endpoint(): %+v", tempo1.Endpoint(3200))
|
||||
|
||||
require.NoError(t, tempo1.WaitSumMetricsWithOptions(cortex_e2e.Equals(3), []string{`cortex_ring_members`}, cortex_e2e.WithLabelMatchers(matchers...), cortex_e2e.WaitMissingMetrics))
|
||||
require.NoError(t, tempo2.WaitSumMetricsWithOptions(cortex_e2e.Equals(3), []string{`cortex_ring_members`}, cortex_e2e.WithLabelMatchers(matchers...), cortex_e2e.WaitMissingMetrics))
|
||||
require.NoError(t, tempo3.WaitSumMetricsWithOptions(cortex_e2e.Equals(3), []string{`cortex_ring_members`}, cortex_e2e.WithLabelMatchers(matchers...), cortex_e2e.WaitMissingMetrics))
|
||||
require.NoError(t, tempo1.WaitSumMetricsWithOptions(e2e.Equals(3), []string{`cortex_ring_members`}, e2e.WithLabelMatchers(matchers...), e2e.WaitMissingMetrics))
|
||||
require.NoError(t, tempo2.WaitSumMetricsWithOptions(e2e.Equals(3), []string{`cortex_ring_members`}, e2e.WithLabelMatchers(matchers...), e2e.WaitMissingMetrics))
|
||||
require.NoError(t, tempo3.WaitSumMetricsWithOptions(e2e.Equals(3), []string{`cortex_ring_members`}, e2e.WithLabelMatchers(matchers...), e2e.WaitMissingMetrics))
|
||||
|
||||
c1, err := newJaegerGRPCClient(tempo1.Endpoint(14250))
|
||||
require.NoError(t, err)
|
||||
@@ -320,15 +389,15 @@ func TestScalableSingleBinary(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// test metrics
|
||||
require.NoError(t, tempo1.WaitSumMetrics(cortex_e2e.Equals(spanCount(expected)), "tempo_distributor_spans_received_total"))
|
||||
require.NoError(t, tempo1.WaitSumMetrics(cortex_e2e.Equals(1), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, tempo1.WaitSumMetrics(e2e.Equals(spanCount(expected)), "tempo_distributor_spans_received_total"))
|
||||
require.NoError(t, tempo1.WaitSumMetrics(e2e.Equals(1), "tempo_ingester_traces_created_total"))
|
||||
|
||||
for _, i := range []*cortex_e2e.HTTPService{tempo1, tempo2, tempo3} {
|
||||
res, err := cortex_e2e.GetRequest("http://" + i.Endpoint(3200) + "/flush")
|
||||
for _, i := range []*e2e.HTTPService{tempo1, tempo2, tempo3} {
|
||||
res, err := e2e.DoGet("http://" + i.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
|
||||
require.NoError(t, i.WaitSumMetrics(cortex_e2e.Equals(1), "tempo_ingester_blocks_flushed_total"))
|
||||
require.NoError(t, i.WaitSumMetrics(e2e.Equals(1), "tempo_ingester_blocks_flushed_total"))
|
||||
}
|
||||
|
||||
apiClient1 := tempoUtil.NewClient("http://"+tempo1.Endpoint(3200), "")
|
||||
@@ -383,7 +452,7 @@ func makeThriftBatchWithSpanCount(n int) *thrift.Batch {
|
||||
}
|
||||
|
||||
func assertEcho(t *testing.T, url string) {
|
||||
res, err := cortex_e2e.GetRequest(url)
|
||||
res, err := e2e.DoGet(url)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 200, res.StatusCode)
|
||||
defer res.Body.Close()
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
util "github.com/grafana/tempo/integration"
|
||||
"github.com/prometheus/prometheus/model/labels"
|
||||
|
||||
cortex_e2e "github.com/cortexproject/cortex/integration/e2e"
|
||||
"github.com/grafana/e2e"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
@@ -16,7 +16,7 @@ const (
|
||||
)
|
||||
|
||||
func TestLimits(t *testing.T) {
|
||||
s, err := cortex_e2e.NewScenario("tempo_e2e")
|
||||
s, err := e2e.NewScenario("tempo_e2e")
|
||||
require.NoError(t, err)
|
||||
defer s.Close()
|
||||
|
||||
@@ -42,19 +42,19 @@ func TestLimits(t *testing.T) {
|
||||
require.Error(t, c.EmitBatch(context.Background(), batch))
|
||||
|
||||
// test limit metrics
|
||||
err = tempo.WaitSumMetricsWithOptions(cortex_e2e.Equals(2),
|
||||
err = tempo.WaitSumMetricsWithOptions(e2e.Equals(2),
|
||||
[]string{"tempo_discarded_spans_total"},
|
||||
cortex_e2e.WithLabelMatchers(labels.MustNewMatcher(labels.MatchEqual, "reason", "trace_too_large")),
|
||||
e2e.WithLabelMatchers(labels.MustNewMatcher(labels.MatchEqual, "reason", "trace_too_large")),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
err = tempo.WaitSumMetricsWithOptions(cortex_e2e.Equals(1),
|
||||
err = tempo.WaitSumMetricsWithOptions(e2e.Equals(1),
|
||||
[]string{"tempo_discarded_spans_total"},
|
||||
cortex_e2e.WithLabelMatchers(labels.MustNewMatcher(labels.MatchEqual, "reason", "live_traces_exceeded")),
|
||||
e2e.WithLabelMatchers(labels.MustNewMatcher(labels.MatchEqual, "reason", "live_traces_exceeded")),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
err = tempo.WaitSumMetricsWithOptions(cortex_e2e.Equals(10),
|
||||
err = tempo.WaitSumMetricsWithOptions(e2e.Equals(10),
|
||||
[]string{"tempo_discarded_spans_total"},
|
||||
cortex_e2e.WithLabelMatchers(labels.MustNewMatcher(labels.MatchEqual, "reason", "rate_limited")),
|
||||
e2e.WithLabelMatchers(labels.MustNewMatcher(labels.MatchEqual, "reason", "rate_limited")),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"math/rand"
|
||||
"testing"
|
||||
|
||||
cortex_e2e "github.com/cortexproject/cortex/integration/e2e"
|
||||
"github.com/grafana/e2e"
|
||||
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/jaegerexporter"
|
||||
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter"
|
||||
"github.com/stretchr/testify/assert"
|
||||
@@ -33,7 +33,7 @@ const (
|
||||
)
|
||||
|
||||
func TestReceivers(t *testing.T) {
|
||||
s, err := cortex_e2e.NewScenario("tempo_e2e")
|
||||
s, err := e2e.NewScenario("tempo_e2e")
|
||||
require.NoError(t, err)
|
||||
defer s.Close()
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
cortex_e2e "github.com/cortexproject/cortex/integration/e2e"
|
||||
cortex_e2e_db "github.com/cortexproject/cortex/integration/e2e/db"
|
||||
"github.com/grafana/e2e"
|
||||
e2e_db "github.com/grafana/e2e/db"
|
||||
util "github.com/grafana/tempo/integration"
|
||||
tempoUtil "github.com/grafana/tempo/pkg/util"
|
||||
"github.com/prometheus/prometheus/model/labels"
|
||||
@@ -13,11 +13,11 @@ import (
|
||||
)
|
||||
|
||||
func TestServerless(t *testing.T) {
|
||||
s, err := cortex_e2e.NewScenario("tempo_e2e")
|
||||
s, err := e2e.NewScenario("tempo_e2e")
|
||||
require.NoError(t, err)
|
||||
defer s.Close()
|
||||
|
||||
minio := cortex_e2e_db.NewMinio(9000, "tempo")
|
||||
minio := e2e_db.NewMinio(9000, "tempo")
|
||||
require.NotNil(t, minio)
|
||||
require.NoError(t, s.StartAndWaitReady(minio))
|
||||
|
||||
@@ -45,7 +45,7 @@ func TestServerless(t *testing.T) {
|
||||
Value: "ACTIVE",
|
||||
},
|
||||
}
|
||||
require.NoError(t, tempoDistributor.WaitSumMetricsWithOptions(cortex_e2e.Equals(3), []string{`cortex_ring_members`}, cortex_e2e.WithLabelMatchers(matchers...), cortex_e2e.WaitMissingMetrics))
|
||||
require.NoError(t, tempoDistributor.WaitSumMetricsWithOptions(e2e.Equals(3), []string{`cortex_ring_members`}, e2e.WithLabelMatchers(matchers...), e2e.WaitMissingMetrics))
|
||||
|
||||
// Get port for the Jaeger gRPC receiver endpoint
|
||||
c, err := newJaegerGRPCClient(tempoDistributor.Endpoint(14250))
|
||||
@@ -56,22 +56,22 @@ func TestServerless(t *testing.T) {
|
||||
require.NoError(t, info.EmitAllBatches(c))
|
||||
|
||||
// ensure trace is created in ingester (trace_idle_time has passed)
|
||||
require.NoError(t, tempoIngester1.WaitSumMetrics(cortex_e2e.Greater(0), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, tempoIngester2.WaitSumMetrics(cortex_e2e.Greater(0), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, tempoIngester3.WaitSumMetrics(cortex_e2e.Greater(0), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, tempoIngester1.WaitSumMetrics(e2e.Greater(0), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, tempoIngester2.WaitSumMetrics(e2e.Greater(0), "tempo_ingester_traces_created_total"))
|
||||
require.NoError(t, tempoIngester3.WaitSumMetrics(e2e.Greater(0), "tempo_ingester_traces_created_total"))
|
||||
|
||||
apiClient := tempoUtil.NewClient("http://"+tempoQueryFrontend.Endpoint(3200), "")
|
||||
|
||||
// flush trace to backend
|
||||
res, err := cortex_e2e.GetRequest("http://" + tempoIngester1.Endpoint(3200) + "/flush")
|
||||
res, err := e2e.DoGet("http://" + tempoIngester1.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
|
||||
res, err = cortex_e2e.GetRequest("http://" + tempoIngester2.Endpoint(3200) + "/flush")
|
||||
res, err = e2e.DoGet("http://" + tempoIngester2.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
|
||||
res, err = cortex_e2e.GetRequest("http://" + tempoIngester3.Endpoint(3200) + "/flush")
|
||||
res, err = e2e.DoGet("http://" + tempoIngester3.Endpoint(3200) + "/flush")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 204, res.StatusCode)
|
||||
|
||||
@@ -83,8 +83,8 @@ func TestServerless(t *testing.T) {
|
||||
searchAndAssertTraceBackend(t, apiClient, info, now.Add(-20*time.Minute).Unix(), now.Unix())
|
||||
}
|
||||
|
||||
func newTempoServerless() *cortex_e2e.HTTPService {
|
||||
s := cortex_e2e.NewHTTPService(
|
||||
func newTempoServerless() *e2e.HTTPService {
|
||||
s := e2e.NewHTTPService(
|
||||
"serverless",
|
||||
"tempo-serverless", // created by buildpacks in ./cmd/tempo-serverless
|
||||
nil,
|
||||
@@ -95,8 +95,8 @@ func newTempoServerless() *cortex_e2e.HTTPService {
|
||||
s.SetEnvVars(map[string]string{
|
||||
"TEMPO_S3_BUCKET": "tempo",
|
||||
"TEMPO_S3_ENDPOINT": "tempo_e2e-minio-9000:9000",
|
||||
"TEMPO_S3_ACCESS_KEY": cortex_e2e_db.MinioAccessKey,
|
||||
"TEMPO_S3_SECRET_KEY": cortex_e2e_db.MinioSecretKey,
|
||||
"TEMPO_S3_ACCESS_KEY": e2e_db.MinioAccessKey,
|
||||
"TEMPO_S3_SECRET_KEY": e2e_db.MinioSecretKey,
|
||||
"TEMPO_S3_INSECURE": "true",
|
||||
"TEMPO_BACKEND": "s3",
|
||||
})
|
||||
|
||||
+31
-32
@@ -8,9 +8,8 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/cortexproject/cortex/integration/e2e"
|
||||
cortex_e2e "github.com/cortexproject/cortex/integration/e2e"
|
||||
"github.com/grafana/dskit/backoff"
|
||||
"github.com/grafana/e2e"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
@@ -18,14 +17,14 @@ const (
|
||||
image = "tempo:latest"
|
||||
)
|
||||
|
||||
func NewTempoAllInOne() *cortex_e2e.HTTPService {
|
||||
args := "-config.file=" + filepath.Join(cortex_e2e.ContainerSharedDir, "config.yaml")
|
||||
func NewTempoAllInOne() *e2e.HTTPService {
|
||||
args := "-config.file=" + filepath.Join(e2e.ContainerSharedDir, "config.yaml")
|
||||
|
||||
s := cortex_e2e.NewHTTPService(
|
||||
s := e2e.NewHTTPService(
|
||||
"tempo",
|
||||
image,
|
||||
cortex_e2e.NewCommandWithoutEntrypoint("/tempo", args),
|
||||
cortex_e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
e2e.NewCommandWithoutEntrypoint("/tempo", args),
|
||||
e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
3200, // http all things
|
||||
14250, // jaeger grpc ingest
|
||||
9411, // zipkin ingest (used by load)
|
||||
@@ -37,14 +36,14 @@ func NewTempoAllInOne() *cortex_e2e.HTTPService {
|
||||
return s
|
||||
}
|
||||
|
||||
func NewTempoDistributor() *cortex_e2e.HTTPService {
|
||||
args := []string{"-config.file=" + filepath.Join(cortex_e2e.ContainerSharedDir, "config.yaml"), "-target=distributor"}
|
||||
func NewTempoDistributor() *e2e.HTTPService {
|
||||
args := []string{"-config.file=" + filepath.Join(e2e.ContainerSharedDir, "config.yaml"), "-target=distributor"}
|
||||
|
||||
s := cortex_e2e.NewHTTPService(
|
||||
s := e2e.NewHTTPService(
|
||||
"distributor",
|
||||
image,
|
||||
cortex_e2e.NewCommandWithoutEntrypoint("/tempo", args...),
|
||||
cortex_e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
e2e.NewCommandWithoutEntrypoint("/tempo", args...),
|
||||
e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
3200,
|
||||
14250,
|
||||
)
|
||||
@@ -54,14 +53,14 @@ func NewTempoDistributor() *cortex_e2e.HTTPService {
|
||||
return s
|
||||
}
|
||||
|
||||
func NewTempoIngester(replica int) *cortex_e2e.HTTPService {
|
||||
args := []string{"-config.file=" + filepath.Join(cortex_e2e.ContainerSharedDir, "config.yaml"), "-target=ingester"}
|
||||
func NewTempoIngester(replica int) *e2e.HTTPService {
|
||||
args := []string{"-config.file=" + filepath.Join(e2e.ContainerSharedDir, "config.yaml"), "-target=ingester"}
|
||||
|
||||
s := cortex_e2e.NewHTTPService(
|
||||
s := e2e.NewHTTPService(
|
||||
"ingester-"+strconv.Itoa(replica),
|
||||
image,
|
||||
cortex_e2e.NewCommandWithoutEntrypoint("/tempo", args...),
|
||||
cortex_e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
e2e.NewCommandWithoutEntrypoint("/tempo", args...),
|
||||
e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
3200,
|
||||
)
|
||||
|
||||
@@ -70,14 +69,14 @@ func NewTempoIngester(replica int) *cortex_e2e.HTTPService {
|
||||
return s
|
||||
}
|
||||
|
||||
func NewTempoQueryFrontend() *cortex_e2e.HTTPService {
|
||||
args := []string{"-config.file=" + filepath.Join(cortex_e2e.ContainerSharedDir, "config.yaml"), "-target=query-frontend"}
|
||||
func NewTempoQueryFrontend() *e2e.HTTPService {
|
||||
args := []string{"-config.file=" + filepath.Join(e2e.ContainerSharedDir, "config.yaml"), "-target=query-frontend"}
|
||||
|
||||
s := cortex_e2e.NewHTTPService(
|
||||
s := e2e.NewHTTPService(
|
||||
"query-frontend",
|
||||
image,
|
||||
cortex_e2e.NewCommandWithoutEntrypoint("/tempo", args...),
|
||||
cortex_e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
e2e.NewCommandWithoutEntrypoint("/tempo", args...),
|
||||
e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
3200,
|
||||
)
|
||||
|
||||
@@ -86,14 +85,14 @@ func NewTempoQueryFrontend() *cortex_e2e.HTTPService {
|
||||
return s
|
||||
}
|
||||
|
||||
func NewTempoQuerier() *cortex_e2e.HTTPService {
|
||||
args := []string{"-config.file=" + filepath.Join(cortex_e2e.ContainerSharedDir, "config.yaml"), "-target=querier"}
|
||||
func NewTempoQuerier() *e2e.HTTPService {
|
||||
args := []string{"-config.file=" + filepath.Join(e2e.ContainerSharedDir, "config.yaml"), "-target=querier"}
|
||||
|
||||
s := cortex_e2e.NewHTTPService(
|
||||
s := e2e.NewHTTPService(
|
||||
"querier",
|
||||
image,
|
||||
cortex_e2e.NewCommandWithoutEntrypoint("/tempo", args...),
|
||||
cortex_e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
e2e.NewCommandWithoutEntrypoint("/tempo", args...),
|
||||
e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
3200,
|
||||
)
|
||||
|
||||
@@ -102,14 +101,14 @@ func NewTempoQuerier() *cortex_e2e.HTTPService {
|
||||
return s
|
||||
}
|
||||
|
||||
func NewTempoScalableSingleBinary(replica int) *cortex_e2e.HTTPService {
|
||||
args := []string{"-config.file=" + filepath.Join(cortex_e2e.ContainerSharedDir, "config.yaml"), "-target=scalable-single-binary", "-querier.frontend-address=tempo-" + strconv.Itoa(replica) + ":9095"}
|
||||
func NewTempoScalableSingleBinary(replica int) *e2e.HTTPService {
|
||||
args := []string{"-config.file=" + filepath.Join(e2e.ContainerSharedDir, "config.yaml"), "-target=scalable-single-binary", "-querier.frontend-address=tempo-" + strconv.Itoa(replica) + ":9095"}
|
||||
|
||||
s := cortex_e2e.NewHTTPService(
|
||||
s := e2e.NewHTTPService(
|
||||
"tempo-"+strconv.Itoa(replica),
|
||||
image,
|
||||
cortex_e2e.NewCommandWithoutEntrypoint("/tempo", args...),
|
||||
cortex_e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
e2e.NewCommandWithoutEntrypoint("/tempo", args...),
|
||||
e2e.NewHTTPReadinessProbe(3200, "/ready", 200, 299),
|
||||
3200, // http all things
|
||||
14250, // jaeger grpc ingest
|
||||
// 9411, // zipkin ingest (used by load)
|
||||
|
||||
@@ -23,13 +23,15 @@ const (
|
||||
jaegerProtoGenPkgPath = "github.com/jaegertracing/jaeger/proto-gen"
|
||||
jaegerModelPkgPath = "github.com/jaegertracing/jaeger/model"
|
||||
otelProtoPkgPath = "go.opentelemetry.io/collector"
|
||||
// etcd path can be removed once upgrade to grpc >v1.38 is released (tentatively next release from v3.5.1)
|
||||
etcdAPIProtoPkgPath = "go.etcd.io/etcd/api/v3"
|
||||
)
|
||||
|
||||
func init() {
|
||||
encoding.RegisterCodec(newCodec())
|
||||
}
|
||||
|
||||
// gogoCodec forces the use of gogo proto marshalling/unmarshalling for Tempo/Cortex/Jaeger structs
|
||||
// gogoCodec forces the use of gogo proto marshalling/unmarshalling for Tempo/Cortex/Jaeger/etcd structs
|
||||
type gogoCodec struct {
|
||||
}
|
||||
|
||||
@@ -48,7 +50,7 @@ func (c *gogoCodec) Name() string {
|
||||
func (c *gogoCodec) Marshal(v interface{}) ([]byte, error) {
|
||||
t := reflect.TypeOf(v)
|
||||
elem := t.Elem()
|
||||
// use gogo proto only for Tempo/Cortex/Jaeger types
|
||||
// use gogo proto only for Tempo/Cortex/Jaeger/etcd types
|
||||
if useGogo(elem) {
|
||||
return gogoproto.Marshal(v.(gogoproto.Message))
|
||||
}
|
||||
@@ -59,18 +61,18 @@ func (c *gogoCodec) Marshal(v interface{}) ([]byte, error) {
|
||||
func (c *gogoCodec) Unmarshal(data []byte, v interface{}) error {
|
||||
t := reflect.TypeOf(v)
|
||||
elem := t.Elem()
|
||||
// use gogo proto only for Tempo/Cortex/Jaeger types
|
||||
// use gogo proto only for Tempo/Cortex/Jaeger/etcd types
|
||||
if useGogo(elem) {
|
||||
return gogoproto.Unmarshal(data, v.(gogoproto.Message))
|
||||
}
|
||||
return proto.Unmarshal(data, v.(proto.Message))
|
||||
}
|
||||
|
||||
// useGogo checks if the element belongs to Tempo/Cortex/Jaeger packages
|
||||
// useGogo checks if the element belongs to Tempo/Cortex/Jaeger/etcd packages
|
||||
func useGogo(t reflect.Type) bool {
|
||||
if t == nil {
|
||||
return false
|
||||
}
|
||||
pkgPath := t.PkgPath()
|
||||
return strings.HasPrefix(pkgPath, tempoProtoGenPkgPath) || strings.HasPrefix(pkgPath, cortexPath) || strings.HasPrefix(pkgPath, jaegerProtoGenPkgPath) || strings.HasPrefix(pkgPath, jaegerModelPkgPath) || strings.HasPrefix(pkgPath, otelProtoPkgPath)
|
||||
return strings.HasPrefix(pkgPath, tempoProtoGenPkgPath) || strings.HasPrefix(pkgPath, cortexPath) || strings.HasPrefix(pkgPath, jaegerProtoGenPkgPath) || strings.HasPrefix(pkgPath, jaegerModelPkgPath) || strings.HasPrefix(pkgPath, otelProtoPkgPath) || strings.HasPrefix(pkgPath, etcdAPIProtoPkgPath)
|
||||
}
|
||||
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
package images
|
||||
|
||||
// If you change the image tag, remember to update it in the preloading done
|
||||
// by GitHub actions (see .github/workflows/*).
|
||||
|
||||
// These are variables so that they can be modified.
|
||||
|
||||
var (
|
||||
Memcached = "memcached:1.6.1"
|
||||
Minio = "minio/minio:RELEASE.2021-10-13T00-23-17Z"
|
||||
KES = "minio/kes:v0.17.1"
|
||||
Consul = "consul:1.8.4"
|
||||
ETCD = "gcr.io/etcd-development/etcd:v3.4.7"
|
||||
DynamoDB = "amazon/dynamodb-local:1.11.477"
|
||||
BigtableEmulator = "shopify/bigtable-emulator:0.1.0"
|
||||
Cassandra = "rinscy/cassandra:3.11.0"
|
||||
SwiftEmulator = "bouncestorage/swift-aio:55ba4331"
|
||||
)
|
||||
+1
@@ -0,0 +1 @@
|
||||
(github.com/go-kit/log.Logger).Log
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
output:
|
||||
format: line-number
|
||||
|
||||
linters:
|
||||
enable:
|
||||
- goimports
|
||||
- gofmt
|
||||
- misspell
|
||||
- revive
|
||||
|
||||
linters-settings:
|
||||
errcheck:
|
||||
# path to a file containing a list of functions to exclude from checking
|
||||
# see https://github.com/kisielk/errcheck#excluding-functions for details
|
||||
exclude: ./.errcheck-exclude
|
||||
goimports:
|
||||
local-prefixes: "github.com/grafana/e2e"
|
||||
|
||||
run:
|
||||
timeout: 5m
|
||||
|
||||
# List of build tags, all linters use it.
|
||||
build-tags:
|
||||
- netgo
|
||||
- requires_docker
|
||||
+201
@@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright 2021 Grafana Labs
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
.PHONY: test
|
||||
test:
|
||||
go test -tags netgo -timeout 30m -race -count 1 ./...
|
||||
|
||||
.PHONY: lint
|
||||
lint:
|
||||
go run github.com/client9/misspell/cmd/misspell@v0.3.4 -error README.md LICENSE
|
||||
|
||||
# Configured via .golangci.yml.
|
||||
go run github.com/golangci/golangci-lint/cmd/golangci-lint@v1.43.0 run
|
||||
|
||||
.PHONY: integration
|
||||
integration:
|
||||
go test -tags netgo,requires_docker -timeout 30m -v -count=1 ./
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
# Grafana E2E
|
||||
|
||||
This library contains utilities that are useful for running E2E tests using docker containers.
|
||||
|
||||
## License
|
||||
|
||||
[Apache 2.0 License](https://github.com/grafana/dskit/blob/main/LICENSE)
|
||||
Generated
Vendored
Generated
Vendored
+14
-10
@@ -5,8 +5,8 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/cortexproject/cortex/integration/e2e"
|
||||
"github.com/cortexproject/cortex/integration/e2e/images"
|
||||
"github.com/grafana/e2e"
|
||||
"github.com/grafana/e2e/images"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -41,7 +41,7 @@ func newMinio(port int, envVars map[string]string, bktNames ...string) *e2e.HTTP
|
||||
m := e2e.NewHTTPService(
|
||||
fmt.Sprintf("minio-%v", port),
|
||||
images.Minio,
|
||||
// Create the "cortex" bucket before starting minio
|
||||
// Create the buckets before starting minio
|
||||
e2e.NewCommandWithoutEntrypoint("sh", "-c", strings.Join(commands, " && ")),
|
||||
e2e.NewHTTPReadinessProbe(port, "/minio/health/ready", 200, 200),
|
||||
port,
|
||||
@@ -55,19 +55,23 @@ func newMinio(port int, envVars map[string]string, bktNames ...string) *e2e.HTTP
|
||||
}
|
||||
|
||||
// NewKES returns KES server, used as a local key management store
|
||||
func NewKES(port int, serverKeyFile, serverCertFile, rootCertFile string) *e2e.HTTPService {
|
||||
func NewKES(port int, serverName, serverKeyFile, serverCertFile, clientKeyFile, clientCertFile, rootCertFile, hostSharedDir string) (*e2e.HTTPService, error) {
|
||||
// Run this as a shell command, so sub-shell can evaluate 'identity' of root user.
|
||||
command := fmt.Sprintf("/kes server --addr 0.0.0.0:%d --key=%s --cert=%s --root=$(/kes tool identity of %s) --auth=off --quiet",
|
||||
port, filepath.Join(e2e.ContainerSharedDir, serverKeyFile), filepath.Join(e2e.ContainerSharedDir, serverCertFile), filepath.Join(e2e.ContainerSharedDir, rootCertFile))
|
||||
command := fmt.Sprintf("/kes server --addr 0.0.0.0:%d --key=%s --cert=%s --root=$(/kes tool identity of %s) --auth=off",
|
||||
port, filepath.Join(e2e.ContainerSharedDir, serverKeyFile), filepath.Join(e2e.ContainerSharedDir, serverCertFile), filepath.Join(e2e.ContainerSharedDir, clientCertFile))
|
||||
|
||||
m := e2e.NewHTTPService(
|
||||
readinessProbe, err := e2e.NewHTTPSReadinessProbe(port, "/v1/status", serverName, filepath.Join(hostSharedDir, clientKeyFile), filepath.Join(hostSharedDir, clientCertFile), filepath.Join(hostSharedDir, rootCertFile), 200, 200)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return e2e.NewHTTPService(
|
||||
"kes",
|
||||
images.KES,
|
||||
e2e.NewCommandWithoutEntrypoint("sh", "-c", command),
|
||||
nil, // KES only supports https calls - TODO make Scenario able to call https or poll plain TCP socket.
|
||||
readinessProbe,
|
||||
port,
|
||||
)
|
||||
return m
|
||||
), nil
|
||||
}
|
||||
|
||||
func NewConsul() *e2e.HTTPService {
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package images
|
||||
|
||||
var (
|
||||
// These are variables so that they can be modified.
|
||||
Memcached = "memcached:1.6.12"
|
||||
Minio = "minio/minio:RELEASE.2021-10-13T00-23-17Z"
|
||||
KES = "minio/kes:v0.17.1"
|
||||
Consul = "consul:1.8.15"
|
||||
ETCD = "gcr.io/etcd-development/etcd:v3.4.13"
|
||||
DynamoDB = "amazon/dynamodb-local:1.17.0"
|
||||
BigtableEmulator = "shopify/bigtable-emulator:0.1.0"
|
||||
Cassandra = "rinscy/cassandra:3.11.0"
|
||||
SwiftEmulator = "bouncestorage/swift-aio:55ba4331"
|
||||
)
|
||||
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
+90
-21
@@ -4,8 +4,10 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
tsdb_errors "github.com/prometheus/prometheus/tsdb/errors"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -42,8 +44,19 @@ func NewScenario(networkName string) (*Scenario, error) {
|
||||
// the previous tests run didn't cleanup correctly.
|
||||
s.shutdown()
|
||||
|
||||
args := []string{
|
||||
"network", "create", networkName,
|
||||
}
|
||||
|
||||
if extraArgs := os.Getenv("DOCKER_NETWORK_CREATE_EXTRA_ARGS"); extraArgs != "" {
|
||||
args = append(
|
||||
args,
|
||||
strings.Split(extraArgs, ",")...,
|
||||
)
|
||||
}
|
||||
|
||||
// Setup the docker network.
|
||||
if out, err := RunCommandAndGetOutput("docker", "network", "create", networkName); err != nil {
|
||||
if out, err := RunCommandAndGetOutput("docker", args...); err != nil {
|
||||
logger.Log(string(out))
|
||||
s.clean()
|
||||
return nil, errors.Wrapf(err, "create docker network '%s'", networkName)
|
||||
@@ -79,24 +92,51 @@ func (s *Scenario) StartAndWaitReady(services ...Service) error {
|
||||
}
|
||||
|
||||
func (s *Scenario) Start(services ...Service) error {
|
||||
for _, service := range services {
|
||||
logger.Log("Starting", service.Name())
|
||||
var (
|
||||
wg = sync.WaitGroup{}
|
||||
startedMx = sync.Mutex{}
|
||||
started = make([]Service, 0, len(services))
|
||||
errsMx = sync.Mutex{}
|
||||
errs = tsdb_errors.NewMulti()
|
||||
)
|
||||
|
||||
// Ensure another service with the same name doesn't exist.
|
||||
if s.isRegistered(service.Name()) {
|
||||
return fmt.Errorf("another service with the same name '%s' has already been started", service.Name())
|
||||
}
|
||||
|
||||
// Start the service.
|
||||
if err := service.Start(s.networkName, s.SharedDir()); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Add to the list of services.
|
||||
s.services = append(s.services, service)
|
||||
// Ensure provided services don't conflict with existing ones.
|
||||
if err := s.assertNoConflicts(services...); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
// Start the services concurrently.
|
||||
wg.Add(len(services))
|
||||
|
||||
for _, service := range services {
|
||||
go func(service Service) {
|
||||
defer wg.Done()
|
||||
|
||||
logger.Log("Starting", service.Name())
|
||||
|
||||
// Start the service.
|
||||
if err := service.Start(s.networkName, s.SharedDir()); err != nil {
|
||||
errsMx.Lock()
|
||||
errs.Add(err)
|
||||
errsMx.Unlock()
|
||||
return
|
||||
}
|
||||
|
||||
logger.Log("Started", service.Name())
|
||||
|
||||
startedMx.Lock()
|
||||
started = append(started, service)
|
||||
startedMx.Unlock()
|
||||
}(service)
|
||||
}
|
||||
|
||||
// Wait until all services have been started.
|
||||
wg.Wait()
|
||||
|
||||
// Add the successfully started services to the scenario.
|
||||
s.services = append(s.services, started...)
|
||||
|
||||
return errs.Err()
|
||||
}
|
||||
|
||||
func (s *Scenario) Stop(services ...Service) error {
|
||||
@@ -139,6 +179,25 @@ func (s *Scenario) Close() {
|
||||
s.clean()
|
||||
}
|
||||
|
||||
func (s *Scenario) assertNoConflicts(services ...Service) error {
|
||||
// Build a map of services already registered.
|
||||
names := map[string]struct{}{}
|
||||
for _, service := range s.services {
|
||||
names[service.Name()] = struct{}{}
|
||||
}
|
||||
|
||||
// Check if input services conflict with already existing ones or between them.
|
||||
for _, service := range services {
|
||||
if _, exists := names[service.Name()]; exists {
|
||||
return fmt.Errorf("another service with the same name '%s' exists", service.Name())
|
||||
}
|
||||
|
||||
names[service.Name()] = struct{}{}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// TODO(bwplotka): Add comments.
|
||||
func (s *Scenario) clean() {
|
||||
if err := os.RemoveAll(s.sharedDir); err != nil {
|
||||
@@ -147,13 +206,23 @@ func (s *Scenario) clean() {
|
||||
}
|
||||
|
||||
func (s *Scenario) shutdown() {
|
||||
// Kill the services in the opposite order.
|
||||
for i := len(s.services) - 1; i >= 0; i-- {
|
||||
if err := s.services[i].Kill(); err != nil {
|
||||
logger.Log("Unable to kill service", s.services[i].Name(), ":", err.Error())
|
||||
}
|
||||
// Kill the services concurrently.
|
||||
wg := sync.WaitGroup{}
|
||||
wg.Add(len(s.services))
|
||||
|
||||
for _, srv := range s.services {
|
||||
go func(service Service) {
|
||||
defer wg.Done()
|
||||
|
||||
if err := service.Kill(); err != nil {
|
||||
logger.Log("Unable to kill service", service.Name(), ":", err.Error())
|
||||
}
|
||||
}(srv)
|
||||
}
|
||||
|
||||
// Wait until all services have been killed.
|
||||
wg.Wait()
|
||||
|
||||
// Ensure there are no leftover containers.
|
||||
if out, err := RunCommandAndGetOutput(
|
||||
"docker",
|
||||
Generated
Vendored
+47
-8
@@ -3,6 +3,8 @@ package e2e
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"crypto/x509"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
@@ -36,6 +38,7 @@ type ConcreteService struct {
|
||||
env map[string]string
|
||||
user string
|
||||
command *Command
|
||||
cmd *exec.Cmd
|
||||
readiness ReadinessProbe
|
||||
|
||||
// Maps container ports to dynamically binded local ports.
|
||||
@@ -101,10 +104,10 @@ func (s *ConcreteService) Start(networkName, sharedDir string) (err error) {
|
||||
}
|
||||
}()
|
||||
|
||||
cmd := exec.Command("docker", s.buildDockerRunArgs(networkName, sharedDir)...)
|
||||
cmd.Stdout = &LinePrefixLogger{prefix: s.name + ": ", logger: logger}
|
||||
cmd.Stderr = &LinePrefixLogger{prefix: s.name + ": ", logger: logger}
|
||||
if err = cmd.Start(); err != nil {
|
||||
s.cmd = exec.Command("docker", s.buildDockerRunArgs(networkName, sharedDir)...)
|
||||
s.cmd.Stdout = &LinePrefixLogger{prefix: s.name + ": ", logger: logger}
|
||||
s.cmd.Stderr = &LinePrefixLogger{prefix: s.name + ": ", logger: logger}
|
||||
if err = s.cmd.Start(); err != nil {
|
||||
return err
|
||||
}
|
||||
s.usedNetworkName = networkName
|
||||
@@ -152,7 +155,7 @@ func (s *ConcreteService) Stop() error {
|
||||
}
|
||||
s.usedNetworkName = ""
|
||||
|
||||
return nil
|
||||
return s.cmd.Wait()
|
||||
}
|
||||
|
||||
func (s *ConcreteService) Kill() error {
|
||||
@@ -173,6 +176,7 @@ func (s *ConcreteService) Kill() error {
|
||||
|
||||
s.usedNetworkName = ""
|
||||
|
||||
logger.Log("Killed", s.name)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -384,17 +388,22 @@ type ReadinessProbe interface {
|
||||
Ready(service *ConcreteService) (err error)
|
||||
}
|
||||
|
||||
// HTTPReadinessProbe checks readiness by making HTTP call and checking for expected HTTP status code
|
||||
// HTTPReadinessProbe checks readiness by making HTTP(S) call and checking for expected response status code.
|
||||
type HTTPReadinessProbe struct {
|
||||
schema string
|
||||
port int
|
||||
path string
|
||||
expectedStatusRangeStart int
|
||||
expectedStatusRangeEnd int
|
||||
expectedContent []string
|
||||
|
||||
// The TLS config to use when issuing the HTTPS request.
|
||||
clientTLSConfig *tls.Config
|
||||
}
|
||||
|
||||
func NewHTTPReadinessProbe(port int, path string, expectedStatusRangeStart, expectedStatusRangeEnd int, expectedContent ...string) *HTTPReadinessProbe {
|
||||
return &HTTPReadinessProbe{
|
||||
schema: "http",
|
||||
port: port,
|
||||
path: path,
|
||||
expectedStatusRangeStart: expectedStatusRangeStart,
|
||||
@@ -403,6 +412,36 @@ func NewHTTPReadinessProbe(port int, path string, expectedStatusRangeStart, expe
|
||||
}
|
||||
}
|
||||
|
||||
func NewHTTPSReadinessProbe(port int, path, serverName, clientKeyFile, clientCertFile, rootCertFile string, expectedStatusRangeStart, expectedStatusRangeEnd int, expectedContent ...string) (*HTTPReadinessProbe, error) {
|
||||
// Load client certificate and private key.
|
||||
cert, err := tls.LoadX509KeyPair(clientCertFile, clientKeyFile)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error creating x509 keypair from client cert file %s and client key file %s", clientCertFile, clientKeyFile)
|
||||
}
|
||||
|
||||
caCert, err := ioutil.ReadFile(rootCertFile)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error opening root CA cert file %s", rootCertFile)
|
||||
}
|
||||
|
||||
caCertPool := x509.NewCertPool()
|
||||
caCertPool.AppendCertsFromPEM(caCert)
|
||||
|
||||
return &HTTPReadinessProbe{
|
||||
schema: "https",
|
||||
port: port,
|
||||
path: path,
|
||||
expectedStatusRangeStart: expectedStatusRangeStart,
|
||||
expectedStatusRangeEnd: expectedStatusRangeEnd,
|
||||
expectedContent: expectedContent,
|
||||
clientTLSConfig: &tls.Config{
|
||||
Certificates: []tls.Certificate{cert},
|
||||
RootCAs: caCertPool,
|
||||
ServerName: serverName,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (p *HTTPReadinessProbe) Ready(service *ConcreteService) (err error) {
|
||||
endpoint := service.Endpoint(p.port)
|
||||
if endpoint == "" {
|
||||
@@ -411,7 +450,7 @@ func (p *HTTPReadinessProbe) Ready(service *ConcreteService) (err error) {
|
||||
return errors.New("service has stopped")
|
||||
}
|
||||
|
||||
res, err := GetRequest("http://" + endpoint + p.path)
|
||||
res, err := DoGetTLS(p.schema+"://"+endpoint+p.path, p.clientTLSConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -522,7 +561,7 @@ func (s *HTTPService) Metrics() (_ string, err error) {
|
||||
localPort := s.networkPortsContainerToLocal[s.httpPort]
|
||||
|
||||
// Fetch metrics.
|
||||
res, err := GetRequest(fmt.Sprintf("http://localhost:%d/metrics", localPort))
|
||||
res, err := DoGet(fmt.Sprintf("http://localhost:%d/metrics", localPort))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
Generated
Vendored
+86
-9
@@ -2,6 +2,8 @@ package e2e
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"math"
|
||||
"math/rand"
|
||||
@@ -72,18 +74,37 @@ func BuildArgs(flags map[string]string) []string {
|
||||
return args
|
||||
}
|
||||
|
||||
func GetRequest(url string) (*http.Response, error) {
|
||||
const timeout = 1 * time.Second
|
||||
|
||||
client := &http.Client{Timeout: timeout}
|
||||
return client.Get(url)
|
||||
// DoGet performs a HTTP GET request towards the supplied URL and using a
|
||||
// timeout of 1 second.
|
||||
func DoGet(url string) (*http.Response, error) {
|
||||
return doRequest("GET", url, nil, nil)
|
||||
}
|
||||
|
||||
func PostRequest(url string) (*http.Response, error) {
|
||||
const timeout = 1 * time.Second
|
||||
// DoGetTLS is like DoGet but allows to configure a TLS config.
|
||||
func DoGetTLS(url string, tlsConfig *tls.Config) (*http.Response, error) {
|
||||
return doRequest("GET", url, nil, tlsConfig)
|
||||
}
|
||||
|
||||
client := &http.Client{Timeout: timeout}
|
||||
return client.Post(url, "", strings.NewReader(""))
|
||||
// DoPost performs a HTTP POST request towards the supplied URL with an empty
|
||||
// body and using a timeout of 1 second.
|
||||
func DoPost(url string) (*http.Response, error) {
|
||||
return doRequest("POST", url, strings.NewReader(""), nil)
|
||||
}
|
||||
|
||||
func doRequest(method, url string, body io.Reader, tlsConfig *tls.Config) (*http.Response, error) {
|
||||
req, err := http.NewRequest(method, url, body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
client := &http.Client{
|
||||
Timeout: time.Second,
|
||||
Transport: &http.Transport{
|
||||
TLSClientConfig: tlsConfig,
|
||||
},
|
||||
}
|
||||
|
||||
return client.Do(req)
|
||||
}
|
||||
|
||||
// TimeToMilliseconds returns the input time as milliseconds, using the same
|
||||
@@ -118,6 +139,11 @@ func GenerateSeries(name string, ts time.Time, additionalLabels ...prompb.Label)
|
||||
// Generate the series
|
||||
series = append(series, prompb.TimeSeries{
|
||||
Labels: lbls,
|
||||
Exemplars: []prompb.Exemplar{
|
||||
{Value: value, Timestamp: tsMillis, Labels: []prompb.Label{
|
||||
{Name: "trace_id", Value: "1234"},
|
||||
}},
|
||||
},
|
||||
Samples: []prompb.Sample{
|
||||
{Value: value, Timestamp: tsMillis},
|
||||
},
|
||||
@@ -139,6 +165,52 @@ func GenerateSeries(name string, ts time.Time, additionalLabels ...prompb.Label)
|
||||
return
|
||||
}
|
||||
|
||||
func GenerateNSeries(nSeries, nExemplars int, name func() string, ts time.Time, additionalLabels func() []prompb.Label) (series []prompb.TimeSeries, vector model.Vector) {
|
||||
tsMillis := TimeToMilliseconds(ts)
|
||||
|
||||
// Generate the series
|
||||
for i := 0; i < nSeries; i++ {
|
||||
lbls := []prompb.Label{
|
||||
{Name: labels.MetricName, Value: name()},
|
||||
}
|
||||
if additionalLabels != nil {
|
||||
lbls = append(lbls, additionalLabels()...)
|
||||
}
|
||||
|
||||
value := rand.Float64()
|
||||
|
||||
exemplars := []prompb.Exemplar{}
|
||||
if i < nExemplars {
|
||||
exemplars = []prompb.Exemplar{
|
||||
{Value: value, Timestamp: tsMillis, Labels: []prompb.Label{{Name: "trace_id", Value: "1234"}}},
|
||||
}
|
||||
}
|
||||
|
||||
series = append(series, prompb.TimeSeries{
|
||||
Labels: lbls,
|
||||
Samples: []prompb.Sample{
|
||||
{Value: value, Timestamp: tsMillis},
|
||||
},
|
||||
Exemplars: exemplars,
|
||||
})
|
||||
}
|
||||
|
||||
// Generate the expected vector when querying it
|
||||
for i := 0; i < nSeries; i++ {
|
||||
metric := model.Metric{}
|
||||
for _, lbl := range series[i].Labels {
|
||||
metric[model.LabelName(lbl.Name)] = model.LabelValue(lbl.Value)
|
||||
}
|
||||
|
||||
vector = append(vector, &model.Sample{
|
||||
Metric: metric,
|
||||
Value: model.SampleValue(series[i].Samples[0].Value),
|
||||
Timestamp: model.Time(tsMillis),
|
||||
})
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// GetTempDirectory creates a temporary directory for shared integration
|
||||
// test files, either in the working directory or a directory referenced by
|
||||
// the E2E_TEMP_DIR environment variable
|
||||
@@ -161,6 +233,11 @@ func GetTempDirectory() (string, error) {
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
// Allow use of the temporary directory for testing with non-root
|
||||
// users.
|
||||
if err := os.Chmod(tmpDir, 0777); err != nil {
|
||||
return "", err
|
||||
}
|
||||
absDir, err := filepath.Abs(tmpDir)
|
||||
if err != nil {
|
||||
_ = os.RemoveAll(tmpDir)
|
||||
+2
-2
@@ -18,7 +18,7 @@ import (
|
||||
// MemcachedCache is a memcached-based cache.
|
||||
type MemcachedCache struct {
|
||||
logger log.Logger
|
||||
memcached cacheutil.RemoteCacheClient
|
||||
memcached cacheutil.MemcachedClient
|
||||
name string
|
||||
|
||||
// Metrics.
|
||||
@@ -27,7 +27,7 @@ type MemcachedCache struct {
|
||||
}
|
||||
|
||||
// NewMemcachedCache makes a new MemcachedCache.
|
||||
func NewMemcachedCache(name string, logger log.Logger, memcached cacheutil.RemoteCacheClient, reg prometheus.Registerer) *MemcachedCache {
|
||||
func NewMemcachedCache(name string, logger log.Logger, memcached cacheutil.MemcachedClient, reg prometheus.Registerer) *MemcachedCache {
|
||||
c := &MemcachedCache{
|
||||
logger: logger,
|
||||
memcached: memcached,
|
||||
|
||||
-69
@@ -1,69 +0,0 @@
|
||||
// Copyright (c) The Thanos Authors.
|
||||
// Licensed under the Apache License 2.0.
|
||||
|
||||
package cache
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/go-kit/log"
|
||||
"github.com/go-kit/log/level"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||
"github.com/thanos-io/thanos/pkg/cacheutil"
|
||||
)
|
||||
|
||||
// RedisCache is a redis cache.
|
||||
type RedisCache struct {
|
||||
logger log.Logger
|
||||
redisClient *cacheutil.RedisClient
|
||||
name string
|
||||
|
||||
// Metrics.
|
||||
requests prometheus.Counter
|
||||
hits prometheus.Counter
|
||||
}
|
||||
|
||||
// NewRedisCache makes a new RedisCache.
|
||||
func NewRedisCache(name string, logger log.Logger, redisClient *cacheutil.RedisClient, reg prometheus.Registerer) *RedisCache {
|
||||
c := &RedisCache{
|
||||
logger: logger,
|
||||
redisClient: redisClient,
|
||||
name: name,
|
||||
}
|
||||
|
||||
c.requests = promauto.With(reg).NewCounter(prometheus.CounterOpts{
|
||||
Name: "thanos_cache_redis_requests_total",
|
||||
Help: "Total number of items requests to redis.",
|
||||
ConstLabels: prometheus.Labels{"name": name},
|
||||
})
|
||||
|
||||
c.hits = promauto.With(reg).NewCounter(prometheus.CounterOpts{
|
||||
Name: "thanos_cache_redis_hits_total",
|
||||
Help: "Total number of items requests to the cache that were a hit.",
|
||||
ConstLabels: prometheus.Labels{"name": name},
|
||||
})
|
||||
|
||||
level.Info(logger).Log("msg", "created redis cache")
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
// Store data identified by keys.
|
||||
func (c *RedisCache) Store(ctx context.Context, data map[string][]byte, ttl time.Duration) {
|
||||
c.redisClient.SetMulti(ctx, data, ttl)
|
||||
}
|
||||
|
||||
// Fetch fetches multiple keys and returns a map containing cache hits, along with a list of missing keys.
|
||||
// In case of error, it logs and return an empty cache hits map.
|
||||
func (c *RedisCache) Fetch(ctx context.Context, keys []string) map[string][]byte {
|
||||
c.requests.Add(float64(len(keys)))
|
||||
results := c.redisClient.GetMulti(ctx, keys)
|
||||
c.hits.Add(float64(len(results)))
|
||||
return results
|
||||
}
|
||||
|
||||
func (c *RedisCache) Name() string {
|
||||
return c.name
|
||||
}
|
||||
+6
-15
@@ -29,7 +29,6 @@ import (
|
||||
|
||||
const (
|
||||
opSet = "set"
|
||||
opSetMulti = "setmulti"
|
||||
opGetMulti = "getmulti"
|
||||
reasonMaxItemSize = "max-item-size"
|
||||
reasonAsyncBufferFull = "async-buffer-full"
|
||||
@@ -59,14 +58,9 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
_ RemoteCacheClient = (*memcachedClient)(nil)
|
||||
_ RemoteCacheClient = (*RedisClient)(nil)
|
||||
)
|
||||
|
||||
// RemoteCacheClient is a high level client to interact with remote cache.
|
||||
type RemoteCacheClient interface {
|
||||
// GetMulti fetches multiple keys at once from remoteCache. In case of error,
|
||||
// MemcachedClient is a high level client to interact with memcached.
|
||||
type MemcachedClient interface {
|
||||
// GetMulti fetches multiple keys at once from memcached. In case of error,
|
||||
// an empty map is returned and the error tracked/logged.
|
||||
GetMulti(ctx context.Context, keys []string) map[string][]byte
|
||||
|
||||
@@ -79,16 +73,13 @@ type RemoteCacheClient interface {
|
||||
Stop()
|
||||
}
|
||||
|
||||
// MemcachedClient for compatible.
|
||||
type MemcachedClient = RemoteCacheClient
|
||||
|
||||
// memcachedClientBackend is an interface used to mock the underlying client in tests.
|
||||
type memcachedClientBackend interface {
|
||||
GetMulti(keys []string) (map[string]*memcache.Item, error)
|
||||
Set(item *memcache.Item) error
|
||||
}
|
||||
|
||||
// MemcachedClientConfig is the config accepted by RemoteCacheClient.
|
||||
// MemcachedClientConfig is the config accepted by MemcachedClient.
|
||||
type MemcachedClientConfig struct {
|
||||
// Addresses specifies the list of memcached addresses. The addresses get
|
||||
// resolved with the DNS provider.
|
||||
@@ -205,7 +196,7 @@ type memcachedGetMultiResult struct {
|
||||
err error
|
||||
}
|
||||
|
||||
// NewMemcachedClient makes a new RemoteCacheClient.
|
||||
// NewMemcachedClient makes a new MemcachedClient.
|
||||
func NewMemcachedClient(logger log.Logger, name string, conf []byte, reg prometheus.Registerer) (*memcachedClient, error) {
|
||||
config, err := parseMemcachedClientConfig(conf)
|
||||
if err != nil {
|
||||
@@ -215,7 +206,7 @@ func NewMemcachedClient(logger log.Logger, name string, conf []byte, reg prometh
|
||||
return NewMemcachedClientWithConfig(logger, name, config, reg)
|
||||
}
|
||||
|
||||
// NewMemcachedClientWithConfig makes a new RemoteCacheClient.
|
||||
// NewMemcachedClientWithConfig makes a new MemcachedClient.
|
||||
func NewMemcachedClientWithConfig(logger log.Logger, name string, config MemcachedClientConfig, reg prometheus.Registerer) (*memcachedClient, error) {
|
||||
if err := config.validate(); err != nil {
|
||||
return nil, err
|
||||
|
||||
-316
@@ -1,316 +0,0 @@
|
||||
// Copyright (c) The Thanos Authors.
|
||||
// Licensed under the Apache License 2.0.
|
||||
|
||||
package cacheutil
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
"unsafe"
|
||||
|
||||
"github.com/go-kit/log"
|
||||
"github.com/go-kit/log/level"
|
||||
"github.com/go-redis/redis/v8"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||
"github.com/thanos-io/thanos/pkg/extprom"
|
||||
"github.com/thanos-io/thanos/pkg/gate"
|
||||
"golang.org/x/sync/errgroup"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
var (
|
||||
// DefaultRedisClientConfig is default redis config.
|
||||
DefaultRedisClientConfig = RedisClientConfig{
|
||||
DialTimeout: time.Second * 5,
|
||||
ReadTimeout: time.Second * 3,
|
||||
WriteTimeout: time.Second * 3,
|
||||
PoolSize: 100,
|
||||
MinIdleConns: 10,
|
||||
IdleTimeout: time.Minute * 5,
|
||||
MaxGetMultiConcurrency: 100,
|
||||
GetMultiBatchSize: 100,
|
||||
MaxSetMultiConcurrency: 100,
|
||||
SetMultiBatchSize: 100,
|
||||
}
|
||||
)
|
||||
|
||||
// RedisClientConfig is the config accepted by RedisClient.
|
||||
type RedisClientConfig struct {
|
||||
// Addr specifies the addresses of redis server.
|
||||
Addr string `yaml:"addr"`
|
||||
|
||||
// Use the specified Username to authenticate the current connection
|
||||
// with one of the connections defined in the ACL list when connecting
|
||||
// to a Redis 6.0 instance, or greater, that is using the Redis ACL system.
|
||||
Username string `yaml:"username"`
|
||||
// Optional password. Must match the password specified in the
|
||||
// requirepass server configuration option (if connecting to a Redis 5.0 instance, or lower),
|
||||
// or the User Password when connecting to a Redis 6.0 instance, or greater,
|
||||
// that is using the Redis ACL system.
|
||||
Password string `yaml:"password"`
|
||||
|
||||
// DB Database to be selected after connecting to the server.
|
||||
DB int `yaml:"db"`
|
||||
|
||||
// DialTimeout specifies the client dial timeout.
|
||||
DialTimeout time.Duration `yaml:"dial_timeout"`
|
||||
|
||||
// ReadTimeout specifies the client read timeout.
|
||||
ReadTimeout time.Duration `yaml:"read_timeout"`
|
||||
|
||||
// WriteTimeout specifies the client write timeout.
|
||||
WriteTimeout time.Duration `yaml:"write_timeout"`
|
||||
|
||||
// Maximum number of socket connections.
|
||||
PoolSize int `yaml:"pool_size"`
|
||||
|
||||
// MinIdleConns specifies the minimum number of idle connections which is useful when establishing
|
||||
// new connection is slow.
|
||||
MinIdleConns int `yaml:"min_idle_conns"`
|
||||
|
||||
// Amount of time after which client closes idle connections.
|
||||
// Should be less than server's timeout.
|
||||
// -1 disables idle timeout check.
|
||||
IdleTimeout time.Duration `yaml:"idle_timeout"`
|
||||
|
||||
// Connection age at which client retires (closes) the connection.
|
||||
// Default 0 is to not close aged connections.
|
||||
MaxConnAge time.Duration `yaml:"max_conn_age"`
|
||||
|
||||
// MaxGetMultiConcurrency specifies the maximum number of concurrent GetMulti() operations.
|
||||
// If set to 0, concurrency is unlimited.
|
||||
MaxGetMultiConcurrency int `yaml:"max_get_multi_concurrency"`
|
||||
|
||||
// GetMultiBatchSize specifies the maximum size per batch for mget.
|
||||
GetMultiBatchSize int `yaml:"get_multi_batch_size"`
|
||||
|
||||
// MaxSetMultiConcurrency specifies the maximum number of concurrent SetMulti() operations.
|
||||
// If set to 0, concurrency is unlimited.
|
||||
MaxSetMultiConcurrency int `yaml:"max_set_multi_concurrency"`
|
||||
|
||||
// SetMultiBatchSize specifies the maximum size per batch for pipeline set.
|
||||
SetMultiBatchSize int `yaml:"set_multi_batch_size"`
|
||||
}
|
||||
|
||||
func (c *RedisClientConfig) validate() error {
|
||||
if c.Addr == "" {
|
||||
return errors.New("no redis addr provided")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// RedisClient is a wrap of redis.Client.
|
||||
type RedisClient struct {
|
||||
*redis.Client
|
||||
config RedisClientConfig
|
||||
|
||||
// getMultiGate used to enforce the max number of concurrent GetMulti() operations.
|
||||
getMultiGate gate.Gate
|
||||
// setMultiGate used to enforce the max number of concurrent SetMulti() operations.
|
||||
setMultiGate gate.Gate
|
||||
|
||||
logger log.Logger
|
||||
durationSet prometheus.Observer
|
||||
durationSetMulti prometheus.Observer
|
||||
durationGetMulti prometheus.Observer
|
||||
}
|
||||
|
||||
// NewRedisClient makes a new RedisClient.
|
||||
func NewRedisClient(logger log.Logger, name string, conf []byte, reg prometheus.Registerer) (*RedisClient, error) {
|
||||
config, err := parseRedisClientConfig(conf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return NewRedisClientWithConfig(logger, name, config, reg)
|
||||
}
|
||||
|
||||
// NewRedisClientWithConfig makes a new RedisClient.
|
||||
func NewRedisClientWithConfig(logger log.Logger, name string, config RedisClientConfig,
|
||||
reg prometheus.Registerer) (*RedisClient, error) {
|
||||
|
||||
if err := config.validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
redisClient := redis.NewClient(&redis.Options{
|
||||
Addr: config.Addr,
|
||||
Username: config.Username,
|
||||
Password: config.Password,
|
||||
DB: config.DB,
|
||||
DialTimeout: config.DialTimeout,
|
||||
ReadTimeout: config.ReadTimeout,
|
||||
WriteTimeout: config.WriteTimeout,
|
||||
MinIdleConns: config.MinIdleConns,
|
||||
MaxConnAge: config.MaxConnAge,
|
||||
IdleTimeout: config.IdleTimeout,
|
||||
})
|
||||
|
||||
if reg != nil {
|
||||
reg = prometheus.WrapRegistererWith(prometheus.Labels{"name": name}, reg)
|
||||
}
|
||||
|
||||
c := &RedisClient{
|
||||
Client: redisClient,
|
||||
config: config,
|
||||
logger: logger,
|
||||
getMultiGate: gate.New(
|
||||
extprom.WrapRegistererWithPrefix("thanos_redis_getmulti_", reg),
|
||||
config.MaxGetMultiConcurrency,
|
||||
),
|
||||
setMultiGate: gate.New(
|
||||
extprom.WrapRegistererWithPrefix("thanos_redis_setmulti_", reg),
|
||||
config.MaxSetMultiConcurrency,
|
||||
),
|
||||
}
|
||||
duration := promauto.With(reg).NewHistogramVec(prometheus.HistogramOpts{
|
||||
Name: "thanos_redis_operation_duration_seconds",
|
||||
Help: "Duration of operations against memcached.",
|
||||
Buckets: []float64{0.001, 0.005, 0.01, 0.025, 0.05, 0.1, 0.2, 0.5, 1, 3, 6, 10},
|
||||
}, []string{"operation"})
|
||||
c.durationSet = duration.WithLabelValues(opSet)
|
||||
c.durationSetMulti = duration.WithLabelValues(opSetMulti)
|
||||
c.durationGetMulti = duration.WithLabelValues(opGetMulti)
|
||||
return c, nil
|
||||
}
|
||||
|
||||
// SetAsync implement RemoteCacheClient.
|
||||
func (c *RedisClient) SetAsync(ctx context.Context, key string, value []byte, ttl time.Duration) error {
|
||||
start := time.Now()
|
||||
if _, err := c.Set(ctx, key, value, ttl).Result(); err != nil {
|
||||
level.Warn(c.logger).Log("msg", "failed to set item into redis", "err", err, "key", key,
|
||||
"value_size", len(value))
|
||||
return nil
|
||||
}
|
||||
c.durationSet.Observe(time.Since(start).Seconds())
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetMulti set multiple keys and value.
|
||||
func (c *RedisClient) SetMulti(ctx context.Context, data map[string][]byte, ttl time.Duration) {
|
||||
if len(data) == 0 {
|
||||
return
|
||||
}
|
||||
start := time.Now()
|
||||
keys := make([]string, 0, len(data))
|
||||
for k := range data {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
err := doWithBatch(ctx, len(data), c.config.SetMultiBatchSize, c.setMultiGate, func(startIndex, endIndex int) error {
|
||||
_, err := c.Pipelined(ctx, func(p redis.Pipeliner) error {
|
||||
for _, key := range keys {
|
||||
p.SetEX(ctx, key, data[key], ttl)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
level.Warn(c.logger).Log("msg", "failed to set multi items from redis",
|
||||
"err", err, "items", len(data))
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
level.Warn(c.logger).Log("msg", "failed to set multi items from redis", "err", err,
|
||||
"items", len(data))
|
||||
return
|
||||
}
|
||||
c.durationSetMulti.Observe(time.Since(start).Seconds())
|
||||
}
|
||||
|
||||
// GetMulti implement RemoteCacheClient.
|
||||
func (c *RedisClient) GetMulti(ctx context.Context, keys []string) map[string][]byte {
|
||||
if len(keys) == 0 {
|
||||
return nil
|
||||
}
|
||||
start := time.Now()
|
||||
results := make(map[string][]byte, len(keys))
|
||||
var mu sync.Mutex
|
||||
err := doWithBatch(ctx, len(keys), c.config.GetMultiBatchSize, c.getMultiGate, func(startIndex, endIndex int) error {
|
||||
currentKeys := keys[startIndex:endIndex]
|
||||
resp, err := c.MGet(ctx, currentKeys...).Result()
|
||||
if err != nil {
|
||||
level.Warn(c.logger).Log("msg", "failed to mget items from redis", "err", err, "items", len(resp))
|
||||
return nil
|
||||
}
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
for i := 0; i < len(resp); i++ {
|
||||
key := currentKeys[i]
|
||||
switch val := resp[i].(type) {
|
||||
case string:
|
||||
results[key] = stringToBytes(val)
|
||||
case nil: // miss
|
||||
default:
|
||||
level.Warn(c.logger).Log("msg",
|
||||
fmt.Sprintf("unexpected redis mget result type:%T %v", resp[i], resp[i]))
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
level.Warn(c.logger).Log("msg", "failed to mget items from redis", "err", err, "items", len(keys))
|
||||
return nil
|
||||
}
|
||||
c.durationGetMulti.Observe(time.Since(start).Seconds())
|
||||
return results
|
||||
}
|
||||
|
||||
// Stop implement RemoteCacheClient.
|
||||
func (c *RedisClient) Stop() {
|
||||
if err := c.Close(); err != nil {
|
||||
level.Error(c.logger).Log("msg", "redis close err")
|
||||
}
|
||||
}
|
||||
|
||||
// stringToBytes converts string to byte slice (copied from vendor/github.com/go-redis/redis/v8/internal/util/unsafe.go).
|
||||
func stringToBytes(s string) []byte {
|
||||
return *(*[]byte)(unsafe.Pointer(
|
||||
&struct {
|
||||
string
|
||||
Cap int
|
||||
}{s, len(s)},
|
||||
))
|
||||
}
|
||||
|
||||
// doWithBatch do func with batch and gate. batchSize==0 means one batch. gate==nil means no gate.
|
||||
func doWithBatch(ctx context.Context, totalSize int, batchSize int, ga gate.Gate, f func(startIndex, endIndex int) error) error {
|
||||
if totalSize == 0 {
|
||||
return nil
|
||||
}
|
||||
if batchSize <= 0 {
|
||||
return f(0, totalSize)
|
||||
}
|
||||
g, ctx := errgroup.WithContext(ctx)
|
||||
for i := 0; i < totalSize; i += batchSize {
|
||||
j := i + batchSize
|
||||
if j > totalSize {
|
||||
j = totalSize
|
||||
}
|
||||
if ga != nil {
|
||||
if err := ga.Start(ctx); err != nil {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
startIndex, endIndex := i, j
|
||||
g.Go(func() error {
|
||||
if ga != nil {
|
||||
defer ga.Done()
|
||||
}
|
||||
return f(startIndex, endIndex)
|
||||
})
|
||||
}
|
||||
return g.Wait()
|
||||
}
|
||||
|
||||
// parseRedisClientConfig unmarshals a buffer into a RedisClientConfig with default values.
|
||||
func parseRedisClientConfig(conf []byte) (RedisClientConfig, error) {
|
||||
config := DefaultRedisClientConfig
|
||||
if err := yaml.Unmarshal(conf, &config); err != nil {
|
||||
return RedisClientConfig{}, err
|
||||
}
|
||||
return config, nil
|
||||
}
|
||||
+8
-41
@@ -17,7 +17,6 @@ import (
|
||||
"github.com/go-kit/log"
|
||||
"github.com/go-kit/log/level"
|
||||
"github.com/oklog/ulid"
|
||||
"github.com/opentracing/opentracing-go"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||
@@ -32,7 +31,6 @@ import (
|
||||
"github.com/thanos-io/thanos/pkg/extprom"
|
||||
"github.com/thanos-io/thanos/pkg/objstore"
|
||||
"github.com/thanos-io/thanos/pkg/runutil"
|
||||
"github.com/thanos-io/thanos/pkg/tracing"
|
||||
)
|
||||
|
||||
type ResolutionLevel int64
|
||||
@@ -766,11 +764,7 @@ func (cg *Group) Compact(ctx context.Context, dir string, planner Planner, comp
|
||||
return false, ulid.ULID{}, errors.Wrap(err, "create compaction group dir")
|
||||
}
|
||||
|
||||
var err error
|
||||
tracing.DoInSpanWithErr(ctx, "compaction_group", func(ctx context.Context) error {
|
||||
shouldRerun, compID, err = cg.compact(ctx, subDir, planner, comp)
|
||||
return err
|
||||
}, opentracing.Tags{"group.key": cg.Key()})
|
||||
shouldRerun, compID, err := cg.compact(ctx, subDir, planner, comp)
|
||||
if err != nil {
|
||||
cg.compactionFailures.Inc()
|
||||
return false, ulid.ULID{}, err
|
||||
@@ -986,11 +980,7 @@ func (cg *Group) compact(ctx context.Context, dir string, planner Planner, comp
|
||||
overlappingBlocks = true
|
||||
}
|
||||
|
||||
var toCompact []*metadata.Meta
|
||||
tracing.DoInSpanWithErr(ctx, "compaction_planning", func(ctx context.Context) error {
|
||||
toCompact, err = planner.Plan(ctx, cg.metasByMinTime)
|
||||
return err
|
||||
})
|
||||
toCompact, err := planner.Plan(ctx, cg.metasByMinTime)
|
||||
if err != nil {
|
||||
return false, ulid.ULID{}, errors.Wrap(err, "plan compaction")
|
||||
}
|
||||
@@ -1018,20 +1008,12 @@ func (cg *Group) compact(ctx context.Context, dir string, planner Planner, comp
|
||||
uniqueSources[s] = struct{}{}
|
||||
}
|
||||
|
||||
tracing.DoInSpanWithErr(ctx, "compaction_block_download", func(ctx context.Context) error {
|
||||
err = block.Download(ctx, cg.logger, cg.bkt, meta.ULID, bdir)
|
||||
return err
|
||||
}, opentracing.Tags{"block.id": meta.ULID})
|
||||
if err != nil {
|
||||
if err := block.Download(ctx, cg.logger, cg.bkt, meta.ULID, bdir); err != nil {
|
||||
return false, ulid.ULID{}, retry(errors.Wrapf(err, "download block %s", meta.ULID))
|
||||
}
|
||||
|
||||
// Ensure all input blocks are valid.
|
||||
var stats block.HealthStats
|
||||
tracing.DoInSpanWithErr(ctx, "compaction_block_health_stats", func(ctx context.Context) error {
|
||||
stats, err = block.GatherIndexHealthStats(cg.logger, filepath.Join(bdir, block.IndexFilename), meta.MinTime, meta.MaxTime)
|
||||
return err
|
||||
}, opentracing.Tags{"block.id": meta.ULID})
|
||||
stats, err := block.GatherIndexHealthStats(cg.logger, filepath.Join(bdir, block.IndexFilename), meta.MinTime, meta.MaxTime)
|
||||
if err != nil {
|
||||
return false, ulid.ULID{}, errors.Wrapf(err, "gather index issues for block %s", bdir)
|
||||
}
|
||||
@@ -1057,10 +1039,7 @@ func (cg *Group) compact(ctx context.Context, dir string, planner Planner, comp
|
||||
level.Info(cg.logger).Log("msg", "downloaded and verified blocks; compacting blocks", "plan", fmt.Sprintf("%v", toCompactDirs), "duration", time.Since(begin), "duration_ms", time.Since(begin).Milliseconds())
|
||||
|
||||
begin = time.Now()
|
||||
tracing.DoInSpanWithErr(ctx, "compaction", func(ctx context.Context) error {
|
||||
compID, err = comp.Compact(dir, toCompactDirs, nil)
|
||||
return err
|
||||
})
|
||||
compID, err = comp.Compact(dir, toCompactDirs, nil)
|
||||
if err != nil {
|
||||
return false, ulid.ULID{}, halt(errors.Wrapf(err, "compact blocks %v", toCompactDirs))
|
||||
}
|
||||
@@ -1102,11 +1081,7 @@ func (cg *Group) compact(ctx context.Context, dir string, planner Planner, comp
|
||||
}
|
||||
|
||||
// Ensure the output block is valid.
|
||||
tracing.DoInSpanWithErr(ctx, "compaction_verify_index", func(ctx context.Context) error {
|
||||
err = block.VerifyIndex(cg.logger, index, newMeta.MinTime, newMeta.MaxTime)
|
||||
return err
|
||||
})
|
||||
if !cg.acceptMalformedIndex && err != nil {
|
||||
if err := block.VerifyIndex(cg.logger, index, newMeta.MinTime, newMeta.MaxTime); !cg.acceptMalformedIndex && err != nil {
|
||||
return false, ulid.ULID{}, halt(errors.Wrapf(err, "invalid result block %s", bdir))
|
||||
}
|
||||
|
||||
@@ -1120,11 +1095,7 @@ func (cg *Group) compact(ctx context.Context, dir string, planner Planner, comp
|
||||
|
||||
begin = time.Now()
|
||||
|
||||
tracing.DoInSpanWithErr(ctx, "compaction_block_upload", func(ctx context.Context) error {
|
||||
err = block.Upload(ctx, cg.logger, cg.bkt, bdir, cg.hashFunc)
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
if err := block.Upload(ctx, cg.logger, cg.bkt, bdir, cg.hashFunc); err != nil {
|
||||
return false, ulid.ULID{}, retry(errors.Wrapf(err, "upload of %s failed", compID))
|
||||
}
|
||||
level.Info(cg.logger).Log("msg", "uploaded block", "result_block", compID, "duration", time.Since(begin), "duration_ms", time.Since(begin).Milliseconds())
|
||||
@@ -1133,11 +1104,7 @@ func (cg *Group) compact(ctx context.Context, dir string, planner Planner, comp
|
||||
// into the next planning cycle.
|
||||
// Eventually the block we just uploaded should get synced into the group again (including sync-delay).
|
||||
for _, meta := range toCompact {
|
||||
tracing.DoInSpanWithErr(ctx, "compaction_block_delete", func(ctx context.Context) error {
|
||||
err = cg.deleteBlock(meta.ULID, filepath.Join(dir, meta.ULID.String()))
|
||||
return err
|
||||
}, opentracing.Tags{"block.id": meta.ULID})
|
||||
if err != nil {
|
||||
if err := cg.deleteBlock(meta.ULID, filepath.Join(dir, meta.ULID.String())); err != nil {
|
||||
return false, ulid.ULID{}, retry(errors.Wrapf(err, "mark old block for deletion from bucket"))
|
||||
}
|
||||
cg.groupGarbageCollectedBlocks.Inc()
|
||||
|
||||
+1
-5
@@ -360,14 +360,10 @@ type QueryOptions struct {
|
||||
Deduplicate bool
|
||||
PartialResponseStrategy storepb.PartialResponseStrategy
|
||||
Method string
|
||||
MaxSourceResolution string
|
||||
}
|
||||
|
||||
func (p *QueryOptions) AddTo(values url.Values) error {
|
||||
values.Add("dedup", fmt.Sprintf("%v", p.Deduplicate))
|
||||
if len(p.MaxSourceResolution) > 0 {
|
||||
values.Add("max_source_resolution", p.MaxSourceResolution)
|
||||
}
|
||||
|
||||
var partialResponseValue string
|
||||
switch p.PartialResponseStrategy {
|
||||
@@ -455,9 +451,9 @@ func (c *Client) QueryInstant(ctx context.Context, base *url.URL, query string,
|
||||
if m.Error != "" {
|
||||
return nil, nil, errors.Errorf("error: %s, type: %s", m.Error, m.ErrorType)
|
||||
}
|
||||
|
||||
return nil, nil, errors.Errorf("received status code: 200, unknown response type: '%q'", m.Data.ResultType)
|
||||
}
|
||||
|
||||
return vectorResult, m.Warnings, nil
|
||||
}
|
||||
|
||||
|
||||
+61
-63
@@ -20,7 +20,6 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/units"
|
||||
"github.com/go-kit/log"
|
||||
"github.com/go-kit/log/level"
|
||||
"github.com/gogo/protobuf/types"
|
||||
@@ -1092,28 +1091,27 @@ func (s *BucketStore) Series(req *storepb.SeriesRequest, srv storepb.Store_Serie
|
||||
defer func() {
|
||||
s.metrics.seriesDataTouched.WithLabelValues("postings").Observe(float64(stats.postingsTouched))
|
||||
s.metrics.seriesDataFetched.WithLabelValues("postings").Observe(float64(stats.postingsFetched))
|
||||
s.metrics.seriesDataSizeTouched.WithLabelValues("postings").Observe(float64(stats.PostingsTouchedSizeSum))
|
||||
s.metrics.seriesDataSizeFetched.WithLabelValues("postings").Observe(float64(stats.PostingsFetchedSizeSum))
|
||||
s.metrics.seriesDataSizeTouched.WithLabelValues("postings").Observe(float64(stats.postingsTouchedSizeSum))
|
||||
s.metrics.seriesDataSizeFetched.WithLabelValues("postings").Observe(float64(stats.postingsFetchedSizeSum))
|
||||
s.metrics.seriesDataTouched.WithLabelValues("series").Observe(float64(stats.seriesTouched))
|
||||
s.metrics.seriesDataFetched.WithLabelValues("series").Observe(float64(stats.seriesFetched))
|
||||
s.metrics.seriesDataSizeTouched.WithLabelValues("series").Observe(float64(stats.SeriesTouchedSizeSum))
|
||||
s.metrics.seriesDataSizeFetched.WithLabelValues("series").Observe(float64(stats.SeriesFetchedSizeSum))
|
||||
s.metrics.seriesDataSizeTouched.WithLabelValues("series").Observe(float64(stats.seriesTouchedSizeSum))
|
||||
s.metrics.seriesDataSizeFetched.WithLabelValues("series").Observe(float64(stats.seriesFetchedSizeSum))
|
||||
s.metrics.seriesDataTouched.WithLabelValues("chunks").Observe(float64(stats.chunksTouched))
|
||||
s.metrics.seriesDataFetched.WithLabelValues("chunks").Observe(float64(stats.chunksFetched))
|
||||
s.metrics.seriesDataSizeTouched.WithLabelValues("chunks").Observe(float64(stats.ChunksTouchedSizeSum))
|
||||
s.metrics.seriesDataSizeFetched.WithLabelValues("chunks").Observe(float64(stats.ChunksFetchedSizeSum))
|
||||
s.metrics.seriesDataSizeTouched.WithLabelValues("chunks").Observe(float64(stats.chunksTouchedSizeSum))
|
||||
s.metrics.seriesDataSizeFetched.WithLabelValues("chunks").Observe(float64(stats.chunksFetchedSizeSum))
|
||||
s.metrics.resultSeriesCount.Observe(float64(stats.mergedSeriesCount))
|
||||
s.metrics.cachedPostingsCompressions.WithLabelValues(labelEncode).Add(float64(stats.cachedPostingsCompressions))
|
||||
s.metrics.cachedPostingsCompressions.WithLabelValues(labelDecode).Add(float64(stats.cachedPostingsDecompressions))
|
||||
s.metrics.cachedPostingsCompressionErrors.WithLabelValues(labelEncode).Add(float64(stats.cachedPostingsCompressionErrors))
|
||||
s.metrics.cachedPostingsCompressionErrors.WithLabelValues(labelDecode).Add(float64(stats.cachedPostingsDecompressionErrors))
|
||||
s.metrics.cachedPostingsCompressionTimeSeconds.WithLabelValues(labelEncode).Add(stats.CachedPostingsCompressionTimeSum.Seconds())
|
||||
s.metrics.cachedPostingsCompressionTimeSeconds.WithLabelValues(labelDecode).Add(stats.CachedPostingsDecompressionTimeSum.Seconds())
|
||||
s.metrics.cachedPostingsOriginalSizeBytes.Add(float64(stats.CachedPostingsOriginalSizeSum))
|
||||
s.metrics.cachedPostingsCompressedSizeBytes.Add(float64(stats.CachedPostingsCompressedSizeSum))
|
||||
s.metrics.cachedPostingsCompressionTimeSeconds.WithLabelValues(labelEncode).Add(stats.cachedPostingsCompressionTimeSum.Seconds())
|
||||
s.metrics.cachedPostingsCompressionTimeSeconds.WithLabelValues(labelDecode).Add(stats.cachedPostingsDecompressionTimeSum.Seconds())
|
||||
s.metrics.cachedPostingsOriginalSizeBytes.Add(float64(stats.cachedPostingsOriginalSizeSum))
|
||||
s.metrics.cachedPostingsCompressedSizeBytes.Add(float64(stats.cachedPostingsCompressedSizeSum))
|
||||
|
||||
level.Debug(s.logger).Log("msg", "stats query processed",
|
||||
"request", req,
|
||||
"stats", fmt.Sprintf("%+v", stats), "err", err)
|
||||
}()
|
||||
|
||||
@@ -1131,8 +1129,8 @@ func (s *BucketStore) Series(req *storepb.SeriesRequest, srv storepb.Store_Serie
|
||||
return status.Error(code, err.Error())
|
||||
}
|
||||
stats.blocksQueried = len(res)
|
||||
stats.GetAllDuration = time.Since(begin)
|
||||
s.metrics.seriesGetAllDuration.Observe(stats.GetAllDuration.Seconds())
|
||||
stats.getAllDuration = time.Since(begin)
|
||||
s.metrics.seriesGetAllDuration.Observe(stats.getAllDuration.Seconds())
|
||||
s.metrics.seriesBlocksQueried.Observe(float64(stats.blocksQueried))
|
||||
}
|
||||
// Merge the sub-results from each selected block.
|
||||
@@ -1166,8 +1164,8 @@ func (s *BucketStore) Series(req *storepb.SeriesRequest, srv storepb.Store_Serie
|
||||
err = status.Error(codes.Unknown, errors.Wrap(set.Err(), "expand series set").Error())
|
||||
return
|
||||
}
|
||||
stats.MergeDuration = time.Since(begin)
|
||||
s.metrics.seriesMergeDuration.Observe(stats.MergeDuration.Seconds())
|
||||
stats.mergeDuration = time.Since(begin)
|
||||
s.metrics.seriesMergeDuration.Observe(stats.mergeDuration.Seconds())
|
||||
|
||||
err = nil
|
||||
})
|
||||
@@ -1991,7 +1989,7 @@ func (r *bucketIndexReader) fetchPostings(ctx context.Context, keys []labels.Lab
|
||||
// Get postings for the given key from cache first.
|
||||
if b, ok := fromCache[key]; ok {
|
||||
r.stats.postingsTouched++
|
||||
r.stats.PostingsTouchedSizeSum += units.Base2Bytes(len(b))
|
||||
r.stats.postingsTouchedSizeSum += len(b)
|
||||
|
||||
// Even if this instance is not using compression, there may be compressed
|
||||
// entries in the cache written by other stores.
|
||||
@@ -2003,7 +2001,7 @@ func (r *bucketIndexReader) fetchPostings(ctx context.Context, keys []labels.Lab
|
||||
s := time.Now()
|
||||
l, err = diffVarintSnappyDecode(b)
|
||||
r.stats.cachedPostingsDecompressions += 1
|
||||
r.stats.CachedPostingsDecompressionTimeSum += time.Since(s)
|
||||
r.stats.cachedPostingsDecompressionTimeSum += time.Since(s)
|
||||
if err != nil {
|
||||
r.stats.cachedPostingsDecompressionErrors += 1
|
||||
}
|
||||
@@ -2066,8 +2064,8 @@ func (r *bucketIndexReader) fetchPostings(ctx context.Context, keys []labels.Lab
|
||||
r.mtx.Lock()
|
||||
r.stats.postingsFetchCount++
|
||||
r.stats.postingsFetched += j - i
|
||||
r.stats.PostingsFetchDurationSum += fetchTime
|
||||
r.stats.PostingsFetchedSizeSum += units.Base2Bytes(int(length))
|
||||
r.stats.postingsFetchDurationSum += fetchTime
|
||||
r.stats.postingsFetchedSizeSum += int(length)
|
||||
r.mtx.Unlock()
|
||||
|
||||
for _, p := range ptrs[i:j] {
|
||||
@@ -2107,12 +2105,12 @@ func (r *bucketIndexReader) fetchPostings(ctx context.Context, keys []labels.Lab
|
||||
|
||||
// If we just fetched it we still have to update the stats for touched postings.
|
||||
r.stats.postingsTouched++
|
||||
r.stats.PostingsTouchedSizeSum += units.Base2Bytes(len(pBytes))
|
||||
r.stats.postingsTouchedSizeSum += len(pBytes)
|
||||
r.stats.cachedPostingsCompressions += compressions
|
||||
r.stats.cachedPostingsCompressionErrors += compressionErrors
|
||||
r.stats.CachedPostingsOriginalSizeSum += units.Base2Bytes(len(pBytes))
|
||||
r.stats.CachedPostingsCompressedSizeSum += units.Base2Bytes(compressedSize)
|
||||
r.stats.CachedPostingsCompressionTimeSum += compressionTime
|
||||
r.stats.cachedPostingsOriginalSizeSum += len(pBytes)
|
||||
r.stats.cachedPostingsCompressedSizeSum += compressedSize
|
||||
r.stats.cachedPostingsCompressionTimeSum += compressionTime
|
||||
r.mtx.Unlock()
|
||||
}
|
||||
return nil
|
||||
@@ -2228,8 +2226,8 @@ func (r *bucketIndexReader) loadSeries(ctx context.Context, ids []storage.Series
|
||||
r.mtx.Lock()
|
||||
r.stats.seriesFetchCount++
|
||||
r.stats.seriesFetched += len(ids)
|
||||
r.stats.SeriesFetchDurationSum += time.Since(begin)
|
||||
r.stats.SeriesFetchedSizeSum += units.Base2Bytes(int(end - start))
|
||||
r.stats.seriesFetchDurationSum += time.Since(begin)
|
||||
r.stats.seriesFetchedSizeSum += int(end - start)
|
||||
r.mtx.Unlock()
|
||||
|
||||
for i, id := range ids {
|
||||
@@ -2333,7 +2331,7 @@ func (r *bucketIndexReader) LoadSeriesForTime(ref storage.SeriesRef, lset *[]sym
|
||||
}
|
||||
|
||||
r.stats.seriesTouched++
|
||||
r.stats.SeriesTouchedSizeSum += units.Base2Bytes(len(b))
|
||||
r.stats.seriesTouchedSizeSum += len(b)
|
||||
return decodeSeriesForTime(b, lset, chks, skipChunks, mint, maxt)
|
||||
}
|
||||
|
||||
@@ -2516,8 +2514,8 @@ func (r *bucketChunkReader) loadChunks(ctx context.Context, res []seriesEntry, a
|
||||
|
||||
r.stats.chunksFetchCount++
|
||||
r.stats.chunksFetched += len(pIdxs)
|
||||
r.stats.ChunksFetchDurationSum += time.Since(fetchBegin)
|
||||
r.stats.ChunksFetchedSizeSum += units.Base2Bytes(int(part.End - part.Start))
|
||||
r.stats.chunksFetchDurationSum += time.Since(fetchBegin)
|
||||
r.stats.chunksFetchedSizeSum += int(part.End - part.Start)
|
||||
|
||||
var (
|
||||
buf []byte
|
||||
@@ -2578,7 +2576,7 @@ func (r *bucketChunkReader) loadChunks(ctx context.Context, res []seriesEntry, a
|
||||
return errors.Wrap(err, "populate chunk")
|
||||
}
|
||||
r.stats.chunksTouched++
|
||||
r.stats.ChunksTouchedSizeSum += units.Base2Bytes(int(chunkDataLen))
|
||||
r.stats.chunksTouchedSizeSum += int(chunkDataLen)
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -2602,15 +2600,15 @@ func (r *bucketChunkReader) loadChunks(ctx context.Context, res []seriesEntry, a
|
||||
locked = true
|
||||
|
||||
r.stats.chunksFetchCount++
|
||||
r.stats.ChunksFetchDurationSum += time.Since(fetchBegin)
|
||||
r.stats.ChunksFetchedSizeSum += units.Base2Bytes(len(*nb))
|
||||
r.stats.chunksFetchDurationSum += time.Since(fetchBegin)
|
||||
r.stats.chunksFetchedSizeSum += len(*nb)
|
||||
err = populateChunk(&(res[pIdx.seriesEntry].chks[pIdx.chunk]), rawChunk((*nb)[n:]), aggrs, r.save)
|
||||
if err != nil {
|
||||
r.block.chunkPool.Put(nb)
|
||||
return errors.Wrap(err, "populate chunk")
|
||||
}
|
||||
r.stats.chunksTouched++
|
||||
r.stats.ChunksTouchedSizeSum += units.Base2Bytes(int(chunkDataLen))
|
||||
r.stats.chunksTouchedSizeSum += int(chunkDataLen)
|
||||
|
||||
r.block.chunkPool.Put(nb)
|
||||
}
|
||||
@@ -2664,79 +2662,79 @@ type queryStats struct {
|
||||
blocksQueried int
|
||||
|
||||
postingsTouched int
|
||||
PostingsTouchedSizeSum units.Base2Bytes
|
||||
postingsTouchedSizeSum int
|
||||
postingsToFetch int
|
||||
postingsFetched int
|
||||
PostingsFetchedSizeSum units.Base2Bytes
|
||||
postingsFetchedSizeSum int
|
||||
postingsFetchCount int
|
||||
PostingsFetchDurationSum time.Duration
|
||||
postingsFetchDurationSum time.Duration
|
||||
|
||||
cachedPostingsCompressions int
|
||||
cachedPostingsCompressionErrors int
|
||||
CachedPostingsOriginalSizeSum units.Base2Bytes
|
||||
CachedPostingsCompressedSizeSum units.Base2Bytes
|
||||
CachedPostingsCompressionTimeSum time.Duration
|
||||
cachedPostingsOriginalSizeSum int
|
||||
cachedPostingsCompressedSizeSum int
|
||||
cachedPostingsCompressionTimeSum time.Duration
|
||||
cachedPostingsDecompressions int
|
||||
cachedPostingsDecompressionErrors int
|
||||
CachedPostingsDecompressionTimeSum time.Duration
|
||||
cachedPostingsDecompressionTimeSum time.Duration
|
||||
|
||||
seriesTouched int
|
||||
SeriesTouchedSizeSum units.Base2Bytes
|
||||
seriesTouchedSizeSum int
|
||||
seriesFetched int
|
||||
SeriesFetchedSizeSum units.Base2Bytes
|
||||
seriesFetchedSizeSum int
|
||||
seriesFetchCount int
|
||||
SeriesFetchDurationSum time.Duration
|
||||
seriesFetchDurationSum time.Duration
|
||||
|
||||
chunksTouched int
|
||||
ChunksTouchedSizeSum units.Base2Bytes
|
||||
chunksTouchedSizeSum int
|
||||
chunksFetched int
|
||||
ChunksFetchedSizeSum units.Base2Bytes
|
||||
chunksFetchedSizeSum int
|
||||
chunksFetchCount int
|
||||
ChunksFetchDurationSum time.Duration
|
||||
chunksFetchDurationSum time.Duration
|
||||
|
||||
GetAllDuration time.Duration
|
||||
getAllDuration time.Duration
|
||||
mergedSeriesCount int
|
||||
mergedChunksCount int
|
||||
MergeDuration time.Duration
|
||||
mergeDuration time.Duration
|
||||
}
|
||||
|
||||
func (s queryStats) merge(o *queryStats) *queryStats {
|
||||
s.blocksQueried += o.blocksQueried
|
||||
|
||||
s.postingsTouched += o.postingsTouched
|
||||
s.PostingsTouchedSizeSum += o.PostingsTouchedSizeSum
|
||||
s.postingsTouchedSizeSum += o.postingsTouchedSizeSum
|
||||
s.postingsFetched += o.postingsFetched
|
||||
s.PostingsFetchedSizeSum += o.PostingsFetchedSizeSum
|
||||
s.postingsFetchedSizeSum += o.postingsFetchedSizeSum
|
||||
s.postingsFetchCount += o.postingsFetchCount
|
||||
s.PostingsFetchDurationSum += o.PostingsFetchDurationSum
|
||||
s.postingsFetchDurationSum += o.postingsFetchDurationSum
|
||||
|
||||
s.cachedPostingsCompressions += o.cachedPostingsCompressions
|
||||
s.cachedPostingsCompressionErrors += o.cachedPostingsCompressionErrors
|
||||
s.CachedPostingsOriginalSizeSum += o.CachedPostingsOriginalSizeSum
|
||||
s.CachedPostingsCompressedSizeSum += o.CachedPostingsCompressedSizeSum
|
||||
s.CachedPostingsCompressionTimeSum += o.CachedPostingsCompressionTimeSum
|
||||
s.cachedPostingsOriginalSizeSum += o.cachedPostingsOriginalSizeSum
|
||||
s.cachedPostingsCompressedSizeSum += o.cachedPostingsCompressedSizeSum
|
||||
s.cachedPostingsCompressionTimeSum += o.cachedPostingsCompressionTimeSum
|
||||
s.cachedPostingsDecompressions += o.cachedPostingsDecompressions
|
||||
s.cachedPostingsDecompressionErrors += o.cachedPostingsDecompressionErrors
|
||||
s.CachedPostingsDecompressionTimeSum += o.CachedPostingsDecompressionTimeSum
|
||||
s.cachedPostingsDecompressionTimeSum += o.cachedPostingsDecompressionTimeSum
|
||||
|
||||
s.seriesTouched += o.seriesTouched
|
||||
s.SeriesTouchedSizeSum += o.SeriesTouchedSizeSum
|
||||
s.seriesTouchedSizeSum += o.seriesTouchedSizeSum
|
||||
s.seriesFetched += o.seriesFetched
|
||||
s.SeriesFetchedSizeSum += o.SeriesFetchedSizeSum
|
||||
s.seriesFetchedSizeSum += o.seriesFetchedSizeSum
|
||||
s.seriesFetchCount += o.seriesFetchCount
|
||||
s.SeriesFetchDurationSum += o.SeriesFetchDurationSum
|
||||
s.seriesFetchDurationSum += o.seriesFetchDurationSum
|
||||
|
||||
s.chunksTouched += o.chunksTouched
|
||||
s.ChunksTouchedSizeSum += o.ChunksTouchedSizeSum
|
||||
s.chunksTouchedSizeSum += o.chunksTouchedSizeSum
|
||||
s.chunksFetched += o.chunksFetched
|
||||
s.ChunksFetchedSizeSum += o.ChunksFetchedSizeSum
|
||||
s.chunksFetchedSizeSum += o.chunksFetchedSizeSum
|
||||
s.chunksFetchCount += o.chunksFetchCount
|
||||
s.ChunksFetchDurationSum += o.ChunksFetchDurationSum
|
||||
s.chunksFetchDurationSum += o.chunksFetchDurationSum
|
||||
|
||||
s.GetAllDuration += o.GetAllDuration
|
||||
s.getAllDuration += o.getAllDuration
|
||||
s.mergedSeriesCount += o.mergedSeriesCount
|
||||
s.mergedChunksCount += o.mergedChunksCount
|
||||
s.MergeDuration += o.MergeDuration
|
||||
s.mergeDuration += o.mergeDuration
|
||||
|
||||
return &s
|
||||
}
|
||||
|
||||
+1
-8
@@ -27,7 +27,6 @@ type BucketCacheProvider string
|
||||
const (
|
||||
InMemoryBucketCacheProvider BucketCacheProvider = "IN-MEMORY" // In-memory cache-provider for caching bucket.
|
||||
MemcachedBucketCacheProvider BucketCacheProvider = "MEMCACHED" // Memcached cache-provider for caching bucket.
|
||||
RedisBucketCacheProvider BucketCacheProvider = "REDIS" // Redis cache-provider for caching bucket.
|
||||
)
|
||||
|
||||
// CachingWithBackendConfig is a configuration of caching bucket used by Store component.
|
||||
@@ -87,7 +86,7 @@ func NewCachingBucketFromYaml(yamlContent []byte, bucket objstore.Bucket, logger
|
||||
|
||||
switch strings.ToUpper(string(config.Type)) {
|
||||
case string(MemcachedBucketCacheProvider):
|
||||
var memcached cacheutil.RemoteCacheClient
|
||||
var memcached cacheutil.MemcachedClient
|
||||
memcached, err := cacheutil.NewMemcachedClient(logger, "caching-bucket", backendConfig, reg)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to create memcached client")
|
||||
@@ -98,12 +97,6 @@ func NewCachingBucketFromYaml(yamlContent []byte, bucket objstore.Bucket, logger
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to create inmemory cache")
|
||||
}
|
||||
case string(RedisBucketCacheProvider):
|
||||
redisCache, err := cacheutil.NewRedisClient(logger, "caching-bucket", backendConfig, reg)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to create memcached client")
|
||||
}
|
||||
c = cache.NewRedisCache("caching-bucket", logger, redisCache, reg)
|
||||
default:
|
||||
return nil, errors.Errorf("unsupported cache type: %s", config.Type)
|
||||
}
|
||||
|
||||
+2
-9
@@ -21,7 +21,6 @@ type IndexCacheProvider string
|
||||
const (
|
||||
INMEMORY IndexCacheProvider = "IN-MEMORY"
|
||||
MEMCACHED IndexCacheProvider = "MEMCACHED"
|
||||
REDIS IndexCacheProvider = "REDIS"
|
||||
)
|
||||
|
||||
// IndexCacheConfig specifies the index cache config.
|
||||
@@ -48,16 +47,10 @@ func NewIndexCache(logger log.Logger, confContentYaml []byte, reg prometheus.Reg
|
||||
case string(INMEMORY):
|
||||
cache, err = NewInMemoryIndexCache(logger, reg, backendConfig)
|
||||
case string(MEMCACHED):
|
||||
var memcached cacheutil.RemoteCacheClient
|
||||
var memcached cacheutil.MemcachedClient
|
||||
memcached, err = cacheutil.NewMemcachedClient(logger, "index-cache", backendConfig, reg)
|
||||
if err == nil {
|
||||
cache, err = NewRemoteIndexCache(logger, memcached, reg)
|
||||
}
|
||||
case string(REDIS):
|
||||
var redisCache cacheutil.RemoteCacheClient
|
||||
redisCache, err = cacheutil.NewRedisClient(logger, "index-cache", backendConfig, reg)
|
||||
if err == nil {
|
||||
cache, err = NewRemoteIndexCache(logger, redisCache, reg)
|
||||
cache, err = NewMemcachedIndexCache(logger, memcached, reg)
|
||||
}
|
||||
default:
|
||||
return nil, errors.Errorf("index cache with type %s is not supported", cacheConfig.Type)
|
||||
|
||||
+12
-17
@@ -22,21 +22,21 @@ const (
|
||||
memcachedDefaultTTL = 24 * time.Hour
|
||||
)
|
||||
|
||||
// RemoteIndexCache is a memcached-based index cache.
|
||||
type RemoteIndexCache struct {
|
||||
// MemcachedIndexCache is a memcached-based index cache.
|
||||
type MemcachedIndexCache struct {
|
||||
logger log.Logger
|
||||
memcached cacheutil.RemoteCacheClient
|
||||
memcached cacheutil.MemcachedClient
|
||||
|
||||
// Metrics.
|
||||
requests *prometheus.CounterVec
|
||||
hits *prometheus.CounterVec
|
||||
}
|
||||
|
||||
// NewRemoteIndexCache makes a new RemoteIndexCache.
|
||||
func NewRemoteIndexCache(logger log.Logger, cacheClient cacheutil.RemoteCacheClient, reg prometheus.Registerer) (*RemoteIndexCache, error) {
|
||||
c := &RemoteIndexCache{
|
||||
// NewMemcachedIndexCache makes a new MemcachedIndexCache.
|
||||
func NewMemcachedIndexCache(logger log.Logger, memcached cacheutil.MemcachedClient, reg prometheus.Registerer) (*MemcachedIndexCache, error) {
|
||||
c := &MemcachedIndexCache{
|
||||
logger: logger,
|
||||
memcached: cacheClient,
|
||||
memcached: memcached,
|
||||
}
|
||||
|
||||
c.requests = promauto.With(reg).NewCounterVec(prometheus.CounterOpts{
|
||||
@@ -53,7 +53,7 @@ func NewRemoteIndexCache(logger log.Logger, cacheClient cacheutil.RemoteCacheCli
|
||||
c.hits.WithLabelValues(cacheTypePostings)
|
||||
c.hits.WithLabelValues(cacheTypeSeries)
|
||||
|
||||
level.Info(logger).Log("msg", "created cacheClient index cache")
|
||||
level.Info(logger).Log("msg", "created memcached index cache")
|
||||
|
||||
return c, nil
|
||||
}
|
||||
@@ -61,7 +61,7 @@ func NewRemoteIndexCache(logger log.Logger, cacheClient cacheutil.RemoteCacheCli
|
||||
// StorePostings sets the postings identified by the ulid and label to the value v.
|
||||
// The function enqueues the request and returns immediately: the entry will be
|
||||
// asynchronously stored in the cache.
|
||||
func (c *RemoteIndexCache) StorePostings(ctx context.Context, blockID ulid.ULID, l labels.Label, v []byte) {
|
||||
func (c *MemcachedIndexCache) StorePostings(ctx context.Context, blockID ulid.ULID, l labels.Label, v []byte) {
|
||||
key := cacheKey{blockID, cacheKeyPostings(l)}.string()
|
||||
|
||||
if err := c.memcached.SetAsync(ctx, key, v, memcachedDefaultTTL); err != nil {
|
||||
@@ -72,7 +72,7 @@ func (c *RemoteIndexCache) StorePostings(ctx context.Context, blockID ulid.ULID,
|
||||
// FetchMultiPostings fetches multiple postings - each identified by a label -
|
||||
// and returns a map containing cache hits, along with a list of missing keys.
|
||||
// In case of error, it logs and return an empty cache hits map.
|
||||
func (c *RemoteIndexCache) FetchMultiPostings(ctx context.Context, blockID ulid.ULID, lbls []labels.Label) (hits map[labels.Label][]byte, misses []labels.Label) {
|
||||
func (c *MemcachedIndexCache) FetchMultiPostings(ctx context.Context, blockID ulid.ULID, lbls []labels.Label) (hits map[labels.Label][]byte, misses []labels.Label) {
|
||||
// Build the cache keys, while keeping a map between input label and the cache key
|
||||
// so that we can easily reverse it back after the GetMulti().
|
||||
keys := make([]string, 0, len(lbls))
|
||||
@@ -121,7 +121,7 @@ func (c *RemoteIndexCache) FetchMultiPostings(ctx context.Context, blockID ulid.
|
||||
// StoreSeries sets the series identified by the ulid and id to the value v.
|
||||
// The function enqueues the request and returns immediately: the entry will be
|
||||
// asynchronously stored in the cache.
|
||||
func (c *RemoteIndexCache) StoreSeries(ctx context.Context, blockID ulid.ULID, id storage.SeriesRef, v []byte) {
|
||||
func (c *MemcachedIndexCache) StoreSeries(ctx context.Context, blockID ulid.ULID, id storage.SeriesRef, v []byte) {
|
||||
key := cacheKey{blockID, cacheKeySeries(id)}.string()
|
||||
|
||||
if err := c.memcached.SetAsync(ctx, key, v, memcachedDefaultTTL); err != nil {
|
||||
@@ -132,7 +132,7 @@ func (c *RemoteIndexCache) StoreSeries(ctx context.Context, blockID ulid.ULID, i
|
||||
// FetchMultiSeries fetches multiple series - each identified by ID - from the cache
|
||||
// and returns a map containing cache hits, along with a list of missing IDs.
|
||||
// In case of error, it logs and return an empty cache hits map.
|
||||
func (c *RemoteIndexCache) FetchMultiSeries(ctx context.Context, blockID ulid.ULID, ids []storage.SeriesRef) (hits map[storage.SeriesRef][]byte, misses []storage.SeriesRef) {
|
||||
func (c *MemcachedIndexCache) FetchMultiSeries(ctx context.Context, blockID ulid.ULID, ids []storage.SeriesRef) (hits map[storage.SeriesRef][]byte, misses []storage.SeriesRef) {
|
||||
// Build the cache keys, while keeping a map between input id and the cache key
|
||||
// so that we can easily reverse it back after the GetMulti().
|
||||
keys := make([]string, 0, len(ids))
|
||||
@@ -177,8 +177,3 @@ func (c *RemoteIndexCache) FetchMultiSeries(ctx context.Context, blockID ulid.UL
|
||||
c.hits.WithLabelValues(cacheTypeSeries).Add(float64(len(hits)))
|
||||
return hits, misses
|
||||
}
|
||||
|
||||
// NewMemcachedIndexCache is alias NewRemoteIndexCache for compatible.
|
||||
func NewMemcachedIndexCache(logger log.Logger, memcached cacheutil.RemoteCacheClient, reg prometheus.Registerer) (*RemoteIndexCache, error) {
|
||||
return NewRemoteIndexCache(logger, memcached, reg)
|
||||
}
|
||||
|
||||
+1
-2
@@ -8,7 +8,6 @@ import (
|
||||
"net"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/go-kit/log"
|
||||
"github.com/go-kit/log/level"
|
||||
@@ -36,7 +35,7 @@ func HTTPMiddleware(tracer opentracing.Tracer, name string, logger log.Logger, n
|
||||
ext.HTTPUrl.Set(span, r.URL.String())
|
||||
|
||||
// If client specified ForceTracingBaggageKey header, ensure span includes it to force tracing.
|
||||
span.SetBaggageItem(strings.ToLower(ForceTracingBaggageKey), r.Header.Get(ForceTracingBaggageKey))
|
||||
span.SetBaggageItem(ForceTracingBaggageKey, r.Header.Get(ForceTracingBaggageKey))
|
||||
|
||||
if t, ok := tracer.(Tracer); ok {
|
||||
if traceID, ok := t.GetTraceIDFromSpanContext(span.Context()); ok {
|
||||
|
||||
-13
@@ -7,7 +7,6 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/opentracing/opentracing-go"
|
||||
"github.com/opentracing/opentracing-go/ext"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -73,18 +72,6 @@ func StartSpan(ctx context.Context, operationName string, opts ...opentracing.St
|
||||
return span, opentracing.ContextWithSpan(ctx, span)
|
||||
}
|
||||
|
||||
// DoInSpanWtihErr executes function doFn inside new span with `operationName` name and hooking as child to a span found within given context if any.
|
||||
// It uses opentracing.Tracer propagated in context. If no found, it uses noop tracer notification.
|
||||
// It logs the error inside the new span created, which differentiates it from DoInSpan and DoWithSpan.
|
||||
func DoInSpanWithErr(ctx context.Context, operationName string, doFn func(context.Context) error, opts ...opentracing.StartSpanOption) {
|
||||
span, newCtx := StartSpan(ctx, operationName, opts...)
|
||||
defer span.Finish()
|
||||
err := doFn(newCtx)
|
||||
if err != nil {
|
||||
ext.LogError(span, err)
|
||||
}
|
||||
}
|
||||
|
||||
// DoInSpan executes function doFn inside new span with `operationName` name and hooking as child to a span found within given context if any.
|
||||
// It uses opentracing.Tracer propagated in context. If no found, it uses noop tracer notification.
|
||||
func DoInSpan(ctx context.Context, operationName string, doFn func(context.Context), opts ...opentracing.StartSpanOption) {
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ import (
|
||||
var (
|
||||
// MinClusterVersion is the min cluster version this etcd binary is compatible with.
|
||||
MinClusterVersion = "3.0.0"
|
||||
Version = "3.5.0"
|
||||
Version = "3.5.1"
|
||||
APIVersion = "unknown"
|
||||
|
||||
// Git SHA Value will be set during build
|
||||
|
||||
Vendored
+12
-7
@@ -200,9 +200,6 @@ github.com/coreos/go-systemd/v22/journal
|
||||
github.com/coreos/pkg/capnslog
|
||||
# github.com/cortexproject/cortex v1.10.1-0.20211214110443-07d6cfc4eb84
|
||||
## explicit; go 1.16
|
||||
github.com/cortexproject/cortex/integration/e2e
|
||||
github.com/cortexproject/cortex/integration/e2e/db
|
||||
github.com/cortexproject/cortex/integration/e2e/images
|
||||
github.com/cortexproject/cortex/pkg/alertmanager
|
||||
github.com/cortexproject/cortex/pkg/alertmanager/alertmanagerpb
|
||||
github.com/cortexproject/cortex/pkg/alertmanager/alertspb
|
||||
@@ -563,7 +560,7 @@ github.com/gorilla/handlers
|
||||
# github.com/gorilla/mux v1.8.0
|
||||
## explicit; go 1.12
|
||||
github.com/gorilla/mux
|
||||
# github.com/grafana/dskit v0.0.0-20211021180445-3bd016e9d7f1
|
||||
# github.com/grafana/dskit v0.0.0-20220112093026-95274ccc858d => github.com/grafana/dskit v0.0.0-20211021180445-3bd016e9d7f1
|
||||
## explicit; go 1.16
|
||||
github.com/grafana/dskit/backoff
|
||||
github.com/grafana/dskit/closer
|
||||
@@ -591,6 +588,11 @@ github.com/grafana/dskit/runtimeconfig
|
||||
github.com/grafana/dskit/runutil
|
||||
github.com/grafana/dskit/services
|
||||
github.com/grafana/dskit/time
|
||||
# github.com/grafana/e2e v0.1.0
|
||||
## explicit; go 1.17
|
||||
github.com/grafana/e2e
|
||||
github.com/grafana/e2e/db
|
||||
github.com/grafana/e2e/images
|
||||
# github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
|
||||
## explicit; go 1.14
|
||||
github.com/grpc-ecosystem/go-grpc-middleware
|
||||
@@ -1084,7 +1086,7 @@ github.com/prometheus/node_exporter/https
|
||||
github.com/prometheus/procfs
|
||||
github.com/prometheus/procfs/internal/fs
|
||||
github.com/prometheus/procfs/internal/util
|
||||
# github.com/prometheus/prometheus v1.8.2-0.20211119115433-692a54649ed7
|
||||
# github.com/prometheus/prometheus v1.8.2-0.20211217191541-41f1a8125e66 => github.com/prometheus/prometheus v1.8.2-0.20211119115433-692a54649ed7
|
||||
## explicit; go 1.14
|
||||
github.com/prometheus/prometheus/config
|
||||
github.com/prometheus/prometheus/discovery
|
||||
@@ -1207,7 +1209,7 @@ github.com/stretchr/testify/require
|
||||
# github.com/subosito/gotenv v1.2.0
|
||||
## explicit
|
||||
github.com/subosito/gotenv
|
||||
# github.com/thanos-io/thanos v0.22.0 => github.com/thanos-io/thanos v0.19.1-0.20211208205607-d1acaea2a11a
|
||||
# github.com/thanos-io/thanos v0.24.0
|
||||
## explicit; go 1.15
|
||||
github.com/thanos-io/thanos/pkg/block
|
||||
github.com/thanos-io/thanos/pkg/block/indexheader
|
||||
@@ -1321,7 +1323,7 @@ go.etcd.io/bbolt
|
||||
# go.etcd.io/etcd v3.3.25+incompatible
|
||||
## explicit
|
||||
go.etcd.io/etcd/pkg/transport
|
||||
# go.etcd.io/etcd/api/v3 v3.5.0
|
||||
# go.etcd.io/etcd/api/v3 v3.5.1
|
||||
## explicit; go 1.16
|
||||
go.etcd.io/etcd/api/v3/authpb
|
||||
go.etcd.io/etcd/api/v3/etcdserverpb
|
||||
@@ -1779,4 +1781,7 @@ rsc.io/binaryregexp/syntax
|
||||
# google.golang.org/grpc => google.golang.org/grpc v1.38.0
|
||||
# github.com/soheilhy/cmux => github.com/soheilhy/cmux v0.1.5
|
||||
# go.opentelemetry.io/otel/bridge/opentracing => github.com/bboreham/opentelemetry-go/bridge/opentracing v0.13.1-0.20210728105346-81ca3b18d348
|
||||
# github.com/thanos-io/thanos v0.22.0 => github.com/thanos-io/thanos v0.19.1-0.20211208205607-d1acaea2a11a
|
||||
# go.opentelemetry.io/collector => github.com/grafana/opentelemetry-collector v0.4.1-0.20211201123047-86905635e8f8
|
||||
# github.com/grafana/dskit => github.com/grafana/dskit v0.0.0-20211021180445-3bd016e9d7f1
|
||||
# github.com/prometheus/prometheus => github.com/prometheus/prometheus v1.8.2-0.20211119115433-692a54649ed7
|
||||
|
||||
Reference in New Issue
Block a user