diff --git a/core/controllers/base_v2.go b/core/controllers/base_v2.go index bf49009b..ddb9107e 100644 --- a/core/controllers/base_v2.go +++ b/core/controllers/base_v2.go @@ -2,9 +2,9 @@ package controllers import ( "errors" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/controllers/base_v2_test.go b/core/controllers/base_v2_test.go index acc34a5c..3e0351ef 100644 --- a/core/controllers/base_v2_test.go +++ b/core/controllers/base_v2_test.go @@ -14,7 +14,7 @@ import ( "net/http/httptest" "testing" - "github.com/crawlab-team/crawlab-db/mongo" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" ) diff --git a/core/controllers/data_collection.go b/core/controllers/data_collection.go index be1de596..cf9ef9a9 100644 --- a/core/controllers/data_collection.go +++ b/core/controllers/data_collection.go @@ -1,10 +1,10 @@ package controllers import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/container" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson/primitive" mongo2 "go.mongodb.org/mongo-driver/mongo" diff --git a/core/controllers/data_source.go b/core/controllers/data_source.go index 6b1b8563..167dc284 100644 --- a/core/controllers/data_source.go +++ b/core/controllers/data_source.go @@ -1,7 +1,6 @@ package controllers import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/ds" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" @@ -10,6 +9,7 @@ import ( "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/controllers/delegate_list.go b/core/controllers/delegate_list.go index 245c2f3b..1d2bd871 100644 --- a/core/controllers/delegate_list.go +++ b/core/controllers/delegate_list.go @@ -2,11 +2,11 @@ package controllers import ( "github.com/apex/log" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/delegate" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson" diff --git a/core/controllers/filter.go b/core/controllers/filter.go index 143e4d13..b609f6e0 100644 --- a/core/controllers/filter.go +++ b/core/controllers/filter.go @@ -1,8 +1,8 @@ package controllers import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/entity" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson" mongo2 "go.mongodb.org/mongo-driver/mongo" diff --git a/core/controllers/filter_v2.go b/core/controllers/filter_v2.go index 246750d0..9455804d 100644 --- a/core/controllers/filter_v2.go +++ b/core/controllers/filter_v2.go @@ -1,8 +1,8 @@ package controllers import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/entity" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson" mongo2 "go.mongodb.org/mongo-driver/mongo" diff --git a/core/controllers/result.go b/core/controllers/result.go index 346145fd..0324a417 100644 --- a/core/controllers/result.go +++ b/core/controllers/result.go @@ -1,11 +1,11 @@ package controllers import ( - "github.com/crawlab-team/crawlab-db/generic" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/result" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/generic" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/controllers/result_v2.go b/core/controllers/result_v2.go index edbeedca..9033367f 100644 --- a/core/controllers/result_v2.go +++ b/core/controllers/result_v2.go @@ -1,11 +1,11 @@ package controllers import ( - "github.com/crawlab-team/crawlab-db/generic" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/result" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/generic" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/controllers/spider.go b/core/controllers/spider.go index e76ba4d2..29ede12b 100644 --- a/core/controllers/spider.go +++ b/core/controllers/spider.go @@ -3,7 +3,6 @@ package controllers import ( "bytes" "fmt" - "github.com/crawlab-team/crawlab-db/mongo" vcs "github.com/crawlab-team/crawlab-vcs" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/container" @@ -15,6 +14,7 @@ import ( "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "github.com/gin-gonic/gin" "github.com/go-git/go-git/v5" diff --git a/core/controllers/spider_v2.go b/core/controllers/spider_v2.go index 95d28491..9214ab1f 100644 --- a/core/controllers/spider_v2.go +++ b/core/controllers/spider_v2.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" log2 "github.com/apex/log" - "github.com/crawlab-team/crawlab-db/mongo" vcs "github.com/crawlab-team/crawlab-vcs" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" @@ -14,6 +13,7 @@ import ( "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/spider/admin" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "github.com/gin-gonic/gin" "github.com/go-git/go-git/v5" diff --git a/core/controllers/task.go b/core/controllers/task.go index 7d9015f2..9a66b9ef 100644 --- a/core/controllers/task.go +++ b/core/controllers/task.go @@ -1,8 +1,6 @@ package controllers import ( - "github.com/crawlab-team/crawlab-db/generic" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/container" "github.com/crawlab-team/crawlab/core/errors" @@ -13,6 +11,8 @@ import ( "github.com/crawlab-team/crawlab/core/result" "github.com/crawlab-team/crawlab/core/task/log" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/generic" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/controllers/task_v2.go b/core/controllers/task_v2.go index ab8619cf..95c58de6 100644 --- a/core/controllers/task_v2.go +++ b/core/controllers/task_v2.go @@ -3,8 +3,6 @@ package controllers import ( "errors" log2 "github.com/apex/log" - "github.com/crawlab-team/crawlab-db/generic" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" @@ -14,6 +12,8 @@ import ( "github.com/crawlab-team/crawlab/core/task/log" "github.com/crawlab-team/crawlab/core/task/scheduler" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/generic" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/gin-gonic/gin" "github.com/spf13/viper" "go.mongodb.org/mongo-driver/bson" diff --git a/core/controllers/test/export_test.go b/core/controllers/test/export_test.go index 6c11e913..7623feb6 100644 --- a/core/controllers/test/export_test.go +++ b/core/controllers/test/export_test.go @@ -1,8 +1,8 @@ package test import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/spf13/viper" "github.com/stretchr/testify/require" "go.mongodb.org/mongo-driver/bson" diff --git a/core/controllers/test/filter_test.go b/core/controllers/test/filter_test.go index 466d93b1..e7579e0f 100644 --- a/core/controllers/test/filter_test.go +++ b/core/controllers/test/filter_test.go @@ -3,9 +3,9 @@ package test import ( "encoding/json" "fmt" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/spf13/viper" "github.com/stretchr/testify/require" "go.mongodb.org/mongo-driver/bson" diff --git a/core/ds/es.go b/core/ds/es.go index bd7fddaa..f078a54a 100644 --- a/core/ds/es.go +++ b/core/ds/es.go @@ -5,7 +5,6 @@ import ( "encoding/json" "errors" "fmt" - "github.com/crawlab-team/crawlab-db/generic" "github.com/crawlab-team/crawlab/core/constants" constants2 "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" @@ -14,6 +13,7 @@ import ( "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/generic" "github.com/crawlab-team/go-trace" "github.com/elastic/go-elasticsearch/v8" "github.com/elastic/go-elasticsearch/v8/esapi" diff --git a/core/ds/kafka.go b/core/ds/kafka.go index 44a42209..0d8a416c 100644 --- a/core/ds/kafka.go +++ b/core/ds/kafka.go @@ -2,13 +2,13 @@ package ds import ( "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab-db/generic" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/generic" "github.com/crawlab-team/go-trace" "github.com/segmentio/kafka-go" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/ds/mongo.go b/core/ds/mongo.go index 31bc8372..d6e69d3d 100644 --- a/core/ds/mongo.go +++ b/core/ds/mongo.go @@ -1,14 +1,14 @@ package ds import ( - "github.com/crawlab-team/crawlab-db/generic" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/utils" utils2 "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/generic" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson/primitive" mongo2 "go.mongodb.org/mongo-driver/mongo" "time" diff --git a/core/ds/sql.go b/core/ds/sql.go index 4a1f1caf..3fd1bc18 100644 --- a/core/ds/sql.go +++ b/core/ds/sql.go @@ -1,11 +1,11 @@ package ds import ( - "github.com/crawlab-team/crawlab-db/generic" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" utils2 "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/generic" "github.com/crawlab-team/go-trace" "github.com/upper/db/v4" "time" diff --git a/core/entity/grpc_base_service_params.go b/core/entity/grpc_base_service_params.go index 4d2fa9a0..29f0cb51 100644 --- a/core/entity/grpc_base_service_params.go +++ b/core/entity/grpc_base_service_params.go @@ -1,8 +1,8 @@ package entity import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/export/csv_service.go b/core/export/csv_service.go index 3c1342c6..6444a306 100644 --- a/core/export/csv_service.go +++ b/core/export/csv_service.go @@ -7,11 +7,11 @@ import ( "fmt" "github.com/ReneKroon/ttlcache" "github.com/apex/log" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "github.com/hashicorp/go-uuid" "go.mongodb.org/mongo-driver/bson" diff --git a/core/export/csv_service_test.go b/core/export/csv_service_test.go index 44e072aa..8e4dffaa 100644 --- a/core/export/csv_service_test.go +++ b/core/export/csv_service_test.go @@ -3,8 +3,8 @@ package export import ( "encoding/csv" "fmt" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/stretchr/testify/require" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/export/json_service.go b/core/export/json_service.go index d1eef948..44ea0169 100644 --- a/core/export/json_service.go +++ b/core/export/json_service.go @@ -6,11 +6,11 @@ import ( "errors" "github.com/ReneKroon/ttlcache" "github.com/apex/log" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "github.com/hashicorp/go-uuid" mongo2 "go.mongodb.org/mongo-driver/mongo" diff --git a/core/go.mod b/core/go.mod index a7b1bed5..6f43f36a 100644 --- a/core/go.mod +++ b/core/go.mod @@ -3,16 +3,17 @@ module github.com/crawlab-team/crawlab/core go 1.22 replace ( - github.com/crawlab-team/crawlab/grpc latest => ../grpc latest + github.com/crawlab-team/crawlab/grpc => ../grpc + github.com/crawlab-team/crawlab/db => ../db ) require ( github.com/ReneKroon/ttlcache v1.7.0 github.com/apex/log v1.9.0 github.com/cenkalti/backoff/v4 v4.1.0 - github.com/crawlab-team/crawlab-db v0.6.0-beta.20220417.1300.0.20221226064900-5a357ee73484 + github.com/crawlab-team/crawlab/db v0.0.0 github.com/crawlab-team/crawlab-fs v0.6.3-2 - github.com/crawlab-team/crawlab/grpc latest + github.com/crawlab-team/crawlab/grpc v0.0.0 github.com/crawlab-team/crawlab-vcs v0.6.2-0.20230629045457-afe0be0e2185 github.com/crawlab-team/go-trace v0.1.1 github.com/crawlab-team/template-parser v0.0.4-0.20221006034646-9bb77a7ae86e diff --git a/core/go.sum b/core/go.sum index 90034221..0e42c1e3 100644 --- a/core/go.sum +++ b/core/go.sum @@ -151,15 +151,11 @@ github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crawlab-team/crawlab-db v0.6.0-1/go.mod h1:gfeF0nAnFuup6iYvgHkY0in/HpO/+JktXqVNMdhoxhU= -github.com/crawlab-team/crawlab-db v0.6.0-beta.20220417.1300.0.20221226064900-5a357ee73484 h1:1CXWC3lYcVWcgPRc3PNKzZ3fcfX5WZ/V8xwzHEMUFHQ= -github.com/crawlab-team/crawlab-db v0.6.0-beta.20220417.1300.0.20221226064900-5a357ee73484/go.mod h1:gfeF0nAnFuup6iYvgHkY0in/HpO/+JktXqVNMdhoxhU= +github.com/crawlab-team/crawlab/db v0.6.0-1/go.mod h1:gfeF0nAnFuup6iYvgHkY0in/HpO/+JktXqVNMdhoxhU= +github.com/crawlab-team/crawlab/db v0.6.0-beta.20220417.1300.0.20221226064900-5a357ee73484 h1:1CXWC3lYcVWcgPRc3PNKzZ3fcfX5WZ/V8xwzHEMUFHQ= +github.com/crawlab-team/crawlab/db v0.6.0-beta.20220417.1300.0.20221226064900-5a357ee73484/go.mod h1:gfeF0nAnFuup6iYvgHkY0in/HpO/+JktXqVNMdhoxhU= github.com/crawlab-team/crawlab-fs v0.6.3-2 h1:GAovTF1R1PLoQgj+0F1GpePrlp1k7RtW/jK8p0L9HhA= github.com/crawlab-team/crawlab-fs v0.6.3-2/go.mod h1:Nob0uFr82IPbkk6LEYG0BAB2NgJ3PKoNVhtcbf5fLf0= -github.com/crawlab-team/crawlab/grpc v0.6.4-0.20240614065204-c753fc33f7ca h1:7LOFAWCIK+153f5J437xXhlI1miUQ3mrm3OXGq2/m3U= -github.com/crawlab-team/crawlab/grpc v0.6.4-0.20240614065204-c753fc33f7ca/go.mod h1:j5FaFuWfIxHbmFXedFaUZHO2DpLqS3QZ0x7W3APN0fQ= -github.com/crawlab-team/crawlab/grpc v0.6.4-0.20240614072247-7558f2150cee h1:jlT64UPWbf5Xny3jOzKE35od1F+OuGK+y8PTNomyxiM= -github.com/crawlab-team/crawlab/grpc v0.6.4-0.20240614072247-7558f2150cee/go.mod h1:j5FaFuWfIxHbmFXedFaUZHO2DpLqS3QZ0x7W3APN0fQ= github.com/crawlab-team/crawlab-vcs v0.6.2-0.20230629045457-afe0be0e2185 h1:A/XSUuGgGMn+z+lFd2ye2ClgIKhDZYUerhOL5jePQhU= github.com/crawlab-team/crawlab-vcs v0.6.2-0.20230629045457-afe0be0e2185/go.mod h1:YHMYUEoSqfXUZHsWW/M/DaLh/zOpRtiElaRWcrGyv/I= github.com/crawlab-team/go-trace v0.1.0/go.mod h1:LcWyn68HoT+d29CHM8L41pFHxsAcBMF1xjqJmWdyFh8= diff --git a/core/grpc/payload/model_service_v2_payload.go b/core/grpc/payload/model_service_v2_payload.go index 454d964d..926386cf 100644 --- a/core/grpc/payload/model_service_v2_payload.go +++ b/core/grpc/payload/model_service_v2_payload.go @@ -1,7 +1,7 @@ package payload import ( - "github.com/crawlab-team/crawlab-db/mongo" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/grpc/server/model_base_service_v2_server.go b/core/grpc/server/model_base_service_v2_server.go index 8ae328c5..79385602 100644 --- a/core/grpc/server/model_base_service_v2_server.go +++ b/core/grpc/server/model_base_service_v2_server.go @@ -3,9 +3,9 @@ package server import ( "context" "encoding/json" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/db/mongo" grpc "github.com/crawlab-team/crawlab/grpc" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/grpc/server/task_server.go b/core/grpc/server/task_server.go index 62b68a5b..fc3230b0 100644 --- a/core/grpc/server/task_server.go +++ b/core/grpc/server/task_server.go @@ -4,7 +4,6 @@ import ( "context" "encoding/json" "github.com/apex/log" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/container" "github.com/crawlab-team/crawlab/core/entity" @@ -15,6 +14,7 @@ import ( "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/notification" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" grpc "github.com/crawlab-team/crawlab/grpc" "github.com/crawlab-team/go-trace" "go.mongodb.org/mongo-driver/bson" diff --git a/core/grpc/server/task_server_v2.go b/core/grpc/server/task_server_v2.go index 62121cb6..5edfbdf4 100644 --- a/core/grpc/server/task_server_v2.go +++ b/core/grpc/server/task_server_v2.go @@ -5,7 +5,6 @@ import ( "encoding/json" "errors" "github.com/apex/log" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/interfaces" @@ -15,6 +14,7 @@ import ( "github.com/crawlab-team/crawlab/core/notification" "github.com/crawlab-team/crawlab/core/task/stats" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" grpc "github.com/crawlab-team/crawlab/grpc" "github.com/crawlab-team/go-trace" "go.mongodb.org/mongo-driver/bson" diff --git a/core/interfaces/grpc_client_model_environment_service.go b/core/interfaces/grpc_client_model_environment_service.go index 9b7c07af..d8276d69 100644 --- a/core/interfaces/grpc_client_model_environment_service.go +++ b/core/interfaces/grpc_client_model_environment_service.go @@ -1,7 +1,7 @@ package interfaces import ( - "github.com/crawlab-team/crawlab-db/mongo" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/interfaces/grpc_client_model_node_service.go b/core/interfaces/grpc_client_model_node_service.go index 899868a1..e3168941 100644 --- a/core/interfaces/grpc_client_model_node_service.go +++ b/core/interfaces/grpc_client_model_node_service.go @@ -1,7 +1,7 @@ package interfaces import ( - "github.com/crawlab-team/crawlab-db/mongo" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/interfaces/grpc_client_model_spider_service.go b/core/interfaces/grpc_client_model_spider_service.go index a2d8c4d4..de0a993c 100644 --- a/core/interfaces/grpc_client_model_spider_service.go +++ b/core/interfaces/grpc_client_model_spider_service.go @@ -1,7 +1,7 @@ package interfaces import ( - "github.com/crawlab-team/crawlab-db/mongo" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/interfaces/grpc_client_model_task_service.go b/core/interfaces/grpc_client_model_task_service.go index 82f830e7..cabeb81c 100644 --- a/core/interfaces/grpc_client_model_task_service.go +++ b/core/interfaces/grpc_client_model_task_service.go @@ -1,7 +1,7 @@ package interfaces import ( - "github.com/crawlab-team/crawlab-db/mongo" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/interfaces/grpc_client_model_task_stat_service.go b/core/interfaces/grpc_client_model_task_stat_service.go index 95667817..ded7ee19 100644 --- a/core/interfaces/grpc_client_model_task_stat_service.go +++ b/core/interfaces/grpc_client_model_task_stat_service.go @@ -1,7 +1,7 @@ package interfaces import ( - "github.com/crawlab-team/crawlab-db/mongo" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/interfaces/model_base_service.go b/core/interfaces/model_base_service.go index 1ff93548..f3062b5e 100644 --- a/core/interfaces/model_base_service.go +++ b/core/interfaces/model_base_service.go @@ -1,7 +1,7 @@ package interfaces import ( - "github.com/crawlab-team/crawlab-db/mongo" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/interfaces/model_service_v2.go b/core/interfaces/model_service_v2.go index c4d1cace..723de953 100644 --- a/core/interfaces/model_service_v2.go +++ b/core/interfaces/model_service_v2.go @@ -1,7 +1,7 @@ package interfaces import ( - "github.com/crawlab-team/crawlab-db/mongo" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/interfaces/result_service.go b/core/interfaces/result_service.go index 1d861667..739bc6df 100644 --- a/core/interfaces/result_service.go +++ b/core/interfaces/result_service.go @@ -1,7 +1,7 @@ package interfaces import ( - "github.com/crawlab-team/crawlab-db/generic" + "github.com/crawlab-team/crawlab/db/generic" "time" ) diff --git a/core/interfaces/result_service_mongo.go b/core/interfaces/result_service_mongo.go index 37c807ae..dcca1c5b 100644 --- a/core/interfaces/result_service_mongo.go +++ b/core/interfaces/result_service_mongo.go @@ -1,7 +1,7 @@ package interfaces import ( - "github.com/crawlab-team/crawlab-db/mongo" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/client/model_base_service.go b/core/models/client/model_base_service.go index e604c891..0beeb218 100644 --- a/core/models/client/model_base_service.go +++ b/core/models/client/model_base_service.go @@ -4,12 +4,12 @@ import ( "encoding/json" "github.com/apex/log" "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/container" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" grpc "github.com/crawlab-team/crawlab/grpc" "github.com/crawlab-team/go-trace" errors2 "github.com/pkg/errors" diff --git a/core/models/client/model_environment_service.go b/core/models/client/model_environment_service.go index 57aef5cc..6de3fbd9 100644 --- a/core/models/client/model_environment_service.go +++ b/core/models/client/model_environment_service.go @@ -1,9 +1,9 @@ package client import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/client/model_node_service.go b/core/models/client/model_node_service.go index 09bc396f..2518b1ec 100644 --- a/core/models/client/model_node_service.go +++ b/core/models/client/model_node_service.go @@ -1,9 +1,9 @@ package client import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/client/model_service_v2.go b/core/models/client/model_service_v2.go index 5a8b377e..049f584e 100644 --- a/core/models/client/model_service_v2.go +++ b/core/models/client/model_service_v2.go @@ -2,10 +2,10 @@ package client import ( "encoding/json" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/grpc/client" "github.com/crawlab-team/crawlab/core/interfaces" nodeconfig "github.com/crawlab-team/crawlab/core/node/config" + "github.com/crawlab-team/crawlab/db/mongo" grpc "github.com/crawlab-team/crawlab/grpc" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/models/client/model_service_v2_test.go b/core/models/client/model_service_v2_test.go index 59d0075d..c4053bb1 100644 --- a/core/models/client/model_service_v2_test.go +++ b/core/models/client/model_service_v2_test.go @@ -2,11 +2,11 @@ package client_test import ( "context" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/grpc/server" "github.com/crawlab-team/crawlab/core/models/client" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/spf13/viper" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/core/models/client/model_spider_service.go b/core/models/client/model_spider_service.go index 53720498..164baee9 100644 --- a/core/models/client/model_spider_service.go +++ b/core/models/client/model_spider_service.go @@ -1,9 +1,9 @@ package client import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/client/model_task_service.go b/core/models/client/model_task_service.go index 34b19e71..16a9612b 100644 --- a/core/models/client/model_task_service.go +++ b/core/models/client/model_task_service.go @@ -1,9 +1,9 @@ package client import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/client/model_task_stat_service.go b/core/models/client/model_task_stat_service.go index e9c69f56..1714772b 100644 --- a/core/models/client/model_task_stat_service.go +++ b/core/models/client/model_task_stat_service.go @@ -1,9 +1,9 @@ package client import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/common/index_service.go b/core/models/common/index_service.go index 44ddb0f5..ff75b92e 100644 --- a/core/models/common/index_service.go +++ b/core/models/common/index_service.go @@ -1,9 +1,9 @@ package common import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" mongo2 "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" diff --git a/core/models/delegate/base_test.go b/core/models/delegate/base_test.go index 3ad962bc..fd84e128 100644 --- a/core/models/delegate/base_test.go +++ b/core/models/delegate/base_test.go @@ -2,7 +2,7 @@ package delegate_test import ( "context" - "github.com/crawlab-team/crawlab-db/mongo" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "testing" "time" diff --git a/core/models/delegate/model.go b/core/models/delegate/model.go index a25ee5d0..f27b0b18 100644 --- a/core/models/delegate/model.go +++ b/core/models/delegate/model.go @@ -2,13 +2,13 @@ package delegate import ( "encoding/json" - "github.com/crawlab-team/crawlab-db/errors" - "github.com/crawlab-team/crawlab-db/mongo" errors2 "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/event" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/errors" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/models/delegate/model_node_test.go b/core/models/delegate/model_node_test.go index 0a95c87e..2e0f847e 100644 --- a/core/models/delegate/model_node_test.go +++ b/core/models/delegate/model_node_test.go @@ -1,10 +1,10 @@ package delegate_test import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/delegate" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/stretchr/testify/require" "testing" ) diff --git a/core/models/delegate/model_role_test.go b/core/models/delegate/model_role_test.go index 2d4a1c5e..dcab9bf5 100644 --- a/core/models/delegate/model_role_test.go +++ b/core/models/delegate/model_role_test.go @@ -1,10 +1,10 @@ package delegate_test import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/delegate" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/stretchr/testify/require" "testing" ) diff --git a/core/models/delegate/model_test.go b/core/models/delegate/model_test.go index c23aaa95..93dc9140 100644 --- a/core/models/delegate/model_test.go +++ b/core/models/delegate/model_test.go @@ -1,10 +1,10 @@ package delegate_test import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/delegate" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/stretchr/testify/require" "testing" ) diff --git a/core/models/delegate/model_user_role_test.go b/core/models/delegate/model_user_role_test.go index d1c87a96..d55b90c6 100644 --- a/core/models/delegate/model_user_role_test.go +++ b/core/models/delegate/model_user_role_test.go @@ -1,11 +1,11 @@ package delegate_test import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/common" "github.com/crawlab-team/crawlab/core/models/delegate" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/spf13/viper" "github.com/stretchr/testify/require" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/models/service/artifact_service.go b/core/models/service/artifact_service.go index afa0219d..8155942a 100644 --- a/core/models/service/artifact_service.go +++ b/core/models/service/artifact_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/base_service.go b/core/models/service/base_service.go index 1b58c46c..087e942c 100644 --- a/core/models/service/base_service.go +++ b/core/models/service/base_service.go @@ -3,13 +3,13 @@ package service import ( "encoding/json" "github.com/apex/log" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/delegate" models2 "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/models/service/base_service_v2.go b/core/models/service/base_service_v2.go index 1197c9bf..71dc0f15 100644 --- a/core/models/service/base_service_v2.go +++ b/core/models/service/base_service_v2.go @@ -2,8 +2,8 @@ package service import ( "fmt" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "reflect" diff --git a/core/models/service/base_service_v2_test.go b/core/models/service/base_service_v2_test.go index ff5797fc..18eec697 100644 --- a/core/models/service/base_service_v2_test.go +++ b/core/models/service/base_service_v2_test.go @@ -2,9 +2,9 @@ package service_test import ( "context" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/spf13/viper" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/core/models/service/binder_basic.go b/core/models/service/binder_basic.go index d4f33121..df0fb643 100644 --- a/core/models/service/binder_basic.go +++ b/core/models/service/binder_basic.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" ) func NewBasicBinder(id interfaces.ModelId, fr *mongo.FindResult) (b interfaces.ModelBinder) { diff --git a/core/models/service/binder_list.go b/core/models/service/binder_list.go index 34687c21..ade6cdf1 100644 --- a/core/models/service/binder_list.go +++ b/core/models/service/binder_list.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" ) diff --git a/core/models/service/data_collection_service.go b/core/models/service/data_collection_service.go index 90527954..6b2fd284 100644 --- a/core/models/service/data_collection_service.go +++ b/core/models/service/data_collection_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/data_source_service.go b/core/models/service/data_source_service.go index 96867819..44ecb387 100644 --- a/core/models/service/data_source_service.go +++ b/core/models/service/data_source_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/dependency_setting_service.go b/core/models/service/dependency_setting_service.go index 1aba0a58..41600285 100644 --- a/core/models/service/dependency_setting_service.go +++ b/core/models/service/dependency_setting_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/environment_service.go b/core/models/service/environment_service.go index a9d74ce4..5b82aa39 100644 --- a/core/models/service/environment_service.go +++ b/core/models/service/environment_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/extra_value_service.go b/core/models/service/extra_value_service.go index 7e223a0d..5fa1bb6e 100644 --- a/core/models/service/extra_value_service.go +++ b/core/models/service/extra_value_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/git_service.go b/core/models/service/git_service.go index 8dbf8346..41ad0997 100644 --- a/core/models/service/git_service.go +++ b/core/models/service/git_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/interface.go b/core/models/service/interface.go index fa633a88..c03ff391 100644 --- a/core/models/service/interface.go +++ b/core/models/service/interface.go @@ -1,9 +1,9 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/job_service.go b/core/models/service/job_service.go index 3a3ed711..2ec74964 100644 --- a/core/models/service/job_service.go +++ b/core/models/service/job_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/node_service.go b/core/models/service/node_service.go index 37ac60a6..f99d6d84 100644 --- a/core/models/service/node_service.go +++ b/core/models/service/node_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/options.go b/core/models/service/options.go index b8694729..8677d0c1 100644 --- a/core/models/service/options.go +++ b/core/models/service/options.go @@ -1,8 +1,8 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/db/mongo" ) type Option func(ModelService) diff --git a/core/models/service/password_service.go b/core/models/service/password_service.go index 02131074..47101522 100644 --- a/core/models/service/password_service.go +++ b/core/models/service/password_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/permission_service.go b/core/models/service/permission_service.go index 88b41df0..e35d63d6 100644 --- a/core/models/service/permission_service.go +++ b/core/models/service/permission_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/project_service.go b/core/models/service/project_service.go index 39af3168..6dd3e10e 100644 --- a/core/models/service/project_service.go +++ b/core/models/service/project_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/role_permission_service.go b/core/models/service/role_permission_service.go index 4d5f315e..5d980d41 100644 --- a/core/models/service/role_permission_service.go +++ b/core/models/service/role_permission_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/role_service.go b/core/models/service/role_service.go index 11f96035..c456dbde 100644 --- a/core/models/service/role_service.go +++ b/core/models/service/role_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/schedule_service.go b/core/models/service/schedule_service.go index 195fb276..9d04cbf2 100644 --- a/core/models/service/schedule_service.go +++ b/core/models/service/schedule_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/service.go b/core/models/service/service.go index e0948039..bb62246b 100644 --- a/core/models/service/service.go +++ b/core/models/service/service.go @@ -2,9 +2,9 @@ package service import ( "context" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/color" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" mongo2 "go.mongodb.org/mongo-driver/mongo" ) diff --git a/core/models/service/setting_service.go b/core/models/service/setting_service.go index 3b37f4de..41dd5c45 100644 --- a/core/models/service/setting_service.go +++ b/core/models/service/setting_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/spider_service.go b/core/models/service/spider_service.go index 16326d6f..cdd9fbad 100644 --- a/core/models/service/spider_service.go +++ b/core/models/service/spider_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/spider_stat_service.go b/core/models/service/spider_stat_service.go index 64cbc45f..569d2fc9 100644 --- a/core/models/service/spider_stat_service.go +++ b/core/models/service/spider_stat_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/tag_service.go b/core/models/service/tag_service.go index 4a8bea50..362b3faf 100644 --- a/core/models/service/tag_service.go +++ b/core/models/service/tag_service.go @@ -1,11 +1,11 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/delegate" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/models/service/tag_service_legacy.go b/core/models/service/tag_service_legacy.go index fed06deb..a78cf067 100644 --- a/core/models/service/tag_service_legacy.go +++ b/core/models/service/tag_service_legacy.go @@ -3,7 +3,7 @@ package service // //import ( // "github.com/crawlab-team/crawlab/core/interfaces" -// "github.com/crawlab-team/crawlab-db/mongo" +// "github.com/crawlab-team/crawlab/db/mongo" // "go.mongodb.org/mongo-driver/bson" // "go.mongodb.org/mongo-driver/bson/primitive" // mongo2 "go.mongodb.org/mongo-driver/mongo" diff --git a/core/models/service/task_queue_service.go b/core/models/service/task_queue_service.go index fcbc2362..7ade0326 100644 --- a/core/models/service/task_queue_service.go +++ b/core/models/service/task_queue_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/task_service.go b/core/models/service/task_service.go index 99a9ae83..3e5e64a5 100644 --- a/core/models/service/task_service.go +++ b/core/models/service/task_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/task_stat_service.go b/core/models/service/task_stat_service.go index 1306569e..3d335104 100644 --- a/core/models/service/task_stat_service.go +++ b/core/models/service/task_stat_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/token_service.go b/core/models/service/token_service.go index c802f9aa..02689353 100644 --- a/core/models/service/token_service.go +++ b/core/models/service/token_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/user_role_service.go b/core/models/service/user_role_service.go index 80a021fa..fe610919 100644 --- a/core/models/service/user_role_service.go +++ b/core/models/service/user_role_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/user_service.go b/core/models/service/user_service.go index a64f46bc..ab9c29b1 100644 --- a/core/models/service/user_service.go +++ b/core/models/service/user_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/models/service/variable_service.go b/core/models/service/variable_service.go index ce63d2e6..8b72371d 100644 --- a/core/models/service/variable_service.go +++ b/core/models/service/variable_service.go @@ -1,10 +1,10 @@ package service import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" models2 "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/node/service/master_service.go b/core/node/service/master_service.go index 495223ba..e2d42139 100644 --- a/core/node/service/master_service.go +++ b/core/node/service/master_service.go @@ -2,7 +2,6 @@ package service import ( "github.com/apex/log" - "github.com/crawlab-team/crawlab-db/mongo" config2 "github.com/crawlab-team/crawlab/core/config" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/container" @@ -17,6 +16,7 @@ import ( "github.com/crawlab-team/crawlab/core/notification" "github.com/crawlab-team/crawlab/core/system" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" grpc "github.com/crawlab-team/crawlab/grpc" "github.com/crawlab-team/go-trace" "github.com/spf13/viper" diff --git a/core/notification/service.go b/core/notification/service.go index b2fd8a27..97beba44 100644 --- a/core/notification/service.go +++ b/core/notification/service.go @@ -2,12 +2,12 @@ package notification import ( "github.com/apex/log" - mongo2 "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/utils" + mongo2 "github.com/crawlab-team/crawlab/db/mongo" parser "github.com/crawlab-team/template-parser" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/notification/service_v2.go b/core/notification/service_v2.go index 23ade59b..0184e2cf 100644 --- a/core/notification/service_v2.go +++ b/core/notification/service_v2.go @@ -2,11 +2,11 @@ package notification import ( "github.com/apex/log" - mongo2 "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" + mongo2 "github.com/crawlab-team/crawlab/db/mongo" parser "github.com/crawlab-team/template-parser" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/result/service_mongo.go b/core/result/service_mongo.go index cdc6ff3f..13765bee 100644 --- a/core/result/service_mongo.go +++ b/core/result/service_mongo.go @@ -3,13 +3,13 @@ package result import ( "time" - "github.com/crawlab-team/crawlab-db/generic" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/generic" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/result/test/base.go b/core/result/test/base.go index 14331b20..a224fa29 100644 --- a/core/result/test/base.go +++ b/core/result/test/base.go @@ -1,12 +1,12 @@ package test import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/delegate" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/result" + "github.com/crawlab-team/crawlab/db/mongo" "go.uber.org/dig" "testing" ) diff --git a/core/stats/service.go b/core/stats/service.go index 17df1be9..75c803c8 100644 --- a/core/stats/service.go +++ b/core/stats/service.go @@ -1,10 +1,10 @@ package stats import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" mongo2 "go.mongodb.org/mongo-driver/mongo" ) diff --git a/core/system/service.go b/core/system/service.go index 10846740..891657bb 100644 --- a/core/system/service.go +++ b/core/system/service.go @@ -1,10 +1,10 @@ package system import ( - mongo2 "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" + mongo2 "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/core/task/handler/runner.go b/core/task/handler/runner.go index 11930910..b848bce1 100644 --- a/core/task/handler/runner.go +++ b/core/task/handler/runner.go @@ -7,7 +7,6 @@ import ( "fmt" "github.com/apex/log" "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/container" "github.com/crawlab-team/crawlab/core/entity" @@ -19,6 +18,7 @@ import ( "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/sys_exec" "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/db/mongo" grpc "github.com/crawlab-team/crawlab/grpc" "github.com/crawlab-team/go-trace" "github.com/shirou/gopsutil/process" diff --git a/core/task/scheduler/service.go b/core/task/scheduler/service.go index fb858545..b7bdbb08 100644 --- a/core/task/scheduler/service.go +++ b/core/task/scheduler/service.go @@ -1,7 +1,6 @@ package scheduler import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/container" "github.com/crawlab-team/crawlab/core/errors" @@ -10,6 +9,7 @@ import ( "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/task" + "github.com/crawlab-team/crawlab/db/mongo" grpc "github.com/crawlab-team/crawlab/grpc" "github.com/crawlab-team/go-trace" "go.mongodb.org/mongo-driver/bson" diff --git a/core/task/stats/service.go b/core/task/stats/service.go index ee12d762..ee78dc70 100644 --- a/core/task/stats/service.go +++ b/core/task/stats/service.go @@ -1,13 +1,13 @@ package stats import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/container" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/result" "github.com/crawlab-team/crawlab/core/task" "github.com/crawlab-team/crawlab/core/task/log" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/user/service.go b/core/user/service.go index 97a2ad9d..db087890 100644 --- a/core/user/service.go +++ b/core/user/service.go @@ -1,7 +1,6 @@ package user import ( - mongo2 "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/container" "github.com/crawlab-team/crawlab/core/errors" @@ -10,6 +9,7 @@ import ( "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/utils" + mongo2 "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt/v5" diff --git a/core/user/service_v2.go b/core/user/service_v2.go index e4aa72b6..c5b31c17 100644 --- a/core/user/service_v2.go +++ b/core/user/service_v2.go @@ -1,13 +1,13 @@ package user import ( - mongo2 "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/utils" + mongo2 "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt/v5" diff --git a/core/utils/cache.go b/core/utils/cache.go index b875b316..e64e147b 100644 --- a/core/utils/cache.go +++ b/core/utils/cache.go @@ -1,8 +1,8 @@ package utils import ( - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" mongo2 "go.mongodb.org/mongo-driver/mongo" "time" diff --git a/core/utils/demo.go b/core/utils/demo.go index 19e31dc5..74c8439d 100644 --- a/core/utils/demo.go +++ b/core/utils/demo.go @@ -2,8 +2,8 @@ package utils import ( "fmt" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/sys_exec" + "github.com/crawlab-team/crawlab/db/mongo" "github.com/crawlab-team/go-trace" "github.com/spf13/viper" ) diff --git a/core/utils/es.go b/core/utils/es.go index 587e1715..5345a093 100644 --- a/core/utils/es.go +++ b/core/utils/es.go @@ -6,9 +6,9 @@ import ( "encoding/json" "fmt" "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab-db/generic" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/generic" "github.com/crawlab-team/go-trace" "github.com/elastic/go-elasticsearch/v8" "github.com/elastic/go-elasticsearch/v8/esapi" diff --git a/core/utils/mongo.go b/core/utils/mongo.go index 4b1ff502..5807f24a 100644 --- a/core/utils/mongo.go +++ b/core/utils/mongo.go @@ -2,10 +2,10 @@ package utils import ( "context" - "github.com/crawlab-team/crawlab-db/generic" - "github.com/crawlab-team/crawlab-db/mongo" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/db/generic" + "github.com/crawlab-team/crawlab/db/mongo" "go.mongodb.org/mongo-driver/bson" mongo2 "go.mongodb.org/mongo-driver/mongo" "time" diff --git a/core/utils/sql.go b/core/utils/sql.go index f231d755..4eccce86 100644 --- a/core/utils/sql.go +++ b/core/utils/sql.go @@ -1,7 +1,7 @@ package utils import ( - "github.com/crawlab-team/crawlab-db/generic" + "github.com/crawlab-team/crawlab/db/generic" "github.com/upper/db/v4" "go.mongodb.org/mongo-driver/bson/primitive" ) diff --git a/db/.editorconfig b/db/.editorconfig new file mode 100644 index 00000000..ef3de0a1 --- /dev/null +++ b/db/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = tab +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/db/.gitignore b/db/.gitignore new file mode 100644 index 00000000..4089fa24 --- /dev/null +++ b/db/.gitignore @@ -0,0 +1,5 @@ +.idea +.DS_Store +tmp/ +vendor/ +go.sum \ No newline at end of file diff --git a/db/LICENSE b/db/LICENSE new file mode 100644 index 00000000..e41311d2 --- /dev/null +++ b/db/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2020, Crawlab Team +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/db/README.md b/db/README.md new file mode 100644 index 00000000..04b2346f --- /dev/null +++ b/db/README.md @@ -0,0 +1,2 @@ +# crawlab-db +Backend database module for Crawlab diff --git a/db/errors/base.go b/db/errors/base.go new file mode 100644 index 00000000..a0310075 --- /dev/null +++ b/db/errors/base.go @@ -0,0 +1,6 @@ +package errors + +const ( + errorPrefixMongo = "mongo" + errorPrefixRedis = "redis" +) diff --git a/db/errors/errors.go b/db/errors/errors.go new file mode 100644 index 00000000..5e5e23a0 --- /dev/null +++ b/db/errors/errors.go @@ -0,0 +1,10 @@ +package errors + +import "errors" + +var ( + ErrInvalidType = errors.New("invalid type") + ErrMissingValue = errors.New("missing value") + ErrNoCursor = errors.New("no cursor") + ErrAlreadyLocked = errors.New("already locked") +) diff --git a/db/errors/redis.go b/db/errors/redis.go new file mode 100644 index 00000000..70db1e79 --- /dev/null +++ b/db/errors/redis.go @@ -0,0 +1,15 @@ +package errors + +import ( + "errors" + "fmt" +) + +var ( + ErrorRedisInvalidType = NewRedisError("invalid type") + ErrorRedisLocked = NewRedisError("locked") +) + +func NewRedisError(msg string) (err error) { + return errors.New(fmt.Sprintf("%s: %s", errorPrefixRedis, msg)) +} diff --git a/db/generic/base.go b/db/generic/base.go new file mode 100644 index 00000000..c3cc5b29 --- /dev/null +++ b/db/generic/base.go @@ -0,0 +1,8 @@ +package generic + +const ( + DataSourceTypeMongo = "mongo" + DataSourceTypeMysql = "mysql" + DataSourceTypePostgres = "postgres" + DataSourceTypeElasticSearch = "postgres" +) diff --git a/db/generic/list.go b/db/generic/list.go new file mode 100644 index 00000000..99e30fea --- /dev/null +++ b/db/generic/list.go @@ -0,0 +1,15 @@ +package generic + +type ListQueryCondition struct { + Key string + Op string + Value interface{} +} + +type ListQuery []ListQueryCondition + +type ListOptions struct { + Skip int + Limit int + Sort []ListSort +} diff --git a/db/generic/op.go b/db/generic/op.go new file mode 100644 index 00000000..0051d39b --- /dev/null +++ b/db/generic/op.go @@ -0,0 +1,7 @@ +package generic + +type Op string + +const ( + OpEqual = "eq" +) diff --git a/db/generic/sort.go b/db/generic/sort.go new file mode 100644 index 00000000..388909c2 --- /dev/null +++ b/db/generic/sort.go @@ -0,0 +1,13 @@ +package generic + +type SortDirection string + +const ( + SortDirectionAsc SortDirection = "asc" + SortDirectionDesc SortDirection = "desc" +) + +type ListSort struct { + Key string + Direction SortDirection +} diff --git a/db/go.mod b/db/go.mod new file mode 100644 index 00000000..522e6fa6 --- /dev/null +++ b/db/go.mod @@ -0,0 +1,47 @@ +module github.com/crawlab-team/crawlab/db + +go 1.22 + +require ( + github.com/apex/log v1.9.0 + github.com/cenkalti/backoff/v4 v4.1.0 + github.com/crawlab-team/go-trace v0.1.0 + github.com/gomodule/redigo v2.0.0+incompatible + github.com/jmoiron/sqlx v1.2.0 + github.com/spf13/viper v1.7.1 + github.com/stretchr/testify v1.6.1 + go.mongodb.org/mongo-driver v1.15.0 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fsnotify/fsnotify v1.4.7 // indirect + github.com/golang/snappy v0.0.1 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/klauspost/compress v1.13.6 // indirect + github.com/lib/pq v1.1.1 // indirect + github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e // indirect + github.com/magiconair/properties v1.8.1 // indirect + github.com/mitchellh/mapstructure v1.1.2 // indirect + github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect + github.com/pelletier/go-toml v1.7.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/spf13/afero v1.1.2 // indirect + github.com/spf13/cast v1.3.0 // indirect + github.com/spf13/jwalterweatherman v1.0.0 // indirect + github.com/spf13/pflag v1.0.3 // indirect + github.com/subosito/gotenv v1.2.0 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.2 // indirect + github.com/xdg-go/stringprep v1.0.4 // indirect + github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect + github.com/ztrue/tracerr v0.3.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect + gopkg.in/ini.v1 v1.51.0 // indirect + gopkg.in/yaml.v2 v2.2.8 // indirect + gopkg.in/yaml.v3 v3.0.0 // indirect +) diff --git a/db/interfaces.go b/db/interfaces.go new file mode 100644 index 00000000..c6640a73 --- /dev/null +++ b/db/interfaces.go @@ -0,0 +1,39 @@ +package db + +import "time" + +type RedisClient interface { + Ping() (err error) + Keys(pattern string) (values []string, err error) + AllKeys() (values []string, err error) + Get(collection string) (value string, err error) + Set(collection string, value string) (err error) + Del(collection string) (err error) + RPush(collection string, value interface{}) (err error) + LPush(collection string, value interface{}) (err error) + LPop(collection string) (value string, err error) + RPop(collection string) (value string, err error) + LLen(collection string) (count int, err error) + BRPop(collection string, timeout int) (value string, err error) + BLPop(collection string, timeout int) (value string, err error) + HSet(collection string, key string, value string) (err error) + HGet(collection string, key string) (value string, err error) + HDel(collection string, key string) (err error) + HScan(collection string) (results map[string]string, err error) + HKeys(collection string) (results []string, err error) + ZAdd(collection string, score float32, value interface{}) (err error) + ZCount(collection string, min string, max string) (count int, err error) + ZCountAll(collection string) (count int, err error) + ZScan(collection string, pattern string, count int) (results []string, err error) + ZPopMax(collection string, count int) (results []string, err error) + ZPopMin(collection string, count int) (results []string, err error) + ZPopMaxOne(collection string) (value string, err error) + ZPopMinOne(collection string) (value string, err error) + BZPopMax(collection string, timeout int) (value string, err error) + BZPopMin(collection string, timeout int) (value string, err error) + Lock(lockKey string) (value int64, err error) + UnLock(lockKey string, value int64) + MemoryStats() (stats map[string]int64, err error) + SetBackoffMaxInterval(interval time.Duration) + SetTimeout(timeout int) +} diff --git a/db/mongo/client.go b/db/mongo/client.go new file mode 100644 index 00000000..5bcd3907 --- /dev/null +++ b/db/mongo/client.go @@ -0,0 +1,147 @@ +package mongo + +import ( + "context" + "encoding/json" + "fmt" + "github.com/apex/log" + "github.com/cenkalti/backoff/v4" + "github.com/crawlab-team/go-trace" + "github.com/spf13/viper" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + "sync" +) + +var AppName = "crawlab-db" + +var _clientMap = map[string]*mongo.Client{} +var _mu sync.Mutex + +func GetMongoClient(opts ...ClientOption) (c *mongo.Client, err error) { + // client options + _opts := &ClientOptions{} + for _, op := range opts { + op(_opts) + } + if _opts.Uri == "" { + _opts.Uri = viper.GetString("mongo.uri") + } + if _opts.Host == "" { + _opts.Host = viper.GetString("mongo.host") + if _opts.Host == "" { + _opts.Host = "localhost" + } + } + if _opts.Port == "" { + _opts.Port = viper.GetString("mongo.port") + if _opts.Port == "" { + _opts.Port = "27017" + } + } + if _opts.Db == "" { + _opts.Db = viper.GetString("mongo.db") + if _opts.Db == "" { + _opts.Db = "admin" + } + } + if len(_opts.Hosts) == 0 { + _opts.Hosts = viper.GetStringSlice("mongo.hosts") + } + if _opts.Username == "" { + _opts.Username = viper.GetString("mongo.username") + } + if _opts.Password == "" { + _opts.Password = viper.GetString("mongo.password") + } + if _opts.AuthSource == "" { + _opts.AuthSource = viper.GetString("mongo.authSource") + if _opts.AuthSource == "" { + _opts.AuthSource = "admin" + } + } + if _opts.AuthMechanism == "" { + _opts.AuthMechanism = viper.GetString("mongo.authMechanism") + } + if _opts.AuthMechanismProperties == nil { + _opts.AuthMechanismProperties = viper.GetStringMapString("mongo.authMechanismProperties") + } + + // client options key json string + _optsKeyBytes, err := json.Marshal(_opts) + if err != nil { + return nil, trace.TraceError(err) + } + _optsKey := string(_optsKeyBytes) + + // attempt to get client by client options + c, ok := _clientMap[_optsKey] + if ok { + return c, nil + } + + // create new mongo client + c, err = newMongoClient(_opts.Context, _opts) + if err != nil { + return nil, err + } + + // add to map + _mu.Lock() + _clientMap[_optsKey] = c + _mu.Unlock() + + return c, nil +} + +func newMongoClient(ctx context.Context, _opts *ClientOptions) (c *mongo.Client, err error) { + // mongo client options + mongoOpts := &options.ClientOptions{ + AppName: &AppName, + } + + if _opts.Uri != "" { + // uri is set + mongoOpts.ApplyURI(_opts.Uri) + } else { + // uri is unset + + // username and password are set + if _opts.Username != "" && _opts.Password != "" { + mongoOpts.SetAuth(options.Credential{ + AuthMechanism: _opts.AuthMechanism, + AuthMechanismProperties: _opts.AuthMechanismProperties, + AuthSource: _opts.AuthSource, + Username: _opts.Username, + Password: _opts.Password, + PasswordSet: true, + }) + } + + if len(_opts.Hosts) > 0 { + // hosts are set + mongoOpts.SetHosts(_opts.Hosts) + } else { + // hosts are unset + mongoOpts.ApplyURI(fmt.Sprintf("mongodb://%s:%s/%s", _opts.Host, _opts.Port, _opts.Db)) + } + } + + // attempt to connect with retry + bp := backoff.NewExponentialBackOff() + err = backoff.Retry(func() error { + errMsg := fmt.Sprintf("waiting for connect mongo database, after %f seconds try again.", bp.NextBackOff().Seconds()) + c, err = mongo.NewClient(mongoOpts) + if err != nil { + log.WithError(err).Warnf(errMsg) + return err + } + if err := c.Connect(ctx); err != nil { + log.WithError(err).Warnf(errMsg) + return err + } + return nil + }, bp) + + return c, nil +} diff --git a/db/mongo/client_options.go b/db/mongo/client_options.go new file mode 100644 index 00000000..ef664f2a --- /dev/null +++ b/db/mongo/client_options.go @@ -0,0 +1,79 @@ +package mongo + +import "context" + +type ClientOption func(options *ClientOptions) + +type ClientOptions struct { + Context context.Context + Uri string + Host string + Port string + Db string + Hosts []string + Username string + Password string + AuthSource string + AuthMechanism string + AuthMechanismProperties map[string]string +} + +func WithContext(ctx context.Context) ClientOption { + return func(options *ClientOptions) { + options.Context = ctx + } +} + +func WithUri(value string) ClientOption { + return func(options *ClientOptions) { + options.Uri = value + } +} + +func WithHost(value string) ClientOption { + return func(options *ClientOptions) { + options.Host = value + } +} + +func WithPort(value string) ClientOption { + return func(options *ClientOptions) { + options.Port = value + } +} + +func WithDb(value string) ClientOption { + return func(options *ClientOptions) { + options.Db = value + } +} + +func WithHosts(value []string) ClientOption { + return func(options *ClientOptions) { + options.Hosts = value + } +} + +func WithUsername(value string) ClientOption { + return func(options *ClientOptions) { + options.Username = value + } +} + +func WithPassword(value string) ClientOption { + return func(options *ClientOptions) { + options.Password = value + } +} + +func WithAuthSource(value string) ClientOption { + return func(options *ClientOptions) { + options.AuthSource = value + } +} + +func WithAuthMechanism(value string) ClientOption { + return func(options *ClientOptions) { + options.AuthMechanism = value + } +} diff --git a/db/mongo/client_test.go b/db/mongo/client_test.go new file mode 100644 index 00000000..32f54531 --- /dev/null +++ b/db/mongo/client_test.go @@ -0,0 +1,23 @@ +package mongo + +import ( + "github.com/stretchr/testify/require" + "testing" +) + +func setupMongoTest() (err error) { + return nil +} + +func cleanupMongoTest() { +} + +func TestMongoInitMongo(t *testing.T) { + err := setupMongoTest() + require.Nil(t, err) + + _, err = GetMongoClient() + require.Nil(t, err) + + cleanupMongoTest() +} diff --git a/db/mongo/col.go b/db/mongo/col.go new file mode 100644 index 00000000..fda004fe --- /dev/null +++ b/db/mongo/col.go @@ -0,0 +1,301 @@ +package mongo + +import ( + "context" + "github.com/crawlab-team/crawlab/db/errors" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" +) + +type ColInterface interface { + Insert(doc interface{}) (id primitive.ObjectID, err error) + InsertMany(docs []interface{}) (ids []primitive.ObjectID, err error) + UpdateId(id primitive.ObjectID, update interface{}) (err error) + Update(query bson.M, update interface{}) (err error) + UpdateWithOptions(query bson.M, update interface{}, opts *options.UpdateOptions) (err error) + ReplaceId(id primitive.ObjectID, doc interface{}) (err error) + Replace(query bson.M, doc interface{}) (err error) + ReplaceWithOptions(query bson.M, doc interface{}, opts *options.ReplaceOptions) (err error) + DeleteId(id primitive.ObjectID) (err error) + Delete(query bson.M) (err error) + DeleteWithOptions(query bson.M, opts *options.DeleteOptions) (err error) + Find(query bson.M, opts *FindOptions) (fr *FindResult) + FindId(id primitive.ObjectID) (fr *FindResult) + Count(query bson.M) (total int, err error) + Aggregate(pipeline mongo.Pipeline, opts *options.AggregateOptions) (fr *FindResult) + CreateIndex(indexModel mongo.IndexModel) (err error) + CreateIndexes(indexModels []mongo.IndexModel) (err error) + MustCreateIndex(indexModel mongo.IndexModel) + MustCreateIndexes(indexModels []mongo.IndexModel) + DeleteIndex(name string) (err error) + DeleteAllIndexes() (err error) + ListIndexes() (indexes []map[string]interface{}, err error) + GetContext() (ctx context.Context) + GetName() (name string) + GetCollection() (c *mongo.Collection) +} + +type FindOptions struct { + Skip int + Limit int + Sort bson.D +} + +type Col struct { + ctx context.Context + db *mongo.Database + c *mongo.Collection +} + +func (col *Col) Insert(doc interface{}) (id primitive.ObjectID, err error) { + res, err := col.c.InsertOne(col.ctx, doc) + if err != nil { + return primitive.NilObjectID, trace.TraceError(err) + } + if id, ok := res.InsertedID.(primitive.ObjectID); ok { + return id, nil + } + return primitive.NilObjectID, trace.TraceError(errors.ErrInvalidType) +} + +func (col *Col) InsertMany(docs []interface{}) (ids []primitive.ObjectID, err error) { + res, err := col.c.InsertMany(col.ctx, docs) + if err != nil { + return nil, trace.TraceError(err) + } + for _, v := range res.InsertedIDs { + switch v.(type) { + case primitive.ObjectID: + id := v.(primitive.ObjectID) + ids = append(ids, id) + default: + return nil, trace.TraceError(errors.ErrInvalidType) + } + } + return ids, nil +} + +func (col *Col) UpdateId(id primitive.ObjectID, update interface{}) (err error) { + _, err = col.c.UpdateOne(col.ctx, bson.M{"_id": id}, update) + if err != nil { + return trace.TraceError(err) + } + return nil +} + +func (col *Col) Update(query bson.M, update interface{}) (err error) { + return col.UpdateWithOptions(query, update, nil) +} + +func (col *Col) UpdateWithOptions(query bson.M, update interface{}, opts *options.UpdateOptions) (err error) { + if opts == nil { + _, err = col.c.UpdateMany(col.ctx, query, update) + } else { + _, err = col.c.UpdateMany(col.ctx, query, update, opts) + } + if err != nil { + return trace.TraceError(err) + } + return nil +} + +func (col *Col) ReplaceId(id primitive.ObjectID, doc interface{}) (err error) { + return col.Replace(bson.M{"_id": id}, doc) +} + +func (col *Col) Replace(query bson.M, doc interface{}) (err error) { + return col.ReplaceWithOptions(query, doc, nil) +} + +func (col *Col) ReplaceWithOptions(query bson.M, doc interface{}, opts *options.ReplaceOptions) (err error) { + if opts == nil { + _, err = col.c.ReplaceOne(col.ctx, query, doc) + } else { + _, err = col.c.ReplaceOne(col.ctx, query, doc, opts) + } + if err != nil { + return trace.TraceError(err) + } + return nil +} + +func (col *Col) DeleteId(id primitive.ObjectID) (err error) { + _, err = col.c.DeleteOne(col.ctx, bson.M{"_id": id}) + if err != nil { + return trace.TraceError(err) + } + return nil +} + +func (col *Col) Delete(query bson.M) (err error) { + return col.DeleteWithOptions(query, nil) +} + +func (col *Col) DeleteWithOptions(query bson.M, opts *options.DeleteOptions) (err error) { + if opts == nil { + _, err = col.c.DeleteMany(col.ctx, query) + } else { + _, err = col.c.DeleteMany(col.ctx, query, opts) + } + if err != nil { + return trace.TraceError(err) + } + return nil +} + +func (col *Col) Find(query bson.M, opts *FindOptions) (fr *FindResult) { + _opts := &options.FindOptions{} + if opts != nil { + if opts.Skip != 0 { + skipInt64 := int64(opts.Skip) + _opts.Skip = &skipInt64 + } + if opts.Limit != 0 { + limitInt64 := int64(opts.Limit) + _opts.Limit = &limitInt64 + } + if opts.Sort != nil { + _opts.Sort = opts.Sort + } + } + cur, err := col.c.Find(col.ctx, query, _opts) + if err != nil { + return &FindResult{ + col: col, + err: err, + } + } + fr = &FindResult{ + col: col, + cur: cur, + } + return fr +} + +func (col *Col) FindId(id primitive.ObjectID) (fr *FindResult) { + res := col.c.FindOne(col.ctx, bson.M{"_id": id}) + if res.Err() != nil { + return &FindResult{ + col: col, + err: res.Err(), + } + } + fr = &FindResult{ + col: col, + res: res, + } + return fr +} + +func (col *Col) Count(query bson.M) (total int, err error) { + totalInt64, err := col.c.CountDocuments(col.ctx, query) + if err != nil { + return 0, err + } + total = int(totalInt64) + return total, nil +} + +func (col *Col) Aggregate(pipeline mongo.Pipeline, opts *options.AggregateOptions) (fr *FindResult) { + cur, err := col.c.Aggregate(col.ctx, pipeline, opts) + if err != nil { + return &FindResult{ + col: col, + err: err, + } + } + if cur.Err() != nil { + return &FindResult{ + col: col, + err: cur.Err(), + } + } + fr = &FindResult{ + col: col, + cur: cur, + } + return fr +} + +func (col *Col) CreateIndex(indexModel mongo.IndexModel) (err error) { + _, err = col.c.Indexes().CreateOne(col.ctx, indexModel) + if err != nil { + return trace.TraceError(err) + } + return nil +} + +func (col *Col) CreateIndexes(indexModels []mongo.IndexModel) (err error) { + _, err = col.c.Indexes().CreateMany(col.ctx, indexModels) + if err != nil { + return trace.TraceError(err) + } + return nil +} + +func (col *Col) MustCreateIndex(indexModel mongo.IndexModel) { + _, _ = col.c.Indexes().CreateOne(col.ctx, indexModel) +} + +func (col *Col) MustCreateIndexes(indexModels []mongo.IndexModel) { + _, _ = col.c.Indexes().CreateMany(col.ctx, indexModels) +} + +func (col *Col) DeleteIndex(name string) (err error) { + _, err = col.c.Indexes().DropOne(col.ctx, name) + if err != nil { + return trace.TraceError(err) + } + return nil +} + +func (col *Col) DeleteAllIndexes() (err error) { + _, err = col.c.Indexes().DropAll(col.ctx) + if err != nil { + return trace.TraceError(err) + } + return nil +} + +func (col *Col) ListIndexes() (indexes []map[string]interface{}, err error) { + cur, err := col.c.Indexes().List(col.ctx) + if err != nil { + return nil, err + } + if err := cur.All(col.ctx, &indexes); err != nil { + return nil, err + } + return indexes, nil +} + +func (col *Col) GetContext() (ctx context.Context) { + return col.ctx +} + +func (col *Col) GetName() (name string) { + return col.c.Name() +} + +func (col *Col) GetCollection() (c *mongo.Collection) { + return col.c +} + +func GetMongoCol(colName string) (col *Col) { + return GetMongoColWithDb(colName, nil) +} + +func GetMongoColWithDb(colName string, db *mongo.Database) (col *Col) { + ctx := context.Background() + if db == nil { + db = GetMongoDb("") + } + c := db.Collection(colName) + col = &Col{ + ctx: ctx, + db: db, + c: c, + } + return col +} diff --git a/db/mongo/col_test.go b/db/mongo/col_test.go new file mode 100644 index 00000000..4d8533d3 --- /dev/null +++ b/db/mongo/col_test.go @@ -0,0 +1,463 @@ +package mongo + +import ( + "fmt" + "github.com/spf13/viper" + "github.com/stretchr/testify/require" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" + "strconv" + "testing" +) + +type ColTestObject struct { + dbName string + colName string + col *Col +} + +type TestDocument struct { + Key string `bson:"key"` + Value int `bson:"value"` + Tags []string `bson:"tags"` +} + +type TestAggregateResult struct { + Id string `bson:"_id"` + Count int `bson:"count"` + Value int `bson:"value"` +} + +func setupColTest() (to *ColTestObject, err error) { + dbName := "test_db" + colName := "test_col" + viper.Set("mongo.db", dbName) + col := GetMongoCol(colName) + if err := col.db.Drop(col.ctx); err != nil { + return nil, err + } + return &ColTestObject{ + dbName: dbName, + colName: colName, + col: col, + }, nil +} + +func cleanupColTest(to *ColTestObject) { + _ = to.col.db.Drop(to.col.ctx) +} + +func TestGetMongoCol(t *testing.T) { + colName := "test_col" + + col := GetMongoCol(colName) + require.Equal(t, colName, col.c.Name()) +} + +func TestGetMongoColWithDb(t *testing.T) { + dbName := "test_db" + colName := "test_col" + + col := GetMongoColWithDb(colName, dbName) + require.Equal(t, colName, col.c.Name()) + require.Equal(t, dbName, col.db.Name()) +} + +func TestCol_Insert(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + id, err := to.col.Insert(bson.M{"key": "value"}) + require.Nil(t, err) + require.IsType(t, primitive.ObjectID{}, id) + + var doc map[string]string + err = to.col.FindId(id).One(&doc) + require.Nil(t, err) + require.Equal(t, doc["key"], "value") + + cleanupColTest(to) +} + +func TestCol_InsertMany(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + n := 10 + var docs []interface{} + for i := 0; i < n; i++ { + docs = append(docs, bson.M{"key": fmt.Sprintf("value-%d", i)}) + } + ids, err := to.col.InsertMany(docs) + require.Nil(t, err) + require.Equal(t, n, len(ids)) + + var resDocs []map[string]string + err = to.col.Find(nil, &FindOptions{Sort: bson.D{{"_id", 1}}}).All(&resDocs) + require.Nil(t, err) + require.Equal(t, n, len(resDocs)) + for i, doc := range resDocs { + require.Equal(t, fmt.Sprintf("value-%d", i), doc["key"]) + } + + cleanupColTest(to) +} + +func TestCol_UpdateId(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + id, err := to.col.Insert(bson.M{"key": "old-value"}) + require.Nil(t, err) + + err = to.col.UpdateId(id, bson.M{ + "$set": bson.M{ + "key": "new-value", + }, + }) + require.Nil(t, err) + + var doc map[string]string + err = to.col.FindId(id).One(&doc) + require.Nil(t, err) + require.Equal(t, "new-value", doc["key"]) + + cleanupColTest(to) +} + +func TestCol_Update(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + n := 10 + var docs []interface{} + for i := 0; i < n; i++ { + docs = append(docs, bson.M{"key": fmt.Sprintf("old-value-%d", i)}) + } + + err = to.col.Update(nil, bson.M{ + "$set": bson.M{ + "key": "new-value", + }, + }) + require.Nil(t, err) + + var resDocs []map[string]string + err = to.col.Find(nil, &FindOptions{Sort: bson.D{{"_id", 1}}}).All(&resDocs) + require.Nil(t, err) + for _, doc := range resDocs { + require.Equal(t, "new-value", doc["key"]) + } + + cleanupColTest(to) +} + +func TestCol_ReplaceId(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + id, err := to.col.Insert(bson.M{"key": "old-value"}) + require.Nil(t, err) + + var doc map[string]interface{} + err = to.col.FindId(id).One(&doc) + require.Nil(t, err) + doc["key"] = "new-value" + + err = to.col.ReplaceId(id, doc) + require.Nil(t, err) + + err = to.col.FindId(id).One(doc) + require.Nil(t, err) + require.Equal(t, "new-value", doc["key"]) + + cleanupColTest(to) +} + +func TestCol_Replace(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + id, err := to.col.Insert(bson.M{"key": "old-value"}) + require.Nil(t, err) + + var doc map[string]interface{} + err = to.col.FindId(id).One(&doc) + require.Nil(t, err) + doc["key"] = "new-value" + + err = to.col.Replace(bson.M{"key": "old-value"}, doc) + require.Nil(t, err) + + err = to.col.FindId(id).One(&doc) + require.Nil(t, err) + require.Equal(t, "new-value", doc["key"]) + + cleanupColTest(to) +} + +func TestCol_DeleteId(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + id, err := to.col.Insert(bson.M{"key": "value"}) + require.Nil(t, err) + + err = to.col.DeleteId(id) + require.Nil(t, err) + + total, err := to.col.Count(nil) + require.Nil(t, err) + require.Equal(t, 0, total) + + cleanupColTest(to) +} + +func TestCol_Delete(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + n := 10 + var docs []interface{} + for i := 0; i < n; i++ { + docs = append(docs, bson.M{"key": fmt.Sprintf("value-%d", i)}) + } + ids, err := to.col.InsertMany(docs) + require.Nil(t, err) + require.Equal(t, n, len(ids)) + + err = to.col.Delete(bson.M{"key": "value-0"}) + require.Nil(t, err) + + total, err := to.col.Count(nil) + require.Nil(t, err) + require.Equal(t, n-1, total) + + err = to.col.Delete(nil) + require.Nil(t, err) + + total, err = to.col.Count(nil) + require.Nil(t, err) + require.Equal(t, 0, total) + + cleanupColTest(to) +} + +func TestCol_FindId(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + id, err := to.col.Insert(bson.M{"key": "value"}) + require.Nil(t, err) + + var doc map[string]string + err = to.col.FindId(id).One(&doc) + require.Nil(t, err) + require.Equal(t, "value", doc["key"]) + + cleanupColTest(to) +} + +func TestCol_Find(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + n := 10 + var docs []interface{} + for i := 0; i < n; i++ { + docs = append(docs, TestDocument{ + Key: fmt.Sprintf("value-%d", i), + Tags: []string{"test tag"}, + }) + } + ids, err := to.col.InsertMany(docs) + require.Nil(t, err) + require.Equal(t, n, len(ids)) + + err = to.col.Find(nil, nil).All(&docs) + require.Nil(t, err) + require.Equal(t, n, len(docs)) + + err = to.col.Find(bson.M{"key": bson.M{"$gte": fmt.Sprintf("value-%d", 5)}}, nil).All(&docs) + require.Nil(t, err) + require.Equal(t, n-5, len(docs)) + + err = to.col.Find(nil, &FindOptions{ + Skip: 5, + }).All(&docs) + require.Nil(t, err) + require.Equal(t, n-5, len(docs)) + + err = to.col.Find(nil, &FindOptions{ + Limit: 5, + }).All(&docs) + require.Nil(t, err) + require.Equal(t, 5, len(docs)) + + var resDocs []TestDocument + err = to.col.Find(nil, &FindOptions{ + Sort: bson.D{{"key", 1}}, + }).All(&resDocs) + require.Nil(t, err) + require.Greater(t, len(resDocs), 0) + require.Equal(t, "value-0", resDocs[0].Key) + + err = to.col.Find(nil, &FindOptions{ + Sort: bson.D{{"key", -1}}, + }).All(&resDocs) + require.Nil(t, err) + require.Greater(t, len(resDocs), 0) + require.Equal(t, fmt.Sprintf("value-%d", n-1), resDocs[0].Key) + + var resDocs2 []TestDocument + err = to.col.Find(bson.M{"tags": bson.M{"$in": []string{"test tag"}}}, nil).All(&resDocs2) + require.Nil(t, err) + require.Greater(t, len(resDocs2), 0) + + cleanupColTest(to) +} + +func TestCol_CreateIndex(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + err = to.col.CreateIndex(mongo.IndexModel{ + Keys: bson.D{{"key", 1}}, + }) + require.Nil(t, err) + + indexes, err := to.col.ListIndexes() + require.Nil(t, err) + require.Equal(t, 2, len(indexes)) + + cleanupColTest(to) +} + +func TestCol_Aggregate(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + n := 10 + v := 2 + var docs []interface{} + for i := 0; i < n; i++ { + docs = append(docs, TestDocument{ + Key: fmt.Sprintf("%d", i%2), + Value: v, + }) + } + ids, err := to.col.InsertMany(docs) + require.Nil(t, err) + require.Equal(t, n, len(ids)) + + pipeline := mongo.Pipeline{ + { + { + "$group", + bson.D{ + {"_id", "$key"}, + { + "count", + bson.D{{"$sum", 1}}, + }, + { + "value", + bson.D{{"$sum", "$value"}}, + }, + }, + }, + }, + { + { + "$sort", + bson.D{{"_id", 1}}, + }, + }, + } + var results []TestAggregateResult + err = to.col.Aggregate(pipeline, nil).All(&results) + require.Nil(t, err) + require.Equal(t, 2, len(results)) + + for i, r := range results { + require.Equal(t, strconv.Itoa(i), r.Id) + require.Equal(t, n/2, r.Count) + require.Equal(t, n*v/2, r.Value) + } +} + +func TestCol_CreateIndexes(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + err = to.col.CreateIndexes([]mongo.IndexModel{ + { + Keys: bson.D{{"key", 1}}, + }, + { + Keys: bson.D{{"empty-key", 1}}, + }, + }) + require.Nil(t, err) + + indexes, err := to.col.ListIndexes() + require.Nil(t, err) + require.Equal(t, 3, len(indexes)) + + cleanupColTest(to) +} + +func TestCol_DeleteIndex(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + err = to.col.CreateIndex(mongo.IndexModel{ + Keys: bson.D{{"key", 1}}, + }) + require.Nil(t, err) + + indexes, err := to.col.ListIndexes() + require.Nil(t, err) + require.Equal(t, 2, len(indexes)) + for _, index := range indexes { + name, ok := index["name"].(string) + require.True(t, ok) + + if name != "_id_" { + err = to.col.DeleteIndex(name) + require.Nil(t, err) + break + } + } + + indexes, err = to.col.ListIndexes() + require.Nil(t, err) + require.Equal(t, 1, len(indexes)) + + cleanupColTest(to) +} + +func TestCol_DeleteIndexes(t *testing.T) { + to, err := setupColTest() + require.Nil(t, err) + + err = to.col.CreateIndexes([]mongo.IndexModel{ + { + Keys: bson.D{{"key", 1}}, + }, + { + Keys: bson.D{{"empty-key", 1}}, + }, + }) + require.Nil(t, err) + + err = to.col.DeleteAllIndexes() + require.Nil(t, err) + + indexes, err := to.col.ListIndexes() + require.Nil(t, err) + require.Equal(t, 1, len(indexes)) + + cleanupColTest(to) +} diff --git a/db/mongo/db.go b/db/mongo/db.go new file mode 100644 index 00000000..8ce143cf --- /dev/null +++ b/db/mongo/db.go @@ -0,0 +1,35 @@ +package mongo + +import ( + "github.com/crawlab-team/go-trace" + "github.com/spf13/viper" + "go.mongodb.org/mongo-driver/mongo" +) + +func GetMongoDb(dbName string, opts ...DbOption) (db *mongo.Database) { + if dbName == "" { + dbName = viper.GetString("mongo.db") + } + if dbName == "" { + dbName = "test" + } + + _opts := &DbOptions{} + for _, op := range opts { + op(_opts) + } + + var c *mongo.Client + if _opts.client == nil { + var err error + c, err = GetMongoClient() + if err != nil { + trace.PrintError(err) + return nil + } + } else { + c = _opts.client + } + + return c.Database(dbName, nil) +} diff --git a/db/mongo/db_options.go b/db/mongo/db_options.go new file mode 100644 index 00000000..480cc4c6 --- /dev/null +++ b/db/mongo/db_options.go @@ -0,0 +1,15 @@ +package mongo + +import "go.mongodb.org/mongo-driver/mongo" + +type DbOption func(options *DbOptions) + +type DbOptions struct { + client *mongo.Client +} + +func WithDbClient(c *mongo.Client) DbOption { + return func(options *DbOptions) { + options.client = c + } +} diff --git a/db/mongo/db_test.go b/db/mongo/db_test.go new file mode 100644 index 00000000..a2bbbbc3 --- /dev/null +++ b/db/mongo/db_test.go @@ -0,0 +1,17 @@ +package mongo + +import ( + "github.com/spf13/viper" + "github.com/stretchr/testify/require" + "testing" +) + +func TestMongoGetDb(t *testing.T) { + dbName := "test_db" + viper.Set("mongo.db", dbName) + err := InitMongo() + require.Nil(t, err) + + db := GetMongoDb("") + require.Equal(t, dbName, db.Name()) +} diff --git a/db/mongo/result.go b/db/mongo/result.go new file mode 100644 index 00000000..add5f356 --- /dev/null +++ b/db/mongo/result.go @@ -0,0 +1,82 @@ +package mongo + +import ( + "context" + "github.com/crawlab-team/crawlab/db/errors" + "go.mongodb.org/mongo-driver/mongo" +) + +type FindResultInterface interface { + One(val interface{}) (err error) + All(val interface{}) (err error) + GetCol() (col *Col) + GetSingleResult() (res *mongo.SingleResult) + GetCursor() (cur *mongo.Cursor) + GetError() (err error) +} + +func NewFindResult() (fr *FindResult) { + return &FindResult{} +} + +func NewFindResultWithError(err error) (fr *FindResult) { + return &FindResult{ + err: err, + } +} + +type FindResult struct { + col *Col + res *mongo.SingleResult + cur *mongo.Cursor + err error +} + +func (fr *FindResult) GetError() (err error) { + //TODO implement me + panic("implement me") +} + +func (fr *FindResult) One(val interface{}) (err error) { + if fr.err != nil { + return fr.err + } + if fr.cur != nil { + if !fr.cur.TryNext(fr.col.ctx) { + return mongo.ErrNoDocuments + } + return fr.cur.Decode(val) + } + return fr.res.Decode(val) +} + +func (fr *FindResult) All(val interface{}) (err error) { + if fr.err != nil { + return fr.err + } + var ctx context.Context + if fr.col == nil { + ctx = context.Background() + } else { + ctx = fr.col.ctx + } + if fr.cur == nil { + return errors.ErrNoCursor + } + if !fr.cur.TryNext(ctx) { + return ctx.Err() + } + return fr.cur.All(ctx, val) +} + +func (fr *FindResult) GetCol() (col *Col) { + return fr.col +} + +func (fr *FindResult) GetSingleResult() (res *mongo.SingleResult) { + return fr.res +} + +func (fr *FindResult) GetCursor() (cur *mongo.Cursor) { + return fr.cur +} diff --git a/db/mongo/transaction.go b/db/mongo/transaction.go new file mode 100644 index 00000000..60ded40f --- /dev/null +++ b/db/mongo/transaction.go @@ -0,0 +1,45 @@ +package mongo + +import ( + "context" + "github.com/crawlab-team/go-trace" + "go.mongodb.org/mongo-driver/mongo" +) + +func RunTransaction(fn func(mongo.SessionContext) error) (err error) { + return RunTransactionWithContext(context.Background(), fn) +} + +func RunTransactionWithContext(ctx context.Context, fn func(mongo.SessionContext) error) (err error) { + // default client + c, err := GetMongoClient() + if err != nil { + return err + } + + // start session + s, err := c.StartSession() + if err != nil { + return trace.TraceError(err) + } + + // start transaction + if err := s.StartTransaction(); err != nil { + return trace.TraceError(err) + } + + // perform operation + if err := mongo.WithSession(ctx, s, func(sc mongo.SessionContext) error { + if err := fn(sc); err != nil { + return trace.TraceError(err) + } + if err = s.CommitTransaction(sc); err != nil { + return trace.TraceError(err) + } + return nil + }); err != nil { + return trace.TraceError(err) + } + + return nil +} diff --git a/db/redis/client.go b/db/redis/client.go new file mode 100644 index 00000000..21bed3ff --- /dev/null +++ b/db/redis/client.go @@ -0,0 +1,549 @@ +package redis + +import ( + "github.com/apex/log" + "github.com/crawlab-team/crawlab/db" + "github.com/crawlab-team/crawlab/db/errors" + "github.com/crawlab-team/crawlab/db/utils" + "github.com/gomodule/redigo/redis" + "reflect" + "strings" + "time" +) + +type Client struct { + // settings + backoffMaxInterval time.Duration + timeout int + + // internals + pool *redis.Pool +} + +func (client *Client) Ping() error { + c := client.pool.Get() + defer utils.Close(c) + if _, err := redis.String(c.Do("PING")); err != nil { + if err != redis.ErrNil { + return trace.TraceError(err) + } + return err + } + return nil +} + +func (client *Client) Keys(pattern string) (values []string, err error) { + c := client.pool.Get() + defer utils.Close(c) + + values, err = redis.Strings(c.Do("KEYS", pattern)) + if err != nil { + return nil, trace.TraceError(err) + } + return values, nil +} + +func (client *Client) AllKeys() (values []string, err error) { + return client.Keys("*") +} + +func (client *Client) Get(collection string) (value string, err error) { + c := client.pool.Get() + defer utils.Close(c) + + value, err = redis.String(c.Do("GET", collection)) + if err != nil { + return "", trace.TraceError(err) + } + return value, nil +} + +func (client *Client) Set(collection string, value string) (err error) { + c := client.pool.Get() + defer utils.Close(c) + + value, err = redis.String(c.Do("SET", collection, value)) + if err != nil { + return trace.TraceError(err) + } + return nil +} + +func (client *Client) Del(collection string) error { + c := client.pool.Get() + defer utils.Close(c) + + if _, err := c.Do("DEL", collection); err != nil { + return trace.TraceError(err) + } + return nil +} + +func (client *Client) RPush(collection string, value interface{}) error { + c := client.pool.Get() + defer utils.Close(c) + + if _, err := c.Do("RPUSH", collection, value); err != nil { + return trace.TraceError(err) + } + return nil +} + +func (client *Client) LPush(collection string, value interface{}) error { + c := client.pool.Get() + defer utils.Close(c) + + if _, err := c.Do("LPUSH", collection, value); err != nil { + if err != redis.ErrNil { + return trace.TraceError(err) + } + return err + } + return nil +} + +func (client *Client) LPop(collection string) (string, error) { + c := client.pool.Get() + defer utils.Close(c) + + value, err := redis.String(c.Do("LPOP", collection)) + if err != nil { + if err != redis.ErrNil { + return value, trace.TraceError(err) + } + return value, err + } + return value, nil +} + +func (client *Client) RPop(collection string) (string, error) { + c := client.pool.Get() + defer utils.Close(c) + + value, err := redis.String(c.Do("RPOP", collection)) + if err != nil { + if err != redis.ErrNil { + return value, trace.TraceError(err) + } + return value, err + } + return value, nil +} + +func (client *Client) LLen(collection string) (int, error) { + c := client.pool.Get() + defer utils.Close(c) + + value, err := redis.Int(c.Do("LLEN", collection)) + if err != nil { + return 0, trace.TraceError(err) + } + return value, nil +} + +func (client *Client) BRPop(collection string, timeout int) (value string, err error) { + if timeout <= 0 { + timeout = 60 + } + c := client.pool.Get() + defer utils.Close(c) + + values, err := redis.Strings(c.Do("BRPOP", collection, timeout)) + if err != nil { + if err != redis.ErrNil { + return value, trace.TraceError(err) + } + return value, err + } + return values[1], nil +} + +func (client *Client) BLPop(collection string, timeout int) (value string, err error) { + if timeout <= 0 { + timeout = 60 + } + c := client.pool.Get() + defer utils.Close(c) + + values, err := redis.Strings(c.Do("BLPOP", collection, timeout)) + if err != nil { + if err != redis.ErrNil { + return value, trace.TraceError(err) + } + return value, err + } + return values[1], nil +} + +func (client *Client) HSet(collection string, key string, value string) error { + c := client.pool.Get() + defer utils.Close(c) + + if _, err := c.Do("HSET", collection, key, value); err != nil { + if err != redis.ErrNil { + return trace.TraceError(err) + } + return err + } + return nil +} + +func (client *Client) HGet(collection string, key string) (string, error) { + c := client.pool.Get() + defer utils.Close(c) + value, err := redis.String(c.Do("HGET", collection, key)) + if err != nil && err != redis.ErrNil { + if err != redis.ErrNil { + return value, trace.TraceError(err) + } + return value, err + } + return value, nil +} + +func (client *Client) HDel(collection string, key string) error { + c := client.pool.Get() + defer utils.Close(c) + + if _, err := c.Do("HDEL", collection, key); err != nil { + return trace.TraceError(err) + } + return nil +} + +func (client *Client) HScan(collection string) (results map[string]string, err error) { + c := client.pool.Get() + defer utils.Close(c) + + var ( + cursor int64 + items []string + ) + + results = map[string]string{} + + for { + values, err := redis.Values(c.Do("HSCAN", collection, cursor)) + if err != nil { + if err != redis.ErrNil { + return nil, trace.TraceError(err) + } + return nil, err + } + + values, err = redis.Scan(values, &cursor, &items) + if err != nil { + if err != redis.ErrNil { + return nil, trace.TraceError(err) + } + return nil, err + } + for i := 0; i < len(items); i += 2 { + key := items[i] + value := items[i+1] + results[key] = value + } + if cursor == 0 { + break + } + } + return results, nil +} + +func (client *Client) HKeys(collection string) (results []string, err error) { + c := client.pool.Get() + defer utils.Close(c) + + results, err = redis.Strings(c.Do("HKEYS", collection)) + if err != nil { + if err != redis.ErrNil { + return results, trace.TraceError(err) + } + return results, err + } + return results, nil +} + +func (client *Client) ZAdd(collection string, score float32, value interface{}) (err error) { + c := client.pool.Get() + defer utils.Close(c) + + if _, err := c.Do("ZADD", collection, score, value); err != nil { + return trace.TraceError(err) + } + return nil +} + +func (client *Client) ZCount(collection string, min string, max string) (count int, err error) { + c := client.pool.Get() + defer utils.Close(c) + + count, err = redis.Int(c.Do("ZCOUNT", collection, min, max)) + if err != nil { + return 0, trace.TraceError(err) + } + return count, nil +} + +func (client *Client) ZCountAll(collection string) (count int, err error) { + return client.ZCount(collection, "-inf", "+inf") +} + +func (client *Client) ZScan(collection string, pattern string, count int) (values []string, err error) { + c := client.pool.Get() + defer utils.Close(c) + + values, err = redis.Strings(c.Do("ZSCAN", collection, 0, pattern, count)) + if err != nil { + if err != redis.ErrNil { + return nil, trace.TraceError(err) + } + return nil, err + } + return values, nil +} + +func (client *Client) ZPopMax(collection string, count int) (results []string, err error) { + c := client.pool.Get() + defer utils.Close(c) + + results = []string{} + + values, err := redis.Strings(c.Do("ZPOPMAX", collection, count)) + if err != nil { + if err != redis.ErrNil { + return nil, trace.TraceError(err) + } + return nil, err + } + + for i := 0; i < len(values); i += 2 { + v := values[i] + results = append(results, v) + } + + return results, nil +} + +func (client *Client) ZPopMin(collection string, count int) (results []string, err error) { + c := client.pool.Get() + defer utils.Close(c) + + results = []string{} + + values, err := redis.Strings(c.Do("ZPOPMIN", collection, count)) + if err != nil { + if err != redis.ErrNil { + return nil, trace.TraceError(err) + } + return nil, err + } + + for i := 0; i < len(values); i += 2 { + v := values[i] + results = append(results, v) + } + + return results, nil +} + +func (client *Client) ZPopMaxOne(collection string) (value string, err error) { + c := client.pool.Get() + defer utils.Close(c) + + values, err := client.ZPopMax(collection, 1) + if err != nil { + return "", err + } + if values == nil || len(values) == 0 { + return "", nil + } + return values[0], nil +} + +func (client *Client) ZPopMinOne(collection string) (value string, err error) { + c := client.pool.Get() + defer utils.Close(c) + + values, err := client.ZPopMin(collection, 1) + if err != nil { + return "", err + } + if values == nil || len(values) == 0 { + return "", nil + } + return values[0], nil +} + +func (client *Client) BZPopMax(collection string, timeout int) (value string, err error) { + c := client.pool.Get() + defer utils.Close(c) + + values, err := redis.Strings(c.Do("BZPOPMAX", collection, timeout)) + if err != nil { + if err != redis.ErrNil { + return "", trace.TraceError(err) + } + return "", err + } + if len(values) < 3 { + return "", trace.TraceError(errors.ErrorRedisInvalidType) + } + return values[1], nil +} + +func (client *Client) BZPopMin(collection string, timeout int) (value string, err error) { + c := client.pool.Get() + defer utils.Close(c) + + values, err := redis.Strings(c.Do("BZPOPMIN", collection, timeout)) + if err != nil { + if err != redis.ErrNil { + return "", trace.TraceError(err) + } + return "", err + } + if len(values) < 3 { + return "", trace.TraceError(errors.ErrorRedisInvalidType) + } + return values[1], nil +} + +func (client *Client) Lock(lockKey string) (value int64, err error) { + c := client.pool.Get() + defer utils.Close(c) + lockKey = client.getLockKey(lockKey) + + ts := time.Now().Unix() + ok, err := c.Do("SET", lockKey, ts, "NX", "PX", 30000) + if err != nil { + if err != redis.ErrNil { + return value, trace.TraceError(err) + } + return value, err + } + if ok == nil { + return 0, trace.TraceError(errors.ErrorRedisLocked) + } + return ts, nil +} + +func (client *Client) UnLock(lockKey string, value int64) { + c := client.pool.Get() + defer utils.Close(c) + lockKey = client.getLockKey(lockKey) + + getValue, err := redis.Int64(c.Do("GET", lockKey)) + if err != nil { + log.Errorf("get lockKey error: %s", err.Error()) + return + } + + if getValue != value { + log.Errorf("the lockKey value diff: %d, %d", value, getValue) + return + } + + v, err := redis.Int64(c.Do("DEL", lockKey)) + if err != nil { + log.Errorf("unlock failed, error: %s", err.Error()) + return + } + + if v == 0 { + log.Errorf("unlock failed: key=%s", lockKey) + return + } +} + +func (client *Client) MemoryStats() (stats map[string]int64, err error) { + stats = map[string]int64{} + c := client.pool.Get() + defer utils.Close(c) + values, err := redis.Values(c.Do("MEMORY", "STATS")) + for i, v := range values { + t := reflect.TypeOf(v) + if t.Kind() == reflect.Slice { + vc, _ := redis.String(v, err) + if utils.ContainsString(MemoryStatsMetrics, vc) { + stats[vc], _ = redis.Int64(values[i+1], err) + } + } + } + if err != nil { + if err != redis.ErrNil { + return stats, trace.TraceError(err) + } + return stats, err + } + return stats, nil +} + +func (client *Client) SetBackoffMaxInterval(interval time.Duration) { + client.backoffMaxInterval = interval +} + +func (client *Client) SetTimeout(timeout int) { + client.timeout = timeout +} + +func (client *Client) init() (err error) { + b := backoff.NewExponentialBackOff() + b.MaxInterval = client.backoffMaxInterval + if err := backoff.Retry(func() error { + err := client.Ping() + if err != nil { + log.WithError(err).Warnf("waiting for redis pool active connection. will after %f seconds try again.", b.NextBackOff().Seconds()) + } + return nil + }, b); err != nil { + return trace.TraceError(err) + } + return nil +} + +func (client *Client) getLockKey(lockKey string) string { + lockKey = strings.ReplaceAll(lockKey, ":", "-") + return "nodes:lock:" + lockKey +} + +func (client *Client) getTimeout(timeout int) (res int) { + if timeout == 0 { + return client.timeout + } + return timeout +} + +var client db.RedisClient + +func NewRedisClient(opts ...Option) (client *Client, err error) { + // client + client = &Client{ + backoffMaxInterval: 20 * time.Second, + pool: NewRedisPool(), + } + + // apply options + for _, opt := range opts { + opt(client) + } + + // init + if err := client.init(); err != nil { + return nil, err + } + + return client, nil +} + +func GetRedisClient() (c db.RedisClient, err error) { + if client != nil { + return client, nil + } + c, err = NewRedisClient() + if err != nil { + return nil, err + } + + return c, nil +} diff --git a/db/redis/constants.go b/db/redis/constants.go new file mode 100644 index 00000000..fc7c2e56 --- /dev/null +++ b/db/redis/constants.go @@ -0,0 +1,10 @@ +package redis + +var MemoryStatsMetrics = []string{ + "peak.allocated", + "total.allocated", + "startup.allocated", + "overhead.total", + "keys.count", + "dataset.bytes", +} diff --git a/db/redis/options.go b/db/redis/options.go new file mode 100644 index 00000000..299bcbf1 --- /dev/null +++ b/db/redis/options.go @@ -0,0 +1,20 @@ +package redis + +import ( + "github.com/crawlab-team/crawlab/db" + "time" +) + +type Option func(c db.RedisClient) + +func WithBackoffMaxInterval(interval time.Duration) Option { + return func(c db.RedisClient) { + c.SetBackoffMaxInterval(interval) + } +} + +func WithTimeout(timeout int) Option { + return func(c db.RedisClient) { + c.SetTimeout(timeout) + } +} diff --git a/db/redis/pool.go b/db/redis/pool.go new file mode 100644 index 00000000..05ca2041 --- /dev/null +++ b/db/redis/pool.go @@ -0,0 +1,54 @@ +package redis + +import ( + "github.com/crawlab-team/go-trace" + "github.com/gomodule/redigo/redis" + "github.com/spf13/viper" + "time" +) + +func NewRedisPool() *redis.Pool { + var address = viper.GetString("redis.address") + var port = viper.GetString("redis.port") + var database = viper.GetString("redis.database") + var password = viper.GetString("redis.password") + + // normalize params + if address == "" { + address = "localhost" + } + if port == "" { + port = "6379" + } + if database == "" { + database = "1" + } + + var url string + if password == "" { + url = "redis://" + address + ":" + port + "/" + database + } else { + url = "redis://x:" + password + "@" + address + ":" + port + "/" + database + } + return &redis.Pool{ + Dial: func() (conn redis.Conn, e error) { + return redis.DialURL(url, + redis.DialConnectTimeout(time.Second*10), + redis.DialReadTimeout(time.Second*600), + redis.DialWriteTimeout(time.Second*10), + ) + }, + TestOnBorrow: func(c redis.Conn, t time.Time) error { + if time.Since(t) < time.Minute { + return nil + } + _, err := c.Do("PING") + return trace.TraceError(err) + }, + MaxIdle: 10, + MaxActive: 0, + IdleTimeout: 300 * time.Second, + Wait: false, + MaxConnLifetime: 0, + } +} diff --git a/db/redis/test/base.go b/db/redis/test/base.go new file mode 100644 index 00000000..3eaf5e2d --- /dev/null +++ b/db/redis/test/base.go @@ -0,0 +1,91 @@ +package test + +import ( + "github.com/crawlab-team/crawlab/db" + "github.com/crawlab-team/crawlab/db/redis" + "testing" +) + +func init() { + var err error + T, err = NewTest() + if err != nil { + panic(err) + } +} + +type Test struct { + client db.RedisClient + TestCollection string + TestMessage string + TestMessages []string + TestMessagesMap map[string]string + TestKeysAlpha []string + TestKeysBeta []string + TestLockKey string +} + +func (t *Test) Setup(t2 *testing.T) { + t2.Cleanup(t.Cleanup) +} + +func (t *Test) Cleanup() { + keys, _ := t.client.AllKeys() + for _, key := range keys { + _ = t.client.Del(key) + } +} + +var T *Test + +func NewTest() (t *Test, err error) { + // test + t = &Test{} + + // client + t.client, err = redis.GetRedisClient() + if err != nil { + return nil, err + } + + // test collection + t.TestCollection = "test_collection" + + // test message + t.TestMessage = "this is a test message" + + // test messages + t.TestMessages = []string{ + "test message 1", + "test message 2", + "test message 3", + } + + // test messages map + t.TestMessagesMap = map[string]string{ + "test key 1": "test value 1", + "test key 2": "test value 2", + "test key 3": "test value 3", + } + + // test keys alpha + t.TestKeysAlpha = []string{ + "test key alpha 1", + "test key alpha 2", + "test key alpha 3", + } + + // test keys beta + t.TestKeysBeta = []string{ + "test key beta 1", + "test key beta 2", + "test key beta 3", + "test key beta 4", + "test key beta 5", + } + + // test lock key + t.TestLockKey = "test lock key" + + return t, nil +} diff --git a/db/redis/test/client_test.go b/db/redis/test/client_test.go new file mode 100644 index 00000000..6fa363fa --- /dev/null +++ b/db/redis/test/client_test.go @@ -0,0 +1,273 @@ +package test + +import ( + "github.com/crawlab-team/crawlab/db/redis" + "github.com/stretchr/testify/require" + "testing" + "time" +) + +func TestRedisClient_Ping(t *testing.T) { + var err error + T.Setup(t) + + err = T.client.Ping() + require.Nil(t, err) +} + +func TestRedisClient_Get_Set(t *testing.T) { + var err error + T.Setup(t) + + err = T.client.Set(T.TestCollection, T.TestMessage) + require.Nil(t, err) + + value, err := T.client.Get(T.TestCollection) + require.Nil(t, err) + require.Equal(t, T.TestMessage, value) +} + +func TestRedisClient_Keys_AllKeys(t *testing.T) { + var err error + T.Setup(t) + + for _, key := range T.TestKeysAlpha { + err = T.client.Set(key, key) + require.Nil(t, err) + } + for _, key := range T.TestKeysBeta { + err = T.client.Set(key, key) + require.Nil(t, err) + } + + keys, err := T.client.Keys("*alpha*") + require.Nil(t, err) + require.Len(t, keys, len(T.TestKeysAlpha)) + + keys, err = T.client.Keys("*beta*") + require.Nil(t, err) + require.Len(t, keys, len(T.TestKeysBeta)) + + keys, err = T.client.AllKeys() + require.Nil(t, err) + require.Len(t, keys, len(T.TestKeysAlpha)+len(T.TestKeysBeta)) +} + +func TestRedisClient_RPush_LPop_LLen(t *testing.T) { + var err error + T.Setup(t) + + for _, msg := range T.TestMessages { + err = T.client.RPush(T.TestCollection, msg) + require.Nil(t, err) + } + + n, err := T.client.LLen(T.TestCollection) + require.Nil(t, err) + require.Equal(t, len(T.TestMessages), n) + + value, err := T.client.LPop(T.TestCollection) + require.Nil(t, err) + require.Equal(t, T.TestMessages[0], value) +} + +func TestRedisClient_LPush_RPop(t *testing.T) { + var err error + T.Setup(t) + + for _, msg := range T.TestMessages { + err = T.client.LPush(T.TestCollection, msg) + require.Nil(t, err) + } + + n, err := T.client.LLen(T.TestCollection) + require.Nil(t, err) + require.Equal(t, len(T.TestMessages), n) + + value, err := T.client.RPop(T.TestCollection) + require.Nil(t, err) + require.Equal(t, T.TestMessages[0], value) +} + +func TestRedisClient_BRPop(t *testing.T) { + var err error + T.Setup(t) + + isErr := true + go func(t *testing.T) { + value, err := T.client.BRPop(T.TestCollection, 0) + require.Nil(t, err) + require.Equal(t, T.TestMessage, value) + isErr = false + }(t) + + err = T.client.LPush(T.TestCollection, T.TestMessage) + require.Nil(t, err) + time.Sleep(500 * time.Millisecond) + require.False(t, isErr) +} + +func TestRedisClient_BLPop(t *testing.T) { + var err error + T.Setup(t) + + isErr := true + go func(t *testing.T) { + value, err := T.client.BLPop(T.TestCollection, 0) + require.Nil(t, err) + require.Equal(t, T.TestMessage, value) + isErr = false + }(t) + + err = T.client.RPush(T.TestCollection, T.TestMessage) + require.Nil(t, err) + time.Sleep(500 * time.Millisecond) + require.False(t, isErr) +} + +func TestRedisClient_HSet_HGet_HDel(t *testing.T) { + var err error + T.Setup(t) + + for k, v := range T.TestMessagesMap { + err = T.client.HSet(T.TestCollection, k, v) + require.Nil(t, err) + } + + for k, v := range T.TestMessagesMap { + vr, err := T.client.HGet(T.TestCollection, k) + require.Nil(t, err) + require.Equal(t, v, vr) + } + + for k := range T.TestMessagesMap { + err = T.client.HDel(T.TestCollection, k) + require.Nil(t, err) + + v, err := T.client.HGet(T.TestCollection, k) + require.Nil(t, err) + require.Empty(t, v) + } +} + +func TestRedisClient_HScan(t *testing.T) { + var err error + T.Setup(t) + + for k, v := range T.TestMessagesMap { + err = T.client.HSet(T.TestCollection, k, v) + require.Nil(t, err) + } + + results, err := T.client.HScan(T.TestCollection) + require.Nil(t, err) + + for k, vr := range results { + v, ok := T.TestMessagesMap[k] + require.True(t, ok) + require.Equal(t, v, vr) + } +} + +func TestRedisClient_HKeys(t *testing.T) { + var err error + T.Setup(t) + + for k, v := range T.TestMessagesMap { + err = T.client.HSet(T.TestCollection, k, v) + require.Nil(t, err) + } + + keys, err := T.client.HKeys(T.TestCollection) + require.Nil(t, err) + + for _, k := range keys { + _, ok := T.TestMessagesMap[k] + require.True(t, ok) + } +} + +func TestRedisClient_ZAdd_ZCount_ZCountAll_ZPopMax_ZPopMin(t *testing.T) { + var err error + T.Setup(t) + + for i, v := range T.TestMessages { + score := float32(i) + err = T.client.ZAdd(T.TestCollection, score, v) + require.Nil(t, err) + } + + count, err := T.client.ZCountAll(T.TestCollection) + require.Nil(t, err) + require.Equal(t, len(T.TestMessages), count) + + value, err := T.client.ZPopMaxOne(T.TestCollection) + require.Nil(t, err) + require.Equal(t, T.TestMessages[len(T.TestMessages)-1], value) + + value, err = T.client.ZPopMinOne(T.TestCollection) + require.Nil(t, err) + require.Equal(t, T.TestMessages[0], value) +} + +func TestRedisClient_BZPopMax_BZPopMin(t *testing.T) { + var err error + T.Setup(t) + + isErr := true + go func(t *testing.T) { + value, err := T.client.BZPopMax(T.TestCollection, 0) + require.Nil(t, err) + require.Equal(t, T.TestMessage, value) + isErr = false + }(t) + + err = T.client.ZAdd(T.TestCollection, 1, T.TestMessage) + require.Nil(t, err) + time.Sleep(500 * time.Millisecond) + require.False(t, isErr) + + isErr = true + go func(t *testing.T) { + value, err := T.client.BZPopMin(T.TestCollection, 0) + require.Nil(t, err) + require.Equal(t, T.TestMessage, value) + isErr = false + }(t) + + err = T.client.ZAdd(T.TestCollection, 1, T.TestMessage) + require.Nil(t, err) + time.Sleep(500 * time.Millisecond) + require.False(t, isErr) +} + +func TestRedisClient_Lock_Unlock(t *testing.T) { + var err error + T.Setup(t) + + ts, err := T.client.Lock(T.TestLockKey) + require.Nil(t, err) + + _, err = T.client.Lock(T.TestLockKey) + require.NotNil(t, err) + + T.client.UnLock(T.TestLockKey, ts) + + ts, err = T.client.Lock(T.TestLockKey) + require.Nil(t, err) + +} + +func TestRedisClient_MemoryStats(t *testing.T) { + var err error + T.Setup(t) + + stats, err := T.client.MemoryStats() + require.Nil(t, err) + + for _, k := range redis.MemoryStatsMetrics { + v, ok := stats[k] + require.True(t, ok) + require.Greater(t, v, int64(-1)) + } +} diff --git a/db/sql/sql.go b/db/sql/sql.go new file mode 100644 index 00000000..1ae07647 --- /dev/null +++ b/db/sql/sql.go @@ -0,0 +1,36 @@ +package sql + +import ( + "errors" + "fmt" + "github.com/crawlab-team/go-trace" + "github.com/jmoiron/sqlx" +) + +func GetSqlDatabaseConnectionString(dataSourceType string, host string, port string, username string, password string, database string) (connStr string, err error) { + if dataSourceType == "mysql" { + connStr = fmt.Sprintf("%s:%s@(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", username, password, host, port, database) + } else if dataSourceType == "postgres" { + connStr = fmt.Sprintf("host=%s port=%s user=%s dbname=%s password=%s sslmode=%s", host, port, username, database, password, "disable") + } else { + err = errors.New(dataSourceType + " is not implemented") + return connStr, trace.TraceError(err) + } + return connStr, nil +} + +func GetSqlConn(dataSourceType string, host string, port string, username string, password string, database string) (db *sqlx.DB, err error) { + // get database connection string + connStr, err := GetSqlDatabaseConnectionString(dataSourceType, host, port, username, password, database) + if err != nil { + return db, trace.TraceError(err) + } + + // get database instance + db, err = sqlx.Open(dataSourceType, connStr) + if err != nil { + return db, trace.TraceError(err) + } + + return db, nil +} diff --git a/db/utils/utils.go b/db/utils/utils.go new file mode 100644 index 00000000..f2ff4893 --- /dev/null +++ b/db/utils/utils.go @@ -0,0 +1,19 @@ +package utils + +import "io" + +func Close(c io.Closer) { + err := c.Close() + if err != nil { + //log.WithError(err).Error("关闭资源文件失败。") + } +} + +func ContainsString(list []string, item string) bool { + for _, d := range list { + if d == item { + return true + } + } + return false +} diff --git a/go.work b/go.work index fc97ba8b..af710c98 100644 --- a/go.work +++ b/go.work @@ -3,4 +3,5 @@ go 1.22 use ( core grpc + db ) diff --git a/go.work.sum b/go.work.sum index a1703f08..7052a582 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1,14 +1,663 @@ +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= +cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= +cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= +cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= +cloud.google.com/go/accessapproval v1.7.5 h1:uzmAMSgYcnlHa9X9YSQZ4Q1wlfl4NNkZyQgho1Z6p04= +cloud.google.com/go/accessapproval v1.7.5/go.mod h1:g88i1ok5dvQ9XJsxpUInWWvUBrIZhyPDPbk4T01OoJ0= +cloud.google.com/go/accesscontextmanager v1.8.5 h1:2GLNaNu9KRJhJBFTIVRoPwk6xE5mUDgD47abBq4Zp/I= +cloud.google.com/go/accesscontextmanager v1.8.5/go.mod h1:TInEhcZ7V9jptGNqN3EzZ5XMhT6ijWxTGjzyETwmL0Q= +cloud.google.com/go/aiplatform v1.60.0 h1:0cSrii1ZeLr16MbBoocyy5KVnrSdiQ3KN/vtrTe7RqE= +cloud.google.com/go/aiplatform v1.60.0/go.mod h1:eTlGuHOahHprZw3Hio5VKmtThIOak5/qy6pzdsqcQnM= +cloud.google.com/go/analytics v0.23.0 h1:Q+y94XH84jM8SK8O7qiY/PJRexb6n7dRbQ6PiUa4YGM= +cloud.google.com/go/analytics v0.23.0/go.mod h1:YPd7Bvik3WS95KBok2gPXDqQPHy08TsCQG6CdUCb+u0= +cloud.google.com/go/apigateway v1.6.5 h1:sPXnpk+6TneKIrjCjcpX5YGsAKy3PTdpIchoj8/74OE= +cloud.google.com/go/apigateway v1.6.5/go.mod h1:6wCwvYRckRQogyDDltpANi3zsCDl6kWi0b4Je+w2UiI= +cloud.google.com/go/apigeeconnect v1.6.5 h1:CrfIKv9Go3fh/QfQgisU3MeP90Ww7l/sVGmr3TpECo8= +cloud.google.com/go/apigeeconnect v1.6.5/go.mod h1:MEKm3AiT7s11PqTfKE3KZluZA9O91FNysvd3E6SJ6Ow= +cloud.google.com/go/apigeeregistry v0.8.3 h1:C+QU2K+DzDjk4g074ouwHQGkoff1h5OMQp6sblCVreQ= +cloud.google.com/go/apigeeregistry v0.8.3/go.mod h1:aInOWnqF4yMQx8kTjDqHNXjZGh/mxeNlAf52YqtASUs= +cloud.google.com/go/appengine v1.8.5 h1:l2SviT44zWQiOv8bPoMBzW0vOcMO22iO0s+nVtVhdts= +cloud.google.com/go/appengine v1.8.5/go.mod h1:uHBgNoGLTS5di7BvU25NFDuKa82v0qQLjyMJLuPQrVo= +cloud.google.com/go/area120 v0.8.5 h1:vTs08KPLN/iMzTbxpu5ciL06KcsrVPMjz4IwcQyZ4uY= +cloud.google.com/go/area120 v0.8.5/go.mod h1:BcoFCbDLZjsfe4EkCnEq1LKvHSK0Ew/zk5UFu6GMyA0= +cloud.google.com/go/artifactregistry v1.14.7 h1:W9sVlyb1VRcUf83w7aM3yMsnp4HS4PoyGqYQNG0O5lI= +cloud.google.com/go/artifactregistry v1.14.7/go.mod h1:0AUKhzWQzfmeTvT4SjfI4zjot72EMfrkvL9g9aRjnnM= +cloud.google.com/go/asset v1.17.2 h1:xgFnBP3luSbUcC9RWJvb3Zkt+y/wW6PKwPHr3ssnIP8= +cloud.google.com/go/asset v1.17.2/go.mod h1:SVbzde67ehddSoKf5uebOD1sYw8Ab/jD/9EIeWg99q4= +cloud.google.com/go/assuredworkloads v1.11.5 h1:gCrN3IyvqY3cP0wh2h43d99CgH3G+WYs9CeuFVKChR8= +cloud.google.com/go/assuredworkloads v1.11.5/go.mod h1:FKJ3g3ZvkL2D7qtqIGnDufFkHxwIpNM9vtmhvt+6wqk= +cloud.google.com/go/automl v1.13.5 h1:ijiJy9sYWh75WrqImXsfWc1e3HR3iO+ef9fvW03Ig/4= +cloud.google.com/go/automl v1.13.5/go.mod h1:MDw3vLem3yh+SvmSgeYUmUKqyls6NzSumDm9OJ3xJ1Y= +cloud.google.com/go/baremetalsolution v1.2.4 h1:LFydisRmS7hQk9P/YhekwuZGqb45TW4QavcrMToWo5A= +cloud.google.com/go/baremetalsolution v1.2.4/go.mod h1:BHCmxgpevw9IEryE99HbYEfxXkAEA3hkMJbYYsHtIuY= +cloud.google.com/go/batch v1.8.0 h1:2HK4JerwVaIcCh/lJiHwh6+uswPthiMMWhiSWLELayk= +cloud.google.com/go/batch v1.8.0/go.mod h1:k8V7f6VE2Suc0zUM4WtoibNrA6D3dqBpB+++e3vSGYc= +cloud.google.com/go/beyondcorp v1.0.4 h1:qs0J0O9Ol2h1yA0AU+r7l3hOCPzs2MjE1d6d/kaHIKo= +cloud.google.com/go/beyondcorp v1.0.4/go.mod h1:Gx8/Rk2MxrvWfn4WIhHIG1NV7IBfg14pTKv1+EArVcc= +cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= +cloud.google.com/go/bigquery v1.59.1 h1:CpT+/njKuKT3CEmswm6IbhNu9u35zt5dO4yPDLW+nG4= +cloud.google.com/go/bigquery v1.59.1/go.mod h1:VP1UJYgevyTwsV7desjzNzDND5p6hZB+Z8gZJN1GQUc= +cloud.google.com/go/billing v1.18.2 h1:oWUEQvuC4JvtnqLZ35zgzdbuHt4Itbftvzbe6aEyFdE= +cloud.google.com/go/billing v1.18.2/go.mod h1:PPIwVsOOQ7xzbADCwNe8nvK776QpfrOAUkvKjCUcpSE= +cloud.google.com/go/binaryauthorization v1.8.1 h1:1jcyh2uIUwSZkJ/JmL8kd5SUkL/Krbv8zmYLEbAz6kY= +cloud.google.com/go/binaryauthorization v1.8.1/go.mod h1:1HVRyBerREA/nhI7yLang4Zn7vfNVA3okoAR9qYQJAQ= +cloud.google.com/go/certificatemanager v1.7.5 h1:UMBr/twXvH3jcT5J5/YjRxf2tvwTYIfrpemTebe0txc= +cloud.google.com/go/certificatemanager v1.7.5/go.mod h1:uX+v7kWqy0Y3NG/ZhNvffh0kuqkKZIXdvlZRO7z0VtM= +cloud.google.com/go/channel v1.17.5 h1:/omiBnyFjm4S1ETHoOmJbL7LH7Ljcei4rYG6Sj3hc80= +cloud.google.com/go/channel v1.17.5/go.mod h1:FlpaOSINDAXgEext0KMaBq/vwpLMkkPAw9b2mApQeHc= +cloud.google.com/go/cloudbuild v1.15.1 h1:ZB6oOmJo+MTov9n629fiCrO9YZPOg25FZvQ7gIHu5ng= +cloud.google.com/go/cloudbuild v1.15.1/go.mod h1:gIofXZSu+XD2Uy+qkOrGKEx45zd7s28u/k8f99qKals= +cloud.google.com/go/clouddms v1.7.4 h1:Sr0Zo5EAcPQiCBgHWICg3VGkcdS/LLP1d9SR7qQBM/s= +cloud.google.com/go/clouddms v1.7.4/go.mod h1:RdrVqoFG9RWI5AvZ81SxJ/xvxPdtcRhFotwdE79DieY= +cloud.google.com/go/cloudtasks v1.12.6 h1:EUt1hIZ9bLv8Iz9yWaCrqgMnIU+Tdh0yXM1MMVGhjfE= +cloud.google.com/go/cloudtasks v1.12.6/go.mod h1:b7c7fe4+TJsFZfDyzO51F7cjq7HLUlRi/KZQLQjDsaY= +cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute v1.23.4/go.mod h1:/EJMj55asU6kAFnuZET8zqgwgJ9FvXWXOkkfQZa4ioI= +cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= +cloud.google.com/go/compute v1.25.1 h1:ZRpHJedLtTpKgr3RV1Fx23NuaAEN1Zfx9hw1u4aJdjU= cloud.google.com/go/compute v1.25.1/go.mod h1:oopOIR53ly6viBYxaDhBfJwzUAxf1zE//uf3IB011ls= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.13.0 h1:6Vs/YnDG5STGjlWMEjN/xtmft7MrOTOnOZYUZtGTx0w= +cloud.google.com/go/contactcenterinsights v1.13.0/go.mod h1:ieq5d5EtHsu8vhe2y3amtZ+BE+AQwX5qAy7cpo0POsI= +cloud.google.com/go/container v1.31.0 h1:MAaNH7VRNPWEhvqOypq2j+7ONJKrKzon4v9nS3nLZe0= +cloud.google.com/go/container v1.31.0/go.mod h1:7yABn5s3Iv3lmw7oMmyGbeV6tQj86njcTijkkGuvdZA= +cloud.google.com/go/containeranalysis v0.11.4 h1:doJ0M1ljS4hS0D2UbHywlHGwB7sQLNrt9vFk9Zyi7vY= +cloud.google.com/go/containeranalysis v0.11.4/go.mod h1:cVZT7rXYBS9NG1rhQbWL9pWbXCKHWJPYraE8/FTSYPE= +cloud.google.com/go/datacatalog v1.19.3 h1:A0vKYCQdxQuV4Pi0LL9p39Vwvg4jH5yYveMv50gU5Tw= +cloud.google.com/go/datacatalog v1.19.3/go.mod h1:ra8V3UAsciBpJKQ+z9Whkxzxv7jmQg1hfODr3N3YPJ4= +cloud.google.com/go/dataflow v0.9.5 h1:RYHtcPhmE664+F0Je46p+NvFbG8z//KCXp+uEqB4jZU= +cloud.google.com/go/dataflow v0.9.5/go.mod h1:udl6oi8pfUHnL0z6UN9Lf9chGqzDMVqcYTcZ1aPnCZQ= +cloud.google.com/go/dataform v0.9.2 h1:5e4eqGrd0iDTCg4Q+VlAao5j2naKAA7xRurNtwmUknU= +cloud.google.com/go/dataform v0.9.2/go.mod h1:S8cQUwPNWXo7m/g3DhWHsLBoufRNn9EgFrMgne2j7cI= +cloud.google.com/go/datafusion v1.7.5 h1:HQ/BUOP8OIGJxuztpYvNvlb+/U+/Bfs9SO8tQbh61fk= +cloud.google.com/go/datafusion v1.7.5/go.mod h1:bYH53Oa5UiqahfbNK9YuYKteeD4RbQSNMx7JF7peGHc= +cloud.google.com/go/datalabeling v0.8.5 h1:GpIFRdm0qIZNsxqURFJwHt0ZBJZ0nF/mUVEigR7PH/8= +cloud.google.com/go/datalabeling v0.8.5/go.mod h1:IABB2lxQnkdUbMnQaOl2prCOfms20mcPxDBm36lps+s= +cloud.google.com/go/dataplex v1.14.2 h1:fxIfdU8fxzR3clhOoNI7XFppvAmndxDu1AMH+qX9WKQ= +cloud.google.com/go/dataplex v1.14.2/go.mod h1:0oGOSFlEKef1cQeAHXy4GZPB/Ife0fz/PxBf+ZymA2U= +cloud.google.com/go/dataproc v1.12.0 h1:W47qHL3W4BPkAIbk4SWmIERwsWBaNnWm0P2sdx3YgGU= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataproc/v2 v2.4.0 h1:/u81Fd+BvCLp+xjctI1DiWVJn6cn9/s3Akc8xPH02yk= +cloud.google.com/go/dataproc/v2 v2.4.0/go.mod h1:3B1Ht2aRB8VZIteGxQS/iNSJGzt9+CA0WGnDVMEm7Z4= +cloud.google.com/go/dataqna v0.8.5 h1:9ybXs3nr9BzxSGC04SsvtuXaHY0qmJSLIpIAbZo9GqQ= +cloud.google.com/go/dataqna v0.8.5/go.mod h1:vgihg1mz6n7pb5q2YJF7KlXve6tCglInd6XO0JGOlWM= +cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= +cloud.google.com/go/datastore v1.15.0 h1:0P9WcsQeTWjuD1H14JIY7XQscIPQ4Laje8ti96IC5vg= +cloud.google.com/go/datastore v1.15.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= +cloud.google.com/go/datastream v1.10.4 h1:o1QDKMo/hk0FN7vhoUQURREuA0rgKmnYapB+1M+7Qz4= +cloud.google.com/go/datastream v1.10.4/go.mod h1:7kRxPdxZxhPg3MFeCSulmAJnil8NJGGvSNdn4p1sRZo= +cloud.google.com/go/deploy v1.17.1 h1:m27Ojwj03gvpJqCbodLYiVmE9x4/LrHGGMjzc0LBfM4= +cloud.google.com/go/deploy v1.17.1/go.mod h1:SXQyfsXrk0fBmgBHRzBjQbZhMfKZ3hMQBw5ym7MN/50= +cloud.google.com/go/dialogflow v1.49.0 h1:KqG0oxGE71qo0lRVyAoeBozefCvsMfcDzDjoLYSY0F4= +cloud.google.com/go/dialogflow v1.49.0/go.mod h1:dhVrXKETtdPlpPhE7+2/k4Z8FRNUp6kMV3EW3oz/fe0= +cloud.google.com/go/dlp v1.11.2 h1:lTipOuJaSjlYnnotPMbEhKURLC6GzCMDDzVbJAEbmYM= +cloud.google.com/go/dlp v1.11.2/go.mod h1:9Czi+8Y/FegpWzgSfkRlyz+jwW6Te9Rv26P3UfU/h/w= +cloud.google.com/go/documentai v1.25.0 h1:lI62GMEEPO6vXJI9hj+G9WjOvnR0hEjvjokrnex4cxA= +cloud.google.com/go/documentai v1.25.0/go.mod h1:ftLnzw5VcXkLItp6pw1mFic91tMRyfv6hHEY5br4KzY= +cloud.google.com/go/domains v0.9.5 h1:Mml/R6s3vQQvFPpi/9oX3O5dRirgjyJ8cksK8N19Y7g= +cloud.google.com/go/domains v0.9.5/go.mod h1:dBzlxgepazdFhvG7u23XMhmMKBjrkoUNaw0A8AQB55Y= +cloud.google.com/go/edgecontainer v1.1.5 h1:tBY32km78ScpK2aOP84JoW/+wtpx5WluyPUSEE3270U= +cloud.google.com/go/edgecontainer v1.1.5/go.mod h1:rgcjrba3DEDEQAidT4yuzaKWTbkTI5zAMu3yy6ZWS0M= +cloud.google.com/go/errorreporting v0.3.0 h1:kj1XEWMu8P0qlLhm3FwcaFsUvXChV/OraZwA70trRR0= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.6.6 h1:13eHn5qBnsawxI7mIrv4jRIEmQ1xg0Ztqw5ZGqtUNfA= +cloud.google.com/go/essentialcontacts v1.6.6/go.mod h1:XbqHJGaiH0v2UvtuucfOzFXN+rpL/aU5BCZLn4DYl1Q= +cloud.google.com/go/eventarc v1.13.4 h1:ORkd6/UV5FIdA8KZQDLNZYKS7BBOrj0p01DXPmT4tE4= +cloud.google.com/go/eventarc v1.13.4/go.mod h1:zV5sFVoAa9orc/52Q+OuYUG9xL2IIZTbbuTHC6JSY8s= +cloud.google.com/go/filestore v1.8.1 h1:X5G4y/vrUo1B8Nsz93qSWTMAcM8LXbGUldq33OdcdCw= +cloud.google.com/go/filestore v1.8.1/go.mod h1:MbN9KcaM47DRTIuLfQhJEsjaocVebNtNQhSLhKCF5GM= +cloud.google.com/go/firestore v1.6.1 h1:8rBq3zRjnHx8UtBvaOWqBB1xq9jH6/wltfQLlTMh2Fw= +cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.14.0 h1:8aLcKnMPoldYU3YHgu4t2exrKhLQkqaXAGqT0ljrFVw= +cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ= +cloud.google.com/go/functions v1.16.0 h1:IWVylmK5F6hJ3R5zaRW7jI5PrWhCvtBVU4axQLmXSo4= +cloud.google.com/go/functions v1.16.0/go.mod h1:nbNpfAG7SG7Duw/o1iZ6ohvL7mc6MapWQVpqtM29n8k= +cloud.google.com/go/gaming v1.9.0 h1:7vEhFnZmd931Mo7sZ6pJy7uQPDxF7m7v8xtBheG08tc= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gkebackup v1.3.5 h1:iuE8KNtTsPOc79qeWoNS8zOWoXPD9SAdOmwgxtlCmh8= +cloud.google.com/go/gkebackup v1.3.5/go.mod h1:KJ77KkNN7Wm1LdMopOelV6OodM01pMuK2/5Zt1t4Tvc= +cloud.google.com/go/gkeconnect v0.8.5 h1:17d+ZSSXKqG/RwZCq3oFMIWLPI8Zw3b8+a9/BEVlwH0= +cloud.google.com/go/gkeconnect v0.8.5/go.mod h1:LC/rS7+CuJ5fgIbXv8tCD/mdfnlAadTaUufgOkmijuk= +cloud.google.com/go/gkehub v0.14.5 h1:RboLNFzf9wEMSo7DrKVBlf+YhK/A/jrLN454L5Tz99Q= +cloud.google.com/go/gkehub v0.14.5/go.mod h1:6bzqxM+a+vEH/h8W8ec4OJl4r36laxTs3A/fMNHJ0wA= +cloud.google.com/go/gkemulticloud v1.1.1 h1:rsSZAGLhyjyE/bE2ToT5fqo1qSW7S+Ubsc9jFOcbhSI= +cloud.google.com/go/gkemulticloud v1.1.1/go.mod h1:C+a4vcHlWeEIf45IB5FFR5XGjTeYhF83+AYIpTy4i2Q= +cloud.google.com/go/grafeas v0.3.4 h1:D4x32R/cHX3MTofKwirz015uEdVk4uAxvZkZCZkOrF4= +cloud.google.com/go/grafeas v0.3.4/go.mod h1:A5m316hcG+AulafjAbPKXBO/+I5itU4LOdKO2R/uDIc= +cloud.google.com/go/gsuiteaddons v1.6.5 h1:CZEbaBwmbYdhFw21Fwbo+C35HMe36fTE0FBSR4KSfWg= +cloud.google.com/go/gsuiteaddons v1.6.5/go.mod h1:Lo4P2IvO8uZ9W+RaC6s1JVxo42vgy+TX5a6hfBZ0ubs= +cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= +cloud.google.com/go/iap v1.9.4 h1:94zirc2r4t6KzhAMW0R6Dme005eTP6yf7g6vN4IhRrA= +cloud.google.com/go/iap v1.9.4/go.mod h1:vO4mSq0xNf/Pu6E5paORLASBwEmphXEjgCFg7aeNu1w= +cloud.google.com/go/ids v1.4.5 h1:xd4U7pgl3GHV+MABnv1BF4/Vy/zBF7CYC8XngkOLzag= +cloud.google.com/go/ids v1.4.5/go.mod h1:p0ZnyzjMWxww6d2DvMGnFwCsSxDJM666Iir1bK1UuBo= +cloud.google.com/go/iot v1.7.5 h1:munTeBlbqI33iuTYgXy7S8lW2TCgi5l1hA4roSIY+EE= +cloud.google.com/go/iot v1.7.5/go.mod h1:nq3/sqTz3HGaWJi1xNiX7F41ThOzpud67vwk0YsSsqs= +cloud.google.com/go/kms v1.15.7 h1:7caV9K3yIxvlQPAcaFffhlT7d1qpxjB1wHBtjWa13SM= +cloud.google.com/go/kms v1.15.7/go.mod h1:ub54lbsa6tDkUwnu4W7Yt1aAIFLnspgh0kPGToDukeI= +cloud.google.com/go/language v1.12.3 h1:iaJZg6K4j/2PvZZVcjeO/btcWWIllVRBhuTFjGO4LXs= +cloud.google.com/go/language v1.12.3/go.mod h1:evFX9wECX6mksEva8RbRnr/4wi/vKGYnAJrTRXU8+f8= +cloud.google.com/go/lifesciences v0.9.5 h1:gXvN70m2p+4zgJFzaz6gMKaxTuF9WJ0USYoMLWAOm8g= +cloud.google.com/go/lifesciences v0.9.5/go.mod h1:OdBm0n7C0Osh5yZB7j9BXyrMnTRGBJIZonUMxo5CzPw= +cloud.google.com/go/logging v1.9.0 h1:iEIOXFO9EmSiTjDmfpbRjOxECO7R8C7b8IXUGOj7xZw= +cloud.google.com/go/logging v1.9.0/go.mod h1:1Io0vnZv4onoUnsVUQY3HZ3Igb1nBchky0A0y7BBBhE= +cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= +cloud.google.com/go/longrunning v0.5.5 h1:GOE6pZFdSrTb4KAiKnXsJBtlE6mEyaW44oKyMILWnOg= +cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s= +cloud.google.com/go/managedidentities v1.6.5 h1:+bpih1piZVLxla/XBqeSUzJBp8gv9plGHIMAI7DLpDM= +cloud.google.com/go/managedidentities v1.6.5/go.mod h1:fkFI2PwwyRQbjLxlm5bQ8SjtObFMW3ChBGNqaMcgZjI= +cloud.google.com/go/maps v1.6.4 h1:EVCZAiDvog9So46460BGbCasPhi613exoaQbpilMVlk= +cloud.google.com/go/maps v1.6.4/go.mod h1:rhjqRy8NWmDJ53saCfsXQ0LKwBHfi6OSh5wkq6BaMhI= +cloud.google.com/go/mediatranslation v0.8.5 h1:c76KdIXljQHSCb/Cy47S8H4s05A4zbK3pAFGzwcczZo= +cloud.google.com/go/mediatranslation v0.8.5/go.mod h1:y7kTHYIPCIfgyLbKncgqouXJtLsU+26hZhHEEy80fSs= +cloud.google.com/go/memcache v1.10.5 h1:yeDv5qxRedFosvpMSEswrqUsJM5OdWvssPHFliNFTc4= +cloud.google.com/go/memcache v1.10.5/go.mod h1:/FcblbNd0FdMsx4natdj+2GWzTq+cjZvMa1I+9QsuMA= +cloud.google.com/go/metastore v1.13.4 h1:dR7vqWXlK6IYR8Wbu9mdFfwlVjodIBhd1JRrpZftTEg= +cloud.google.com/go/metastore v1.13.4/go.mod h1:FMv9bvPInEfX9Ac1cVcRXp8EBBQnBcqH6gz3KvJ9BAE= +cloud.google.com/go/monitoring v1.18.0 h1:NfkDLQDG2UR3WYZVQE8kwSbUIEyIqJUPl+aOQdFH1T4= +cloud.google.com/go/monitoring v1.18.0/go.mod h1:c92vVBCeq/OB4Ioyo+NbN2U7tlg5ZH41PZcdvfc+Lcg= +cloud.google.com/go/networkconnectivity v1.14.4 h1:GBfXFhLyPspnaBE3nI/BRjdhW8vcbpT9QjE/4kDCDdc= +cloud.google.com/go/networkconnectivity v1.14.4/go.mod h1:PU12q++/IMnDJAB+3r+tJtuCXCfwfN+C6Niyj6ji1Po= +cloud.google.com/go/networkmanagement v1.9.4 h1:aLV5GcosBNmd6M8+a0ekB0XlLRexv4fvnJJrYnqeBcg= +cloud.google.com/go/networkmanagement v1.9.4/go.mod h1:daWJAl0KTFytFL7ar33I6R/oNBH8eEOX/rBNHrC/8TA= +cloud.google.com/go/networksecurity v0.9.5 h1:+caSxBTj0E8OYVh/5wElFdjEMO1S/rZtE1152Cepchc= +cloud.google.com/go/networksecurity v0.9.5/go.mod h1:KNkjH/RsylSGyyZ8wXpue8xpCEK+bTtvof8SBfIhMG8= +cloud.google.com/go/notebooks v1.11.3 h1:FH48boYmrWVQ6k0Mx/WrnNafXncT5iSYxA8CNyWTgy0= +cloud.google.com/go/notebooks v1.11.3/go.mod h1:0wQyI2dQC3AZyQqWnRsp+yA+kY4gC7ZIVP4Qg3AQcgo= +cloud.google.com/go/optimization v1.6.3 h1:63NZaWyN+5rZEKHPX4ACpw3BjgyeuY8+rCehiCMaGPY= +cloud.google.com/go/optimization v1.6.3/go.mod h1:8ve3svp3W6NFcAEFr4SfJxrldzhUl4VMUJmhrqVKtYA= +cloud.google.com/go/orchestration v1.8.5 h1:YHgWMlrPttIVGItgGfuvO2KM7x+y9ivN/Yk92pMm1a4= +cloud.google.com/go/orchestration v1.8.5/go.mod h1:C1J7HesE96Ba8/hZ71ISTV2UAat0bwN+pi85ky38Yq8= +cloud.google.com/go/orgpolicy v1.12.1 h1:2JbXigqBJVp8Dx5dONUttFqewu4fP0p3pgOdIZAhpYU= +cloud.google.com/go/orgpolicy v1.12.1/go.mod h1:aibX78RDl5pcK3jA8ysDQCFkVxLj3aOQqrbBaUL2V5I= +cloud.google.com/go/osconfig v1.12.5 h1:Mo5jGAxOMKH/PmDY7fgY19yFcVbvwREb5D5zMPQjFfo= +cloud.google.com/go/osconfig v1.12.5/go.mod h1:D9QFdxzfjgw3h/+ZaAb5NypM8bhOMqBzgmbhzWViiW8= +cloud.google.com/go/oslogin v1.13.1 h1:1K4nOT5VEZNt7XkhaTXupBYos5HjzvJMfhvyD2wWdFs= +cloud.google.com/go/oslogin v1.13.1/go.mod h1:vS8Sr/jR7QvPWpCjNqy6LYZr5Zs1e8ZGW/KPn9gmhws= +cloud.google.com/go/phishingprotection v0.8.5 h1:DH3WFLzEoJdW/6xgsmoDqOwT1xddFi7gKu0QGZQhpGU= +cloud.google.com/go/phishingprotection v0.8.5/go.mod h1:g1smd68F7mF1hgQPuYn3z8HDbNre8L6Z0b7XMYFmX7I= +cloud.google.com/go/policytroubleshooter v1.10.3 h1:c0WOzC6hz964QWNBkyKfna8A2jOIx1zzZa43Gx/P09o= +cloud.google.com/go/policytroubleshooter v1.10.3/go.mod h1:+ZqG3agHT7WPb4EBIRqUv4OyIwRTZvsVDHZ8GlZaoxk= +cloud.google.com/go/privatecatalog v0.9.5 h1:UZ0assTnATXSggoxUIh61RjTQ4P9zCMk/kEMbn0nMYA= +cloud.google.com/go/privatecatalog v0.9.5/go.mod h1:fVWeBOVe7uj2n3kWRGlUQqR/pOd450J9yZoOECcQqJk= +cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= +cloud.google.com/go/pubsub v1.36.1 h1:dfEPuGCHGbWUhaMCTHUFjfroILEkx55iUmKBZTP5f+Y= +cloud.google.com/go/pubsub v1.36.1/go.mod h1:iYjCa9EzWOoBiTdd4ps7QoMtMln5NwaZQpK1hbRfBDE= +cloud.google.com/go/pubsublite v1.8.1 h1:pX+idpWMIH30/K7c0epN6V703xpIcMXWRjKJsz0tYGY= +cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0= +cloud.google.com/go/recaptchaenterprise/v2 v2.9.2 h1:U3Wfq12X9cVMuTpsWDSURnXF0Z9hSPTHj+xsnXDRLsw= +cloud.google.com/go/recaptchaenterprise/v2 v2.9.2/go.mod h1:trwwGkfhCmp05Ll5MSJPXY7yvnO0p4v3orGANAFHAuU= +cloud.google.com/go/recommendationengine v0.8.5 h1:ineqLswaCSBY0csYv5/wuXJMBlxATK6Xc5jJkpiTEdM= +cloud.google.com/go/recommendationengine v0.8.5/go.mod h1:A38rIXHGFvoPvmy6pZLozr0g59NRNREz4cx7F58HAsQ= +cloud.google.com/go/recommender v1.12.1 h1:LVLYS3r3u0MSCxQSDUtLSkporEGi9OAE6hGvayrZNPs= +cloud.google.com/go/recommender v1.12.1/go.mod h1:gf95SInWNND5aPas3yjwl0I572dtudMhMIG4ni8nr+0= +cloud.google.com/go/redis v1.14.2 h1:QF0maEdVv0Fj/2roU8sX3NpiDBzP9ICYTO+5F32gQNo= +cloud.google.com/go/redis v1.14.2/go.mod h1:g0Lu7RRRz46ENdFKQ2EcQZBAJ2PtJHJLuiiRuEXwyQw= +cloud.google.com/go/resourcemanager v1.9.5 h1:AZWr1vWVDKGwfLsVhcN+vcwOz3xqqYxtmMa0aABCMms= +cloud.google.com/go/resourcemanager v1.9.5/go.mod h1:hep6KjelHA+ToEjOfO3garMKi/CLYwTqeAw7YiEI9x8= +cloud.google.com/go/resourcesettings v1.6.5 h1:BTr5MVykJwClASci/7Og4Qfx70aQ4n3epsNLj94ZYgw= +cloud.google.com/go/resourcesettings v1.6.5/go.mod h1:WBOIWZraXZOGAgoR4ukNj0o0HiSMO62H9RpFi9WjP9I= +cloud.google.com/go/retail v1.16.0 h1:Fn1GuAua1c6crCGqfJ1qMxG1Xh10Tg/x5EUODEHMqkw= +cloud.google.com/go/retail v1.16.0/go.mod h1:LW7tllVveZo4ReWt68VnldZFWJRzsh9np+01J9dYWzE= +cloud.google.com/go/run v1.3.4 h1:m9WDA7DzTpczhZggwYlZcBWgCRb+kgSIisWn1sbw2rQ= +cloud.google.com/go/run v1.3.4/go.mod h1:FGieuZvQ3tj1e9GnzXqrMABSuir38AJg5xhiYq+SF3o= +cloud.google.com/go/scheduler v1.10.6 h1:5U8iXLoQ03qOB+ZXlAecU7fiE33+u3QiM9nh4cd0eTE= +cloud.google.com/go/scheduler v1.10.6/go.mod h1:pe2pNCtJ+R01E06XCDOJs1XvAMbv28ZsQEbqknxGOuE= +cloud.google.com/go/secretmanager v1.11.5 h1:82fpF5vBBvu9XW4qj0FU2C6qVMtj1RM/XHwKXUEAfYY= +cloud.google.com/go/secretmanager v1.11.5/go.mod h1:eAGv+DaCHkeVyQi0BeXgAHOU0RdrMeZIASKc+S7VqH4= +cloud.google.com/go/security v1.15.5 h1:wTKJQ10j8EYgvE8Y+KhovxDRVDk2iv/OsxZ6GrLP3kE= +cloud.google.com/go/security v1.15.5/go.mod h1:KS6X2eG3ynWjqcIX976fuToN5juVkF6Ra6c7MPnldtc= +cloud.google.com/go/securitycenter v1.24.4 h1:/5jjkZ+uGe8hZ7pvd7pO30VW/a+pT2MrrdgOqjyucKQ= +cloud.google.com/go/securitycenter v1.24.4/go.mod h1:PSccin+o1EMYKcFQzz9HMMnZ2r9+7jbc+LvPjXhpwcU= +cloud.google.com/go/servicedirectory v1.11.4 h1:da7HFI1229kyzIyuVEzHXip0cw0d+E0s8mjQby0WN+k= +cloud.google.com/go/servicedirectory v1.11.4/go.mod h1:Bz2T9t+/Ehg6x+Y7Ycq5xiShYLD96NfEsWNHyitj1qM= +cloud.google.com/go/shell v1.7.5 h1:3Fq2hzO0ZSyaqBboJrFkwwf/qMufDtqwwA6ep8EZxEI= +cloud.google.com/go/shell v1.7.5/go.mod h1:hL2++7F47/IfpfTO53KYf1EC+F56k3ThfNEXd4zcuiE= +cloud.google.com/go/spanner v1.56.0 h1:o/Cv7/zZ1WgRXVCd5g3Nc23ZI39p/1pWFqFwvg6Wcu8= +cloud.google.com/go/spanner v1.56.0/go.mod h1:DndqtUKQAt3VLuV2Le+9Y3WTnq5cNKrnLb/Piqcj+h0= +cloud.google.com/go/speech v1.21.1 h1:nuFc+Kj5B8de75nN4FdPyUbI2SiBoHZG6BLurXL56Q0= +cloud.google.com/go/speech v1.21.1/go.mod h1:E5GHZXYQlkqWQwY5xRSLHw2ci5NMQNG52FfMU1aZrIA= +cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.38.0 h1:Az68ZRGlnNTpIBbLjSMIV2BDcwwXYlRlQzis0llkpJg= +cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY= +cloud.google.com/go/storagetransfer v1.10.4 h1:dy4fL3wO0VABvzM05ycMUPFHxTPbJz9Em8ikAJVqSbI= +cloud.google.com/go/storagetransfer v1.10.4/go.mod h1:vef30rZKu5HSEf/x1tK3WfWrL0XVoUQN/EPDRGPzjZs= +cloud.google.com/go/talent v1.6.6 h1:JssV0CE3FNujuSWn7SkosOzg7qrMxVnt6txOfGcMSa4= +cloud.google.com/go/talent v1.6.6/go.mod h1:y/WQDKrhVz12WagoarpAIyKKMeKGKHWPoReZ0g8tseQ= +cloud.google.com/go/texttospeech v1.7.5 h1:dxY2Q5mHCbrGa3oPR2O3PCicdnvKa1JmwGQK36EFLOw= +cloud.google.com/go/texttospeech v1.7.5/go.mod h1:tzpCuNWPwrNJnEa4Pu5taALuZL4QRRLcb+K9pbhXT6M= +cloud.google.com/go/tpu v1.6.5 h1:C8YyYda8WtNdBoCgFwwBzZd+S6+EScHOxM/z1h0NNp8= +cloud.google.com/go/tpu v1.6.5/go.mod h1:P9DFOEBIBhuEcZhXi+wPoVy/cji+0ICFi4TtTkMHSSs= +cloud.google.com/go/trace v1.10.5 h1:0pr4lIKJ5XZFYD9GtxXEWr0KkVeigc3wlGpZco0X1oA= +cloud.google.com/go/trace v1.10.5/go.mod h1:9hjCV1nGBCtXbAE4YK7OqJ8pmPYSxPA0I67JwRd5s3M= +cloud.google.com/go/translate v1.10.1 h1:upovZ0wRMdzZvXnu+RPam41B0mRJ+coRXFP2cYFJ7ew= +cloud.google.com/go/translate v1.10.1/go.mod h1:adGZcQNom/3ogU65N9UXHOnnSvjPwA/jKQUMnsYXOyk= +cloud.google.com/go/video v1.20.4 h1:TXwotxkShP1OqgKsbd+b8N5hrIHavSyLGvYnLGCZ7xc= +cloud.google.com/go/video v1.20.4/go.mod h1:LyUVjyW+Bwj7dh3UJnUGZfyqjEto9DnrvTe1f/+QrW0= +cloud.google.com/go/videointelligence v1.11.5 h1:mYaWH8uhUCXLJCN3gdXswKzRa2+lK0zN6/KsIubm6pE= +cloud.google.com/go/videointelligence v1.11.5/go.mod h1:/PkeQjpRponmOerPeJxNPuxvi12HlW7Em0lJO14FC3I= +cloud.google.com/go/vision/v2 v2.8.0 h1:W52z1b6LdGI66MVhE70g/NFty9zCYYcjdKuycqmlhtg= +cloud.google.com/go/vision/v2 v2.8.0/go.mod h1:ocqDiA2j97pvgogdyhoxiQp2ZkDCyr0HWpicywGGRhU= +cloud.google.com/go/vmmigration v1.7.5 h1:5v9RT2vWyuw3pK2ox0HQpkoftO7Q7/8591dTxxQc79g= +cloud.google.com/go/vmmigration v1.7.5/go.mod h1:pkvO6huVnVWzkFioxSghZxIGcsstDvYiVCxQ9ZH3eYI= +cloud.google.com/go/vmwareengine v1.1.1 h1:EGdDi9QbqThfZq3ILcDK5g+m9jTevc34AY5tACx5v7k= +cloud.google.com/go/vmwareengine v1.1.1/go.mod h1:nMpdsIVkUrSaX8UvmnBhzVzG7PPvNYc5BszcvIVudYs= +cloud.google.com/go/vpcaccess v1.7.5 h1:XyL6hTLtEM/eE4F1GEge8xUN9ZCkiVWn44K/YA7z1rQ= +cloud.google.com/go/vpcaccess v1.7.5/go.mod h1:slc5ZRvvjP78c2dnL7m4l4R9GwL3wDLcpIWz6P/ziig= +cloud.google.com/go/webrisk v1.9.5 h1:251MvGuC8wisNN7+jqu9DDDZAi38KiMXxOpA/EWy4dE= +cloud.google.com/go/webrisk v1.9.5/go.mod h1:aako0Fzep1Q714cPEM5E+mtYX8/jsfegAuS8aivxy3U= +cloud.google.com/go/websecurityscanner v1.6.5 h1:YqWZrZYabG88TZt7364XWRJGhxmxhony2ZUyZEYMF2k= +cloud.google.com/go/websecurityscanner v1.6.5/go.mod h1:QR+DWaxAz2pWooylsBF854/Ijvuoa3FCyS1zBa1rAVQ= +cloud.google.com/go/workflows v1.12.4 h1:uHNmUiatTbPQ4H1pabwfzpfEYD4BBnqDHqMm2IesOh4= +cloud.google.com/go/workflows v1.12.4/go.mod h1:yQ7HUqOkdJK4duVtMeBCAOPiN1ZF1E9pAMX51vpwB/w= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= +github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= +github.com/apache/arrow/go/v14 v14.0.2 h1:N8OkaJEOfI3mEZt07BIkvo4sC6XDbL+48MBPWO5IONw= +github.com/apache/arrow/go/v14 v14.0.2/go.mod h1:u3fgh3EdgN/YQ8cVQRguVW3R+seMybFg8QBQ5LU+eBY= +github.com/apex/logs v1.0.0 h1:adOwhOTeXzZTnVuEK13wuJNBFutP0sOfutRS8NY+G6A= +github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a h1:2KLQMJ8msqoPHIPDufkxVcoTtcmE5+1sL9950m4R9Pk= +github.com/aphistic/sweet v0.2.0 h1:I4z+fAUqvKfvZV/CHi5dV0QuwbmIvYYFDjG0Ss5QpAs= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= +github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= +github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= +github.com/aws/aws-sdk-go v1.30.7 h1:IaXfqtioP6p9SFAnNfsqdNczbR5UNbYqvcZUSsCAdTY= +github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c h1:+0HFd5KSZ/mm3JmhmrDukiId5iR6w4+BdFtfSy4yWIc= +github.com/bwesterb/go-ristretto v1.2.3 h1:1w53tCkGhCQ5djbat3+MH0BAQ5Kfgbt56UZQ/JMzngw= +github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= +github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 h1:hzAQntlaYRkVSFEfj9OTWlVV1H155FMD8BTKktLv0QI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20240318125728-8a4994d93e50 h1:DBmgJDC9dTfkVyGgipamEh2BpGYxScCH1TOF1LL1cXc= github.com/cncf/xds/go v0.0.0-20240318125728-8a4994d93e50/go.mod h1:5e1+Vvlzido69INQaVO6d87Qn543Xr6nooe9Kz7oBFM= +github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= +github.com/coreos/etcd v3.3.13+incompatible h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c= +github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= +github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= +github.com/crawlab-team/crawlab-db v0.6.0-1 h1:Is3a3q1epc7mFP4iDIr9nXlcHSW5IL6jXKQ3YEsXpVo= +github.com/crawlab-team/crawlab-db v0.6.0-1/go.mod h1:gfeF0nAnFuup6iYvgHkY0in/HpO/+JktXqVNMdhoxhU= +github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A= +github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954 h1:RMLoZVzv4GliuWafOuPuQDKSm1SJph7uCRnnS61JAn4= +github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= +github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI= github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= +github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/fasthttp/websocket v1.4.3-rc.6 h1:omHqsl8j+KXpmzRjF8bmzOSYJ8GnS0E3efi1wYT+niY= github.com/fasthttp/websocket v1.4.3-rc.6/go.mod h1:43W9OM2T8FeXpCWMsBd9Cb7nE2CACNqNvCqQCoty/Lc= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= +github.com/go-gomail/gomail v0.0.0-20160411212932-81ebce5c23df h1:Bao6dhmbTA1KFVxmJ6nBoMuOJit2yjEgLJpIMYpop0E= +github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= +github.com/go-kit/log v0.1.0 h1:DGJh0Sm43HbOeYDNnVZFl8BvcYVvjD5bqYJvp0REbwQ= +github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= +github.com/google/flatbuffers v23.5.26+incompatible h1:M9dgRyhJemaM4Sw8+66GHBu8ioaQmyPLg1b8VwK5WJg= +github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9 h1:OF1IPgv+F4NmqmJ98KTjdN97Vs1JxDPB3vbmYzV2dpk= +github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.1.1 h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/gax-go/v2 v2.12.1/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= +github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA= +github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8 h1:tlyzajkF3030q6M8SvmJSemC9DTHL/xaMa18b65+JM4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= +github.com/hashicorp/consul/api v1.11.0 h1:Hw/G8TtRvOElqxVIhBzXciiSTbapq8hZ2XKZsXk5ZCE= +github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-hclog v1.0.0 h1:bkKf0BeBXcSYa7f5Fyi9gMuQ8gNsxeiNpZjR6VxNZeo= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= +github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI= +github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= +github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= +github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= +github.com/hashicorp/mdns v1.0.4 h1:sY0CMhFmjIPDMlTB+HfymFHCaYLhgifZ0QhjaYKD/UQ= +github.com/hashicorp/memberlist v0.3.0 h1:8+567mCcFDnS5ADl7lrpxPMWiFCElyUEeW0gtj34fMA= +github.com/hashicorp/serf v0.9.6 h1:uuEX1kLR6aoda1TBttmJQKDLZE1Ob7KN0NPdE7EtCDc= +github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= +github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= +github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weKRL81bEnm8A0HT1/CAelMQDBuQIfLw8n+d6xI= +github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= +github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= +github.com/jackc/puddle v1.2.1 h1:gI8os0wpRXFd4FiAY2dWiqRK037tjj3t7rKFeO4X5iw= +github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= +github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 h1:K//n/AqR5HjG3qxbrBCL4vJPW0MVFSs9CPK1OOJdRME= +github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= +github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= +github.com/kisielk/errcheck v1.5.0 h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= +github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= +github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= +github.com/lyft/protoc-gen-star v0.5.3 h1:zSGLzsUew8RT+ZKPHc3jnf8XLaVyHzTcAFBzHtCNR20= +github.com/lyft/protoc-gen-star/v2 v2.0.3 h1:/3+/2sWyXeMLzKd1bX+ixWKgEMsULrIivpDsuaF441o= +github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= +github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= +github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= +github.com/mitchellh/cli v1.1.0 h1:tEElEatulEHDeedTxwckzyYMA5c86fbmNIUL1hBIiTg= +github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= +github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= +github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= +github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= +github.com/mmcloughlin/avo v0.5.0 h1:nAco9/aI9Lg2kiuROBY6BhCI/z0t5jEvJfjWbL8qXLU= github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= +github.com/olivere/elastic/v7 v7.0.15 h1:v7kX5S+oMFfYKS4ZyzD37GH6lfZSpBo9atynRwBUywE= +github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= +github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/diff v0.0.0-20200914180035-5b29258ca4f7 h1:+/+DxvQaYifJ+grD4klzrS5y+KJXldn/2YTl5JG+vZ8= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/sftp v1.10.1 h1:VasscCm72135zRysgrJDKsntdmPN+OuU3+nnHYA9wyc= +github.com/pkg/sftp v1.13.1 h1:I2qBYMChEhIjOgazfJmV3/mZM256btk6wkCDRmW7JYs= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= +github.com/prometheus/client_golang v1.4.0 h1:YVIb/fVcOTMSqtqZWSKnHpSLBxu8DKgxq8z6RuBZwqI= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U= +github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= +github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= +github.com/rs/zerolog v1.15.0 h1:uPRuwkWF4J6fGsJ2R0Gn2jB1EQiav9k3S6CSdygQJXY= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= +github.com/sagikazarmark/crypt v0.3.0 h1:TV5DVog+pihN4Rr0rN1IClv4ePpkzdg9sPrw7WDofZ8= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= +github.com/savsgio/gotils v0.0.0-20210617111740-97865ed5a873 h1:N3Af8f13ooDKcIhsmFT7Z05CStZWu4C7Md0uDEy4q6o= github.com/savsgio/gotils v0.0.0-20210617111740-97865ed5a873/go.mod h1:dmPawKuiAeG/aFYVs2i+Dyosoo7FNcm+Pi8iK6ZUrX8= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 h1:hp2CYQUINdZMHdvTdXtPOY2ainKl4IoMcpAXEf2xj3Q= +github.com/smartystreets/gunit v1.0.0 h1:RyPDUFcJbvtXlhJPk7v+wnxZRY2EUokhEYl2EJOPToI= +github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= +github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= +github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502 h1:34icjjmqJ2HPjrSuJYEkdZ+0ItmGQAQ75cRHIiftIyE= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tj/go-buffer v1.1.0 h1:Lo2OsPHlIxXF24zApe15AbK3bJLAOvkkxEA6Ux4c47M= +github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 h1:eGaGNxrtoZf/mBURsnNQKDR7u50Klgcf2eFDQEnc8Bc= +github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b h1:m74UWYy+HBs+jMFR9mdZU6shPewugMyH5+GV6LNgW8w= +github.com/tj/go-spin v1.1.0 h1:lhdWZsvImxvZ3q1C5OIB7d72DuOwP4O2NdBg9PyzNds= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= +github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= +github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= +github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +github.com/zenazn/goji v0.9.0 h1:RSQQAbXGArQ0dIDEq+PI6WqN6if+5KHu6x2Cx/GXLTQ= +go.einride.tech/aip v0.66.0 h1:XfV+NQX6L7EOYK11yoHHFtndeaWh3KbD9/cN/6iWEt8= +go.einride.tech/aip v0.66.0/go.mod h1:qAhMsfT7plxBX+Oy7Huol6YUvZ0ZzdUz26yZsQwfl1M= +go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= +go.etcd.io/etcd/api/v3 v3.5.1 h1:v28cktvBq+7vGyJXF8G+rWJmj+1XUmMtqcLnH8hDocM= +go.etcd.io/etcd/client/pkg/v3 v3.5.1 h1:XIQcHCFSG53bJETYeRJtIxdLv2EWRGxcfzR8lSnTH4E= +go.etcd.io/etcd/client/v2 v2.305.1 h1:vtxYCKWA9x31w0WJj7DdqsHFNjhkigdAnziDtkZb/l4= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= +go.opentelemetry.io/otel v1.23.0/go.mod h1:YCycw9ZeKhcJFrb34iVSkyT0iczq/zYDtZYFufObyB0= +go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= +go.opentelemetry.io/otel/metric v1.23.0/go.mod h1:MqUW2X2a6Q8RN96E2/nqNoT+z9BSms20Jb7Bbp+HiTo= +go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= +go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= +go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= +go.opentelemetry.io/otel/trace v1.23.0/go.mod h1:GSGTbIClEsuZrGIzoEHqsVfxgn5UkggkflQwDScNUsk= +go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/proto/otlp v0.7.0 h1:rwOQPCuKAKmwGKq2aVNnYIibI6wnV7EvzgfTCzcdGg8= +go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= +go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6 h1:QE6XYQK6naiK1EPAe1g/ILLxN5RBoH5xkJk3CqlMI/Y= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= +golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= +golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= +golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +google.golang.org/api v0.62.0 h1:PhGymJMXfGBzc4lBRmrx9+1w4w2wEzURHNGF/sD/xGc= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= +google.golang.org/api v0.160.0/go.mod h1:0mu0TpK33qnydLvWqbImq2b1eQ5FHRSDCBzAxX9ZHyw= +google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= +google.golang.org/api v0.164.0/go.mod h1:2OatzO7ZDQsoS7IFf3rvsE17/TldiU3F/zxFHeqUB5o= +google.golang.org/api v0.166.0/go.mod h1:4FcBc686KFi7QI/U51/2GKKevfZMpM17sCdibqe/bSA= +google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY= +google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98/go.mod h1:S7mY02OqCJTD0E1OiQy1F72PWFB4bZJ87cAtLPYgDR0= +google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k= +google.golang.org/genproto v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro= +google.golang.org/genproto v0.0.0-20240205150955-31a09d347014/go.mod h1:xEgQu1e4stdSSsxPDK8Azkrk/ECl5HvdPf6nbZrTS5M= +google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y= +google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= +google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014/go.mod h1:rbHMSEDyoYX62nRVLOCc4Qt1HbsdytAYoVwgjiOhF3I= +google.golang.org/genproto/googleapis/api v0.0.0-20240221002015-b0ce06bbee7c/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= +google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4= google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20240304161311-37d4d3c04a78 h1:YqFWYZXim8bG9v68xU8WjTZmYKb5M5dMeSOWIp6jogI= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20240304161311-37d4d3c04a78/go.mod h1:vh/N7795ftP0AkN1w8XKqN4w1OdUKXW5Eummda+ofv8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240205150955-31a09d347014/go.mod h1:SaPjaZGWb0lPqs6Ittu0spdfrOArqji4ZdeP5IC/9N4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240221002015-b0ce06bbee7c/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.61.0/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec h1:RlWgLqCMMIYYEVcAR5MDsuHlVkaIPDAF+5Dehzg8L5A= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= +honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= +modernc.org/b v1.0.2 h1:iPC2u39ebzq12GOC2yXT4mve0HrWcH85cz+midWjzeo= +modernc.org/db v1.0.3 h1:apxOlWU69je04bY22OT6J0RL23mzvUy22EgTAVyw+Yg= +modernc.org/file v1.0.3 h1:McYGAMMuqjRp6ptmpcLr3r5yw3gNPsonFCAJ0tNK74U= +modernc.org/fileutil v1.0.0 h1:Z1AFLZwl6BO8A5NldQg/xTSjGLetp+1Ubvl4alfGx8w= +modernc.org/golex v1.0.1 h1:EYKY1a3wStt0RzHaH8mdSRNg78Ub0OHxYfCRWw35YtM= +modernc.org/internal v1.0.2 h1:Sn3+ojjMRnPaOR6jFISs6KAdRHnR4q9KNuwfKINKmZA= +modernc.org/lex v1.0.0 h1:w0dxp18i1q+aSE7GkepvwzvVWTLoCIQ2oDgTFAV2JZU= +modernc.org/lexer v1.0.0 h1:D2xE6YTaH7aiEC7o/+rbx6qTAEr1uY83peKwkamIdQ0= +modernc.org/lldb v1.0.2 h1:LBw58xVFl01OuM5U9++tLy3wmu+PoWok6T3dHuNjcZk= +modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8= +modernc.org/ql v1.4.0 h1:CqLAho+y4N8JwvqT7NJsYsp7YPwiRv6RE2n0n1ksSCU= +modernc.org/sortutil v1.1.0 h1:oP3U4uM+NT/qBQcbg/K2iqAX0Nx7B1b6YZtq3Gk/PjM= +modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= +modernc.org/zappy v1.0.3 h1:Tr+P3kclDSrvC6zYBW2hWmOmu5SjG6PtvCt3RCjRmss= +rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= +rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= +rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= +rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=