diff --git a/config/config.go b/config/config.go index ad06860be066326a0e1c15967f2f836697bbe901..508195931f24d826e7331f323e8f24feb3101483 100644 --- a/config/config.go +++ b/config/config.go @@ -15,6 +15,7 @@ type Config struct { MongoDB MongoDB `mapstructure:"mongodb"` Elasticsearch Elasticsearch `mapstructure:"elasticsearch"` Redis Redis `mapstructure:"redis"` + Prome Prome `mapstructure:"prome"` } /** @@ -48,10 +49,10 @@ type Mysql struct { } type MongoDB struct { - DBname string `mapstructure:"dbname"` - User string `mapstructure:"user"` - Password string `mapstructure:"password"` - Host string `mapstructure:"host"` + DBname string `mapstructure:"dbname"` + User string `mapstructure:"user"` + Password string `mapstructure:"password"` + Host []string `mapstructure:"host"` } type Elasticsearch struct { @@ -72,6 +73,10 @@ type Redis struct { MaxRetries int `mapstructure:"max_retries"` } +type Prome struct { + Host string `mapstructure:"host"` +} + // 加载配置,失败直接panic func LoadConfig() { viper := viper.New() diff --git a/config/config.yml b/config/config.yml index a83b37ddb7fec0aac702d679614e830cf578d792..c63a37f0a9c09c90078eea08ed077bd7dd72a847 100644 --- a/config/config.yml +++ b/config/config.yml @@ -21,7 +21,7 @@ mongodb: dbname: shop user: admin password: admin123 - host: 127.0.0.1:27017 + host: ["127.0.0.1:27017"] elasticsearch: host: ["https://127.0.0.1:9200"] @@ -38,3 +38,6 @@ redis: min_idle_conn: 500 pool_size: 100 max_retries: 3 + +prome: + host: http://127.0.0.1:9091 diff --git a/global/constant.go b/global/constant.go index a3692772914c55a89663b5a66f1dc58967780a03..14354b7fe2f0494b568480c7813ec498d8f80e43 100644 --- a/global/constant.go +++ b/global/constant.go @@ -1,5 +1,7 @@ package global const ( - ProductIndexName = "shop-product" + ProductIndexName = "shop-product" + ProductSearchLogDbName = "shop" + ProductSearchLogCollectionNamePrefix = "product_search_%d" ) diff --git a/global/global.go b/global/global.go index 5efd24953ab5df44938266f1b38d9d70323f321e..4c592dc5e185fb64ea9d06de05f9888af99b831c 100644 --- a/global/global.go +++ b/global/global.go @@ -3,6 +3,7 @@ package global import ( "gitee.com/phper95/pkg/cache" "gitee.com/phper95/pkg/es" + "gitee.com/phper95/pkg/nosql" "go.uber.org/zap" "gorm.io/gorm" ) @@ -12,4 +13,5 @@ var ( LOG *zap.Logger DB *gorm.DB CACHE *cache.Redis + Mongo *nosql.MgClient ) diff --git a/go.mod b/go.mod index c38220eb0e50b8e544b1b40df02fc45ac107242a..ebe686477d0949996cb8d43ead0855e40d1527e0 100644 --- a/go.mod +++ b/go.mod @@ -10,16 +10,19 @@ require ( gitee.com/phper95/pkg/es v0.0.0-20220724162038-b78433a64c97 gitee.com/phper95/pkg/httpclient v0.0.0-20220724124223-a4f7b6c91282 gitee.com/phper95/pkg/logger v0.0.0-20220724124223-a4f7b6c91282 + gitee.com/phper95/pkg/nosql v0.0.0-20220730151317-038ed69cf816 + gitee.com/phper95/pkg/prome v0.0.0-20220724162038-b78433a64c97 gitee.com/phper95/pkg/shutdown v0.0.0-20220724124223-a4f7b6c91282 gitee.com/phper95/pkg/sign v0.0.0-20220724124223-a4f7b6c91282 gitee.com/phper95/pkg/strutil v0.0.0-20220724124223-a4f7b6c91282 - gitee.com/phper95/pkg/timeutil v0.0.0-20220724124223-a4f7b6c91282 + gitee.com/phper95/pkg/timeutil v0.0.0-20220731025737-d3ae776d951b gitee.com/phper95/pkg/trace v0.0.0-20220724124223-a4f7b6c91282 github.com/fsnotify/fsnotify v1.5.1 github.com/gin-gonic/gin v1.6.3 github.com/go-redis/redis/v7 v7.4.1 github.com/olivere/elastic/v7 v7.0.32 github.com/pkg/errors v0.9.1 + github.com/prometheus/client_golang v1.12.1 github.com/spf13/viper v1.10.1 github.com/unknwon/com v1.0.1 github.com/valyala/fasthttp v1.32.0 diff --git a/go.sum b/go.sum index 3c55fec5ebab46e8bcd411ac6966fc3d6ee4dce0..f02dc9b94e228c992ae704fbcf259264218003df 100644 --- a/go.sum +++ b/go.sum @@ -60,10 +60,15 @@ gitee.com/phper95/pkg/errors v0.0.0-20220724124223-a4f7b6c91282 h1:jwvtDjZ1CLZrK gitee.com/phper95/pkg/errors v0.0.0-20220724124223-a4f7b6c91282/go.mod h1:QjWVzI0aT0OcBninaydQjEOE7mwhhI5x9SmUOkxR1aY= gitee.com/phper95/pkg/es v0.0.0-20220724162038-b78433a64c97 h1:Oc/4RG+Io2d7A6aE/7wpeyDLpNMEy21v+67aAJfCixg= gitee.com/phper95/pkg/es v0.0.0-20220724162038-b78433a64c97/go.mod h1:X64F1zpBn3m1yvS9OyNDFO87RqJtCc2l/ekHCTcthn4= +gitee.com/phper95/pkg/httpclient v0.0.0-20220619024357-ff31f996a43f/go.mod h1:/TgDunpxyn9fDGptIBWsvr38cOGLB8mu3WIPtWd+MO8= gitee.com/phper95/pkg/httpclient v0.0.0-20220724124223-a4f7b6c91282 h1:IB/wCC4cEr5XuuE17pvRfBGBScVu78HhhpejY1pq45w= gitee.com/phper95/pkg/httpclient v0.0.0-20220724124223-a4f7b6c91282/go.mod h1:/TgDunpxyn9fDGptIBWsvr38cOGLB8mu3WIPtWd+MO8= gitee.com/phper95/pkg/logger v0.0.0-20220724124223-a4f7b6c91282 h1:wo1mQy45xIOFDbJSbZWWi1kD2h97tKCeZ56hWvdYyhA= gitee.com/phper95/pkg/logger v0.0.0-20220724124223-a4f7b6c91282/go.mod h1:UTngb7FT918eoS8zFyoFtJaTmyrZMfcgBv8lZeckG+0= +gitee.com/phper95/pkg/nosql v0.0.0-20220730151317-038ed69cf816 h1:F2HmpDMe4L2vmbZVtq/fRnReNSr/D8l0R61mHiyaYPI= +gitee.com/phper95/pkg/nosql v0.0.0-20220730151317-038ed69cf816/go.mod h1:bpw+KQ+CpvcNFDc64qURGBs9c0LKslvw/HllwIHdQ+4= +gitee.com/phper95/pkg/prome v0.0.0-20220724162038-b78433a64c97 h1:z8Q1U/7RumIg3a2e4P1ItDNLauYj2+xa5UB70hlw3/8= +gitee.com/phper95/pkg/prome v0.0.0-20220724162038-b78433a64c97/go.mod h1:Jd8QmtshSzioF/mboOG4X/TRyF3S7G0CA9IILJI1w0E= gitee.com/phper95/pkg/shutdown v0.0.0-20220724124223-a4f7b6c91282 h1:o8spCgiumTCOjpui3NYpcO/2ZW/q1th3tcZZVROzPrI= gitee.com/phper95/pkg/shutdown v0.0.0-20220724124223-a4f7b6c91282/go.mod h1:QuMN5MjRjFes24JfAI+/DXGJgCZluxTfYLa8ILMUFxQ= gitee.com/phper95/pkg/sign v0.0.0-20220724124223-a4f7b6c91282 h1:Wb3Ukw2nitT6T8/ycxDHKwS8hZmnnMpcJ6hkS4Me+c4= @@ -72,8 +77,8 @@ gitee.com/phper95/pkg/strutil v0.0.0-20220724124223-a4f7b6c91282 h1:uH6xjVf7QUrP gitee.com/phper95/pkg/strutil v0.0.0-20220724124223-a4f7b6c91282/go.mod h1:8umSMA2t8nkwV2JgllJgh7NxwsFe1BLtZ9Fh5ejmzu4= gitee.com/phper95/pkg/timeutil v0.0.0-20220305145820-1201417a8338/go.mod h1:1EPAVZpuiWMRSbRZ3vjWXWk5yRbedoYKy0gUoviIUtY= gitee.com/phper95/pkg/timeutil v0.0.0-20220722023345-0b3333d26940/go.mod h1:1EPAVZpuiWMRSbRZ3vjWXWk5yRbedoYKy0gUoviIUtY= -gitee.com/phper95/pkg/timeutil v0.0.0-20220724124223-a4f7b6c91282 h1:JDgQriqmlVHTS2ltErjizwJXoJYZpX/GBcnlUtNxRkM= -gitee.com/phper95/pkg/timeutil v0.0.0-20220724124223-a4f7b6c91282/go.mod h1:1EPAVZpuiWMRSbRZ3vjWXWk5yRbedoYKy0gUoviIUtY= +gitee.com/phper95/pkg/timeutil v0.0.0-20220731025737-d3ae776d951b h1:r+irTws3cYCDKRBzT17DHVkzzc0nrHsLzP18OeFrjQI= +gitee.com/phper95/pkg/timeutil v0.0.0-20220731025737-d3ae776d951b/go.mod h1:1EPAVZpuiWMRSbRZ3vjWXWk5yRbedoYKy0gUoviIUtY= gitee.com/phper95/pkg/trace v0.0.0-20220305143416-e5471e262040/go.mod h1:amV7G8HeVxTV7yWwt32O7PUuqZz0fcpkEsJiuV3a9QA= gitee.com/phper95/pkg/trace v0.0.0-20220618105137-6418dd8c0fd5/go.mod h1:amV7G8HeVxTV7yWwt32O7PUuqZz0fcpkEsJiuV3a9QA= gitee.com/phper95/pkg/trace v0.0.0-20220724124223-a4f7b6c91282 h1:4HLdY6X8UZArpacdRywEJu9xUULLcDtkCZ8J29q6WeI= @@ -88,6 +93,7 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/andybalholm/brotli v1.0.2 h1:JKnhI/XQ75uFBTiuzXpzFrUriDPiZjlOSzh6wXogP0E= github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -101,12 +107,15 @@ github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLj github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= 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.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= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -158,8 +167,10 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= @@ -174,6 +185,7 @@ github.com/go-redis/redis/v7 v7.4.1 h1:PASvf36gyUpr2zdOUS/9Zqc80GbM+9BDyiJSJDDOr github.com/go-redis/redis/v7 v7.4.1/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -210,6 +222,8 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -296,8 +310,10 @@ github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHW github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= @@ -306,11 +322,14 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE= github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/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.13.4 h1:0zhec2I8zGnjWcKyLl6i3gPqKANCCn5e9xmviEEeX6s= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -338,6 +357,7 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= @@ -355,7 +375,9 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/olivere/elastic/v7 v7.0.32 h1:R7CXvbu8Eq+WlsLgxmKVKPox0oOwAE/2T9Si5BnvK6E= github.com/olivere/elastic/v7 v7.0.32/go.mod h1:c7PVmLe3Fxq77PIfY/bZmxY/TAamBhCzZ8xDOE09a9k= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -380,15 +402,28 @@ github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSg github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +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/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= @@ -396,6 +431,7 @@ github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDN github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.1.1 h1:T/YLemO5Yp7KPzS+lVtu+WsHn8yoSwTfItdAd1r3cck= github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= @@ -426,6 +462,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= @@ -438,6 +476,14 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasthttp v1.32.0 h1:keswgWzyKyNIIjz2a7JmCYHOOIkRp6HMx9oTV6QrZWY= github.com/valyala/fasthttp v1.32.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -446,6 +492,8 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= +go.mongodb.org/mongo-driver v1.9.1 h1:m078y9v7sBItkt1aaoe2YlvWEXcD263e1a4E1fBrJ1c= +go.mongodb.org/mongo-driver v1.9.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -473,7 +521,9 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -552,6 +602,7 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -582,6 +633,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -606,6 +658,7 @@ golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/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-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-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -620,6 +673,8 @@ golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -627,6 +682,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -637,6 +693,7 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -649,8 +706,10 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -675,6 +734,7 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -887,6 +947,7 @@ 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.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= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/repo/mongo/product_repo/product_repo.go b/internal/repo/mongo/product_repo/product_repo.go deleted file mode 100644 index 3d0d64d217f14a4aa16e0a77717165ed8fec6c50..0000000000000000000000000000000000000000 --- a/internal/repo/mongo/product_repo/product_repo.go +++ /dev/null @@ -1 +0,0 @@ -package product_repo diff --git a/internal/server/api/v1/product_search.go b/internal/server/api/v1/product_search.go index 7329e24353f79351fc1ed73f3bc4e2f70e10a241..a3f0de478d159ae0cda505d3e90ece8a227ef7d6 100644 --- a/internal/server/api/v1/product_search.go +++ b/internal/server/api/v1/product_search.go @@ -9,7 +9,9 @@ import ( "shop-search-api/internal/repo/es/product_repo" "shop-search-api/internal/server/api/api_response" "shop-search-api/internal/service/product_service" + "shop-search-api/metric" "strconv" + "time" ) type serchResponse struct { @@ -18,6 +20,17 @@ type serchResponse struct { } func ProductSearch(c *gin.Context) { + t := time.Now() + cluster := "a" + //监控上报 + defer func() { + obs, err := metric.ProductSearch.GetMetricWithLabelValues(cluster) + if err != nil { + global.LOG.Error("metric.ProductSearch error", zap.Error(err)) + } else { + obs.Observe(float64(time.Since(t).Milliseconds())) + } + }() appG := api_response.Gin{C: c} keyword := c.Query("keyword") if len(keyword) == 0 { @@ -28,16 +41,27 @@ func ProductSearch(c *gin.Context) { Keyword: keyword, PageNum: com.StrTo(c.Query("page_num")).MustInt(), PageSize: com.StrTo(c.Query("page_size")).MustInt(), + UserID: com.StrTo(c.Query("userid")).MustInt64(), + Sales: c.Query("sales_order"), + Price: c.Query("price_order"), } - productService.Sales = c.Query("sales_order") - productService.Price = c.Query("price_order") + //上报搜索日志 + productService.CreateTime = time.Now().Unix() + defer func() { + productService.LogReport() + }() + + //模拟多集群上报 + if productService.UserID%2 == 0 { + cluster = "b" + } news := c.Query("news") - newsOrder := com.StrTo(news).MustInt() + newsFilter := com.StrTo(news).MustInt() if len(news) == 0 { productService.New = nil } else { - productService.New = &newsOrder + productService.New = &newsFilter } res, err := productService.SearchProduct() diff --git a/internal/service/product_service/product.go b/internal/service/product_service/product.go index ff9c72b59e9fb528be71a154a75a4802d025ba53..7740e5fc0dc779c7ae83d8504d38a7a580c226b6 100644 --- a/internal/service/product_service/product.go +++ b/internal/service/product_service/product.go @@ -2,53 +2,62 @@ package product_service import ( "context" + "fmt" "gitee.com/phper95/pkg/es" "gitee.com/phper95/pkg/strutil" + "gitee.com/phper95/pkg/timeutil" "github.com/olivere/elastic/v7" + "go.uber.org/zap" "shop-search-api/global" - "strconv" "strings" + "sync" + "time" +) + +var ( + LogTableCreated sync.Map ) type Product struct { - UserID int64 `json:"user_id"` - Keyword string `json:"keyword"` - New *int `json:"new"` - Sales string `json:"sales"` - Price string `json:"price"` - PageNum int `json:"page_num"` - PageSize int `json:"page_size"` + UserID int64 `json:"userid" bson:"userid"` + Keyword string `json:"keyword" bson:"keyword"` + New *int `json:"new" bson:"new"` + Sales string `json:"sales" bson:"sales"` + Price string `json:"price" bson:"price"` + PageNum int `json:"page_num" bson:"page_num"` + PageSize int `json:"page_size" bson:"page_size"` + CreateTime int64 `json:"create_time" bson:"create_time"` } -func (s *Product) SearchProduct() (result *elastic.SearchResult, err error) { +func (p *Product) SearchProduct() (result *elastic.SearchResult, err error) { query := elastic.NewBoolQuery() - from := s.PageNum * 20 + from := p.PageNum * 20 query.MinimumNumberShouldMatch(1) - storeNameMatchPhreaseQuery := elastic.NewMatchPhraseQuery("store_name", s.Keyword).Boost(2).QueryName("storeNameMatchPhreaseQuery") - storeNameMatchQuery := elastic.NewMatchPhraseQuery("store_name", s.Keyword).Boost(1).QueryName("storeNameMatchQuery") - storeNamePinyinMatchPhreaseQuery := elastic.NewMatchPhraseQuery("store_name.pinyin", s.Keyword).Boost(0.7).QueryName("storeNamePinyinMatchPhreaseQuery") - descMatchQuery := elastic.NewMatchPhraseQuery("desc", s.Keyword).Boost(0.5).QueryName("descMatchQuery") + storeNameMatchPhreaseQuery := elastic.NewMatchPhraseQuery("store_name", p.Keyword).Boost(2).QueryName("storeNameMatchPhreaseQuery") + storeNameMatchQuery := elastic.NewMatchPhraseQuery("store_name", p.Keyword).Boost(1).QueryName("storeNameMatchQuery") + storeNamePinyinMatchPhreaseQuery := elastic.NewMatchPhraseQuery("store_name.pinyin", p.Keyword).Boost(0.7).QueryName("storeNamePinyinMatchPhreaseQuery") + descMatchQuery := elastic.NewMatchPhraseQuery("desc", p.Keyword).Boost(0.5).QueryName("descMatchQuery") shouldQuerys := make([]elastic.Query, 0) shouldQuerys = append(shouldQuerys, storeNameMatchPhreaseQuery, storeNameMatchQuery, descMatchQuery) - if strutil.IncludeLetter(s.Keyword) { + if strutil.IncludeLetter(p.Keyword) { shouldQuerys = append(shouldQuerys, storeNamePinyinMatchPhreaseQuery) } //是否新品 - if s.New != nil { - query.Must(elastic.NewTermQuery("is_new", s.New)) + if p.New != nil { + query.Must(elastic.NewTermQuery("is_new", p.New)) } query.Should(shouldQuerys...) orders := make([]map[string]bool, 0) //价格排序 - if len(s.Price) > 0 { - if strings.ToLower(s.Price) == "desc" { + if len(p.Price) > 0 { + if strings.ToLower(p.Price) == "desc" { orders = append(orders, map[string]bool{"price": false}) } else { orders = append(orders, map[string]bool{"price": true}) @@ -56,8 +65,8 @@ func (s *Product) SearchProduct() (result *elastic.SearchResult, err error) { } //销量排序 - if len(s.Sales) > 0 { - if strings.ToLower(s.Sales) == "desc" { + if len(p.Sales) > 0 { + if strings.ToLower(p.Sales) == "desc" { orders = append(orders, map[string]bool{"sales": false}) } else { orders = append(orders, map[string]bool{"sales": true}) @@ -67,7 +76,27 @@ func (s *Product) SearchProduct() (result *elastic.SearchResult, err error) { orders = append(orders, map[string]bool{"_score": false}) return global.ES.Query(context.Background(), global.ProductIndexName, - nil, query, from, s.PageSize, es.WithEnableDSL(true), - es.WithPreference(strconv.FormatInt(s.UserID, 10)), + nil, query, from, p.PageSize, es.WithEnableDSL(true), + es.WithPreference(strutil.Int64ToString(p.UserID)), es.WithFetchSource(false), es.WithOrders(orders)) } + +func (p *Product) LogReport() { + if global.Mongo == nil { + global.LOG.Error(" global.Mongo is nil", zap.Any("param", p)) + return + } + tablename := fmt.Sprintf(global.ProductSearchLogCollectionNamePrefix, timeutil.YMDLayoutInt64(time.Now())) + //本地缓存,避免每次写入都要创建索引 + if _, ok := LogTableCreated.Load(tablename); !ok { + err := global.Mongo.CreateMultiIndex(global.ProductSearchLogDbName, tablename, []string{"userid", "create_time"}, false) + if err != nil { + global.LOG.Error(" Mongo CreateMultiIndex error", zap.Error(err), zap.Any("param", p)) + } + LogTableCreated.Store(tablename, true) + } + err := global.Mongo.InsertMany(global.ProductSearchLogDbName, tablename, p) + if err != nil { + global.LOG.Error(" Mongo InsertMany error", zap.Error(err), zap.Any("param", p)) + } +} diff --git a/main.go b/main.go index f92c3808537bac77f464043374c6f4575e1c078d..5e287e04a06dace20cd8db90e405c01ee9808104 100644 --- a/main.go +++ b/main.go @@ -6,7 +6,10 @@ import ( "gitee.com/phper95/pkg/cache" "gitee.com/phper95/pkg/db" "gitee.com/phper95/pkg/es" + "gitee.com/phper95/pkg/httpclient" "gitee.com/phper95/pkg/logger" + "gitee.com/phper95/pkg/nosql" + "gitee.com/phper95/pkg/prome" "gitee.com/phper95/pkg/shutdown" "gitee.com/phper95/pkg/timeutil" "gitee.com/phper95/pkg/trace" @@ -16,6 +19,7 @@ import ( "shop-search-api/config" "shop-search-api/global" "shop-search-api/internal/server/api" + "shop-search-api/metric" "time" ) @@ -26,6 +30,7 @@ func init() { initRedisClient() initMongoClient() initESClient() + initProme() } func InitLog() { // 初始化 logger @@ -82,7 +87,17 @@ func initESClient() { } func initMongoClient() { - // TO DO ... + err := nosql.InitMongoClient(nosql.DefaultMongoClient, config.Cfg.MongoDB.User, + config.Cfg.MongoDB.Password, config.Cfg.MongoDB.Host, 200) + if err != nil { + logger.Error("InitMongoClient error", zap.Error(err), zap.String("client", nosql.DefaultMongoClient)) + panic(err) + } + global.Mongo = nosql.GetMongoClient(nosql.DefaultMongoClient) +} + +func initProme() { + prome.InitPromethues(config.Cfg.Prome.Host, time.Second, config.AppName, httpclient.DefaultClient, metric.ProductSearch) } func main() { router := api.InitRouter() @@ -128,6 +143,11 @@ func main() { global.LOG.Error("redis close error", zap.Error(err), zap.String("client", cache.DefaultRedisClient)) } }, + func() { + if global.Mongo != nil { + global.Mongo.Close() + } + }, func() { err := global.LOG.Sync() if err != nil { diff --git a/metric/metric.go b/metric/metric.go new file mode 100644 index 0000000000000000000000000000000000000000..cdcdb748944886fb2eb63c8f17f932b932606f64 --- /dev/null +++ b/metric/metric.go @@ -0,0 +1,17 @@ +package metric + +import ( + "gitee.com/phper95/pkg/prome" + "github.com/prometheus/client_golang/prometheus" + "shop-search-api/config" +) + +var ProductSearch = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Name: "shop_product_search", + Help: "histogram for product search", + Buckets: prome.DefaultBuckets, + ConstLabels: prometheus.Labels{"machine": prome.GetHostName(), "app": config.AppName}, + }, + []string{"cluster"}, +) diff --git a/metric/metric_test.go b/metric/metric_test.go new file mode 100644 index 0000000000000000000000000000000000000000..df8c4d4a64f254de35122ab6f13a9d8465f40c1d --- /dev/null +++ b/metric/metric_test.go @@ -0,0 +1,43 @@ +package metric + +import ( + "fmt" + "gitee.com/phper95/pkg/httpclient" + "gitee.com/phper95/pkg/sign" + "net/http" + "net/url" + "shop-search-api/config" + "strconv" + "testing" + "time" +) + +const ProductSearchHost = "http://127.0.0.1:9090" +const ProductSearchUri = "/api/v1/product-search" + +var ( + ak = "AK100523687952" + sk = "W1WTYvJpfeH1YpUjTpeFbEx^DnpQ&35L" + ttl = time.Minute * 3 +) + +func TestMetric(t *testing.T) { + params := url.Values{} + params.Add("userid", "1") + params.Add("keyword", "手机") + params.Add("page_num", "1") + params.Add("page_size", "10") + + for i := 0; i < 10000; i++ { + params.Add("userid", strconv.Itoa(i)) + authorization, date, err := sign.New(ak, sk, ttl).Generate(ProductSearchUri, http.MethodGet, params) + if err != nil { + fmt.Println(err) + return + } + headerAuth := httpclient.WithHeader(config.HeaderAuthField, authorization) + headerAuthDate := httpclient.WithHeader(config.HeaderAuthDateField, date) + c, r, e := httpclient.Get(ProductSearchHost+ProductSearchUri, params, headerAuth, headerAuthDate) + fmt.Println(c, string(r), e) + } +}