From 7eab5ded5427df161b85a0e070f36958aa021d84 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Sat, 5 Jul 2025 09:56:48 +0530 Subject: [PATCH 01/44] [interfaces] InfluxDBProvider, InfluxDB interface added with all the operations, [AddInfluxDB()] method for externalized datasource added. [logging] standard app logging implemented for influxdb --- go.mod | 6 +- go.sum | 12 +++ go.work.sum | 119 +++++++++++++++++++++++ pkg/gofr/container/container.go | 1 + pkg/gofr/container/datasources.go | 40 ++++++++ pkg/gofr/container/health.go | 1 + pkg/gofr/datasource/influxdb/influxdb.go | 99 +++++++++++++++++++ pkg/gofr/datasource/influxdb/logger.go | 43 ++++++++ pkg/gofr/datasource/influxdb/metrics.go | 9 ++ pkg/gofr/external_db.go | 6 ++ 10 files changed, 335 insertions(+), 1 deletion(-) create mode 100644 pkg/gofr/datasource/influxdb/influxdb.go create mode 100644 pkg/gofr/datasource/influxdb/logger.go create mode 100644 pkg/gofr/datasource/influxdb/metrics.go diff --git a/go.mod b/go.mod index c3d6614d2..d5a4a73c9 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/gorilla/websocket v1.5.3 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 + github.com/influxdata/influxdb-client-go/v2 v2.14.0 github.com/joho/godotenv v1.5.1 github.com/lib/pq v1.10.9 github.com/pkg/errors v0.9.1 @@ -25,6 +26,7 @@ require ( github.com/redis/go-redis/v9 v9.10.0 github.com/segmentio/kafka-go v0.4.48 github.com/stretchr/testify v1.10.0 + go.opencensus.io v0.24.0 go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.61.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 go.opentelemetry.io/otel v1.36.0 @@ -53,6 +55,7 @@ require ( cloud.google.com/go/compute/metadata v0.7.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect filippo.io/edwards25519 v1.1.0 // indirect + github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v5 v5.0.2 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect @@ -68,10 +71,12 @@ require ( github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect github.com/googleapis/gax-go/v2 v2.14.2 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect + github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect github.com/klauspost/compress v1.18.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect + github.com/oapi-codegen/runtime v1.0.0 // indirect github.com/openzipkin/zipkin-go v0.4.3 // indirect github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -86,7 +91,6 @@ require ( github.com/xdg-go/stringprep v1.0.4 // indirect github.com/yuin/gopher-lua v1.1.1 // indirect go.einride.tech/aip v0.68.1 // indirect - go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 // indirect diff --git a/go.sum b/go.sum index c3359869c..4aed6e65b 100644 --- a/go.sum +++ b/go.sum @@ -20,13 +20,17 @@ filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= +github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= github.com/XSAM/otelsql v0.39.0 h1:4o374mEIMweaeevL7fd8Q3C710Xi2Jh/c8G4Qy9bvCY= github.com/XSAM/otelsql v0.39.0/go.mod h1:uMOXLUX+wkuAuP0AR3B45NXX7E9lJS2mERa8gqdU8R0= github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= +github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= +github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= @@ -117,8 +121,13 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDa github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= +github.com/influxdata/influxdb-client-go/v2 v2.14.0 h1:AjbBfJuq+QoaXNcrova8smSjwJdUHnwvfjMF71M1iI4= +github.com/influxdata/influxdb-client-go/v2 v2.14.0/go.mod h1:Ahpm3QXKMJslpXl3IftVLVezreAUtBOTZssDrjZEFHI= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= @@ -145,6 +154,8 @@ github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdh github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oapi-codegen/runtime v1.0.0 h1:P4rqFX5fMFWqRzY9M/3YF9+aPSPPB06IzP2P7oOxrWo= +github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= @@ -182,6 +193,7 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN github.com/segmentio/kafka-go v0.4.48 h1:9jyu9CWK4W5W+SroCe8EffbrRZVqAOkuaLd/ApID4Vs= github.com/segmentio/kafka-go v0.4.48/go.mod h1:HjF6XbOKh0Pjlkr5GVZxt6CsjjwnmhVOfURM5KMd8qg= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= diff --git a/go.work.sum b/go.work.sum index b634c783d..cb6e89e96 100644 --- a/go.work.sum +++ b/go.work.sum @@ -9,6 +9,8 @@ cel.dev/expr v0.19.2 h1:V354PbqIXr9IQdwy4SYA4xa0HXaWq1BUPAGzugBY5V4= cel.dev/expr v0.19.2/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= cel.dev/expr v0.20.0 h1:OunBvVCfvpWlt4dN7zg3FM6TDkzOePe1+foGJ9AXeeI= cel.dev/expr v0.20.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cel.dev/expr v0.23.0 h1:wUb94w6OYQS4uXraxo9U+wUAs9jT47Xvl4iPgAwM2ss= +cel.dev/expr v0.23.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= @@ -703,10 +705,16 @@ github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0= github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= +github.com/CloudyKit/jet/v6 v6.2.0 h1:EpcZ6SR9n28BUGtNJSvlBqf90IpjeFr36Tizxhn/oME= +github.com/CloudyKit/jet/v6 v6.2.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.0 h1:oVLqHXhnYtUwM89y9T1fXGaK9wTkXHgNp8/ZNMQzUxE= github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.0/go.mod h1:dppbR7CwXD4pgtV9t3wD1812RaLDcBjtblcDF5f1vI0= github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.2 h1:DBjmt6/otSdULyJdVg2BlG0qGZO5tKL4VzOs0jpvw5Q= @@ -717,6 +725,8 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0 h1:f2Qw/Ehhimh5uO1fayV0QIW7DShEQqhtUfhYc+cBPlw= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 h1:ErKg/3iS1AKcTkf3yixlZ54f9U1rljCkQyEXWUnIUxc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 h1:o90wcURuxekmXrtxmYWTyNla0+ZEHhud6DI1ZTxd1vI= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0/go.mod h1:6fTWu4m3jocfUZLYF5KsZC1TUfRvEjs7lM4crme/irw= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.50.0 h1:5IT7xOdq17MtcdtL/vtl6mGfzhaq4m4vpollPRmlsBQ= @@ -731,12 +741,17 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapp github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.50.0/go.mod h1:otE2jQekW/PqXk1Awf5lmfokJx4uwuqcj1ab5SpGeW0= github.com/IBM/sarama v1.43.1 h1:Z5uz65Px7f4DhI/jQqEm/tV9t8aU+JUdTyW/K/fCXpA= github.com/IBM/sarama v1.43.1/go.mod h1:GG5q1RURtDNPz8xxJs3mgX6Ytak8Z9eLhAkJPObe2xE= +github.com/Joker/jade v1.1.3 h1:Qbeh12Vq6BxURXT1qZBRHsDxeURB8ztcL6f3EXSGeHk= +github.com/Joker/jade v1.1.3/go.mod h1:T+2WLyt7VH6Lp0TRxQrUYEs64nRc83wkMQrfeIQKduM= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8= github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w= +github.com/RaveNoX/go-jsoncommentstrip v1.0.0 h1:t527LHHE3HmiHrq74QMpNPZpGCIJzTx+apLkMKt4HC0= +github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06 h1:KkH3I3sJuOLP3TjA/dfr4NAY8bghDwnXiU7cTKxQqo0= +github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= github.com/alecthomas/kingpin/v2 v2.4.0 h1:f48lwail6p8zpO1bC4TxtqACaGqHYA22qkHjHpqDjYY= github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= @@ -745,13 +760,22 @@ github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwc github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/arrow/go/v15 v15.0.2 h1:60IliRbiyTWCWjERBCkO1W4Qun9svcYoZrSLcyOsMLE= github.com/apache/arrow/go/v15 v15.0.2/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA= +github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/bmatcuk/doublestar v1.1.1 h1:YroD6BJCZBYx06yYFEWvUuKVWQn3vLLQAVmDmvTSaiQ= +github.com/bytedance/sonic v1.10.0-rc3 h1:uNSnscRapXTwUgTyOF0GVljYD08p9X/Lbr9MweSV3V0= +github.com/bytedance/sonic v1.10.0-rc3/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= 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/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0= +github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= +github.com/chenzhuoyu/iasm v0.9.0 h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo= +github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog= github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89 h1:aPflPkRFkVwbW6dmcVqfgwp1i+UWGFH6VgR1Jim5Ygc= github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs= github.com/chromedp/chromedp v0.9.2 h1:dKtNz4kApb06KuSXoTQIyUC2TrA0fhGDwNZf3bcgfKw= @@ -780,8 +804,14 @@ github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1Ig github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 h1:Om6kYQYDUk5wWbT0t0q6pvyM49i9XZAv9dDrkDA7gjk= github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f h1:C5bqEmzEPLsHm9Mv73lSE9e9bKV23aB1vxOsmZrkl3k= +github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0= github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk= +github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= +github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= +github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= +github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= @@ -808,6 +838,8 @@ github.com/docker/docker v28.0.4+incompatible h1:JNNkBctYKurkw6FrHfKqY0nKIDf5nrb github.com/docker/docker v28.0.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v28.1.1+incompatible h1:49M11BFLsVO1gxY9UX9p/zwkE/rswggs8AdFmXQw51I= github.com/docker/docker v28.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.2.2+incompatible h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5JxwYeqtMOEe0LDw= +github.com/docker/docker v28.2.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -837,6 +869,16 @@ github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6 github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/flosch/pongo2/v4 v4.0.2 h1:gv+5Pe3vaSVmiJvh/BZa82b7/00YUGm0PIyVVLop0Hw= +github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -844,6 +886,8 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-jose/go-jose/v4 v4.0.4 h1:VsjPI33J0SB9vQM6PLmNjoHqMQNGPiZ0rHL7Ni7Q6/E= github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc= +github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= +github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= github.com/go-kit/log v0.1.0 h1:DGJh0Sm43HbOeYDNnVZFl8BvcYVvjD5bqYJvp0REbwQ= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= @@ -853,6 +897,12 @@ github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KE github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.1 h1:9c50NUPC30zyuKprjL3vNZ0m5oG+jU0zvx4AqHGnv4k= +github.com/go-playground/validator/v10 v10.14.1/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= @@ -889,6 +939,8 @@ github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgj github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/gomarkdown/markdown v0.0.0-20230716120725-531d2d74bc12 h1:uK3X/2mt4tbSGoHvbLBHUny7CKiuwUip3MArtukol4E= +github.com/gomarkdown/markdown v0.0.0-20230716120725-531d2d74bc12/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= @@ -933,6 +985,8 @@ github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBH github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07qSYnHncrgo+zk= 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/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= @@ -953,6 +1007,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465 h1:KwWnWVW github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/iris-contrib/schema v0.0.6 h1:CPSBLyx2e91H2yJzPuhGuifVRnZBBJ3pCOMbOvPZaTw= +github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= @@ -978,8 +1034,21 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d h1:c93kUJDtVAXFEhsCh5jSxyOJmFHuzcihnslQiX8Urwo= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kataras/blocks v0.0.7 h1:cF3RDY/vxnSRezc7vLFlQFTYXG/yAr1o7WImJuZbzC4= +github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= +github.com/kataras/golog v0.1.9 h1:vLvSDpP7kihFGKFAvBSofYo7qZNULYSHOH2D7rPTKJk= +github.com/kataras/golog v0.1.9/go.mod h1:jlpk/bOaYCyqDqH18pgDHdaJab72yBE6i0O3s30hpWY= +github.com/kataras/iris/v12 v12.2.5 h1:R5UzUW4MIByBM6tKMG3UqJ7hL1JCEE+dkqQ8L72f6PU= +github.com/kataras/iris/v12 v12.2.5/go.mod h1:bf3oblPF8tQmRgyPCzPZr0mLazvEDFgImdaGZYuN4hw= +github.com/kataras/pio v0.0.12 h1:o52SfVYauS3J5X08fNjlGS5arXHjW/ItLkyLcKjoH6w= +github.com/kataras/pio v0.0.12/go.mod h1:ODK/8XBhhQ5WqrAhKy+9lTPS7sBf6O3KcLhc9klfRcY= +github.com/kataras/sitemap v0.0.6 h1:w71CRMMKYMJh6LR2wTgnk5hSgjVNB9KL60n5e2KHvLY= +github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= +github.com/kataras/tunnel v0.0.4 h1:sCAqWuJV7nPzGrlb0os3j49lk2JhILT0rID38NHNLpA= +github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kisielk/errcheck v1.5.0 h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY= @@ -989,6 +1058,12 @@ github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/q github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= +github.com/labstack/echo/v4 v4.11.1 h1:dEpLU2FLg4UVmvCGPuk/APjlH6GDpbEPti61srUUUs4= +github.com/labstack/echo/v4 v4.11.1/go.mod h1:YuYRTSM3CHs2ybfrL8Px48bO6BAnYIN4l8wSTMP6BDQ= +github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= +github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4 h1:sIXJOMrYnQZJu7OB7ANSF4MYri2fTEGIsRLz6LwI4xE= @@ -997,8 +1072,12 @@ github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0V github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailgun/raymond/v2 v2.0.48 h1:5dmlB680ZkFG2RN/0lvTAghrSxIESeu9/2aeDqACtjw= +github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/microcosm-cc/bluemonday v1.0.25 h1:4NEwSfiJ+Wva0VxN5B8OwMicaJvD8r9tlJWm9rtloEg= +github.com/microcosm-cc/bluemonday v1.0.25/go.mod h1:ZIOjCQp1OrzBBPIJmfX4qDYFuhU02nx4bn030ixfHLE= github.com/microsoft/ApplicationInsights-Go v0.4.4 h1:G4+H9WNs6ygSCe6sUyxRc2U81TI5Es90b2t/MwX5KqY= github.com/microsoft/ApplicationInsights-Go v0.4.4/go.mod h1:fKRUseBqkw6bDiXTs3ESTiU/4YTIHsQS4W3fP2ieF4U= github.com/mkevac/debugcharts v0.0.0-20191222103121-ae1c48aa8615 h1:/mD+ABZyXD39BzJI2XyRJlqdZG11gXFo0SSynL+OFeU= @@ -1048,6 +1127,8 @@ github.com/pascaldekloe/name v1.0.1/go.mod h1:Z//MfYJnH4jVpQ9wkclwu2I2MkHmXTlT9w github.com/paulmach/protoscan v0.2.1 h1:rM0FpcTjUMvPUNk2BhPJrreDKetq43ChnL+x1sRg8O8= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= +github.com/pelletier/go-toml/v2 v2.0.9 h1:uH2qQXheeefCCkuBBSLi7jCiSmj3VRh2+Goq2N7Xxu0= +github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= @@ -1065,6 +1146,10 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk= +github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.23.12 h1:z90NtUkp3bMtmICZKpC4+WaknU1eXtp5vtbQ11DgpE4= @@ -1083,7 +1168,12 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= +github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad h1:fiWzISvDn0Csy5H0iwgAuJGQTUpVfEMJJd4nRFXogbc= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tdewolff/minify/v2 v2.12.8 h1:Q2BqOTmlMjoutkuD/OPCnJUpIqrzT3nRPkw+q+KpXS0= +github.com/tdewolff/minify/v2 v2.12.8/go.mod h1:YRgk7CC21LZnbuke2fmYnCTq+zhCgpb0yJACOTUNJ1E= +github.com/tdewolff/parse/v2 v2.6.7 h1:WrFllrqmzAcrKHzoYgMupqgUBIfBVOb0yscFzDf8bBg= +github.com/tdewolff/parse/v2 v2.6.7/go.mod h1:XHDhaU6IBgsryfdnpzUXBlT6leW/l25yrFBTEb4eIyM= github.com/testcontainers/testcontainers-go v0.28.0 h1:1HLm9qm+J5VikzFDYhOd+Zw12NtOl+8drH2E8nTY1r8= github.com/testcontainers/testcontainers-go v0.28.0/go.mod h1:COlDpUXbwW3owtpMkEB1zo9gwb1CoKVKlyrVPejF4AU= github.com/testcontainers/testcontainers-go v0.33.0 h1:zJS9PfXYT5O0ZFXM2xxXfk4J5UMw/kRiISng037Gxdw= @@ -1095,8 +1185,22 @@ github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFA github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= +github.com/yosssi/ace v0.0.5 h1:tUkIP/BLdKqrlrPwcmH0shwEEhTRHoGnc1wFIWmaBUA= +github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= @@ -1121,6 +1225,8 @@ go.opentelemetry.io/contrib/detectors/gcp v1.33.0 h1:FVPoXEoILwgbZUu4X7YSgsESsAm go.opentelemetry.io/contrib/detectors/gcp v1.33.0/go.mod h1:ZHrLmr4ikK2AwRj9QL+c9s2SOlgoSRyMpNVzUj2fZqI= go.opentelemetry.io/contrib/detectors/gcp v1.34.0 h1:JRxssobiPg23otYU5SbWtQC//snGVIM3Tx6QRzlQBao= go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo= +go.opentelemetry.io/contrib/detectors/gcp v1.35.0 h1:bGvFt68+KTiAKFlacHW6AhA56GF2rS0bdD3aJYEnmzA= +go.opentelemetry.io/contrib/detectors/gcp v1.35.0/go.mod h1:qGWP8/+ILwMRIUf9uIVLloR1uo5ZYAslM4O6OqUi1DA= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0/go.mod h1:ijPqXp5P6IRRByFVVg9DY8P5HkxkHE5ARIa+86aXPf4= @@ -1170,6 +1276,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/arch v0.4.0 h1:A8WCeEWhLwPBKNbFi5Wv5UTCBx5zzubnXDlMOFAzFMc= +golang.org/x/arch v0.4.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= @@ -1211,6 +1319,7 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1243,6 +1352,7 @@ golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1267,6 +1377,7 @@ golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1316,6 +1427,7 @@ golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1367,6 +1479,8 @@ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxb golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -1467,6 +1581,8 @@ google.golang.org/genproto/googleapis/bytestream v0.0.0-20250425173222-7b384671a google.golang.org/genproto/googleapis/bytestream v0.0.0-20250428153025-10db94c68c34/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250512202823-5a2f75b736a9 h1:YI36gCL8AQMhzYN6+jH8PdV/iZ0On+Zd0rO/7lCH3k8= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20250603155806-513f23925822 h1:zWFRixYR5QlotL+Uv3YfsPRENIrQFXiGs+iwqel6fOQ= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20250603155806-513f23925822/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= @@ -1517,8 +1633,11 @@ google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojt google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/pkg/gofr/container/container.go b/pkg/gofr/container/container.go index 89cf9917d..31b2d0448 100644 --- a/pkg/gofr/container/container.go +++ b/pkg/gofr/container/container.go @@ -65,6 +65,7 @@ type Container struct { SurrealDB SurrealDB ArangoDB ArangoDB Elasticsearch Elasticsearch + InfluxDB InfluxDB KVStore KVStore diff --git a/pkg/gofr/container/datasources.go b/pkg/gofr/container/datasources.go index 4eac82395..5578f3e1f 100644 --- a/pkg/gofr/container/datasources.go +++ b/pkg/gofr/container/datasources.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "database/sql" + "time" "github.com/redis/go-redis/v9" @@ -721,3 +722,42 @@ type ElasticsearchProvider interface { provider } + +type InfluxPoint struct { + Measurement string + Tags map[string]string + Fields map[string]any + Timestamp time.Time +} + +// InfluxDB defines the operations required to interact with an InfluxDB instance. +type InfluxDB interface { + // WritePoints writes one or more time-series points to a bucket. + // 'points' should follow the line protocol format or structured map format. + WritePoints(ctx context.Context, bucket, org string, points []InfluxPoint) error + + // Query runs a Flux query and returns the result as a slice of maps, + // where each map is a row with column name-value pairs. + Query(ctx context.Context, org, fluxQuery string) ([]map[string]any, error) + + // CreateBucket creates a new bucket under the specified organization. + CreateBucket(ctx context.Context, org, bucket string, retentionPeriod time.Duration) error + + // DeleteBucket deletes a bucket under the specified organization. + DeleteBucket(ctx context.Context, org, bucket string) error + + // ListBuckets lists all buckets under the specified organization. + ListBuckets(ctx context.Context, org string) ([]string, error) + + // Ping checks if the InfluxDB instance is reachable and healthy. + Ping(ctx context.Context) error + + HealthChecker +} + +// InfluxDBProvider an interface that extends InfluxDB with additional methods for logging, metrics, and connection management. +type InfluxDBProvider interface { + InfluxDB + + provider +} diff --git a/pkg/gofr/container/health.go b/pkg/gofr/container/health.go index bfbf58a57..9c82bdec8 100644 --- a/pkg/gofr/container/health.go +++ b/pkg/gofr/container/health.go @@ -67,6 +67,7 @@ func checkExternalDBHealth(ctx context.Context, c *Container, healthMap map[stri "dgraph": c.DGraph, "opentsdb": c.OpenTSDB, "elasticsearch": c.Elasticsearch, + "influx": c.InfluxDB, } for name, service := range services { diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go new file mode 100644 index 000000000..3a26d71fb --- /dev/null +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -0,0 +1,99 @@ +package influxdb + +import ( + "context" + "time" + + influxdb2 "github.com/influxdata/influxdb-client-go/v2" + "go.opencensus.io/trace" + "gofr.dev/pkg/gofr/container" +) + +// Config holds the configuration for connecting to InfluxDB. +type Config struct { + Url string + Token string + Username string + Password string +} + +// Client represents the InfluxDB client. +type Client struct { + config Config + client influxdb2.Client + logger Logger + metrics Metrics + tracer trace.Tracer +} + +// CreateBucket implements container.InfluxDBProvider. +func (c *Client) CreateBucket(ctx context.Context, org string, bucket string, retentionPeriod time.Duration) error { + panic("unimplemented") +} + +// DeleteBucket implements container.InfluxDBProvider. +func (c *Client) DeleteBucket(ctx context.Context, org string, bucket string) error { + panic("unimplemented") +} + +// HealthCheck implements container.InfluxDBProvider. +func (c *Client) HealthCheck(context.Context) (any, error) { + panic("unimplemented") +} + +// ListBuckets implements container.InfluxDBProvider. +func (c *Client) ListBuckets(ctx context.Context, org string) ([]string, error) { + panic("unimplemented") +} + +// Ping implements container.InfluxDBProvider. +func (c *Client) Ping(ctx context.Context) error { + panic("unimplemented") +} + +// Query implements container.InfluxDBProvider. +func (c *Client) Query(ctx context.Context, org string, fluxQuery string) ([]map[string]any, error) { + panic("unimplemented") +} + +// UseLogger sets the logger for the Elasticsearch client. +func (c *Client) UseLogger(logger any) { + if l, ok := logger.(Logger); ok { + c.logger = l + } +} + +// UseMetrics implements container.InfluxDBProvider. +func (c *Client) UseMetrics(metrics any) { + panic("unimplemented") +} + +// UseTracer implements container.InfluxDBProvider. +func (c *Client) UseTracer(tracer any) { + panic("unimplemented") +} + +// WritePoints implements container.InfluxDBProvider. +func (c *Client) WritePoints(ctx context.Context, bucket string, org string, points []container.InfluxPoint) error { + panic("unimplemented") +} + +// New creates a new InfluxDB client with the provided configuration. +func New(config Config) *Client { + return &Client{ + config: config, + } +} + +func (c *Client) Connect() { + + c.logger.Debugf("connecting to influxdb at %v", c.config.Url) + + // Create a new client using an InfluxDB server base URL and an authentication token + client := influxdb2.NewClient( + c.config.Url, + c.config.Token, + ) + c.client = client + c.logger.Logf("connected to influxdb successfully at : %v", c.config.Url) +} diff --git a/pkg/gofr/datasource/influxdb/logger.go b/pkg/gofr/datasource/influxdb/logger.go new file mode 100644 index 000000000..a4dcf11e0 --- /dev/null +++ b/pkg/gofr/datasource/influxdb/logger.go @@ -0,0 +1,43 @@ +package influxdb + +import ( + "fmt" + "io" + "regexp" + "strings" +) + +type Logger interface { + Debug(args ...any) + Debugf(pattern string, args ...any) + Log(args ...any) + Logf(pattern string, args ...any) + Error(args ...any) + Errorf(pattern string, args ...any) +} + +type QueryLog struct { + Operation string `json:"operation"` + Query string `json:"query"` + Duration int64 `json:"duration"` + Keyspace string `json:"keyspace,omitempty"` +} + +func (ql *QueryLog) PrettyPrint(writer io.Writer) { + fmt.Fprintf(writer, "\u001B[38;5;8m%-32s \u001B[38;5;206m%-6s\u001B[0m %8d\u001B[38;5;8mµs\u001B[0m %s \u001B[38;5;8m%-32s\u001B[0m\n", + clean(ql.Operation), "INFL", ql.Duration, clean(ql.Keyspace), clean(ql.Query)) +} + +// clean takes a string query as input and performs two operations to clean it up: +// 1. It replaces multiple consecutive whitespace characters with a single space. +// 2. It trims leading and trailing whitespace from the string. +// The cleaned-up query string is then returned. +func clean(query string) string { + // Replace multiple consecutive whitespace characters with a single space + query = regexp.MustCompile(`\s+`).ReplaceAllString(query, " ") + + // Trim leading and trailing whitespace from the string + query = strings.TrimSpace(query) + + return query +} diff --git a/pkg/gofr/datasource/influxdb/metrics.go b/pkg/gofr/datasource/influxdb/metrics.go new file mode 100644 index 000000000..d33b94e7c --- /dev/null +++ b/pkg/gofr/datasource/influxdb/metrics.go @@ -0,0 +1,9 @@ +package influxdb + +import "context" + +// Metrics defines the interface for capturing metrics. +type Metrics interface { + NewHistogram(name, desc string, buckets ...float64) + RecordHistogram(ctx context.Context, name string, value float64, labels ...string) +} diff --git a/pkg/gofr/external_db.go b/pkg/gofr/external_db.go index 1afdad21c..88f23d507 100644 --- a/pkg/gofr/external_db.go +++ b/pkg/gofr/external_db.go @@ -194,3 +194,9 @@ func (a *App) AddElasticsearch(db container.ElasticsearchProvider) { a.container.Elasticsearch = db } + +func (a *App) AddInfluxDB(db container.InfluxDBProvider) { + db.UseLogger(a.Logger()) + db.Connect() + a.container.InfluxDB = db +} From 495cca8c8ce3747ce3638bef3abe20c73c3eae3b Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Mon, 7 Jul 2025 23:23:27 +0530 Subject: [PATCH 02/44] [healthcheck] function implemented for the healthcheck of influxdb client. --- pkg/gofr/datasource/influxdb/influxdb.go | 40 +++++++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 3a26d71fb..41b47b0ca 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -2,6 +2,7 @@ package influxdb import ( "context" + "gofr.dev/pkg/gofr/datasource" "time" influxdb2 "github.com/influxdata/influxdb-client-go/v2" @@ -26,6 +27,13 @@ type Client struct { tracer trace.Tracer } +type HealthInflux struct { + Url string + Token string + Username string + Password string +} + // CreateBucket implements container.InfluxDBProvider. func (c *Client) CreateBucket(ctx context.Context, org string, bucket string, retentionPeriod time.Duration) error { panic("unimplemented") @@ -37,8 +45,25 @@ func (c *Client) DeleteBucket(ctx context.Context, org string, bucket string) er } // HealthCheck implements container.InfluxDBProvider. -func (c *Client) HealthCheck(context.Context) (any, error) { - panic("unimplemented") +func (c *Client) HealthCheck(ctx context.Context) (any, error) { + h := datasource.Health{Details: make(map[string]any)} + + h.Details["Username"] = c.config.Username + h.Details["Url"] = c.config.Url + + health, err := c.client.Health(ctx) + if err != nil { + h.Status = datasource.StatusDown + return h, err + } + h.Status = datasource.StatusUp + h.Details["Name"] = health.Name + h.Details["Commit"] = health.Commit + h.Details["Version"] = health.Version + h.Details["Message"] = health.Message + h.Details["Checks"] = health.Checks + h.Details["Status"] = health.Status + return h, nil } // ListBuckets implements container.InfluxDBProvider. @@ -90,10 +115,15 @@ func (c *Client) Connect() { c.logger.Debugf("connecting to influxdb at %v", c.config.Url) // Create a new client using an InfluxDB server base URL and an authentication token - client := influxdb2.NewClient( + c.client = influxdb2.NewClient( c.config.Url, c.config.Token, ) - c.client = client - c.logger.Logf("connected to influxdb successfully at : %v", c.config.Url) + + if _, err := c.HealthCheck(context.Background()); err != nil { + c.logger.Errorf("InfluxDB health check failed: %v", err) + return + } + + c.logger.Logf("connected to influxdb at : %v", c.config.Url) } From d12d4642e13865dff321da75f93c1f7a7c5b3a86 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Fri, 11 Jul 2025 14:53:27 +0530 Subject: [PATCH 03/44] [ListBuckets] function implemented, user can get the all the bucket by organisation name. --- pkg/gofr/datasource/influxdb/influxdb.go | 29 +++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 41b47b0ca..12ad46d23 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -2,7 +2,9 @@ package influxdb import ( "context" + "fmt" "gofr.dev/pkg/gofr/datasource" + "log" "time" influxdb2 "github.com/influxdata/influxdb-client-go/v2" @@ -68,7 +70,32 @@ func (c *Client) HealthCheck(ctx context.Context) (any, error) { // ListBuckets implements container.InfluxDBProvider. func (c *Client) ListBuckets(ctx context.Context, org string) ([]string, error) { - panic("unimplemented") + // Validate input + if org == "" { + return nil, fmt.Errorf("organization name must not be empty") + } + + bucketsAPI := c.client.BucketsAPI() + bucketsDomain, err := bucketsAPI.FindBucketsByOrgName(ctx, org) + if err != nil { + // Consider logging the error with context for observability + log.Printf("failed to find buckets for org %q: %v", org, err) + return nil, fmt.Errorf("failed to list buckets for organization %q: %w", org, err) + } + + if bucketsDomain == nil { + // Defensive: treat nil response as empty result + return []string{}, nil + } + + // Pre-allocate slice for performance if count is known + buckets := make([]string, 0, len(*bucketsDomain)) + for _, bucket := range *bucketsDomain { + if bucket.Name != "" { + buckets = append(buckets, bucket.Name) + } + } + return buckets, nil } // Ping implements container.InfluxDBProvider. From 359e1d3c0744ff1caec54714edf92406641b5024 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Sun, 13 Jul 2025 19:04:51 +0530 Subject: [PATCH 04/44] [implementation] CreateOrganization, DeleteOrganization, DeleteOrganization, Ping, ListBuckets, DeleteBucket, all got implemented. --- pkg/gofr/container/datasources.go | 16 ++- pkg/gofr/datasource/influxdb/influxdb.go | 108 ++++++++++++++++++--- pkg/gofr/datasource/influxdb/interfaces.go | 1 + 3 files changed, 109 insertions(+), 16 deletions(-) create mode 100644 pkg/gofr/datasource/influxdb/interfaces.go diff --git a/pkg/gofr/container/datasources.go b/pkg/gofr/container/datasources.go index 5578f3e1f..5075eaae6 100644 --- a/pkg/gofr/container/datasources.go +++ b/pkg/gofr/container/datasources.go @@ -732,6 +732,16 @@ type InfluxPoint struct { // InfluxDB defines the operations required to interact with an InfluxDB instance. type InfluxDB interface { + + // CreateOrganization create new bucket in the influxdb + CreateOrganization(ctx context.Context, org string) (string, error) + + // DeleteOrganization deletes a organization under the specified organization. + DeleteOrganization(ctx context.Context, orgId string) error + + // ListOrganization list all the available organization + ListOrganization(ctx context.Context) (orgs map[string]string, err error) + // WritePoints writes one or more time-series points to a bucket. // 'points' should follow the line protocol format or structured map format. WritePoints(ctx context.Context, bucket, org string, points []InfluxPoint) error @@ -741,16 +751,16 @@ type InfluxDB interface { Query(ctx context.Context, org, fluxQuery string) ([]map[string]any, error) // CreateBucket creates a new bucket under the specified organization. - CreateBucket(ctx context.Context, org, bucket string, retentionPeriod time.Duration) error + CreateBucket(ctx context.Context, org, bucket string, retentionPeriod time.Duration) (string, error) // DeleteBucket deletes a bucket under the specified organization. DeleteBucket(ctx context.Context, org, bucket string) error // ListBuckets lists all buckets under the specified organization. - ListBuckets(ctx context.Context, org string) ([]string, error) + ListBuckets(ctx context.Context, org string) (map[string]string, error) // Ping checks if the InfluxDB instance is reachable and healthy. - Ping(ctx context.Context) error + Ping(ctx context.Context) (bool, error) HealthChecker } diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 12ad46d23..29bd5c8dd 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -36,14 +36,81 @@ type HealthInflux struct { Password string } +// CreateOrganization implements container.InfluxDBProvider. +func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string, error) { + if orgName == "" { + return "", fmt.Errorf("org Name name must not be empty") + } + orgAPI := c.client.OrganizationsAPI() + newOrg, err := orgAPI.CreateOrganizationWithName(ctx, orgName) + if err != nil { + return "", err + } + return *newOrg.Id, nil +} + +// DeleteOrganization implements container.InfluxDBProvider. +func (c *Client) DeleteOrganization(ctx context.Context, orgId string) error { + if orgId == "" { + return fmt.Errorf("orgId name must not be empty") + } + orgAPI := c.client.OrganizationsAPI() + err := orgAPI.DeleteOrganizationWithID(ctx, orgId) + if err != nil { + return err + } + return nil +} + +func (c *Client) ListOrganization(ctx context.Context) (orgs map[string]string, err error) { + orgAPI := c.client.OrganizationsAPI() + allOrgs, err := orgAPI.GetOrganizations(ctx) + if err != nil { + return nil, err + } + orgs = make(map[string]string) // Initialize the map + if allOrgs == nil { + return orgs, nil + } + for _, org := range *allOrgs { + orgs[*org.Id] = org.Name + } + return orgs, nil +} + // CreateBucket implements container.InfluxDBProvider. -func (c *Client) CreateBucket(ctx context.Context, org string, bucket string, retentionPeriod time.Duration) error { - panic("unimplemented") +func (c *Client) CreateBucket(ctx context.Context, orgId string, bucketName string, retentionPeriod time.Duration) (bucketId string, err error) { + + // Validate input + if orgId == "" { + err = fmt.Errorf("organization id must not be empty") + return + } + if bucketName == "" { + err = fmt.Errorf("bucket name must not be empty") + return + } + + bucketsAPI := c.client.BucketsAPI() + newBucket, err := bucketsAPI.CreateBucketWithNameWithID(ctx, orgId, bucketName) + + if err != nil { + return + } + return *newBucket.Id, nil } -// DeleteBucket implements container.InfluxDBProvider. -func (c *Client) DeleteBucket(ctx context.Context, org string, bucket string) error { - panic("unimplemented") +// DeleteBucket -=implements container.InfluxDBProvider. +func (c *Client) DeleteBucket(ctx context.Context, org, bucketID string) error { + if bucketID == "" { + return fmt.Errorf("bucket name must not be empty") + } + bucketsAPI := c.client.BucketsAPI() + err := bucketsAPI.DeleteBucketWithID(ctx, bucketID) + if err != nil { + return err + } + return nil } // HealthCheck implements container.InfluxDBProvider. @@ -68,8 +135,19 @@ func (c *Client) HealthCheck(ctx context.Context) (any, error) { return h, nil } -// ListBuckets implements container.InfluxDBProvider. -func (c *Client) ListBuckets(ctx context.Context, org string) ([]string, error) { +/* +ListBuckets retrieves the names of all buckets for a given organization from InfluxDB. +It implements the container.InfluxDBProvider interface. + +Parameters: +- ctx: Context for cancellation and deadlines. +- org: Organization name (must not be empty). + +Returns: +- A slice of bucket names. +- An error, if any occurred during retrieval. +*/ +func (c *Client) ListBuckets(ctx context.Context, org string) (buckets map[string]string, err error) { // Validate input if org == "" { return nil, fmt.Errorf("organization name must not be empty") @@ -85,22 +163,26 @@ func (c *Client) ListBuckets(ctx context.Context, org string) ([]string, error) if bucketsDomain == nil { // Defensive: treat nil response as empty result - return []string{}, nil + return nil, nil } - // Pre-allocate slice for performance if count is known - buckets := make([]string, 0, len(*bucketsDomain)) + buckets = make(map[string]string) // Initialize the map for _, bucket := range *bucketsDomain { if bucket.Name != "" { - buckets = append(buckets, bucket.Name) + //buckets = append(buckets, bucket.Name) + buckets[*bucket.Id] = bucket.Name } } return buckets, nil } // Ping implements container.InfluxDBProvider. -func (c *Client) Ping(ctx context.Context) error { - panic("unimplemented") +func (c *Client) Ping(ctx context.Context) (bool, error) { + ping, err := c.client.Ping(ctx) + if err != nil { + return false, err + } + return ping, nil } // Query implements container.InfluxDBProvider. diff --git a/pkg/gofr/datasource/influxdb/interfaces.go b/pkg/gofr/datasource/influxdb/interfaces.go new file mode 100644 index 000000000..ab711e3b8 --- /dev/null +++ b/pkg/gofr/datasource/influxdb/interfaces.go @@ -0,0 +1 @@ +package influxdb From 1b287d3931a99fa8a484749bf912074f0c848d09 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Tue, 15 Jul 2025 22:17:34 +0530 Subject: [PATCH 05/44] useMetrics, useLogger, useTracer implemented. --- pkg/gofr/datasource/influxdb/influxdb.go | 63 ++++++++++++++++-------- pkg/gofr/external_db.go | 1 + 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 29bd5c8dd..95212337d 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -36,6 +36,12 @@ type HealthInflux struct { Password string } +const ( + statusDown = "DOWN" + statusUp = "UP" + defaultTimeout = 5 * time.Second +) + // CreateOrganization implements container.InfluxDBProvider. func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string, error) { if orgName == "" { @@ -113,25 +119,38 @@ func (c *Client) DeleteBucket(ctx context.Context, org, bucketID string) error { return nil } +type Health struct { + Status string `json:"status"` // "UP" or "DOWN" + Details map[string]any `json:"details,omitempty"` // extra metadata +} + // HealthCheck implements container.InfluxDBProvider. func (c *Client) HealthCheck(ctx context.Context) (any, error) { - h := datasource.Health{Details: make(map[string]any)} - - h.Details["Username"] = c.config.Username - h.Details["Url"] = c.config.Url - health, err := c.client.Health(ctx) if err != nil { - h.Status = datasource.StatusDown - return h, err - } - h.Status = datasource.StatusUp - h.Details["Name"] = health.Name - h.Details["Commit"] = health.Commit - h.Details["Version"] = health.Version - h.Details["Message"] = health.Message - h.Details["Checks"] = health.Checks - h.Details["Status"] = health.Status + return datasource.Health{ + Status: datasource.StatusDown, + Details: make(map[string]any), + }, err + } + + h := datasource.Health{ + Status: datasource.StatusUp, + Details: map[string]any{ + "Username": c.config.Username, + "Url": c.config.Url, + }, + } + + if health != nil { + h.Details["Name"] = health.Name + h.Details["Commit"] = health.Commit + h.Details["Version"] = health.Version + h.Details["Message"] = health.Message + h.Details["Checks"] = health.Checks + h.Details["Status"] = health.Status + } + return h, nil } @@ -190,21 +209,25 @@ func (c *Client) Query(ctx context.Context, org string, fluxQuery string) ([]map panic("unimplemented") } -// UseLogger sets the logger for the Elasticsearch client. +// UseLogger sets the logger for the InfluxDB client. func (c *Client) UseLogger(logger any) { if l, ok := logger.(Logger); ok { c.logger = l } } -// UseMetrics implements container.InfluxDBProvider. +// UseMetrics sets the metrics for the InfluxDB client. func (c *Client) UseMetrics(metrics any) { - panic("unimplemented") + if m, ok := metrics.(Metrics); ok { + c.metrics = m + } } -// UseTracer implements container.InfluxDBProvider. +// UseTracer sets the tracer for InfluxDB client. func (c *Client) UseTracer(tracer any) { - panic("unimplemented") + if tracer, ok := tracer.(trace.Tracer); ok { + c.tracer = tracer + } } // WritePoints implements container.InfluxDBProvider. diff --git a/pkg/gofr/external_db.go b/pkg/gofr/external_db.go index 88f23d507..363df61fd 100644 --- a/pkg/gofr/external_db.go +++ b/pkg/gofr/external_db.go @@ -197,6 +197,7 @@ func (a *App) AddElasticsearch(db container.ElasticsearchProvider) { func (a *App) AddInfluxDB(db container.InfluxDBProvider) { db.UseLogger(a.Logger()) + db.UseMetrics(a.Logger()) db.Connect() a.container.InfluxDB = db } From b92636147a1c560eedfa290346d9b0b37850a87b Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Tue, 15 Jul 2025 22:18:47 +0530 Subject: [PATCH 06/44] [docs] documentation for the influxdb and example for using this. --- docs/datasources/influxdb/page.md | 129 ++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 docs/datasources/influxdb/page.md diff --git a/docs/datasources/influxdb/page.md b/docs/datasources/influxdb/page.md new file mode 100644 index 000000000..ff68589b8 --- /dev/null +++ b/docs/datasources/influxdb/page.md @@ -0,0 +1,129 @@ +# InfluxDB +GoFr supports injecting InfluxDB using an interface that defines the necessary methods to interact with InfluxDB v2+. +Any driver that implements this interface can be injected via the `app.AddInfluxDB()` method. + +--- + +## Interface + +```go +// InfluxDB defines the methods for interacting with an InfluxDB database. +type InfluxDB interface { + Connect() + CreateOrganization(ctx context.Context, orgName string) (string, error) + DeleteOrganization(ctx context.Context, orgID string) error + ListOrganization(ctx context.Context) (map[string]string, error) + + CreateBucket(ctx context.Context, orgID string, bucketName string, retentionPeriod time.Duration) (string, error) + DeleteBucket(ctx context.Context, orgID, bucketID string) error + ListBuckets(ctx context.Context, org string) (map[string]string, error) + + Ping(ctx context.Context) (bool, error) + HealthCheck(ctx context.Context) (any, error) + + Query(ctx context.Context, org string, fluxQuery string) ([]map[string]any, error) + WritePoints(ctx context.Context, bucket string, org string, points []container.InfluxPoint) error) + + UseLogger(logger any) + UseMetrics(metrics any) + UseTracer(tracer any) +} +``` + +This structure supports all essential InfluxDB operations including organization/bucket management, health checks, and metrics ingestion. + +Import the gofr's external driver for influxdb: + +```bash +go get gofr.dev/pkg/gofr/datasource/influxdb@latest +``` + +## Example +```go +package main + +import ( +"context" +"fmt" +"time" + + "gofr.dev/pkg/gofr" + "gofr.dev/pkg/gofr/datasource/influxdb" +) + +func main() { + + // Create a new GoFr application + app := gofr.New() + + // Initialize InfluxDB client + client := influxdb.New(influxdb.Config{ + Url: "http://localhost:8086", + Username: "admin", + Password: "admin1234", + Token: "", + }) + + // Add InfluxDB to application context + app.AddInfluxDB(client) + + // Sample route + app.GET("/greet", func(ctx *gofr.Context) (any, error) { + return "Hello World!", nil + }) + + // Ping InfluxDB + ok, err := client.Ping(context.Background()) + if err != nil { + fmt.Println("Ping failed:", err) + return + } + fmt.Println("InfluxDB connected:", ok) + + // Create organization + orgID, err := client.CreateOrganization(context.Background(), "demo-org") + if err != nil { + fmt.Println("CreateOrganization error:", err) + return + } + + // List organizations + orgs, _ := client.ListOrganization(context.Background()) + fmt.Println("Organizations:") + for id, name := range orgs { + fmt.Printf("- %s: %s\n", id, name) + } + + // Create bucket + bucketID, err := client.CreateBucket(context.Background(), orgID, "demo-bucket", time.Hour) + if err != nil { + fmt.Println("CreateBucket error:", err) + return + } + + // List buckets for organization + buckets, err := client.ListBuckets(context.Background(), "demo-org") + if err != nil { + fmt.Println("ListBuckets error:", err) + return + } + fmt.Println("Buckets:", buckets) + + // Delete bucket + if err := client.DeleteBucket(context.Background(), orgID, bucketID); err != nil { + fmt.Println("DeleteBucket error:", err) + return + } + fmt.Println("Bucket deleted successfully") + + // Delete organization + if err := client.DeleteOrganization(context.Background(), orgID); err != nil { + fmt.Println("DeleteOrganization error:", err) + return + } + fmt.Println("Organization deleted successfully") + + // Start the server + app.Run() +} +``` From 725354d5ddd4a4a3287b9e0f6cc32d1a43c02e2d Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Tue, 22 Jul 2025 22:29:58 +0530 Subject: [PATCH 07/44] [test+comments] Added the tests and proper comments, current coverage 13% --- go.mod | 6 +- go.sum | 12 - go.work | 5 +- go.work.sum | 6 + pkg/gofr/container/datasources.go | 2 +- pkg/gofr/datasource/influxdb/go.mod | 111 +++++ pkg/gofr/datasource/influxdb/go.sum | 450 ++++++++++++++++++++ pkg/gofr/datasource/influxdb/influx_test.go | 41 ++ pkg/gofr/datasource/influxdb/influxdb.go | 101 +++-- pkg/gofr/datasource/influxdb/interfaces.go | 1 - 10 files changed, 688 insertions(+), 47 deletions(-) create mode 100644 pkg/gofr/datasource/influxdb/go.mod create mode 100644 pkg/gofr/datasource/influxdb/go.sum create mode 100644 pkg/gofr/datasource/influxdb/influx_test.go delete mode 100644 pkg/gofr/datasource/influxdb/interfaces.go diff --git a/go.mod b/go.mod index d5a4a73c9..c3d6614d2 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,6 @@ require ( github.com/gorilla/mux v1.8.1 github.com/gorilla/websocket v1.5.3 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 - github.com/influxdata/influxdb-client-go/v2 v2.14.0 github.com/joho/godotenv v1.5.1 github.com/lib/pq v1.10.9 github.com/pkg/errors v0.9.1 @@ -26,7 +25,6 @@ require ( github.com/redis/go-redis/v9 v9.10.0 github.com/segmentio/kafka-go v0.4.48 github.com/stretchr/testify v1.10.0 - go.opencensus.io v0.24.0 go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.61.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 go.opentelemetry.io/otel v1.36.0 @@ -55,7 +53,6 @@ require ( cloud.google.com/go/compute/metadata v0.7.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect filippo.io/edwards25519 v1.1.0 // indirect - github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v5 v5.0.2 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect @@ -71,12 +68,10 @@ require ( github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect github.com/googleapis/gax-go/v2 v2.14.2 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect - github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect github.com/klauspost/compress v1.18.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect - github.com/oapi-codegen/runtime v1.0.0 // indirect github.com/openzipkin/zipkin-go v0.4.3 // indirect github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -91,6 +86,7 @@ require ( github.com/xdg-go/stringprep v1.0.4 // indirect github.com/yuin/gopher-lua v1.1.1 // indirect go.einride.tech/aip v0.68.1 // indirect + go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 // indirect diff --git a/go.sum b/go.sum index 4aed6e65b..c3359869c 100644 --- a/go.sum +++ b/go.sum @@ -20,17 +20,13 @@ filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= -github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= github.com/XSAM/otelsql v0.39.0 h1:4o374mEIMweaeevL7fd8Q3C710Xi2Jh/c8G4Qy9bvCY= github.com/XSAM/otelsql v0.39.0/go.mod h1:uMOXLUX+wkuAuP0AR3B45NXX7E9lJS2mERa8gqdU8R0= github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= -github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= -github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= @@ -121,13 +117,8 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDa github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= -github.com/influxdata/influxdb-client-go/v2 v2.14.0 h1:AjbBfJuq+QoaXNcrova8smSjwJdUHnwvfjMF71M1iI4= -github.com/influxdata/influxdb-client-go/v2 v2.14.0/go.mod h1:Ahpm3QXKMJslpXl3IftVLVezreAUtBOTZssDrjZEFHI= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= @@ -154,8 +145,6 @@ github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdh github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oapi-codegen/runtime v1.0.0 h1:P4rqFX5fMFWqRzY9M/3YF9+aPSPPB06IzP2P7oOxrWo= -github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= @@ -193,7 +182,6 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN github.com/segmentio/kafka-go v0.4.48 h1:9jyu9CWK4W5W+SroCe8EffbrRZVqAOkuaLd/ApID4Vs= github.com/segmentio/kafka-go v0.4.48/go.mod h1:HjF6XbOKh0Pjlkr5GVZxt6CsjjwnmhVOfURM5KMd8qg= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= diff --git a/go.work b/go.work index 4dbf620c3..e5f7d392e 100644 --- a/go.work +++ b/go.work @@ -1,6 +1,4 @@ -go 1.24.0 - -toolchain go1.24.0 +go 1.24.2 use ( . @@ -22,4 +20,5 @@ use ( ./pkg/gofr/datasource/scylladb ./pkg/gofr/datasource/solr ./pkg/gofr/datasource/surrealdb + pkg/gofr/datasource/influxdb ) diff --git a/go.work.sum b/go.work.sum index cb6e89e96..2a606e261 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1285,6 +1285,7 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= @@ -1376,6 +1377,7 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1567,6 +1569,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a/go. google.golang.org/genproto/googleapis/api v0.0.0-20250219182151-9fdb1cabc7b2/go.mod h1:W9ynFDP/shebLB1Hl/ESTOap2jHd6pmLXPNZC7SVDbA= google.golang.org/genproto/googleapis/api v0.0.0-20250227231956-55c901821b1e/go.mod h1:Xsh8gBVxGCcbV8ZeTB9wI5XPyZ5RvC6V3CTeeplHbiA= google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg= +google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463/go.mod h1:U90ffi8eUL9MwPcrJylN5+Mk2v3vuPDptd5yyNUiRR8= +google.golang.org/genproto/googleapis/api v0.0.0-20250528174236-200df99c418a/go.mod h1:a77HrdMjoeKbnd2jmgcWdaS++ZLZAEq3orIOAEIKiVw= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250106144421-5f5ef82da422 h1:w6g+P/ZscmNlGxVVXGaPVQOLu1q19ubsTOZKwaDqm4k= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250106144421-5f5ef82da422/go.mod h1:s4mHJ3FfG8P6A3O+gZ8TVqB3ufjOl9UG3ANCMMwCHmo= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250124145028-65684f501c47 h1:zYSVZD88HgcYTPowSo35t8Gdxpz+SYJ1CM0Kd/yugGw= @@ -1602,6 +1606,7 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250227231956-55c901821b1e/go. google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1621,6 +1626,7 @@ google.golang.org/grpc v1.68.1/go.mod h1:+q1XYFJjShcqn0QZHvCyeR4CXPA+llXIeUIfIe0 google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= google.golang.org/grpc v1.71.1/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20 h1:MLBCGN1O7GzIx+cBiwfYPwtmZ41U3Mn/cotLJciaArI= google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20/go.mod h1:Nr5H8+MlGWr5+xX/STzdoEqJrO+YteqFbMyCsrb6mH0= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= diff --git a/pkg/gofr/container/datasources.go b/pkg/gofr/container/datasources.go index 5075eaae6..44e71f78f 100644 --- a/pkg/gofr/container/datasources.go +++ b/pkg/gofr/container/datasources.go @@ -751,7 +751,7 @@ type InfluxDB interface { Query(ctx context.Context, org, fluxQuery string) ([]map[string]any, error) // CreateBucket creates a new bucket under the specified organization. - CreateBucket(ctx context.Context, org, bucket string, retentionPeriod time.Duration) (string, error) + CreateBucket(ctx context.Context, org, bucket string) (string, error) // DeleteBucket deletes a bucket under the specified organization. DeleteBucket(ctx context.Context, org, bucket string) error diff --git a/pkg/gofr/datasource/influxdb/go.mod b/pkg/gofr/datasource/influxdb/go.mod new file mode 100644 index 000000000..9700b33fb --- /dev/null +++ b/pkg/gofr/datasource/influxdb/go.mod @@ -0,0 +1,111 @@ +module gofr.dev/pkg/gofr/datasource/influxdb + +go 1.24.2 + +require ( + github.com/influxdata/influxdb-client-go/v2 v2.14.0 + github.com/stretchr/testify v1.10.0 + go.opencensus.io v0.24.0 + gofr.dev v1.42.3 +) + +require ( + cloud.google.com/go v0.120.0 // indirect + cloud.google.com/go/auth v0.16.2 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.7.0 // indirect + cloud.google.com/go/iam v1.5.2 // indirect + cloud.google.com/go/pubsub v1.49.0 // indirect + filippo.io/edwards25519 v1.1.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs v1.2.3 // indirect + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 // indirect + github.com/Azure/go-amqp v1.3.0 // indirect + github.com/DATA-DOG/go-sqlmock v1.5.2 // indirect + github.com/XSAM/otelsql v0.39.0 // indirect + github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cenkalti/backoff/v5 v5.0.2 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dgraph-io/dgo/v210 v210.0.0-20230328113526-b66f8ae53a2d // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/eclipse/paho.mqtt.golang v1.5.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-sql-driver/mysql v1.9.3 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v5 v5.2.2 // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect + github.com/google/s2a-go v0.1.9 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect + github.com/googleapis/gax-go/v2 v2.14.2 // indirect + github.com/gorilla/mux v1.8.1 // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect + github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect + github.com/joho/godotenv v1.5.1 // indirect + github.com/klauspost/compress v1.18.0 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect + github.com/oapi-codegen/runtime v1.0.0 // indirect + github.com/openzipkin/zipkin-go v0.4.3 // indirect + github.com/pierrec/lz4/v4 v4.1.22 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_golang v1.22.0 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.64.0 // indirect + github.com/prometheus/procfs v0.16.1 // indirect + github.com/redis/go-redis/extra/rediscmd/v9 v9.10.0 // indirect + github.com/redis/go-redis/extra/redisotel/v9 v9.10.0 // indirect + github.com/redis/go-redis/v9 v9.10.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/segmentio/kafka-go v0.4.48 // 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 + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect + go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.58.0 // indirect + go.opentelemetry.io/otel/exporters/zipkin v1.36.0 // indirect + go.opentelemetry.io/otel/metric v1.37.0 // indirect + go.opentelemetry.io/otel/sdk v1.37.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.37.0 // indirect + go.opentelemetry.io/otel/trace v1.37.0 // indirect + go.opentelemetry.io/proto/otlp v1.7.0 // indirect + go.uber.org/mock v0.5.2 // indirect + gofr.dev/pkg/gofr/datasource/pubsub/eventhub v0.4.0 // indirect + golang.org/x/crypto v0.39.0 // indirect + golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect + golang.org/x/net v0.41.0 // indirect + golang.org/x/oauth2 v0.30.0 // indirect + golang.org/x/sync v0.15.0 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/term v0.32.0 // indirect + golang.org/x/text v0.26.0 // indirect + golang.org/x/time v0.12.0 // indirect + google.golang.org/api v0.238.0 // indirect + google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect + google.golang.org/grpc v1.73.0 // indirect + google.golang.org/protobuf v1.36.6 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + modernc.org/libc v1.65.10 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.11.0 // indirect + modernc.org/sqlite v1.38.0 // indirect +) diff --git a/pkg/gofr/datasource/influxdb/go.sum b/pkg/gofr/datasource/influxdb/go.sum new file mode 100644 index 000000000..cf1cac4c9 --- /dev/null +++ b/pkg/gofr/datasource/influxdb/go.sum @@ -0,0 +1,450 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.120.0 h1:wc6bgG9DHyKqF5/vQvX1CiZrtHnxJjBlKUyF9nP6meA= +cloud.google.com/go v0.120.0/go.mod h1:/beW32s8/pGRuj4IILWQNd4uuebeT4dkOhKmkfit64Q= +cloud.google.com/go/auth v0.16.2 h1:QvBAGFPLrDeoiNjyfVunhQ10HKNYuOwZ5noee0M5df4= +cloud.google.com/go/auth v0.16.2/go.mod h1:sRBas2Y1fB1vZTdurouM0AzuYQBMZinrUYL8EufhtEA= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= +cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= +cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= +cloud.google.com/go/kms v1.21.2 h1:c/PRUSMNQ8zXrc1sdAUnsenWWaNXN+PzTXfXOcSFdoE= +cloud.google.com/go/kms v1.21.2/go.mod h1:8wkMtHV/9Z8mLXEXr1GK7xPSBdi6knuLXIhqjuWcI6w= +cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= +cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= +cloud.google.com/go/pubsub v1.49.0 h1:5054IkbslnrMCgA2MAEPcsN3Ky+AyMpEZcii/DoySPo= +cloud.google.com/go/pubsub v1.49.0/go.mod h1:K1FswTWP+C1tI/nfi3HQecoVeFvL4HUOB1tdaNXKhUY= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0 h1:B/dfvscEQtew9dVuoxqxrUKKv8Ih2f55PydknDamU+g= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0/go.mod h1:fiPSssYvltE08HJchL04dOy+RD4hgrjph0cwGGMntdI= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= +github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs v1.2.3 h1:6bVZts/82H+hax9b3vdmSpi7+Hw9uWvEaJHeKlafnW4= +github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs v1.2.3/go.mod h1:qf3s/6aV9ePKYGeEYPsbndK6GGfeS7SrbA6OE/T7NIA= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/eventhub/armeventhub v1.2.0 h1:+dggnR89/BIIlRlQ6d19dkhhdd/mQUiQbXhyHUFiB4w= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/eventhub/armeventhub v1.2.0/go.mod h1:tI9M2Q/ueFi287QRkdrhb9LHm6ZnXgkVYLRC3FhYkPw= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 h1:PiSrjRPpkQNjrM8H0WwKMnZUdu1RGMtd/LdGKUrOo+c= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0/go.mod h1:oDrbWx4ewMylP7xHivfgixbfGBT6APAwsSoHRKotnIc= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 h1:mlmW46Q0B79I+Aj4azKC6xDMFN9a9SyZWESlGWYXbFs= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0/go.mod h1:PXe2h+LKcWTX9afWdZoHyODqR4fBa5boUM/8uJfZ0Jo= +github.com/Azure/go-amqp v1.3.0 h1://1rikYhoIQNXJFXyoO/Rlb4+4EkHYfJceNtLlys2/4= +github.com/Azure/go-amqp v1.3.0/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= +github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= +github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= +github.com/XSAM/otelsql v0.39.0 h1:4o374mEIMweaeevL7fd8Q3C710Xi2Jh/c8G4Qy9bvCY= +github.com/XSAM/otelsql v0.39.0/go.mod h1:uMOXLUX+wkuAuP0AR3B45NXX7E9lJS2mERa8gqdU8R0= +github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= +github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= +github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= +github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8= +github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgraph-io/dgo/v210 v210.0.0-20230328113526-b66f8ae53a2d h1:abDbP7XBVgwda+h0J5Qra5p2OQpidU2FdkXvzCKL+H8= +github.com/dgraph-io/dgo/v210 v210.0.0-20230328113526-b66f8ae53a2d/go.mod h1:wKFzULXAPj3U2BDAPWXhSbQQNC6FU1+1/5iika6IY7g= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/eclipse/paho.mqtt.golang v1.5.0 h1:EH+bUVJNgttidWFkLLVKaQPGmkTUfQQqjOsyvMGvD6o= +github.com/eclipse/paho.mqtt.golang v1.5.0/go.mod h1:du/2qNQVqJf/Sqs4MEL77kR8QTqANF7XU7Fk0aOTAgk= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +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/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/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-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= +github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= +github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= +github.com/googleapis/gax-go/v2 v2.14.2 h1:eBLnkZ9635krYIPD+ag1USrOAI0Nr0QYF3+/3GqO0k0= +github.com/googleapis/gax-go/v2 v2.14.2/go.mod h1:ON64QhlJkhVtSqp4v1uaK92VyZ2gmvDQsweuyLV+8+w= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 h1:X5VWvz21y3gzm9Nw/kaUeku/1+uBhcekkmy4IkffJww= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90= +github.com/influxdata/influxdb-client-go/v2 v2.14.0 h1:AjbBfJuq+QoaXNcrova8smSjwJdUHnwvfjMF71M1iI4= +github.com/influxdata/influxdb-client-go/v2 v2.14.0/go.mod h1:Ahpm3QXKMJslpXl3IftVLVezreAUtBOTZssDrjZEFHI= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/oapi-codegen/runtime v1.0.0 h1:P4rqFX5fMFWqRzY9M/3YF9+aPSPPB06IzP2P7oOxrWo= +github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg= +github.com/openzipkin/zipkin-go v0.4.3/go.mod h1:M9wCJZFWCo2RiY+o1eBCEMe0Dp2S5LDHcMZmk3RmK7c= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= +github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= +github.com/prometheus/common v0.64.0 h1:pdZeA+g617P7oGv1CzdTzyeShxAGrTBsolKNOLQPGO4= +github.com/prometheus/common v0.64.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= +github.com/redis/go-redis/extra/rediscmd/v9 v9.10.0 h1:uTiEyEyfLhkw678n6EulHVto8AkcXVr8zUcBJNZ0ark= +github.com/redis/go-redis/extra/rediscmd/v9 v9.10.0/go.mod h1:eFYL/99JvdLP4T9/3FZ5t2pClnv7mMskc+WstTcyVr4= +github.com/redis/go-redis/extra/redisotel/v9 v9.10.0 h1:4z7/hCJ9Jft8EBb2tDmK38p2WjyIEJ1ShhhwAhjOCps= +github.com/redis/go-redis/extra/redisotel/v9 v9.10.0/go.mod h1:B0thqLh4hB8MvvcUKSwyP5YiIcCCp8UrQ0cA9gEqyjk= +github.com/redis/go-redis/v9 v9.10.0 h1:FxwK3eV8p/CQa0Ch276C7u2d0eNC9kCmAYQ7mCXCzVs= +github.com/redis/go-redis/v9 v9.10.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/segmentio/kafka-go v0.4.48 h1:9jyu9CWK4W5W+SroCe8EffbrRZVqAOkuaLd/ApID4Vs= +github.com/segmentio/kafka-go v0.4.48/go.mod h1:HjF6XbOKh0Pjlkr5GVZxt6CsjjwnmhVOfURM5KMd8qg= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= +github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M= +github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= +go.einride.tech/aip v0.68.1 h1:16/AfSxcQISGN5z9C5lM+0mLYXihrHbQ1onvYTr93aQ= +go.einride.tech/aip v0.68.1/go.mod h1:XaFtaj4HuA3Zwk9xoBtTWgNubZ0ZZXv9BZJCkuKuWbg= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.61.0 h1:lREC4C0ilyP4WibDhQ7Gg2ygAQFP8oR07Fst/5cafwI= +go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.61.0/go.mod h1:HfvuU0kW9HewH14VCOLImqKvUgONodURG7Alj/IrnGI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWSnwW9hGObjkIdmlnWSydO+Qs8OwzfzXLUPg4xOc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI= +go.opentelemetry.io/otel/exporters/prometheus v0.58.0 h1:CJAxWKFIqdBennqxJyOgnt5LqkeFRT+Mz3Yjz3hL+h8= +go.opentelemetry.io/otel/exporters/prometheus v0.58.0/go.mod h1:7qo/4CLI+zYSNbv0GMNquzuss2FVZo3OYrGh96n4HNc= +go.opentelemetry.io/otel/exporters/zipkin v1.36.0 h1:s0n95ya5tOG03exJ5JySOdJFtwGo4ZQ+KeY7Zro4CLI= +go.opentelemetry.io/otel/exporters/zipkin v1.36.0/go.mod h1:m9wRxtKA2MZ1HcnNC4BKI+9aYe434qRZTCvI7QGUN7Y= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= +go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= +go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os= +go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= +go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +gofr.dev v1.42.3 h1:fryZ6AAU5S64F/iXkrzA3qAkE8AyuQj8vr2y1sPD47I= +gofr.dev v1.42.3/go.mod h1:viVap8+T4Uk6FbeK2brW3U8dau4R8xiGoo+/NyY7zrE= +gofr.dev/pkg/gofr/datasource/pubsub/eventhub v0.4.0 h1:iXGvtiRYY4cNPpCyJMSVbJWQo+QoNCT4QEDLxKcR2mI= +gofr.dev/pkg/gofr/datasource/pubsub/eventhub v0.4.0/go.mod h1:8pH6rtEcNk+tJyhvilwqStEmnOpAMdQl6yeq14tgthA= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= +golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= +golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= +golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.238.0 h1:+EldkglWIg/pWjkq97sd+XxH7PxakNYoe/rkSTbnvOs= +google.golang.org/api v0.238.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 h1:1tXaIXCracvtsRxSBsYDiSBN0cuJvM7QYW+MrpIRY78= +google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:49MsLSx0oWMOZqcpB3uL8ZOkAh1+TndpJ8ONoCBWiZk= +google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 h1:oWVWY3NzT7KJppx2UKhKmzPq4SRe0LdCijVRwvGeikY= +google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822/go.mod h1:h3c4v36UTKzUiuaOKQ6gr3S+0hovBtUrXzTG/i3+XEc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok= +google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +modernc.org/cc/v4 v4.26.1 h1:+X5NtzVBn0KgsBCBe+xkDC7twLb/jNVj9FPgiwSQO3s= +modernc.org/cc/v4 v4.26.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.28.0 h1:rjznn6WWehKq7dG4JtLRKxb52Ecv8OUGah8+Z/SfpNU= +modernc.org/ccgo/v4 v4.28.0/go.mod h1:JygV3+9AV6SmPhDasu4JgquwU81XAKLd3OKTUDNOiKE= +modernc.org/fileutil v1.3.3 h1:3qaU+7f7xxTUmvU1pJTZiDLAIoJVdUSSauJNHg9yXoA= +modernc.org/fileutil v1.3.3/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= +modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= +modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/libc v1.65.10 h1:ZwEk8+jhW7qBjHIT+wd0d9VjitRyQef9BnzlzGwMODc= +modernc.org/libc v1.65.10/go.mod h1:StFvYpx7i/mXtBAfVOjaU0PWZOvIRoZSgXhrwXzr8Po= +modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= +modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= +modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= +modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= +modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= +modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= +modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= +modernc.org/sqlite v1.38.0 h1:+4OrfPQ8pxHKuWG4md1JpR/EYAh3Md7TdejuuzE7EUI= +modernc.org/sqlite v1.38.0/go.mod h1:1Bj+yES4SVvBZ4cBOpVZ6QgesMCKpJZDq0nxYzOpmNE= +modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= +modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= +nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= diff --git a/pkg/gofr/datasource/influxdb/influx_test.go b/pkg/gofr/datasource/influxdb/influx_test.go new file mode 100644 index 000000000..3d9ca089a --- /dev/null +++ b/pkg/gofr/datasource/influxdb/influx_test.go @@ -0,0 +1,41 @@ +package influxdb + +import ( + "github.com/stretchr/testify/require" + "gofr.dev/pkg/gofr" + "testing" +) + +func TestAddInfluxDB(t *testing.T) { + config := New(Config{ + Url: "http://localhost:8086", + Username: "admin", + Password: "admin1234", + Token: "F-QFQpmCL9UkR3qyoXnLkzWj03s6m4eCvYgDl1ePfHBf9ph7yxaSgQ6WN0i9giNgRTfONwVMK1f977r_g71oNQ==", + }) + + app := gofr.New() + app.AddInfluxDB(config) + + //config := Config{ + // Url: "http://localhost:8086", + // Username: "admin", + // Password: "admin1234", + // Token: "F-QFQpmCL9UkR3qyoXnLkzWj03s6m4eCvYgDl1ePfHBf9ph7yxaSgQ6WN0i9giNgRTfONwVMK1f977r_g71oNQ==", + //} + +} + +func TestNew(t *testing.T) { + config := Config{ + Url: "http://localhost:8086", + Username: "admin", + Password: "admin1234", + Token: "F-QFQpmCL9UkR3qyoXnLkzWj03s6m4eCvYgDl1ePfHBf9ph7yxaSgQ6WN0i9giNgRTfONwVMK1f977r_g71oNQ==", + } + client := New(config) + require.Equal(t, client.config.Url, config.Url) + require.Equal(t, client.config.Username, config.Username) + require.Equal(t, client.config.Password, config.Password) + require.Equal(t, client.config.Token, config.Token) +} diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 95212337d..5fcabd12d 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -3,13 +3,10 @@ package influxdb import ( "context" "fmt" - "gofr.dev/pkg/gofr/datasource" - "log" - "time" - influxdb2 "github.com/influxdata/influxdb-client-go/v2" "go.opencensus.io/trace" "gofr.dev/pkg/gofr/container" + "gofr.dev/pkg/gofr/datasource" ) // Config holds the configuration for connecting to InfluxDB. @@ -37,12 +34,20 @@ type HealthInflux struct { } const ( - statusDown = "DOWN" - statusUp = "UP" - defaultTimeout = 5 * time.Second + statusDown = "DOWN" + statusUp = "UP" ) -// CreateOrganization implements container.InfluxDBProvider. +// CreateOrganization creates a new organization in InfluxDB with the specified name. +// It implements the container.InfluxDBProvider interface. +// +// Parameters: +// - ctx: Context for request cancellation and timeouts. +// - orgName: The name of the organization to be created. Must not be empty. +// +// Returns: +// - string: The ID of the newly created organization. +// - error: Error if organization creation fails or if orgName is empty. func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string, error) { if orgName == "" { return "", fmt.Errorf("org Name name must not be empty") @@ -55,7 +60,15 @@ func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string return *newOrg.Id, nil } -// DeleteOrganization implements container.InfluxDBProvider. +// DeleteOrganization deletes an organization in InfluxDB using its ID. +// It implements the container.InfluxDBProvider interface. +// +// Parameters: +// - ctx: Context for request cancellation and timeouts. +// - orgId: The ID of the organization to be deleted. Must not be empty. +// +// Returns: +// - err: Error if the organization deletion fails or if orgId is empty. func (c *Client) DeleteOrganization(ctx context.Context, orgId string) error { if orgId == "" { return fmt.Errorf("orgId name must not be empty") @@ -68,6 +81,15 @@ func (c *Client) DeleteOrganization(ctx context.Context, orgId string) error { return nil } +// ListOrganization retrieves all organizations from InfluxDB and returns their IDs and names. +// It implements the container.InfluxDBProvider interface. +// +// Parameters: +// - ctx: Context for request cancellation and timeouts. +// +// Returns: +// - orgs: A map of organization IDs to their corresponding names. +// - err: Error if the API call fails or the organizations cannot be retrieved. func (c *Client) ListOrganization(ctx context.Context) (orgs map[string]string, err error) { orgAPI := c.client.OrganizationsAPI() allOrgs, err := orgAPI.GetOrganizations(ctx) @@ -84,8 +106,16 @@ func (c *Client) ListOrganization(ctx context.Context) (orgs map[string]string, return orgs, nil } -// CreateBucket implements container.InfluxDBProvider. -func (c *Client) CreateBucket(ctx context.Context, orgId string, bucketName string, retentionPeriod time.Duration) (bucketId string, err error) { +// CreateBucket creates a new bucket in InfluxDB for the specified organization. +// Parameters: +// - ctx: Context for request cancellation and timeouts. +// - orgId: The ID of the organization in which the bucket will be created. +// - bucketName: The name of the bucket to be created. +// +// Returns: +// - bucketId: The ID of the newly created bucket. +// - err: Error if bucket creation fails. +func (c *Client) CreateBucket(ctx context.Context, orgId string, bucketName string) (bucketId string, err error) { // Validate input if orgId == "" { @@ -106,7 +136,14 @@ func (c *Client) CreateBucket(ctx context.Context, orgId string, bucketName stri return *newBucket.Id, nil } -// DeleteBucket -=implements container.InfluxDBProvider. +// DeleteBucket deletes a bucket from InfluxDB by its ID. +// Parameters: +// - ctx: Context for request cancellation and timeouts. +// - org: The ID or name of the organization (not used directly in this implementation). +// - bucketID: The ID of the bucket to be deleted. Must not be empty. +// +// Returns: +// - err: Error if the bucket deletion fails or if bucketID is empty. func (c *Client) DeleteBucket(ctx context.Context, org, bucketID string) error { if bucketID == "" { return fmt.Errorf("bucket name must not be empty") @@ -124,18 +161,26 @@ type Health struct { Details map[string]any `json:"details,omitempty"` // extra metadata } -// HealthCheck implements container.InfluxDBProvider. +// HealthCheck retrieves the health status of the InfluxDB instance. +// It implements the container.InfluxDBProvider interface. +// +// Parameters: +// - ctx: Context for request cancellation and timeouts. +// +// Returns: +// - any: A datasource.Health object containing the status and details of the InfluxDB service. +// - err: Error if the health check request fails or the InfluxDB client returns an error. func (c *Client) HealthCheck(ctx context.Context) (any, error) { health, err := c.client.Health(ctx) if err != nil { return datasource.Health{ - Status: datasource.StatusDown, + Status: statusDown, Details: make(map[string]any), }, err } h := datasource.Health{ - Status: datasource.StatusUp, + Status: statusUp, Details: map[string]any{ "Username": c.config.Username, "Url": c.config.Url, @@ -150,7 +195,6 @@ func (c *Client) HealthCheck(ctx context.Context) (any, error) { h.Details["Checks"] = health.Checks h.Details["Status"] = health.Status } - return h, nil } @@ -169,33 +213,39 @@ Returns: func (c *Client) ListBuckets(ctx context.Context, org string) (buckets map[string]string, err error) { // Validate input if org == "" { + c.logger.Errorf("organization name must not be empty") return nil, fmt.Errorf("organization name must not be empty") } bucketsAPI := c.client.BucketsAPI() bucketsDomain, err := bucketsAPI.FindBucketsByOrgName(ctx, org) if err != nil { - // Consider logging the error with context for observability - log.Printf("failed to find buckets for org %q: %v", org, err) + c.logger.Errorf("failed to find buckets for org %q: %v", org, err) return nil, fmt.Errorf("failed to list buckets for organization %q: %w", org, err) } if bucketsDomain == nil { - // Defensive: treat nil response as empty result return nil, nil } buckets = make(map[string]string) // Initialize the map for _, bucket := range *bucketsDomain { if bucket.Name != "" { - //buckets = append(buckets, bucket.Name) buckets[*bucket.Id] = bucket.Name } } return buckets, nil } -// Ping implements container.InfluxDBProvider. +// Ping pings the InfluxDB server to check its availability. +// It implements the container.InfluxDBProvider interface. +// +// Parameters: +// - ctx: Context for request cancellation and timeouts. +// +// Returns: +// - bool: True if the InfluxDB server is reachable; false otherwise. +// - err: Error if the ping request fails. func (c *Client) Ping(ctx context.Context) (bool, error) { ping, err := c.client.Ping(ctx) if err != nil { @@ -204,19 +254,16 @@ func (c *Client) Ping(ctx context.Context) (bool, error) { return ping, nil } -// Query implements container.InfluxDBProvider. func (c *Client) Query(ctx context.Context, org string, fluxQuery string) ([]map[string]any, error) { panic("unimplemented") } -// UseLogger sets the logger for the InfluxDB client. func (c *Client) UseLogger(logger any) { if l, ok := logger.(Logger); ok { c.logger = l } } -// UseMetrics sets the metrics for the InfluxDB client. func (c *Client) UseMetrics(metrics any) { if m, ok := metrics.(Metrics); ok { c.metrics = m @@ -230,7 +277,6 @@ func (c *Client) UseTracer(tracer any) { } } -// WritePoints implements container.InfluxDBProvider. func (c *Client) WritePoints(ctx context.Context, bucket string, org string, points []container.InfluxPoint) error { panic("unimplemented") } @@ -242,6 +288,11 @@ func New(config Config) *Client { } } +// Connect initializes a new InfluxDB client using the configured URL and authentication token. +// It logs the connection status and performs a health check to verify connectivity. +// +// If the health check fails, it logs an error and exits early without returning an error. +// No parameters or return values. func (c *Client) Connect() { c.logger.Debugf("connecting to influxdb at %v", c.config.Url) diff --git a/pkg/gofr/datasource/influxdb/interfaces.go b/pkg/gofr/datasource/influxdb/interfaces.go deleted file mode 100644 index ab711e3b8..000000000 --- a/pkg/gofr/datasource/influxdb/interfaces.go +++ /dev/null @@ -1 +0,0 @@ -package influxdb From f5c1422b364df7f2842b9b92a5928725604b00b6 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Tue, 22 Jul 2025 23:21:54 +0530 Subject: [PATCH 08/44] [refactor] using predefined errors, for consistent errors. --- pkg/gofr/datasource/influxdb/influxdb.go | 89 +++++++++++++----------- 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 5fcabd12d..cdc76ecb0 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -2,11 +2,10 @@ package influxdb import ( "context" - "fmt" + "errors" influxdb2 "github.com/influxdata/influxdb-client-go/v2" "go.opencensus.io/trace" "gofr.dev/pkg/gofr/container" - "gofr.dev/pkg/gofr/datasource" ) // Config holds the configuration for connecting to InfluxDB. @@ -38,6 +37,16 @@ const ( statusUp = "UP" ) +var ( + errEmptyOrganizationName = errors.New("organization name must not be empty") + errEmptyOrganizationId = errors.New("organization id must not be empty") + errEmptyBucketId = errors.New("bucket id must not be empty") + errEmptyBucketName = errors.New("bucket name must not be empty") + errFindingBuckets = errors.New("failed in finding buckets") + errFetchOrganization = errors.New("failed to fetch all organizations") + errHealthCheckFailed = errors.New("influxdb health check failed") +) + // CreateOrganization creates a new organization in InfluxDB with the specified name. // It implements the container.InfluxDBProvider interface. // @@ -50,7 +59,7 @@ const ( // - error: Error if organization creation fails or if orgName is empty. func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string, error) { if orgName == "" { - return "", fmt.Errorf("org Name name must not be empty") + return "", errEmptyOrganizationName } orgAPI := c.client.OrganizationsAPI() newOrg, err := orgAPI.CreateOrganizationWithName(ctx, orgName) @@ -71,7 +80,7 @@ func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string // - err: Error if the organization deletion fails or if orgId is empty. func (c *Client) DeleteOrganization(ctx context.Context, orgId string) error { if orgId == "" { - return fmt.Errorf("orgId name must not be empty") + return errEmptyOrganizationId } orgAPI := c.client.OrganizationsAPI() err := orgAPI.DeleteOrganizationWithID(ctx, orgId) @@ -90,18 +99,23 @@ func (c *Client) DeleteOrganization(ctx context.Context, orgId string) error { // Returns: // - orgs: A map of organization IDs to their corresponding names. // - err: Error if the API call fails or the organizations cannot be retrieved. -func (c *Client) ListOrganization(ctx context.Context) (orgs map[string]string, err error) { +func (c *Client) ListOrganization(ctx context.Context) (map[string]string, error) { + orgAPI := c.client.OrganizationsAPI() - allOrgs, err := orgAPI.GetOrganizations(ctx) + allOrg, err := orgAPI.GetOrganizations(ctx) if err != nil { - return nil, err + return nil, errFetchOrganization } - orgs = make(map[string]string) // Initialize the map - if allOrgs == nil { - return orgs, nil + + if allOrg == nil || len(*allOrg) == 0 { + return map[string]string{}, nil } - for _, org := range *allOrgs { - orgs[*org.Id] = org.Name + + orgs := make(map[string]string, len(*allOrg)) + for _, org := range *allOrg { + if org.Id != nil { + orgs[*org.Id] = org.Name + } } return orgs, nil } @@ -119,11 +133,11 @@ func (c *Client) CreateBucket(ctx context.Context, orgId string, bucketName stri // Validate input if orgId == "" { - err = fmt.Errorf("organization id must not be empty") + err = errEmptyOrganizationId return } if bucketName == "" { - err = fmt.Errorf("bucket name must not be empty") + err = errEmptyBucketName return } @@ -146,7 +160,7 @@ func (c *Client) CreateBucket(ctx context.Context, orgId string, bucketName stri // - err: Error if the bucket deletion fails or if bucketID is empty. func (c *Client) DeleteBucket(ctx context.Context, org, bucketID string) error { if bucketID == "" { - return fmt.Errorf("bucket name must not be empty") + return errEmptyBucketId } bucketsAPI := c.client.BucketsAPI() err := bucketsAPI.DeleteBucketWithID(ctx, bucketID) @@ -171,30 +185,24 @@ type Health struct { // - any: A datasource.Health object containing the status and details of the InfluxDB service. // - err: Error if the health check request fails or the InfluxDB client returns an error. func (c *Client) HealthCheck(ctx context.Context) (any, error) { + h := Health{Details: make(map[string]any)} + h.Details["Username"] = c.config.Username + h.Details["Url"] = c.config.Url + health, err := c.client.Health(ctx) if err != nil { - return datasource.Health{ - Status: statusDown, - Details: make(map[string]any), - }, err - } - - h := datasource.Health{ - Status: statusUp, - Details: map[string]any{ - "Username": c.config.Username, - "Url": c.config.Url, - }, + h.Status = statusDown + h.Details["error"] = err.Error() + return &h, errHealthCheckFailed } - if health != nil { - h.Details["Name"] = health.Name - h.Details["Commit"] = health.Commit - h.Details["Version"] = health.Version - h.Details["Message"] = health.Message - h.Details["Checks"] = health.Checks - h.Details["Status"] = health.Status - } + h.Status = statusUp + h.Details["Name"] = health.Name + h.Details["Commit"] = health.Commit + h.Details["Version"] = health.Version + h.Details["Message"] = health.Message + h.Details["Checks"] = health.Checks + h.Details["Status"] = health.Status return h, nil } @@ -213,21 +221,17 @@ Returns: func (c *Client) ListBuckets(ctx context.Context, org string) (buckets map[string]string, err error) { // Validate input if org == "" { - c.logger.Errorf("organization name must not be empty") - return nil, fmt.Errorf("organization name must not be empty") + return nil, errEmptyOrganizationId } bucketsAPI := c.client.BucketsAPI() bucketsDomain, err := bucketsAPI.FindBucketsByOrgName(ctx, org) if err != nil { - c.logger.Errorf("failed to find buckets for org %q: %v", org, err) - return nil, fmt.Errorf("failed to list buckets for organization %q: %w", org, err) + return nil, errFindingBuckets } - if bucketsDomain == nil { return nil, nil } - buckets = make(map[string]string) // Initialize the map for _, bucket := range *bucketsDomain { if bucket.Name != "" { @@ -249,6 +253,7 @@ func (c *Client) ListBuckets(ctx context.Context, org string) (buckets map[strin func (c *Client) Ping(ctx context.Context) (bool, error) { ping, err := c.client.Ping(ctx) if err != nil { + c.logger.Errorf("%v", err) return false, err } return ping, nil @@ -304,7 +309,7 @@ func (c *Client) Connect() { ) if _, err := c.HealthCheck(context.Background()); err != nil { - c.logger.Errorf("InfluxDB health check failed: %v", err) + c.logger.Errorf("InfluxDB health check failed: %v", err.Error()) return } From 5069344a49f37ecd90954f6827642008f4fc41ec Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 24 Jul 2025 13:49:04 +0530 Subject: [PATCH 09/44] [tests] Unit test for Creating and Deleting Organization. --- docker-compose.yml | 142 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..633108abc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,142 @@ +version: "3.8" + +services: + mongodb: + image: mongodb/mongodb-community-server:latest + container_name: mongodb + ports: + - "27017:27017" + environment: + MONGO_INITDB_ROOT_USERNAME: user + MONGO_INITDB_ROOT_PASSWORD: password + + ftp-server: + image: delfer/alpine-ftp-server + ports: + - "21:21" + - "21000-21010:21000-21010" + environment: + USERS: "user|password" + + opentsdb: + image: petergrace/opentsdb-docker:latest + container_name: gofr-opentsdb + ports: + - "4242:4242" + + mysql: + image: mysql:8.0.30 + container_name: gofr-mysql + environment: + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: test + ports: + - "2001:3306" + + redis: + image: redis:7.0.5 + container_name: gofr-redis + ports: + - "2002:6379" + + solr: + image: solr + container_name: gofr-solr + command: solr -DzkRun + ports: + - "2020:8983" + + zipkin: + image: openzipkin/zipkin:2 + container_name: gofr-zipkin + ports: + - "2005:9411" + + localstack: + image: localstack/localstack + ports: + - "4566:4566" + - "4510-4559:4510-4559" + tty: true + stdin_open: true + restart: unless-stopped + + cassandra: + image: cassandra:latest + container_name: cassandra-node + ports: + - "9042:9042" + volumes: + - cassandra_data:/var/lib/cassandra + + postgres: + image: postgres:15.1 + container_name: gofr-pgsql + environment: + POSTGRES_DB: customers + POSTGRES_PASSWORD: root123 + ports: + - "2006:5432" + + mssql: + image: mcr.microsoft.com/azure-sql-edge + container_name: gofr-mssql + environment: + ACCEPT_EULA: "Y" + SA_PASSWORD: "reallyStrongPwd123" + ports: + - "2007:1433" + + kafka: + image: bitnami/kafka:3.4 + container_name: kafka-1 + ports: + - "9092:9092" + environment: + KAFKA_ENABLE_KRAFT: "yes" + KAFKA_CFG_PROCESS_ROLES: "broker,controller" + KAFKA_CFG_CONTROLLER_LISTENER_NAMES: "CONTROLLER" + KAFKA_CFG_LISTENERS: "PLAINTEXT://:9092,CONTROLLER://:9093" + KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT" + KAFKA_CFG_ADVERTISED_LISTENERS: "PLAINTEXT://127.0.0.1:9092" + KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "true" + KAFKA_BROKER_ID: "1" + KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: "1@127.0.0.1:9093" + ALLOW_PLAINTEXT_LISTENER: "yes" + KAFKA_CFG_NODE_ID: "1" + volumes: + - kafka_data:/bitnami + + scylla: + image: scylladb/scylla + container_name: scylla + ports: + - "2025:9042" + + nats: + image: nats:latest + container_name: nats-server + command: -js + ports: + - "4222:4222" + - "8222:8222" + + surrealdb: + image: surrealdb/surrealdb:latest + container_name: surrealdb + command: start --bind 0.0.0.0:8000 + ports: + - "8000:8000" + + arangodb: + image: arangodb:latest + container_name: arangodb + ports: + - "8529:8529" + environment: + ARANGO_ROOT_PASSWORD: rootpassword + pull_policy: always + +volumes: + cassandra_data: + kafka_data: From e4d573f15e093784aa0a37eba93d2ad9d1113c89 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 24 Jul 2025 15:53:13 +0530 Subject: [PATCH 10/44] [tests] Unit test for Buckets operation written, achieving 72% coverage. --- pkg/gofr/container/datasources.go | 4 +- pkg/gofr/datasource/influxdb/influx_test.go | 153 ++++++++++++++++---- pkg/gofr/datasource/influxdb/influxdb.go | 6 +- 3 files changed, 128 insertions(+), 35 deletions(-) diff --git a/pkg/gofr/container/datasources.go b/pkg/gofr/container/datasources.go index 44e71f78f..a4acade3f 100644 --- a/pkg/gofr/container/datasources.go +++ b/pkg/gofr/container/datasources.go @@ -753,8 +753,8 @@ type InfluxDB interface { // CreateBucket creates a new bucket under the specified organization. CreateBucket(ctx context.Context, org, bucket string) (string, error) - // DeleteBucket deletes a bucket under the specified organization. - DeleteBucket(ctx context.Context, org, bucket string) error + // DeleteBucket deletes a bucketId with bucketId + DeleteBucket(ctx context.Context, bucketId string) error // ListBuckets lists all buckets under the specified organization. ListBuckets(ctx context.Context, org string) (map[string]string, error) diff --git a/pkg/gofr/datasource/influxdb/influx_test.go b/pkg/gofr/datasource/influxdb/influx_test.go index 3d9ca089a..36e6203ad 100644 --- a/pkg/gofr/datasource/influxdb/influx_test.go +++ b/pkg/gofr/datasource/influxdb/influx_test.go @@ -1,41 +1,134 @@ package influxdb import ( + "context" "github.com/stretchr/testify/require" "gofr.dev/pkg/gofr" "testing" ) -func TestAddInfluxDB(t *testing.T) { - config := New(Config{ - Url: "http://localhost:8086", - Username: "admin", - Password: "admin1234", - Token: "F-QFQpmCL9UkR3qyoXnLkzWj03s6m4eCvYgDl1ePfHBf9ph7yxaSgQ6WN0i9giNgRTfONwVMK1f977r_g71oNQ==", - }) +var ( + Url = "http://localhost:8086" + Username = "admin" + Password = "admin1234" + Token = "F-QFQpmCL9UkR3qyoXnLkzWj03s6m4eCvYgDl1ePfHBf9ph7yxaSgQ6WN0i9giNgRTfONwVMK1f977r_g71oNQ==" + testOrgName = "org4ddssd2f3" + testBucketName = "bucksddsdet42f3" +) +func setupInflux(t *testing.T) *Client { app := gofr.New() - app.AddInfluxDB(config) - - //config := Config{ - // Url: "http://localhost:8086", - // Username: "admin", - // Password: "admin1234", - // Token: "F-QFQpmCL9UkR3qyoXnLkzWj03s6m4eCvYgDl1ePfHBf9ph7yxaSgQ6WN0i9giNgRTfONwVMK1f977r_g71oNQ==", - //} - -} - -func TestNew(t *testing.T) { - config := Config{ - Url: "http://localhost:8086", - Username: "admin", - Password: "admin1234", - Token: "F-QFQpmCL9UkR3qyoXnLkzWj03s6m4eCvYgDl1ePfHBf9ph7yxaSgQ6WN0i9giNgRTfONwVMK1f977r_g71oNQ==", - } - client := New(config) - require.Equal(t, client.config.Url, config.Url) - require.Equal(t, client.config.Username, config.Username) - require.Equal(t, client.config.Password, config.Password) - require.Equal(t, client.config.Token, config.Token) + client := New(Config{ + Url: Url, + Username: Username, + Password: Password, + Token: Token, + }) + app.AddInfluxDB(client) + require.Equal(t, client.config.Url, Url) + require.Equal(t, client.config.Username, Username) + require.Equal(t, client.config.Password, Password) + require.Equal(t, client.config.Token, Token) + return client +} + +func TestPing(t *testing.T) { + ctx := context.Background() + config := setupInflux(t) + health, err := config.Ping(ctx) + require.NoError(t, err) // empty organization name + require.Equal(t, health, true) +} + +func creatOrganization(t *testing.T, client *Client, orgName string) (orgId string) { + ctx := context.Background() + + // try creating organization without name + orgId, err := client.CreateOrganization(ctx, "") + require.Error(t, err) // empty organization name + require.Equal(t, "", orgId) + + // actually creating organization + orgId, err = client.CreateOrganization(ctx, orgName) + require.NoError(t, err) + require.NotEmpty(t, orgId) + + return orgId +} + +func listOrganizations(t *testing.T, ctx context.Context, client *Client) map[string]string { + orgs, err := client.ListOrganization(ctx) + require.NoError(t, err) + return orgs +} + +func listBuckets(t *testing.T, ctx context.Context, client *Client, orgId string) map[string]string { + buckets, err := client.ListBuckets(ctx, orgId) + require.NoError(t, err) + return buckets +} + +func deleteOrganization(t *testing.T, client *Client, orgId string) { + ctx := context.Background() + + // try deleting empty id organization + err := client.DeleteOrganization(ctx, "") + require.Error(t, err) + + // actually deleting the organization + err = client.DeleteOrganization(ctx, orgId) + require.NoError(t, err) +} + +func createNewBucket(t *testing.T, client *Client, orgId string, name string) (bucketId string) { + ctx := context.Background() + + // try creating organization without name + bucketId, err := client.CreateBucket(ctx, orgId, "") + require.Error(t, err) // empty organization name + require.Empty(t, bucketId) + + // actually creating organization + bucketId, err = client.CreateBucket(ctx, orgId, name) + require.NoError(t, err) + require.NotEmpty(t, bucketId) + + return bucketId +} + +func deleteBucket(t *testing.T, client *Client, bucketId string) { + ctx := context.Background() + + // try creating delete empty bucket id + err := client.DeleteBucket(ctx, "") + require.Error(t, err) + + err = client.DeleteBucket(ctx, bucketId) + require.NoError(t, err) +} + +func TestOrganizationOperations(t *testing.T) { + ctx := context.Background() + client := setupInflux(t) + + beforeOrgList := listOrganizations(t, ctx, client) // before create the new organization + orgId := creatOrganization(t, client, testOrgName) + afterOrgList := listOrganizations(t, ctx, client) // after create the new organization + require.Greater(t, len(afterOrgList), len(beforeOrgList)) + deleteOrganization(t, client, orgId) +} + +func TestBucketOperations(t *testing.T) { + + ctx := context.Background() + client := setupInflux(t) + orgId := creatOrganization(t, client, testOrgName) + + beforeBucketList := listBuckets(t, ctx, client, testOrgName) // before create the new organization + bucketId := createNewBucket(t, client, orgId, testBucketName) + afterBucketList := listBuckets(t, ctx, client, testOrgName) // before create the new organization + require.Greater(t, len(afterBucketList), len(beforeBucketList)) + + deleteBucket(t, client, bucketId) + deleteOrganization(t, client, orgId) } diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index cdc76ecb0..f6a043723 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -158,12 +158,12 @@ func (c *Client) CreateBucket(ctx context.Context, orgId string, bucketName stri // // Returns: // - err: Error if the bucket deletion fails or if bucketID is empty. -func (c *Client) DeleteBucket(ctx context.Context, org, bucketID string) error { - if bucketID == "" { +func (c *Client) DeleteBucket(ctx context.Context, bucketId string) error { + if bucketId == "" { return errEmptyBucketId } bucketsAPI := c.client.BucketsAPI() - err := bucketsAPI.DeleteBucketWithID(ctx, bucketID) + err := bucketsAPI.DeleteBucketWithID(ctx, bucketId) if err != nil { return err } From 080eb8ff2518f93350a9e362b4a9673186b52d03 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Sun, 27 Jul 2025 22:55:05 +0530 Subject: [PATCH 11/44] [write, query] implemented functions of influxdb to insert data & perform flux query --- pkg/gofr/container/datasources.go | 18 ++++------ pkg/gofr/datasource/influxdb/influxdb.go | 45 +++++++++++++++++++++--- 2 files changed, 48 insertions(+), 15 deletions(-) diff --git a/pkg/gofr/container/datasources.go b/pkg/gofr/container/datasources.go index a4acade3f..a47dc5ce8 100644 --- a/pkg/gofr/container/datasources.go +++ b/pkg/gofr/container/datasources.go @@ -4,9 +4,8 @@ import ( "bytes" "context" "database/sql" - "time" - "github.com/redis/go-redis/v9" + "time" "gofr.dev/pkg/gofr/datasource" "gofr.dev/pkg/gofr/datasource/pubsub" @@ -723,13 +722,6 @@ type ElasticsearchProvider interface { provider } -type InfluxPoint struct { - Measurement string - Tags map[string]string - Fields map[string]any - Timestamp time.Time -} - // InfluxDB defines the operations required to interact with an InfluxDB instance. type InfluxDB interface { @@ -742,9 +734,13 @@ type InfluxDB interface { // ListOrganization list all the available organization ListOrganization(ctx context.Context) (orgs map[string]string, err error) - // WritePoints writes one or more time-series points to a bucket. + // WritePoint writes one time-series points to a bucket. // 'points' should follow the line protocol format or structured map format. - WritePoints(ctx context.Context, bucket, org string, points []InfluxPoint) error + WritePoint(ctx context.Context, org, bucket string, + measurement string, + tags map[string]string, + fields map[string]interface{}, + timestamp time.Time) error // Query runs a Flux query and returns the result as a slice of maps, // where each map is a row with column name-value pairs. diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index f6a043723..366f8e89e 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -5,7 +5,7 @@ import ( "errors" influxdb2 "github.com/influxdata/influxdb-client-go/v2" "go.opencensus.io/trace" - "gofr.dev/pkg/gofr/container" + "time" ) // Config holds the configuration for connecting to InfluxDB. @@ -64,8 +64,10 @@ func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string orgAPI := c.client.OrganizationsAPI() newOrg, err := orgAPI.CreateOrganizationWithName(ctx, orgName) if err != nil { + c.logger.Errorf("failed to create new organization with name '%v' %v", orgName, err) return "", err } + c.logger.Debugf("organization created with name '%v'", orgName) return *newOrg.Id, nil } @@ -145,8 +147,10 @@ func (c *Client) CreateBucket(ctx context.Context, orgId string, bucketName stri newBucket, err := bucketsAPI.CreateBucketWithNameWithID(ctx, orgId, bucketName) if err != nil { + c.logger.Errorf("failed to create new bucket with name '%v' %v", bucketName, err) return } + c.logger.Debugf("bucket created with name '%v'", bucketName) return *newBucket.Id, nil } @@ -260,7 +264,33 @@ func (c *Client) Ping(ctx context.Context) (bool, error) { } func (c *Client) Query(ctx context.Context, org string, fluxQuery string) ([]map[string]any, error) { - panic("unimplemented") + queryAPI := c.client.QueryAPI(org) + result, err := queryAPI.Query(ctx, fluxQuery) + if err != nil { + c.logger.Errorf("InfluxDB Flux Query '%v' failed: %v", fluxQuery, err.Error()) + return nil, err + } + + var records []map[string]any + for result.Next() { + if result.Err() != nil { + c.logger.Errorf("Error processing InfluxDB Flux Query result: %v", result.Err().Error()) + return nil, result.Err() + } + record := make(map[string]any) + for k, v := range result.Record().Values() { + record[k] = v + } + records = append(records, record) + } + + // Check for any final errors after iteration. + if result.Err() != nil { + c.logger.Errorf("Final error in InfluxDB Flux Query result: %v", result.Err().Error()) + return nil, result.Err() + } + + return records, nil } func (c *Client) UseLogger(logger any) { @@ -282,8 +312,15 @@ func (c *Client) UseTracer(tracer any) { } } -func (c *Client) WritePoints(ctx context.Context, bucket string, org string, points []container.InfluxPoint) error { - panic("unimplemented") +func (c *Client) WritePoint(ctx context.Context, org, bucket string, measurement string, tags map[string]string, fields map[string]interface{}, timestamp time.Time) error { + writeAPI := c.client.WriteAPIBlocking(org, bucket) + p := influxdb2.NewPoint(measurement, tags, fields, timestamp) + err := writeAPI.WritePoint(ctx, p) + if err != nil { + c.logger.Errorf("Failed to write point to influxdb: %v", err.Error()) + return err + } + return nil } // New creates a new InfluxDB client with the provided configuration. From 9cf1c3d49a8020fdfbb0123ff114b910b5961c42 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Sun, 27 Jul 2025 22:55:43 +0530 Subject: [PATCH 12/44] [test] added test for the write and query on influxdb. --- pkg/gofr/datasource/influxdb/influx_test.go | 36 ++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influx_test.go b/pkg/gofr/datasource/influxdb/influx_test.go index 36e6203ad..717ae38b1 100644 --- a/pkg/gofr/datasource/influxdb/influx_test.go +++ b/pkg/gofr/datasource/influxdb/influx_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" "gofr.dev/pkg/gofr" "testing" + "time" ) var ( @@ -12,8 +13,9 @@ var ( Username = "admin" Password = "admin1234" Token = "F-QFQpmCL9UkR3qyoXnLkzWj03s6m4eCvYgDl1ePfHBf9ph7yxaSgQ6WN0i9giNgRTfONwVMK1f977r_g71oNQ==" - testOrgName = "org4ddssd2f3" - testBucketName = "bucksddsdet42f3" + testOrgName = "org-test2" + testBucketName = "bucket-test2" + testFluxQuery = "from(bucket:\"bucket-test2\")|> range(start: -1h) |> filter(fn: (r) => r._measurement == \"stat\")" ) func setupInflux(t *testing.T) *Client { @@ -108,7 +110,7 @@ func deleteBucket(t *testing.T, client *Client, bucketId string) { } func TestOrganizationOperations(t *testing.T) { - ctx := context.Background() + ctx := t.Context() client := setupInflux(t) beforeOrgList := listOrganizations(t, ctx, client) // before create the new organization @@ -120,7 +122,7 @@ func TestOrganizationOperations(t *testing.T) { func TestBucketOperations(t *testing.T) { - ctx := context.Background() + ctx := t.Context() client := setupInflux(t) orgId := creatOrganization(t, client, testOrgName) @@ -132,3 +134,29 @@ func TestBucketOperations(t *testing.T) { deleteBucket(t, client, bucketId) deleteOrganization(t, client, orgId) } + +func TestWritePoints(t *testing.T) { + ctx := t.Context() + client := setupInflux(t) + orgId := creatOrganization(t, client, testOrgName) + bucketId := createNewBucket(t, client, orgId, testBucketName) + + err := client.WritePoint( + ctx, + orgId, + bucketId, + "stat", + map[string]string{"unit": "temperature"}, + map[string]interface{}{"avg": 24.5, "max": 45.0}, + time.Now(), + ) + + require.NoError(t, err) + + result, err := client.Query(ctx, orgId, testFluxQuery) + require.NoError(t, err) + require.NotEmpty(t, result) + + deleteBucket(t, client, bucketId) + deleteOrganization(t, client, orgId) +} From 5896876b713c56a96770749db0783397aeac70b6 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Tue, 29 Jul 2025 16:14:49 +0530 Subject: [PATCH 13/44] [linting] fixed various linting errors --- pkg/gofr/container/datasources.go | 2 +- pkg/gofr/datasource/influxdb/influx_test.go | 92 +++++++++++---------- pkg/gofr/datasource/influxdb/influxdb.go | 53 ++++++------ 3 files changed, 74 insertions(+), 73 deletions(-) diff --git a/pkg/gofr/container/datasources.go b/pkg/gofr/container/datasources.go index a47dc5ce8..b53cfc658 100644 --- a/pkg/gofr/container/datasources.go +++ b/pkg/gofr/container/datasources.go @@ -739,7 +739,7 @@ type InfluxDB interface { WritePoint(ctx context.Context, org, bucket string, measurement string, tags map[string]string, - fields map[string]interface{}, + fields map[string]any, timestamp time.Time) error // Query runs a Flux query and returns the result as a slice of maps, diff --git a/pkg/gofr/datasource/influxdb/influx_test.go b/pkg/gofr/datasource/influxdb/influx_test.go index 717ae38b1..830c5dd1c 100644 --- a/pkg/gofr/datasource/influxdb/influx_test.go +++ b/pkg/gofr/datasource/influxdb/influx_test.go @@ -2,13 +2,14 @@ package influxdb import ( "context" - "github.com/stretchr/testify/require" - "gofr.dev/pkg/gofr" "testing" "time" + + "github.com/stretchr/testify/require" + "gofr.dev/pkg/gofr" ) -var ( +const ( Url = "http://localhost:8086" Username = "admin" Password = "admin1234" @@ -19,6 +20,7 @@ var ( ) func setupInflux(t *testing.T) *Client { + t.Helper() app := gofr.New() client := New(Config{ Url: Url, @@ -39,38 +41,41 @@ func TestPing(t *testing.T) { config := setupInflux(t) health, err := config.Ping(ctx) require.NoError(t, err) // empty organization name - require.Equal(t, health, true) + require.True(t, health) } -func creatOrganization(t *testing.T, client *Client, orgName string) (orgId string) { +func creatOrganization(t *testing.T, client *Client, orgName string) (orgID string) { + t.Helper() ctx := context.Background() - // try creating organization without name - orgId, err := client.CreateOrganization(ctx, "") + orgID, err := client.CreateOrganization(ctx, "") require.Error(t, err) // empty organization name - require.Equal(t, "", orgId) + require.Empty(t, orgID) // actually creating organization - orgId, err = client.CreateOrganization(ctx, orgName) + orgID, err = client.CreateOrganization(ctx, orgName) require.NoError(t, err) - require.NotEmpty(t, orgId) + require.NotEmpty(t, orgID) - return orgId + return orgID } -func listOrganizations(t *testing.T, ctx context.Context, client *Client) map[string]string { +func listOrganizations(ctx context.Context, t *testing.T, client *Client) map[string]string { + t.Helper() orgs, err := client.ListOrganization(ctx) require.NoError(t, err) return orgs } -func listBuckets(t *testing.T, ctx context.Context, client *Client, orgId string) map[string]string { - buckets, err := client.ListBuckets(ctx, orgId) +func listBuckets(ctx context.Context, t *testing.T, client *Client, orgID string) map[string]string { + t.Helper() + buckets, err := client.ListBuckets(ctx, orgID) require.NoError(t, err) return buckets } -func deleteOrganization(t *testing.T, client *Client, orgId string) { +func deleteOrganization(t *testing.T, client *Client, orgID string) { + t.Helper() ctx := context.Background() // try deleting empty id organization @@ -78,34 +83,36 @@ func deleteOrganization(t *testing.T, client *Client, orgId string) { require.Error(t, err) // actually deleting the organization - err = client.DeleteOrganization(ctx, orgId) + err = client.DeleteOrganization(ctx, orgID) require.NoError(t, err) } -func createNewBucket(t *testing.T, client *Client, orgId string, name string) (bucketId string) { +func createNewBucket(t *testing.T, client *Client, orgID, name string) (bucketID string) { + t.Helper() ctx := context.Background() // try creating organization without name - bucketId, err := client.CreateBucket(ctx, orgId, "") + bucketID, err := client.CreateBucket(ctx, orgID, "") require.Error(t, err) // empty organization name - require.Empty(t, bucketId) + require.Empty(t, bucketID) // actually creating organization - bucketId, err = client.CreateBucket(ctx, orgId, name) + bucketID, err = client.CreateBucket(ctx, orgID, name) require.NoError(t, err) - require.NotEmpty(t, bucketId) + require.NotEmpty(t, bucketID) - return bucketId + return bucketID } -func deleteBucket(t *testing.T, client *Client, bucketId string) { +func deleteBucket(t *testing.T, client *Client, bucketID string) { + t.Helper() ctx := context.Background() // try creating delete empty bucket id err := client.DeleteBucket(ctx, "") require.Error(t, err) - err = client.DeleteBucket(ctx, bucketId) + err = client.DeleteBucket(ctx, bucketID) require.NoError(t, err) } @@ -113,50 +120,49 @@ func TestOrganizationOperations(t *testing.T) { ctx := t.Context() client := setupInflux(t) - beforeOrgList := listOrganizations(t, ctx, client) // before create the new organization - orgId := creatOrganization(t, client, testOrgName) - afterOrgList := listOrganizations(t, ctx, client) // after create the new organization + beforeOrgList := listOrganizations(ctx, t, client) // before create the new organization + orgID := creatOrganization(t, client, testOrgName) + afterOrgList := listOrganizations(ctx, t, client) // after create the new organization require.Greater(t, len(afterOrgList), len(beforeOrgList)) - deleteOrganization(t, client, orgId) + deleteOrganization(t, client, orgID) } func TestBucketOperations(t *testing.T) { - ctx := t.Context() client := setupInflux(t) - orgId := creatOrganization(t, client, testOrgName) + orgID := creatOrganization(t, client, testOrgName) - beforeBucketList := listBuckets(t, ctx, client, testOrgName) // before create the new organization - bucketId := createNewBucket(t, client, orgId, testBucketName) - afterBucketList := listBuckets(t, ctx, client, testOrgName) // before create the new organization + beforeBucketList := listBuckets(ctx, t, client, testOrgName) // before create the new organization + bucketID := createNewBucket(t, client, orgID, testBucketName) + afterBucketList := listBuckets(ctx, t, client, testOrgName) // before create the new organization require.Greater(t, len(afterBucketList), len(beforeBucketList)) - deleteBucket(t, client, bucketId) - deleteOrganization(t, client, orgId) + deleteBucket(t, client, bucketID) + deleteOrganization(t, client, orgID) } func TestWritePoints(t *testing.T) { ctx := t.Context() client := setupInflux(t) - orgId := creatOrganization(t, client, testOrgName) - bucketId := createNewBucket(t, client, orgId, testBucketName) + orgID := creatOrganization(t, client, testOrgName) + bucketID := createNewBucket(t, client, orgID, testBucketName) err := client.WritePoint( ctx, - orgId, - bucketId, + orgID, + bucketID, "stat", map[string]string{"unit": "temperature"}, - map[string]interface{}{"avg": 24.5, "max": 45.0}, + map[string]any{"avg": 24.5, "max": 45.0}, time.Now(), ) require.NoError(t, err) - result, err := client.Query(ctx, orgId, testFluxQuery) + result, err := client.Query(ctx, orgID, testFluxQuery) require.NoError(t, err) require.NotEmpty(t, result) - deleteBucket(t, client, bucketId) - deleteOrganization(t, client, orgId) + deleteBucket(t, client, bucketID) + deleteOrganization(t, client, orgID) } diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 366f8e89e..651774971 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -3,9 +3,10 @@ package influxdb import ( "context" "errors" + "time" + influxdb2 "github.com/influxdata/influxdb-client-go/v2" "go.opencensus.io/trace" - "time" ) // Config holds the configuration for connecting to InfluxDB. @@ -39,8 +40,8 @@ const ( var ( errEmptyOrganizationName = errors.New("organization name must not be empty") - errEmptyOrganizationId = errors.New("organization id must not be empty") - errEmptyBucketId = errors.New("bucket id must not be empty") + errEmptyOrganizationID = errors.New("organization id must not be empty") + errEmptyBucketID = errors.New("bucket id must not be empty") errEmptyBucketName = errors.New("bucket name must not be empty") errFindingBuckets = errors.New("failed in finding buckets") errFetchOrganization = errors.New("failed to fetch all organizations") @@ -76,16 +77,16 @@ func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string // // Parameters: // - ctx: Context for request cancellation and timeouts. -// - orgId: The ID of the organization to be deleted. Must not be empty. +// - orgID: The ID of the organization to be deleted. Must not be empty. // // Returns: -// - err: Error if the organization deletion fails or if orgId is empty. -func (c *Client) DeleteOrganization(ctx context.Context, orgId string) error { - if orgId == "" { - return errEmptyOrganizationId +// - err: Error if the organization deletion fails or if orgID is empty. +func (c *Client) DeleteOrganization(ctx context.Context, orgID string) error { + if orgID == "" { + return errEmptyOrganizationID } orgAPI := c.client.OrganizationsAPI() - err := orgAPI.DeleteOrganizationWithID(ctx, orgId) + err := orgAPI.DeleteOrganizationWithID(ctx, orgID) if err != nil { return err } @@ -102,7 +103,6 @@ func (c *Client) DeleteOrganization(ctx context.Context, orgId string) error { // - orgs: A map of organization IDs to their corresponding names. // - err: Error if the API call fails or the organizations cannot be retrieved. func (c *Client) ListOrganization(ctx context.Context) (map[string]string, error) { - orgAPI := c.client.OrganizationsAPI() allOrg, err := orgAPI.GetOrganizations(ctx) if err != nil { @@ -125,30 +125,26 @@ func (c *Client) ListOrganization(ctx context.Context) (map[string]string, error // CreateBucket creates a new bucket in InfluxDB for the specified organization. // Parameters: // - ctx: Context for request cancellation and timeouts. -// - orgId: The ID of the organization in which the bucket will be created. +// - orgID: The ID of the organization in which the bucket will be created. // - bucketName: The name of the bucket to be created. // // Returns: -// - bucketId: The ID of the newly created bucket. +// - bucketID: The ID of the newly created bucket. // - err: Error if bucket creation fails. -func (c *Client) CreateBucket(ctx context.Context, orgId string, bucketName string) (bucketId string, err error) { - - // Validate input - if orgId == "" { - err = errEmptyOrganizationId - return +func (c *Client) CreateBucket(ctx context.Context, orgID string, bucketName string) (bucketID string, err error) { + if orgID == "" { + return "", errEmptyOrganizationID } if bucketName == "" { - err = errEmptyBucketName - return + return "", errEmptyBucketName } bucketsAPI := c.client.BucketsAPI() - newBucket, err := bucketsAPI.CreateBucketWithNameWithID(ctx, orgId, bucketName) + newBucket, err := bucketsAPI.CreateBucketWithNameWithID(ctx, orgID, bucketName) if err != nil { c.logger.Errorf("failed to create new bucket with name '%v' %v", bucketName, err) - return + return "", err } c.logger.Debugf("bucket created with name '%v'", bucketName) return *newBucket.Id, nil @@ -162,12 +158,12 @@ func (c *Client) CreateBucket(ctx context.Context, orgId string, bucketName stri // // Returns: // - err: Error if the bucket deletion fails or if bucketID is empty. -func (c *Client) DeleteBucket(ctx context.Context, bucketId string) error { - if bucketId == "" { - return errEmptyBucketId +func (c *Client) DeleteBucket(ctx context.Context, bucketID string) error { + if bucketID == "" { + return errEmptyBucketID } bucketsAPI := c.client.BucketsAPI() - err := bucketsAPI.DeleteBucketWithID(ctx, bucketId) + err := bucketsAPI.DeleteBucketWithID(ctx, bucketID) if err != nil { return err } @@ -225,7 +221,7 @@ Returns: func (c *Client) ListBuckets(ctx context.Context, org string) (buckets map[string]string, err error) { // Validate input if org == "" { - return nil, errEmptyOrganizationId + return nil, errEmptyOrganizationID } bucketsAPI := c.client.BucketsAPI() @@ -312,7 +308,7 @@ func (c *Client) UseTracer(tracer any) { } } -func (c *Client) WritePoint(ctx context.Context, org, bucket string, measurement string, tags map[string]string, fields map[string]interface{}, timestamp time.Time) error { +func (c *Client) WritePoint(ctx context.Context, org, bucket string, measurement string, tags map[string]string, fields map[string]any, timestamp time.Time) error { writeAPI := c.client.WriteAPIBlocking(org, bucket) p := influxdb2.NewPoint(measurement, tags, fields, timestamp) err := writeAPI.WritePoint(ctx, p) @@ -336,7 +332,6 @@ func New(config Config) *Client { // If the health check fails, it logs an error and exits early without returning an error. // No parameters or return values. func (c *Client) Connect() { - c.logger.Debugf("connecting to influxdb at %v", c.config.Url) // Create a new client using an InfluxDB server base URL and an authentication token From b5443469b5cf0b56852d2da4cd207a96e1092302 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Tue, 29 Jul 2025 17:02:52 +0530 Subject: [PATCH 14/44] [linting] fixed some linting errors --- pkg/gofr/datasource/influxdb/influx_test.go | 12 ++++---- pkg/gofr/datasource/influxdb/influxdb.go | 31 +++++++++++---------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influx_test.go b/pkg/gofr/datasource/influxdb/influx_test.go index 830c5dd1c..f3353d030 100644 --- a/pkg/gofr/datasource/influxdb/influx_test.go +++ b/pkg/gofr/datasource/influxdb/influx_test.go @@ -10,7 +10,7 @@ import ( ) const ( - Url = "http://localhost:8086" + URL = "http://localhost:8086" Username = "admin" Password = "admin1234" Token = "F-QFQpmCL9UkR3qyoXnLkzWj03s6m4eCvYgDl1ePfHBf9ph7yxaSgQ6WN0i9giNgRTfONwVMK1f977r_g71oNQ==" @@ -23,16 +23,16 @@ func setupInflux(t *testing.T) *Client { t.Helper() app := gofr.New() client := New(Config{ - Url: Url, + URL: URL, Username: Username, Password: Password, Token: Token, }) app.AddInfluxDB(client) - require.Equal(t, client.config.Url, Url) - require.Equal(t, client.config.Username, Username) - require.Equal(t, client.config.Password, Password) - require.Equal(t, client.config.Token, Token) + require.Equal(t, URL, client.config.URL) + require.Equal(t, Username, client.config.Username) + require.Equal(t, Password, client.config.Password, Password) + require.Equal(t, Token, client.config.Token) return client } diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 651774971..8daf95411 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -11,7 +11,7 @@ import ( // Config holds the configuration for connecting to InfluxDB. type Config struct { - Url string + URL string Token string Username string Password string @@ -27,7 +27,7 @@ type Client struct { } type HealthInflux struct { - Url string + URL string Token string Username string Password string @@ -64,10 +64,12 @@ func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string } orgAPI := c.client.OrganizationsAPI() newOrg, err := orgAPI.CreateOrganizationWithName(ctx, orgName) + if err != nil { c.logger.Errorf("failed to create new organization with name '%v' %v", orgName, err) return "", err } + c.logger.Debugf("organization created with name '%v'", orgName) return *newOrg.Id, nil } @@ -112,7 +114,6 @@ func (c *Client) ListOrganization(ctx context.Context) (map[string]string, error if allOrg == nil || len(*allOrg) == 0 { return map[string]string{}, nil } - orgs := make(map[string]string, len(*allOrg)) for _, org := range *allOrg { if org.Id != nil { @@ -131,7 +132,7 @@ func (c *Client) ListOrganization(ctx context.Context) (map[string]string, error // Returns: // - bucketID: The ID of the newly created bucket. // - err: Error if bucket creation fails. -func (c *Client) CreateBucket(ctx context.Context, orgID string, bucketName string) (bucketID string, err error) { +func (c *Client) CreateBucket(ctx context.Context, orgID, bucketName string) (bucketID string, err error) { if orgID == "" { return "", errEmptyOrganizationID } @@ -163,8 +164,7 @@ func (c *Client) DeleteBucket(ctx context.Context, bucketID string) error { return errEmptyBucketID } bucketsAPI := c.client.BucketsAPI() - err := bucketsAPI.DeleteBucketWithID(ctx, bucketID) - if err != nil { + if err := bucketsAPI.DeleteBucketWithID(ctx, bucketID); err != nil { return err } return nil @@ -187,7 +187,7 @@ type Health struct { func (c *Client) HealthCheck(ctx context.Context) (any, error) { h := Health{Details: make(map[string]any)} h.Details["Username"] = c.config.Username - h.Details["Url"] = c.config.Url + h.Details["Url"] = c.config.URL health, err := c.client.Health(ctx) if err != nil { @@ -259,7 +259,7 @@ func (c *Client) Ping(ctx context.Context) (bool, error) { return ping, nil } -func (c *Client) Query(ctx context.Context, org string, fluxQuery string) ([]map[string]any, error) { +func (c *Client) Query(ctx context.Context, org, fluxQuery string) ([]map[string]any, error) { queryAPI := c.client.QueryAPI(org) result, err := queryAPI.Query(ctx, fluxQuery) if err != nil { @@ -308,11 +308,14 @@ func (c *Client) UseTracer(tracer any) { } } -func (c *Client) WritePoint(ctx context.Context, org, bucket string, measurement string, tags map[string]string, fields map[string]any, timestamp time.Time) error { +func (c *Client) WritePoint(ctx context.Context, + org, bucket, measurement string, + tags map[string]string, fields map[string]any, timestamp time.Time, +) error { writeAPI := c.client.WriteAPIBlocking(org, bucket) p := influxdb2.NewPoint(measurement, tags, fields, timestamp) - err := writeAPI.WritePoint(ctx, p) - if err != nil { + + if err := writeAPI.WritePoint(ctx, p); err != nil { c.logger.Errorf("Failed to write point to influxdb: %v", err.Error()) return err } @@ -332,11 +335,11 @@ func New(config Config) *Client { // If the health check fails, it logs an error and exits early without returning an error. // No parameters or return values. func (c *Client) Connect() { - c.logger.Debugf("connecting to influxdb at %v", c.config.Url) + c.logger.Debugf("connecting to influxdb at %v", c.config.URL) // Create a new client using an InfluxDB server base URL and an authentication token c.client = influxdb2.NewClient( - c.config.Url, + c.config.URL, c.config.Token, ) @@ -345,5 +348,5 @@ func (c *Client) Connect() { return } - c.logger.Logf("connected to influxdb at : %v", c.config.Url) + c.logger.Logf("connected to influxdb at : %v", c.config.URL) } From e2b7d69493dbefe160994a40ca8a9521f925d39f Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Tue, 29 Jul 2025 17:37:50 +0530 Subject: [PATCH 15/44] [fixed-linting] all linting errors fixed. --- pkg/gofr/datasource/influxdb/influx_test.go | 26 ++++++++++++++-- pkg/gofr/datasource/influxdb/influxdb.go | 33 +++++++++++++++++---- 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influx_test.go b/pkg/gofr/datasource/influxdb/influx_test.go index f3353d030..ecfc92cd2 100644 --- a/pkg/gofr/datasource/influxdb/influx_test.go +++ b/pkg/gofr/datasource/influxdb/influx_test.go @@ -2,6 +2,7 @@ package influxdb import ( "context" + "os" "testing" "time" @@ -13,26 +14,37 @@ const ( URL = "http://localhost:8086" Username = "admin" Password = "admin1234" - Token = "F-QFQpmCL9UkR3qyoXnLkzWj03s6m4eCvYgDl1ePfHBf9ph7yxaSgQ6WN0i9giNgRTfONwVMK1f977r_g71oNQ==" testOrgName = "org-test2" testBucketName = "bucket-test2" testFluxQuery = "from(bucket:\"bucket-test2\")|> range(start: -1h) |> filter(fn: (r) => r._measurement == \"stat\")" ) +func getEnv(key, fallback string) string { + if val := os.Getenv(key); val != "" { + return val + } + + return fallback +} + func setupInflux(t *testing.T) *Client { t.Helper() + + token := getEnv("INFLUXDB_TOKEN", "") + app := gofr.New() client := New(Config{ URL: URL, Username: Username, Password: Password, - Token: Token, + Token: token, }) app.AddInfluxDB(client) require.Equal(t, URL, client.config.URL) require.Equal(t, Username, client.config.Username) require.Equal(t, Password, client.config.Password, Password) - require.Equal(t, Token, client.config.Token) + require.Equal(t, token, client.config.Token) + return client } @@ -46,6 +58,7 @@ func TestPing(t *testing.T) { func creatOrganization(t *testing.T, client *Client, orgName string) (orgID string) { t.Helper() + ctx := context.Background() // try creating organization without name orgID, err := client.CreateOrganization(ctx, "") @@ -62,20 +75,25 @@ func creatOrganization(t *testing.T, client *Client, orgName string) (orgID stri func listOrganizations(ctx context.Context, t *testing.T, client *Client) map[string]string { t.Helper() + orgs, err := client.ListOrganization(ctx) require.NoError(t, err) + return orgs } func listBuckets(ctx context.Context, t *testing.T, client *Client, orgID string) map[string]string { t.Helper() + buckets, err := client.ListBuckets(ctx, orgID) require.NoError(t, err) + return buckets } func deleteOrganization(t *testing.T, client *Client, orgID string) { t.Helper() + ctx := context.Background() // try deleting empty id organization @@ -89,6 +107,7 @@ func deleteOrganization(t *testing.T, client *Client, orgID string) { func createNewBucket(t *testing.T, client *Client, orgID, name string) (bucketID string) { t.Helper() + ctx := context.Background() // try creating organization without name @@ -106,6 +125,7 @@ func createNewBucket(t *testing.T, client *Client, orgID, name string) (bucketID func deleteBucket(t *testing.T, client *Client, bucketID string) { t.Helper() + ctx := context.Background() // try creating delete empty bucket id diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 8daf95411..c45964537 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -62,6 +62,7 @@ func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string if orgName == "" { return "", errEmptyOrganizationName } + orgAPI := c.client.OrganizationsAPI() newOrg, err := orgAPI.CreateOrganizationWithName(ctx, orgName) @@ -71,6 +72,7 @@ func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string } c.logger.Debugf("organization created with name '%v'", orgName) + return *newOrg.Id, nil } @@ -87,11 +89,14 @@ func (c *Client) DeleteOrganization(ctx context.Context, orgID string) error { if orgID == "" { return errEmptyOrganizationID } + orgAPI := c.client.OrganizationsAPI() + err := orgAPI.DeleteOrganizationWithID(ctx, orgID) if err != nil { return err } + return nil } @@ -106,6 +111,7 @@ func (c *Client) DeleteOrganization(ctx context.Context, orgID string) error { // - err: Error if the API call fails or the organizations cannot be retrieved. func (c *Client) ListOrganization(ctx context.Context) (map[string]string, error) { orgAPI := c.client.OrganizationsAPI() + allOrg, err := orgAPI.GetOrganizations(ctx) if err != nil { return nil, errFetchOrganization @@ -114,12 +120,15 @@ func (c *Client) ListOrganization(ctx context.Context) (map[string]string, error if allOrg == nil || len(*allOrg) == 0 { return map[string]string{}, nil } + orgs := make(map[string]string, len(*allOrg)) + for _, org := range *allOrg { if org.Id != nil { orgs[*org.Id] = org.Name } } + return orgs, nil } @@ -136,18 +145,18 @@ func (c *Client) CreateBucket(ctx context.Context, orgID, bucketName string) (bu if orgID == "" { return "", errEmptyOrganizationID } + if bucketName == "" { return "", errEmptyBucketName } bucketsAPI := c.client.BucketsAPI() - newBucket, err := bucketsAPI.CreateBucketWithNameWithID(ctx, orgID, bucketName) + newBucket, err := bucketsAPI.CreateBucketWithNameWithID(ctx, orgID, bucketName) if err != nil { - c.logger.Errorf("failed to create new bucket with name '%v' %v", bucketName, err) return "", err } - c.logger.Debugf("bucket created with name '%v'", bucketName) + return *newBucket.Id, nil } @@ -163,10 +172,12 @@ func (c *Client) DeleteBucket(ctx context.Context, bucketID string) error { if bucketID == "" { return errEmptyBucketID } + bucketsAPI := c.client.BucketsAPI() if err := bucketsAPI.DeleteBucketWithID(ctx, bucketID); err != nil { return err } + return nil } @@ -193,6 +204,7 @@ func (c *Client) HealthCheck(ctx context.Context) (any, error) { if err != nil { h.Status = statusDown h.Details["error"] = err.Error() + return &h, errHealthCheckFailed } @@ -203,6 +215,7 @@ func (c *Client) HealthCheck(ctx context.Context) (any, error) { h.Details["Message"] = health.Message h.Details["Checks"] = health.Checks h.Details["Status"] = health.Status + return h, nil } @@ -225,19 +238,24 @@ func (c *Client) ListBuckets(ctx context.Context, org string) (buckets map[strin } bucketsAPI := c.client.BucketsAPI() + bucketsDomain, err := bucketsAPI.FindBucketsByOrgName(ctx, org) if err != nil { return nil, errFindingBuckets } + if bucketsDomain == nil { return nil, nil } + buckets = make(map[string]string) // Initialize the map + for _, bucket := range *bucketsDomain { if bucket.Name != "" { buckets[*bucket.Id] = bucket.Name } } + return buckets, nil } @@ -256,11 +274,13 @@ func (c *Client) Ping(ctx context.Context) (bool, error) { c.logger.Errorf("%v", err) return false, err } + return ping, nil } func (c *Client) Query(ctx context.Context, org, fluxQuery string) ([]map[string]any, error) { queryAPI := c.client.QueryAPI(org) + result, err := queryAPI.Query(ctx, fluxQuery) if err != nil { c.logger.Errorf("InfluxDB Flux Query '%v' failed: %v", fluxQuery, err.Error()) @@ -268,18 +288,20 @@ func (c *Client) Query(ctx context.Context, org, fluxQuery string) ([]map[string } var records []map[string]any + for result.Next() { if result.Err() != nil { c.logger.Errorf("Error processing InfluxDB Flux Query result: %v", result.Err().Error()) return nil, result.Err() } + record := make(map[string]any) for k, v := range result.Record().Values() { record[k] = v } + records = append(records, record) } - // Check for any final errors after iteration. if result.Err() != nil { c.logger.Errorf("Final error in InfluxDB Flux Query result: %v", result.Err().Error()) @@ -312,13 +334,14 @@ func (c *Client) WritePoint(ctx context.Context, org, bucket, measurement string, tags map[string]string, fields map[string]any, timestamp time.Time, ) error { - writeAPI := c.client.WriteAPIBlocking(org, bucket) p := influxdb2.NewPoint(measurement, tags, fields, timestamp) + writeAPI := c.client.WriteAPIBlocking(org, bucket) if err := writeAPI.WritePoint(ctx, p); err != nil { c.logger.Errorf("Failed to write point to influxdb: %v", err.Error()) return err } + return nil } From aabc2b5c94dbd7150a7c37a8231b44dcac0e4004 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Tue, 29 Jul 2025 17:38:23 +0530 Subject: [PATCH 16/44] [fixed-linting] all linting errors fixed. --- pkg/gofr/datasource/influxdb/influx_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/gofr/datasource/influxdb/influx_test.go b/pkg/gofr/datasource/influxdb/influx_test.go index ecfc92cd2..ed7a88540 100644 --- a/pkg/gofr/datasource/influxdb/influx_test.go +++ b/pkg/gofr/datasource/influxdb/influx_test.go @@ -44,7 +44,6 @@ func setupInflux(t *testing.T) *Client { require.Equal(t, Username, client.config.Username) require.Equal(t, Password, client.config.Password, Password) require.Equal(t, token, client.config.Token) - return client } From 2090fc14b6d0007621dc7bbdf6f19b8de302a8b1 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Tue, 29 Jul 2025 21:43:12 +0530 Subject: [PATCH 17/44] [fixed-linting] container linting errors fixed. --- pkg/gofr/container/datasources.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/gofr/container/datasources.go b/pkg/gofr/container/datasources.go index b53cfc658..9fe56707f 100644 --- a/pkg/gofr/container/datasources.go +++ b/pkg/gofr/container/datasources.go @@ -4,9 +4,10 @@ import ( "bytes" "context" "database/sql" - "github.com/redis/go-redis/v9" "time" + "github.com/redis/go-redis/v9" + "gofr.dev/pkg/gofr/datasource" "gofr.dev/pkg/gofr/datasource/pubsub" gofrSQL "gofr.dev/pkg/gofr/datasource/sql" @@ -729,7 +730,7 @@ type InfluxDB interface { CreateOrganization(ctx context.Context, org string) (string, error) // DeleteOrganization deletes a organization under the specified organization. - DeleteOrganization(ctx context.Context, orgId string) error + DeleteOrganization(ctx context.Context, orgID string) error // ListOrganization list all the available organization ListOrganization(ctx context.Context) (orgs map[string]string, err error) @@ -749,8 +750,8 @@ type InfluxDB interface { // CreateBucket creates a new bucket under the specified organization. CreateBucket(ctx context.Context, org, bucket string) (string, error) - // DeleteBucket deletes a bucketId with bucketId - DeleteBucket(ctx context.Context, bucketId string) error + // DeleteBucket deletes a bucketId with bucketID + DeleteBucket(ctx context.Context, bucketID string) error // ListBuckets lists all buckets under the specified organization. ListBuckets(ctx context.Context, org string) (map[string]string, error) From 06d9a6f00435b0a7d88c082e00bcfaf8ae5724bf Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 31 Jul 2025 11:36:33 +0530 Subject: [PATCH 18/44] [fixed-linting] some linting issues fixed. --- pkg/gofr/datasource/influxdb/influx_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influx_test.go b/pkg/gofr/datasource/influxdb/influx_test.go index ed7a88540..83dde73d6 100644 --- a/pkg/gofr/datasource/influxdb/influx_test.go +++ b/pkg/gofr/datasource/influxdb/influx_test.go @@ -44,11 +44,12 @@ func setupInflux(t *testing.T) *Client { require.Equal(t, Username, client.config.Username) require.Equal(t, Password, client.config.Password, Password) require.Equal(t, token, client.config.Token) + return client } func TestPing(t *testing.T) { - ctx := context.Background() + ctx := t.Context() config := setupInflux(t) health, err := config.Ping(ctx) require.NoError(t, err) // empty organization name @@ -58,7 +59,7 @@ func TestPing(t *testing.T) { func creatOrganization(t *testing.T, client *Client, orgName string) (orgID string) { t.Helper() - ctx := context.Background() + ctx := t.Context() // try creating organization without name orgID, err := client.CreateOrganization(ctx, "") require.Error(t, err) // empty organization name @@ -93,7 +94,7 @@ func listBuckets(ctx context.Context, t *testing.T, client *Client, orgID string func deleteOrganization(t *testing.T, client *Client, orgID string) { t.Helper() - ctx := context.Background() + ctx := t.Context() // try deleting empty id organization err := client.DeleteOrganization(ctx, "") @@ -107,7 +108,7 @@ func deleteOrganization(t *testing.T, client *Client, orgID string) { func createNewBucket(t *testing.T, client *Client, orgID, name string) (bucketID string) { t.Helper() - ctx := context.Background() + ctx := t.Context() // try creating organization without name bucketID, err := client.CreateBucket(ctx, orgID, "") @@ -124,8 +125,7 @@ func createNewBucket(t *testing.T, client *Client, orgID, name string) (bucketID func deleteBucket(t *testing.T, client *Client, bucketID string) { t.Helper() - - ctx := context.Background() + ctx := t.Context() // try creating delete empty bucket id err := client.DeleteBucket(ctx, "") From ad1116c48a489bd439efd1e49a908742195dd386 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Mon, 4 Aug 2025 21:45:27 +0530 Subject: [PATCH 19/44] [mocking] mocking metrics + logger --- go.work.sum | 110 ++++- pkg/gofr/container/mock_container.go | 5 + pkg/gofr/container/mock_datasources.go | 426 +++++++++++++++++- pkg/gofr/container/mock_metrics.go | 2 + .../datasource/influxdb/metrics_logger.go | 75 +++ pkg/gofr/datasource/influxdb/mock_logger.go | 139 ++++++ 6 files changed, 738 insertions(+), 19 deletions(-) create mode 100644 pkg/gofr/datasource/influxdb/metrics_logger.go create mode 100644 pkg/gofr/datasource/influxdb/mock_logger.go diff --git a/go.work.sum b/go.work.sum index 2a606e261..d42ad0e5e 100644 --- a/go.work.sum +++ b/go.work.sum @@ -11,6 +11,8 @@ cel.dev/expr v0.20.0 h1:OunBvVCfvpWlt4dN7zg3FM6TDkzOePe1+foGJ9AXeeI= cel.dev/expr v0.20.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= cel.dev/expr v0.23.0 h1:wUb94w6OYQS4uXraxo9U+wUAs9jT47Xvl4iPgAwM2ss= cel.dev/expr v0.23.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= +cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= +cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= @@ -31,6 +33,8 @@ cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmW cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go v0.112.2/go.mod h1:iEqjp//KquGIJV/m+Pk3xecgKNhV+ry+vVTsy4TbDms= cloud.google.com/go v0.118.3/go.mod h1:Lhs3YLnBlwJ4KA6nuObNMZ/fCbOQBPuWKPoE0Wa/9Vc= +cloud.google.com/go v0.121.1 h1:S3kTQSydxmu1JfLRLpKtxRPA7rSrYPRPEUmL/PavVUw= +cloud.google.com/go v0.121.1/go.mod h1:nRFlrHq39MNVWu+zESP2PosMWA0ryJw8KUBZ2iZpxbw= cloud.google.com/go/accessapproval v1.8.2/go.mod h1:aEJvHZtpjqstffVwF/2mCXXSQmpskyzvw6zKLvLutZM= cloud.google.com/go/accessapproval v1.8.3 h1:axlU03FRiXDNupsmPG7LKzuS4Enk1gf598M62lWVB74= cloud.google.com/go/accessapproval v1.8.3/go.mod h1:3speETyAv63TDrDmo5lIkpVueFkQcQchkiw/TAMbBo4= @@ -49,6 +53,8 @@ cloud.google.com/go/aiplatform v1.74.0 h1:rE2P5H7FOAFISAZilmdkapbk4CVgwfVs6FDWlh cloud.google.com/go/aiplatform v1.74.0/go.mod h1:hVEw30CetNut5FrblYd1AJUWRVSIjoyIvp0EVUh51HA= cloud.google.com/go/aiplatform v1.85.0 h1:80/GqdP8Tovaaw9Qr6fYZNDvwJeA9rLk8mYkqBJNIJQ= cloud.google.com/go/aiplatform v1.85.0/go.mod h1:S4DIKz3TFLSt7ooF2aCRdAqsUR4v/YDXUoHqn5P0EFc= +cloud.google.com/go/aiplatform v1.89.0 h1:niSJYc6ldWWVM9faXPo1Et1MVSQoLvVGriD7fwbJdtE= +cloud.google.com/go/aiplatform v1.89.0/go.mod h1:TzZtegPkinfXTtXVvZZpxx7noINFMVDrLkE7cEWhYEk= cloud.google.com/go/analytics v0.25.2/go.mod h1:th0DIunqrhI1ZWVlT3PH2Uw/9ANX8YHfFDEPqf/+7xM= cloud.google.com/go/analytics v0.25.3 h1:hX6JAsNbXd2uVjqjIuMcKpmhIybKrEunBiGxK4SwEFI= cloud.google.com/go/analytics v0.25.3/go.mod h1:pWoYg4yEr0iYg83LZRAicjDDdv54+Z//RyhzWwKbavI= @@ -56,6 +62,8 @@ cloud.google.com/go/analytics v0.26.0 h1:O2kWr2Sd4ep3I+YJ4aiY0G4+zWz6sp4eTce+JVn cloud.google.com/go/analytics v0.26.0/go.mod h1:KZWJfs8uX/+lTjdIjvT58SFa86V9KM6aPXwZKK6uNVI= cloud.google.com/go/analytics v0.28.0 h1:Bs17XtOjd+BhJtn+4QsCo8huMt7Zzziqn0umPz8ov2A= cloud.google.com/go/analytics v0.28.0/go.mod h1:hNT09bdzGB3HsL7DBhZkoPi4t5yzZPZROoFv+JzGR7I= +cloud.google.com/go/analytics v0.28.1 h1:W2ft49J/LeEj9A07Jsd5Q2kAzajK0j0IffOyyzbxw04= +cloud.google.com/go/analytics v0.28.1/go.mod h1:iPaIVr5iXPB3JzkKPW1JddswksACRFl3NSHgVHsuYC4= cloud.google.com/go/apigateway v1.7.2/go.mod h1:+weId+9aR9J6GRwDka7jIUSrKEX60XGcikX7dGU8O7M= cloud.google.com/go/apigateway v1.7.3 h1:Mn7cC5iWJz+cSMS/Hb+N2410CpZ6c8XpJKaexBl0Gxs= cloud.google.com/go/apigateway v1.7.3/go.mod h1:uK0iRHdl2rdTe79bHW/bTsKhhXPcFihjUdb7RzhTPf4= @@ -91,6 +99,8 @@ cloud.google.com/go/asset v1.20.4 h1:6oNgjcs5KCPGBD71G0IccK6TfeFsEtBTyQ3Q+Dn09bs cloud.google.com/go/asset v1.20.4/go.mod h1:DP09pZ+SoFWUZyPZx26xVroHk+6+9umnQv+01yfJxbM= cloud.google.com/go/asset v1.21.0 h1:AtsFIJU1gH3jXHf+2cyugTkpOPT8VYyjCK2yNmQltvg= cloud.google.com/go/asset v1.21.0/go.mod h1:0lMJ0STdyImZDSCB8B3i/+lzIquLBpJ9KZ4pyRvzccM= +cloud.google.com/go/asset v1.21.1 h1:i55wWC/EwVdHMyJgRfbLp/L6ez4nQuOpZwSxkuqN9ek= +cloud.google.com/go/asset v1.21.1/go.mod h1:7AzY1GCC+s1O73yzLM1IpHFLHz3ws2OigmCpOQHwebk= cloud.google.com/go/assuredworkloads v1.12.2/go.mod h1:/WeRr/q+6EQYgnoYrqCVgw7boMoDfjXZZev3iJxs2Iw= cloud.google.com/go/assuredworkloads v1.12.3 h1:RU1WhF1zMggdXAZ+ezYTn4Eh/FdiX7sz8lLXGERn4Po= cloud.google.com/go/assuredworkloads v1.12.3/go.mod h1:iGBkyMGdtlsxhCi4Ys5SeuvIrPTeI6HeuEJt7qJgJT8= @@ -101,6 +111,8 @@ cloud.google.com/go/auth v0.12.1/go.mod h1:BFMu+TNpF3DmvfBO9ClqTR/SiqVIm7LukKF9m cloud.google.com/go/auth v0.13.0/go.mod h1:COOjD9gwfKNKz+IIduatIhYJQIc0mG3H102r/EMxX6Q= cloud.google.com/go/auth v0.14.1/go.mod h1:4JHUxlGXisL0AW8kXPtUF6ztuOksyfUQNFjfsOCXkPM= cloud.google.com/go/auth v0.15.0/go.mod h1:WJDGqZ1o9E9wKIL+IwStfyn/+s59zl4Bi+1KQNVXLZ8= +cloud.google.com/go/auth v0.16.0/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= +cloud.google.com/go/auth v0.16.1/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= cloud.google.com/go/automl v1.14.2/go.mod h1:mIat+Mf77W30eWQ/vrhjXsXaRh8Qfu4WiymR0hR6Uxk= cloud.google.com/go/automl v1.14.4 h1:vkD+hQ75SMINMgJBT/KDpFYvfQLzJbtIQZdw0AWq8Rs= @@ -139,6 +151,8 @@ cloud.google.com/go/bigquery v1.66.2 h1:EKOSqjtO7jPpJoEzDmRctGea3c2EOGoexy8VyY9d cloud.google.com/go/bigquery v1.66.2/go.mod h1:+Yd6dRyW8D/FYEjUGodIbu0QaoEmgav7Lwhotup6njo= cloud.google.com/go/bigquery v1.67.0 h1:GXleMyn/cu5+DPLy9Rz5f5IULWTLrepwbQnP/5qrVbY= cloud.google.com/go/bigquery v1.67.0/go.mod h1:HQeP1AHFuAz0Y55heDSb0cjZIhnEkuwFRBGo6EEKHug= +cloud.google.com/go/bigquery v1.69.0 h1:rZvHnjSUs5sHK3F9awiuFk2PeOaB8suqNuim21GbaTc= +cloud.google.com/go/bigquery v1.69.0/go.mod h1:TdGLquA3h/mGg+McX+GsqG9afAzTAcldMjqhdjHTLew= cloud.google.com/go/bigtable v1.33.0/go.mod h1:HtpnH4g25VT1pejHRtInlFPnN5sjTxbQlsYBjh9t5l0= cloud.google.com/go/bigtable v1.34.0 h1:eIgi3QLcN4aq8p6n9U/zPgmHeBP34sm9FiKq4ik/ZoY= cloud.google.com/go/bigtable v1.34.0/go.mod h1:p94uLf6cy6D73POkudMagaFF3x9c7ktZjRnOUVGjZAw= @@ -195,6 +209,8 @@ cloud.google.com/go/compute v1.34.0 h1:+k/kmViu4TEi97NGaxAATYtpYBviOWJySPZ+ekA95 cloud.google.com/go/compute v1.34.0/go.mod h1:zWZwtLwZQyonEvIQBuIa0WvraMYK69J5eDCOw9VZU4g= cloud.google.com/go/compute v1.37.0 h1:XxtZlXYkZXub3LNaLu90TTemcFqIU1yZ4E4q9VlR39A= cloud.google.com/go/compute v1.37.0/go.mod h1:AsK4VqrSyXBo4SMbRtfAO1VfaMjUEjEwv1UB/AwVp5Q= +cloud.google.com/go/compute v1.38.0 h1:MilCLYQW2m7Dku8hRIIKo4r0oKastlD74sSu16riYKs= +cloud.google.com/go/compute v1.38.0/go.mod h1:oAFNIuXOmXbK/ssXm3z4nZB8ckPdjltJ7xhHCdbWFZM= cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= @@ -210,6 +226,8 @@ cloud.google.com/go/container v1.42.2 h1:8ncSEBjkng6ucCICauaUGzBomoM2VyYzleAum1O cloud.google.com/go/container v1.42.2/go.mod h1:y71YW7uR5Ck+9Vsbst0AF2F3UMgqmsN4SP8JR9xEsR8= cloud.google.com/go/container v1.42.4 h1:N8I+GiImhrSMUcKSOYTd8D6wBWyWSgPa4IJkSdlR2jk= cloud.google.com/go/container v1.42.4/go.mod h1:wf9lKc3ayWVbbV/IxKIDzT7E+1KQgzkzdxEJpj1pebE= +cloud.google.com/go/container v1.43.0 h1:A6J92FJPfxTvyX7MHF+w4t2W9WCqvHOi9UB5SAeSy3w= +cloud.google.com/go/container v1.43.0/go.mod h1:ETU9WZ1KM9ikEKLzrhRVao7KHtalDQu6aPqM34zDr/U= cloud.google.com/go/containeranalysis v0.13.2/go.mod h1:AiKvXJkc3HiqkHzVIt6s5M81wk+q7SNffc6ZlkTDgiE= cloud.google.com/go/containeranalysis v0.13.3 h1:1D8U75BeotZxrG4jR6NYBtOt+uAeBsWhpBZmSYLakQw= cloud.google.com/go/containeranalysis v0.13.3/go.mod h1:0SYnagA1Ivb7qPqKNYPkCtphhkJn3IzgaSp3mj+9XAY= @@ -227,11 +245,15 @@ cloud.google.com/go/dataflow v0.10.3 h1:+7IfIXzYWSybIIDGK9FN2uqBsP/5b/Y0pBYzNhcm cloud.google.com/go/dataflow v0.10.3/go.mod h1:5EuVGDh5Tg4mDePWXMMGAG6QYAQhLNyzxdNQ0A1FfW4= cloud.google.com/go/dataflow v0.10.6 h1:UKUD8I7So3H646JHZWcrYVgf2nuEB27l015zUErPnow= cloud.google.com/go/dataflow v0.10.6/go.mod h1:Vi0pTYCVGPnM2hWOQRyErovqTu2xt2sr8Rp4ECACwUI= +cloud.google.com/go/dataflow v0.11.0 h1:AdhB4cAkMOC9NtrHJxpKOVvO/VqBLaIyk0tEEhbGjYM= +cloud.google.com/go/dataflow v0.11.0/go.mod h1:gNHC9fUjlV9miu0hd4oQaXibIuVYTQvZhMdPievKsPk= cloud.google.com/go/dataform v0.10.2/go.mod h1:oZHwMBxG6jGZCVZqqMx+XWXK+dA/ooyYiyeRbUxI15M= cloud.google.com/go/dataform v0.10.3 h1:ZpGkZV8OyhUhvN/tfLffU2ki5ERTtqOunkIaiVAhmw0= cloud.google.com/go/dataform v0.10.3/go.mod h1:8SruzxHYCxtvG53gXqDZvZCx12BlsUchuV/JQFtyTCw= cloud.google.com/go/dataform v0.11.2 h1:poGCMWMvu/t2SooaWDHJAJiUyAtWYzKy+SGDNez2RI0= cloud.google.com/go/dataform v0.11.2/go.mod h1:IMmueJPEKpptT2ZLWlvIYjw6P/mYHHxA7/SUBiXqZUY= +cloud.google.com/go/dataform v0.12.0 h1:0eCPTPUC/RZ863aVfXTJLkg0tEpdpn62VD6ywSmmzxM= +cloud.google.com/go/dataform v0.12.0/go.mod h1:PuDIEY0lSVuPrZqcFji1fmr5RRvz3DGz4YP/cONc8g4= cloud.google.com/go/datafusion v1.8.2/go.mod h1:XernijudKtVG/VEvxtLv08COyVuiYPraSxm+8hd4zXA= cloud.google.com/go/datafusion v1.8.3 h1:FTMtsf2nfGGlDCuE84/RvVaCcTIYE7WQSB0noeO0cwI= cloud.google.com/go/datafusion v1.8.3/go.mod h1:hyglMzE57KRf0Rf/N2VRPcHCwKfZAAucx+LATY6Jc6Q= @@ -249,6 +271,8 @@ cloud.google.com/go/dataplex v1.22.0 h1:j4hD6opb+gq9CJNPFIlIggoW8Kjymg8Wmy2mdHmQ cloud.google.com/go/dataplex v1.22.0/go.mod h1:g166QMCGHvwc3qlTG4p34n+lHwu7JFfaNpMfI2uO7b8= cloud.google.com/go/dataplex v1.25.2 h1:jgfG6iqPVJxNPSpVCxH4diHMFb87wNd0F1kDgU3XJCk= cloud.google.com/go/dataplex v1.25.2/go.mod h1:AH2/a7eCYvFP58scJGR7YlSY9qEhM8jq5IeOA/32IZ0= +cloud.google.com/go/dataplex v1.25.3 h1:Xr0Toh6wyBlmL3H4EPu1YKwxUtkDSzzq+IP0iLc88kk= +cloud.google.com/go/dataplex v1.25.3/go.mod h1:wOJXnOg6bem0tyslu4hZBTncfqcPNDpYGKzed3+bd+E= cloud.google.com/go/dataproc/v2 v2.10.0/go.mod h1:HD16lk4rv2zHFhbm8gGOtrRaFohMDr9f0lAUMLmg1PM= cloud.google.com/go/dataproc/v2 v2.10.1 h1:2vOv471LrcSn91VNzijcH+OkDRLa3kdyymOfKqbwZ4c= cloud.google.com/go/dataproc/v2 v2.10.1/go.mod h1:fq+LSN/HYUaaV2EnUPFVPxfe1XpzGVqFnL0TTXs8juk= @@ -261,6 +285,8 @@ cloud.google.com/go/dataqna v0.9.3 h1:lGUj2FYs650EUPDMV6plWBAoh8qH9Bu1KCz1PUYF2V cloud.google.com/go/dataqna v0.9.3/go.mod h1:PiAfkXxa2LZYxMnOWVYWz3KgY7txdFg9HEMQPb4u1JA= cloud.google.com/go/dataqna v0.9.6 h1:ymqgCzymbsVgBvD4jhdt7HN9cVwg9x60jkozpp/omFQ= cloud.google.com/go/dataqna v0.9.6/go.mod h1:rjnNwjh8l3ZsvrANy6pWseBJL2/tJpCcBwJV8XCx4kU= +cloud.google.com/go/dataqna v0.9.7 h1:qTRAG/E3T63Xj1orefRlwupfwH9c9ERUAnWSRGp75so= +cloud.google.com/go/dataqna v0.9.7/go.mod h1:4ac3r7zm7Wqm8NAc8sDIDM0v7Dz7d1e/1Ka1yMFanUM= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/datastore v1.20.0 h1:NNpXoyEqIJmZFc0ACcwBEaXnmscUpcG4NkKnbCePmiM= @@ -279,6 +305,8 @@ cloud.google.com/go/deploy v1.26.2 h1:1c2Cd3jdb0mrKHHfyzSQ5DRmxgYd07tIZZzuMNrwDx cloud.google.com/go/deploy v1.26.2/go.mod h1:XpS3sG/ivkXCfzbzJXY9DXTeCJ5r68gIyeOgVGxGNEs= cloud.google.com/go/deploy v1.27.1 h1:Rs8v4J68cZ45RfimX0wjraXaF4WZl1SIR+hkmGaK6Ag= cloud.google.com/go/deploy v1.27.1/go.mod h1:il2gxiMgV3AMlySoQYe54/xpgVDoEh185nj4XjJ+GRk= +cloud.google.com/go/deploy v1.27.2 h1:C0VqBhFyQFp6+xgPHZAD7LeRA4XGy5YLzGmPQ2NhlLk= +cloud.google.com/go/deploy v1.27.2/go.mod h1:4NHWE7ENry2A4O1i/4iAPfXHnJCZ01xckAKpZQwhg1M= cloud.google.com/go/dialogflow v1.60.0/go.mod h1:PjsrI+d2FI4BlGThxL0+Rua/g9vLI+2A1KL7s/Vo3pY= cloud.google.com/go/dialogflow v1.64.1 h1:6fU4IKLpvgpXqiUCE8gUp8eV5u629SCtiyXMudXtZSg= cloud.google.com/go/dialogflow v1.64.1/go.mod h1:jkv4vTiGhEUPBzmk1sJ+S1Duu2epCOBNHoWUImHkO5U= @@ -293,6 +321,8 @@ cloud.google.com/go/dlp v1.21.0 h1:9kz7+gaB/0gBZsDUnNT1asDihNZSrRFSeUTBcBdUAkk= cloud.google.com/go/dlp v1.21.0/go.mod h1:Y9HOVtPoArpL9sI1O33aN/vK9QRwDERU9PEJJfM8DvE= cloud.google.com/go/dlp v1.22.1 h1:aZvDXCSNmPjhawF/thQa/GNIoW16JGNlI5L5N/HNXGU= cloud.google.com/go/dlp v1.22.1/go.mod h1:Gc7tGo1UJJTBRt4OvNQhm8XEQ0i9VidAiGXBVtsftjM= +cloud.google.com/go/dlp v1.23.0 h1:3xWRKylXxhysaQaV+DLev1YcIywFUCc7yJEE6R7ZGDQ= +cloud.google.com/go/dlp v1.23.0/go.mod h1:vVT4RlyPMEMcVHexdPT6iMVac3seq3l6b8UPdYpgFrg= cloud.google.com/go/documentai v1.35.0/go.mod h1:ZotiWUlDE8qXSUqkJsGMQqVmfTMYATwJEYqbPXTR9kk= cloud.google.com/go/documentai v1.35.1 h1:52RfiUsoblXcE57CfKJGnITWLxRM30BcqNk/BKZl2LI= cloud.google.com/go/documentai v1.35.1/go.mod h1:WJjwUAQfwQPJORW8fjz7RODprMULDzEGLA2E6WxenFw= @@ -342,6 +372,8 @@ cloud.google.com/go/gkebackup v1.6.3 h1:djdExe/QgoKdp1gnIO1G5BoO1o/yGQOQJJEZ4QKT cloud.google.com/go/gkebackup v1.6.3/go.mod h1:JJzGsA8/suXpTDtqI7n9RZW97PXa2CIp+n8aRC/y57k= cloud.google.com/go/gkebackup v1.7.0 h1:9nDcyMJvTEmsWhJv+sIqMLRIJaEmpkpirxt+cOlaDjM= cloud.google.com/go/gkebackup v1.7.0/go.mod h1:oPHXUc6X6tg6Zf/7QmKOfXOFaVzBEgMWpLDb4LqngWA= +cloud.google.com/go/gkebackup v1.8.0 h1:eBqOt61yEChvj7I/GDPBbdCCRdUPudD1qrQYfYWV3Ok= +cloud.google.com/go/gkebackup v1.8.0/go.mod h1:FjsjNldDilC9MWKEHExnK3kKJyTDaSdO1vF0QeWSOPU= cloud.google.com/go/gkeconnect v0.12.0/go.mod h1:zn37LsFiNZxPN4iO7YbUk8l/E14pAJ7KxpoXoxt7Ly0= cloud.google.com/go/gkeconnect v0.12.1 h1:YVpR0vlHSP/wD74PXEbKua4Aamud+wiYm4TiewNjD3M= cloud.google.com/go/gkeconnect v0.12.1/go.mod h1:L1dhGY8LjINmWfR30vneozonQKRSIi5DWGIHjOqo58A= @@ -361,6 +393,8 @@ cloud.google.com/go/gkemulticloud v1.5.3 h1:334aZmOzIt3LVBpguCof8IHaLaftcZlx+L0T cloud.google.com/go/gkemulticloud v1.5.3/go.mod h1:KPFf+/RcfvmuScqwS9/2MF5exZAmXSuoSLPuaQ98Xlk= cloud.google.com/go/grafeas v0.3.11 h1:CobnwnyeY1j1Defi5vbEircI+jfrk3ci5m004ZjiFP4= cloud.google.com/go/grafeas v0.3.11/go.mod h1:dcQyG2+T4tBgG0MvJAh7g2wl/xHV2w+RZIqivwuLjNg= +cloud.google.com/go/grafeas v0.3.15 h1:lBjwKmhpiqOAFaE0xdqF8CqO74a99s8tUT5mCkBBxPs= +cloud.google.com/go/grafeas v0.3.15/go.mod h1:irwcwIQOBlLBotGdMwme8PipnloOPqILfIvMwlmu8Pk= cloud.google.com/go/gsuiteaddons v1.7.2/go.mod h1:GD32J2rN/4APilqZw4JKmwV84+jowYYMkEVwQEYuAWc= cloud.google.com/go/gsuiteaddons v1.7.3 h1:QafYhVhyFGpidBUUlVhy6lUHFogFOycVYm9DV7MinhA= cloud.google.com/go/gsuiteaddons v1.7.3/go.mod h1:0rR+LC21v1Sx1Yb6uohHI/F8DF3h2arSJSHvfi3GmyQ= @@ -375,6 +409,8 @@ cloud.google.com/go/iap v1.10.3 h1:OWNYFHPyIBNHEAEFdVKOltYWe0g3izSrpFJW6Iidovk= cloud.google.com/go/iap v1.10.3/go.mod h1:xKgn7bocMuCFYhzRizRWP635E2LNPnIXT7DW0TlyPJ8= cloud.google.com/go/iap v1.11.1 h1:RWWGRaPe/icBqNLTk83hfLkBZOh5TPufUTyWDWRldFo= cloud.google.com/go/iap v1.11.1/go.mod h1:qFipMJ4nOIv4yDHZxn31PiS8QxJJH2FlxgH9aFauejw= +cloud.google.com/go/iap v1.11.2 h1:VIioCrYsyWiRGx7Y8RDNylpI6d4t1Qx5ZgSLUVmWWPo= +cloud.google.com/go/iap v1.11.2/go.mod h1:Bh99DMUpP5CitL9lK0BC8MYgjjYO4b3FbyhgW1VHJvg= cloud.google.com/go/ids v1.5.2/go.mod h1:P+ccDD96joXlomfonEdCnyrHvE68uLonc7sJBPVM5T0= cloud.google.com/go/ids v1.5.3 h1:wbFF7twu0XScFr+dtsVxTTttbFIRYt/SJjZiHFidtYE= cloud.google.com/go/ids v1.5.3/go.mod h1:a2MX8g18Eqs7yxD/pnEdid42SyBUm9LIzSWf8Jux9OY= @@ -400,6 +436,7 @@ cloud.google.com/go/logging v1.12.0/go.mod h1:wwYBt5HlYP1InnrtYI0wtwttpVU1rifnMT cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= cloud.google.com/go/longrunning v0.5.6/go.mod h1:vUaDrWYOMKRuhiv6JBnn49YxCPz2Ayn9GqyjaBT8/mA= +cloud.google.com/go/longrunning v0.6.6/go.mod h1:hyeGJUrPHcx0u2Uu1UFSoYZLn4lkMrccJig0t4FI7yw= cloud.google.com/go/managedidentities v1.7.2/go.mod h1:t0WKYzagOoD3FNtJWSWcU8zpWZz2i9cw2sKa9RiPx5I= cloud.google.com/go/managedidentities v1.7.3 h1:b9xGs24BIjfyvLgCtJoClOZpPi8d8owPgWe5JEINgaY= cloud.google.com/go/managedidentities v1.7.3/go.mod h1:H9hO2aMkjlpY+CNnKWRh+WoQiUIDO8457wWzUGsdtLA= @@ -412,6 +449,8 @@ cloud.google.com/go/maps v1.19.0 h1:deVm1ZFyCrUwxG11CdvtBz350VG5JUQ/LHTLnQrBgrM= cloud.google.com/go/maps v1.19.0/go.mod h1:goHUXrmzoZvQjUVd0KGhH8t3AYRm17P8b+fsyR1UAmQ= cloud.google.com/go/maps v1.20.4 h1:vShJlIzVc3MSUcvdH1j2plmDP/KyWc9e0Th73mY4Kt0= cloud.google.com/go/maps v1.20.4/go.mod h1:Act0Ws4HffrECH+pL8YYy1scdSLegov7+0c6gvKqRzI= +cloud.google.com/go/maps v1.21.0 h1:El61AfMxC1sU/RU8Wzs9dkZEgltyunKM86aKF9aDlaE= +cloud.google.com/go/maps v1.21.0/go.mod h1:cqzZ7+DWUKKbPTgqE+KuNQtiCRyg/o7WZF9zDQk+HQs= cloud.google.com/go/mediatranslation v0.9.2/go.mod h1:1xyRoDYN32THzy+QaU62vIMciX0CFexplju9t30XwUc= cloud.google.com/go/mediatranslation v0.9.3 h1:nRBjeaMLipw05Br+qDAlSCcCQAAlat4mvpafztbEVgc= cloud.google.com/go/mediatranslation v0.9.3/go.mod h1:KTrFV0dh7duYKDjmuzjM++2Wn6yw/I5sjZQVV5k3BAA= @@ -427,6 +466,8 @@ cloud.google.com/go/metastore v1.14.3 h1:jDqeCw6NGDRAPT9+2Y/EjnWAB0BfCcUfmPLOyhB cloud.google.com/go/metastore v1.14.3/go.mod h1:HlbGVOvg0ubBLVFRk3Otj3gtuzInuzO/TImOBwsKlG4= cloud.google.com/go/metastore v1.14.6 h1:X/eWwRv83ACfRPVrXlFM4DfJ7gwXRC1Tziv6w5MGxLU= cloud.google.com/go/metastore v1.14.6/go.mod h1:iDbuGwlDr552EkWA5E1Y/4hHme3cLv3ZxArKHXjS2OU= +cloud.google.com/go/metastore v1.14.7 h1:dLm59AHHZCorveCylj7c2iWhkQsmMIeWTsV+tG/BXtY= +cloud.google.com/go/metastore v1.14.7/go.mod h1:0dka99KQofeUgdfu+K/Jk1KeT9veWZlxuZdJpZPtuYU= cloud.google.com/go/monitoring v1.21.2/go.mod h1:hS3pXvaG8KgWTSz+dAdyzPrGUYmi2Q+WFX8g2hqVEZU= cloud.google.com/go/monitoring v1.22.1 h1:KQbnAC4IAH+5x3iWuPZT5iN9VXqKMzzOgqcYB6fqPDE= cloud.google.com/go/monitoring v1.22.1/go.mod h1:AuZZXAoN0WWWfsSvET1Cpc4/1D8LXq8KRDU87fMS6XY= @@ -480,6 +521,8 @@ cloud.google.com/go/osconfig v1.14.3 h1:cyf1PMK5c2/WOIr5r2lxjH/XBJMA9P4zC8Tm10i0 cloud.google.com/go/osconfig v1.14.3/go.mod h1:9D2MS1Etne18r/mAeW5jtto3toc9H1qu9wLNDG3NvQg= cloud.google.com/go/osconfig v1.14.5 h1:r3enRq2DarWyiE/BhHjZf1Yc/iC2YBsyvqqtEGD+upk= cloud.google.com/go/osconfig v1.14.5/go.mod h1:XH+NjBVat41I/+xgQzKOJEhuC4xI7lX2INE5SWnVr9U= +cloud.google.com/go/osconfig v1.14.6 h1:4uJrA1obzMBp1I+DF15y/MvsXKIODevuANpq3QhvX30= +cloud.google.com/go/osconfig v1.14.6/go.mod h1:LS39HDBH0IJDFgOUkhSZUHFQzmcWaCpYXLrc3A4CVzI= cloud.google.com/go/oslogin v1.14.2/go.mod h1:M7tAefCr6e9LFTrdWRQRrmMeKHbkvc4D9g6tHIjHySA= cloud.google.com/go/oslogin v1.14.3 h1:yomxnFPk+ye0zd0mJ15nn9fH4Ns7ex4xA3ll+u2q59A= cloud.google.com/go/oslogin v1.14.3/go.mod h1:fDEGODTG/W9ZGUTHTlMh8euXWC1fTcgjJ9Kcxxy14a8= @@ -546,6 +589,8 @@ cloud.google.com/go/retail v1.19.2 h1:PT6CUlazIFIOLLJnV+bPBtiSH8iusKZ+FZRzZYFt2v cloud.google.com/go/retail v1.19.2/go.mod h1:71tRFYAcR4MhrZ1YZzaJxr030LvaZiIcupH7bXfFBcY= cloud.google.com/go/retail v1.20.0 h1:SbvW4zrmY+2sN76xU9syXzOGC9496TZ6r3euIyCn7Nw= cloud.google.com/go/retail v1.20.0/go.mod h1:1CXWDZDJTOsK6lPjkv67gValP9+h1TMadTC9NpFFr9s= +cloud.google.com/go/retail v1.21.0 h1:8jgWgtAg1mk91WmaoWRTlL9CcvazPwqZ3YT9n6Gva9U= +cloud.google.com/go/retail v1.21.0/go.mod h1:LuG+QvBdLfKfO+7nnF3eA3l1j4TQw3Sg+UqlUorquRc= cloud.google.com/go/run v1.7.0/go.mod h1:IvJOg2TBb/5a0Qkc6crn5yTy5nkjcgSWQLhgO8QL8PQ= cloud.google.com/go/run v1.8.1 h1:aeVLygw0BGLH+Zbj8v3K3nEHvKlgoq+j8fcRJaYZtxY= cloud.google.com/go/run v1.8.1/go.mod h1:wR5IG8Nujk9pyyNai187K4p8jzSLeqCKCAFBrZ2Sd4c= @@ -553,6 +598,8 @@ cloud.google.com/go/run v1.9.0 h1:9WeTqeEcriXqRViXMNwczjFJjixOSBlSlk/fW3lfKPg= cloud.google.com/go/run v1.9.0/go.mod h1:Dh0+mizUbtBOpPEzeXMM22t8qYQpyWpfmUiWQ0+94DU= cloud.google.com/go/run v1.9.3 h1:BrB0Y/BlsyWKdHebDp3CpbV9knwcWqqQI4RWYElf1zQ= cloud.google.com/go/run v1.9.3/go.mod h1:Si9yDIkUGr5vsXE2QVSWFmAjJkv/O8s3tJ1eTxw3p1o= +cloud.google.com/go/run v1.10.0 h1:CDhz0PPzI/cVpmNFyHe3Yp21jNpiAqtkfRxuoLi+JU0= +cloud.google.com/go/run v1.10.0/go.mod h1:z7/ZidaHOCjdn5dV0eojRbD+p8RczMk3A7Qi2L+koHg= cloud.google.com/go/scheduler v1.11.2/go.mod h1:GZSv76T+KTssX2I9WukIYQuQRf7jk1WI+LOcIEHUUHk= cloud.google.com/go/scheduler v1.11.3 h1:p6+h8BoYJC+TvUijGBfORN6nuhOvJ3EwZ2H84CZ1ZEU= cloud.google.com/go/scheduler v1.11.3/go.mod h1:Io2+gcvUjLX1GdymwaSPJ6ZYxHN9/NNGL5kIV3Ax5+Q= @@ -595,6 +642,8 @@ cloud.google.com/go/spanner v1.76.1 h1:vYbVZuXfnFwvNcvH3lhI2PeUA+kHyqKmLC7mJWaC4 cloud.google.com/go/spanner v1.76.1/go.mod h1:YtwoE+zObKY7+ZeDCBtZ2ukM+1/iPaMfUM+KnTh/sx0= cloud.google.com/go/spanner v1.80.0 h1:4B2hoN1TF0qghiK7CYjYzjRt0/EEacIlS/UJl0k2hKA= cloud.google.com/go/spanner v1.80.0/go.mod h1:XQWUqx9r8Giw6gNh0Gu8xYfz7O+dAKouAkFCxG/mZC8= +cloud.google.com/go/spanner v1.82.0 h1:w9uO8RqEoBooBLX4nqV1RtgudyU2ZX780KTLRgeVg60= +cloud.google.com/go/spanner v1.82.0/go.mod h1:BzybQHFQ/NqGxvE/M+/iU29xgutJf7Q85/4U9RWMto0= cloud.google.com/go/speech v1.25.2/go.mod h1:KPFirZlLL8SqPaTtG6l+HHIFHPipjbemv4iFg7rTlYs= cloud.google.com/go/speech v1.26.0 h1:qvURtJs7BQzQhbxWxwai0pT79S8KLVKJ/4W8igVkt1Y= cloud.google.com/go/speech v1.26.0/go.mod h1:78bqDV2SgwFlP/M4n3i3PwLthFq6ta7qmyG6lUV7UCA= @@ -610,11 +659,15 @@ cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyX cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= cloud.google.com/go/storage v1.50.0 h1:3TbVkzTooBvnZsk7WaAQfOsNrdoM8QHusXA1cpk6QJs= cloud.google.com/go/storage v1.50.0/go.mod h1:l7XeiD//vx5lfqE3RavfmU9yvk5Pp0Zhcv482poyafY= +cloud.google.com/go/storage v1.53.0 h1:gg0ERZwL17pJ+Cz3cD2qS60w1WMDnwcm5YPAIQBHUAw= +cloud.google.com/go/storage v1.53.0/go.mod h1:7/eO2a/srr9ImZW9k5uufcNahT2+fPb8w5it1i5boaA= cloud.google.com/go/storagetransfer v1.11.2/go.mod h1:FcM29aY4EyZ3yVPmW5SxhqUdhjgPBUOFyy4rqiQbias= cloud.google.com/go/storagetransfer v1.12.1 h1:W3v9A7MGBN7H9sAFstyciwP/1XEQhUhZfrjclmDnpMs= cloud.google.com/go/storagetransfer v1.12.1/go.mod h1:hQqbfs8/LTmObJyCC0KrlBw8yBJ2bSFlaGila0qBMk4= cloud.google.com/go/storagetransfer v1.12.4 h1:2gFmZvD6G0qC57IIQ1Uga5TjvRwDyMW8lGLv9a8+tC4= cloud.google.com/go/storagetransfer v1.12.4/go.mod h1:p1xLKvpt78aQFRJ8lZGYArgFuL4wljFzitPZoYjl/8A= +cloud.google.com/go/storagetransfer v1.13.0 h1:uqKX3OgcYzR1W1YI943ZZ45id0RqA2eXXoCBSPstlbw= +cloud.google.com/go/storagetransfer v1.13.0/go.mod h1:+aov7guRxXBYgR3WCqedkyibbTICdQOiXOdpPcJCKl8= cloud.google.com/go/talent v1.7.2/go.mod h1:k1sqlDgS9gbc0gMTRuRQpX6C6VB7bGUxSPcoTRWJod8= cloud.google.com/go/talent v1.7.3 h1:mbN4dqACYBf8FIurOOTT4JXfFPkqWtOZccfMG9w03hY= cloud.google.com/go/talent v1.7.3/go.mod h1:6HhwxYxAtL6eKzcUMJ8reliQPUpay3/L6JZll4cS/vE= @@ -629,6 +682,8 @@ cloud.google.com/go/texttospeech v1.11.0 h1:YF/RdNb+jUEp22cIZCvqiFjfA5OxGE+Dxss3 cloud.google.com/go/texttospeech v1.11.0/go.mod h1:7M2ro3I2QfIEvArFk1TJ+pqXJqhszDtxUpnIv/150As= cloud.google.com/go/texttospeech v1.12.1 h1:IdYOIwagXmSjBuACNC86KTB3E/b7vgwyXzYzlLLxDhM= cloud.google.com/go/texttospeech v1.12.1/go.mod h1:f8vrD3OXAKTRr4eL0TPjZgYQhiN6ti/tKM3i1Uub5X0= +cloud.google.com/go/texttospeech v1.13.0 h1:oWWFQp0yFl4EJOr3opDkKH9304wUsZjgPjrTDS6S1a8= +cloud.google.com/go/texttospeech v1.13.0/go.mod h1:g/tW/m0VJnulGncDrAoad6WdELMTes8eb77Idz+4HCo= cloud.google.com/go/tpu v1.7.2/go.mod h1:0Y7dUo2LIbDUx0yQ/vnLC6e18FK6NrDfAhYS9wZ/2vs= cloud.google.com/go/tpu v1.7.3 h1:PszqG+pvC7u/cv51GWQIN9M++jciIBr5vVn6/MWzU8I= cloud.google.com/go/tpu v1.7.3/go.mod h1:jZJET6Hp4VKRFHf+ABHVXW4mq1az4ZYHDLBKb5mYAWE= @@ -652,6 +707,8 @@ cloud.google.com/go/video v1.23.3 h1:C2FH+6yr6LCZC4fP0gm9FwJB/SRh5Ul88O5Sc/bL83I cloud.google.com/go/video v1.23.3/go.mod h1:Kvh/BheubZxGZDXSb0iO6YX7ZNcaYHbLjnnaC8Qyy3g= cloud.google.com/go/video v1.23.5 h1:leLw8LyDCR6K7HZkbIie3d45t0Z75BdJVC3WYP+MWy0= cloud.google.com/go/video v1.23.5/go.mod h1:ZSpGFCpfTOTmb1IkmHNGC/9yI3TjIa/vkkOKBDo0Vpo= +cloud.google.com/go/video v1.24.0 h1:KTB2BEXjGm2K/JcKxQXEgx3nSoMTByepnPZa4kln064= +cloud.google.com/go/video v1.24.0/go.mod h1:h6Bw4yUbGNEa9dH4qMtUMnj6cEf+OyOv/f2tb70G6Fk= cloud.google.com/go/videointelligence v1.12.2/go.mod h1:8xKGlq0lNVyT8JgTkkCUCpyNJnYYEJVWGdqzv+UcwR8= cloud.google.com/go/videointelligence v1.12.3 h1:zNTOUQyatGQtnCJ2dR3faRtpWQOlC8wszJqwG5CtwVM= cloud.google.com/go/videointelligence v1.12.3/go.mod h1:dUA6V+NH7CVgX6TePq0IelVeBMGzvehxKPR4FGf1dtw= @@ -731,14 +788,20 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49 github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0/go.mod h1:6fTWu4m3jocfUZLYF5KsZC1TUfRvEjs7lM4crme/irw= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.50.0 h1:5IT7xOdq17MtcdtL/vtl6mGfzhaq4m4vpollPRmlsBQ= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.50.0/go.mod h1:ZV4VOm0/eHR06JLrXWe09068dHpr3TRpY9Uo7T+anuA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 h1:fYE9p3esPxA/C0rQ0AHhP0drtPXDRhaWiwg1DPqO7IU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0/go.mod h1:BnBReJLvVYx2CS/UHOgVz2BXKXD9wsQPxZug20nZhd0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0 h1:jJKWl98inONJAr/IZrdFQUWcwUO95DLY1XMD1ZIut+g= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0/go.mod h1:l2fIqmwB+FKSfvn3bAD/0i+AXAxhIZjTK2svT/mgUXs= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.50.0 h1:nNMpRpnkWDAaqcpxMJvxa/Ud98gjbYwayJY4/9bdjiU= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.50.0/go.mod h1:SZiPHWGOOk3bl8tkevxkoiwPgsIl6CwrWcbwjfHZpdM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.51.0 h1:OqVGm6Ei3x5+yZmSJG1Mh2NwHvpVmZ08CB5qJhT9Nuk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.51.0/go.mod h1:SZiPHWGOOk3bl8tkevxkoiwPgsIl6CwrWcbwjfHZpdM= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 h1:GYUJLfvd++4DMuMhCFLgLXvFwofIxh/qOwoGuS/LTew= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0/go.mod h1:wRbFgBQUVm1YXrvWKofAEmq9HNJTDphbAaJSSX01KUI= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.50.0 h1:ig/FpDD2JofP/NExKQUbn7uOSZzJAQqogfqluZK4ed4= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.50.0/go.mod h1:otE2jQekW/PqXk1Awf5lmfokJx4uwuqcj1ab5SpGeW0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 h1:6/0iUd0xrnX7qt+mLNRwg5c0PGv8wpE8K90ryANQwMI= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0/go.mod h1:otE2jQekW/PqXk1Awf5lmfokJx4uwuqcj1ab5SpGeW0= github.com/IBM/sarama v1.43.1 h1:Z5uz65Px7f4DhI/jQqEm/tV9t8aU+JUdTyW/K/fCXpA= github.com/IBM/sarama v1.43.1/go.mod h1:GG5q1RURtDNPz8xxJs3mgX6Ytak8Z9eLhAkJPObe2xE= github.com/Joker/jade v1.1.3 h1:Qbeh12Vq6BxURXT1qZBRHsDxeURB8ztcL6f3EXSGeHk= @@ -806,6 +869,8 @@ github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 h1:Om6kYQYDUk5wWbT0t0q github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f h1:C5bqEmzEPLsHm9Mv73lSE9e9bKV23aB1vxOsmZrkl3k= github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0= github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk= github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= @@ -840,6 +905,8 @@ github.com/docker/docker v28.1.1+incompatible h1:49M11BFLsVO1gxY9UX9p/zwkE/rswgg github.com/docker/docker v28.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v28.2.2+incompatible h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5JxwYeqtMOEe0LDw= github.com/docker/docker v28.2.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.3.2+incompatible h1:wn66NJ6pWB1vBZIilP8G3qQPqHy5XymfYn5vsqeA5oA= +github.com/docker/docker v28.3.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -852,6 +919,8 @@ github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I= github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/ebitengine/purego v0.8.4 h1:CF7LEKg5FFOsASUj0+QwaXf8Ht6TlFxg09+S9wz0omw= +github.com/ebitengine/purego v0.8.4/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.13.1 h1:vPfJZCkob6yTMEgS+0TwfTUfbHjfy/6vOJ8hUWX/uXE= @@ -895,6 +964,7 @@ github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -923,6 +993,8 @@ github.com/golang/glog v1.2.3 h1:oDTdz9f5VGVVNGu/Q7UXKWYsD0873HXLHdJUNBsSEKM= github.com/golang/glog v1.2.3/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I= +github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -983,6 +1055,7 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4= github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07qSYnHncrgo+zk= +github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= 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/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= @@ -1156,6 +1229,8 @@ github.com/shirou/gopsutil/v3 v3.23.12 h1:z90NtUkp3bMtmICZKpC4+WaknU1eXtp5vtbQ11 github.com/shirou/gopsutil/v3 v3.23.12/go.mod h1:1FrWgea594Jp7qmjHUUPlJDTPgcsb9mGnXDxavtikzM= github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs= github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI= +github.com/shirou/gopsutil/v4 v4.25.5 h1:rtd9piuSMGeU8g1RMXjZs9y9luK5BwtnG7dZaQUJAsc= +github.com/shirou/gopsutil/v4 v4.25.5/go.mod h1:PfybzyydfZcN+JMMjkF6Zb8Mq1A/VcogFFg7hj50W9c= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= @@ -1180,6 +1255,8 @@ github.com/testcontainers/testcontainers-go v0.33.0 h1:zJS9PfXYT5O0ZFXM2xxXfk4J5 github.com/testcontainers/testcontainers-go v0.33.0/go.mod h1:W80YpTa8D5C3Yy16icheD01UTDu+LmXIA2Keo+jWtT8= github.com/testcontainers/testcontainers-go v0.37.0 h1:L2Qc0vkTw2EHWQ08djon0D2uw7Z/PtHS/QzZZ5Ra/hg= github.com/testcontainers/testcontainers-go v0.37.0/go.mod h1:QPzbxZhQ6Bclip9igjLFj6z0hs01bU8lrl2dHQmgFGM= +github.com/testcontainers/testcontainers-go v0.38.0 h1:d7uEapLcv2P8AvH8ahLqDMMxda2W9gQN1nRbHS28HBw= +github.com/testcontainers/testcontainers-go v0.38.0/go.mod h1:C52c9MoHpWO+C4aqmgSU+hxlR5jlEayWtgYrb8Pzz1w= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= @@ -1227,13 +1304,18 @@ go.opentelemetry.io/contrib/detectors/gcp v1.34.0 h1:JRxssobiPg23otYU5SbWtQC//sn go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo= go.opentelemetry.io/contrib/detectors/gcp v1.35.0 h1:bGvFt68+KTiAKFlacHW6AhA56GF2rS0bdD3aJYEnmzA= go.opentelemetry.io/contrib/detectors/gcp v1.35.0/go.mod h1:qGWP8/+ILwMRIUf9uIVLloR1uo5ZYAslM4O6OqUi1DA= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0 h1:F7q2tNlCaHY9nMKHR6XH9/qkp8FktLnIcy6jJNyOCQw= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0/go.mod h1:ijPqXp5P6IRRByFVVg9DY8P5HkxkHE5ARIa+86aXPf4= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM= go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0/go.mod h1:3qi2EEwMgB4xnKgPLqsDP3j9qxnHDZeHsnAxfjQqTko= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= @@ -1241,10 +1323,13 @@ go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6c go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0 h1:PB3Zrjs1sG1GBX51SXyTSoOTqcDglmsk7nT6tkKPb/k= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0/go.mod h1:U2R3XyVPzn0WX7wOIypPuptulsMcPDPs/oiSVOMVnHY= go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= @@ -1253,11 +1338,14 @@ go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzau go.opentelemetry.io/otel/metric v1.33.0/go.mod h1:L9+Fyctbp6HFTddIxClbQkjtubW6O9QS3Ann/M82u6M= go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= +go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs= go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= go.opentelemetry.io/otel/sdk v1.33.0/go.mod h1:A1Q5oi7/9XaMlIWzPSxLRWOI8nG3FnzHJNbiENQuihM= +go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= +go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w= go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= @@ -1265,6 +1353,7 @@ go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06F go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= +go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= @@ -1284,8 +1373,11 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= @@ -1353,7 +1445,7 @@ golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= -golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1429,12 +1521,12 @@ golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= -golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1513,6 +1605,9 @@ google.golang.org/api v0.219.0/go.mod h1:K6OmjGm+NtLrIkHxv1U3a0qIf/0JOvAHd5O/6Ao google.golang.org/api v0.222.0/go.mod h1:efZia3nXpWELrwMlN5vyQrD4GmJN1Vw0x68Et3r+a9c= google.golang.org/api v0.224.0/go.mod h1:3V39my2xAGkodXy0vEqcEtkqgw2GtrFL5WuBZlCTCOQ= google.golang.org/api v0.227.0/go.mod h1:EIpaG6MbTgQarWF5xJvX0eOJPK9n/5D4Bynb9j2HXvQ= +google.golang.org/api v0.229.0/go.mod h1:wyDfmq5g1wYJWn29O22FDWN48P7Xcz0xz+LBpptYvB0= +google.golang.org/api v0.232.0/go.mod h1:p9QCfBWZk1IJETUdbTKloR5ToFdKbYh2fkjsUL6vNoY= +google.golang.org/api v0.239.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= @@ -1555,6 +1650,7 @@ google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d/go.mod h1:FfBgJBJg9GcpPvKIuHSZ/aE1g2ecGL74upMzGZjiGEY= google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:qbZzneIOXSq+KFAFut9krLfRLZiFLzZL5u2t8SV83EE= +google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:sAo5UzpjUwgFBCzupwhcLcxHVDK7vG5IqI30YnwX2eE= google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6/go.mod h1:10yRODfgim2/T8csjQsMPgZOMvtytXKTDRzH6HRGzRw= google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= @@ -1570,6 +1666,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20250219182151-9fdb1cabc7b2/go. google.golang.org/genproto/googleapis/api v0.0.0-20250227231956-55c901821b1e/go.mod h1:Xsh8gBVxGCcbV8ZeTB9wI5XPyZ5RvC6V3CTeeplHbiA= google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg= google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463/go.mod h1:U90ffi8eUL9MwPcrJylN5+Mk2v3vuPDptd5yyNUiRR8= +google.golang.org/genproto/googleapis/api v0.0.0-20250414145226-207652e42e2e/go.mod h1:085qFyf2+XaZlRdCgKNCIZ3afY2p4HHZdoIRpId8F4A= +google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197/go.mod h1:Cd8IzgPo5Akum2c9R6FsXNaZbH3Jpa2gpHlW89FqlyQ= google.golang.org/genproto/googleapis/api v0.0.0-20250528174236-200df99c418a/go.mod h1:a77HrdMjoeKbnd2jmgcWdaS++ZLZAEq3orIOAEIKiVw= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250106144421-5f5ef82da422 h1:w6g+P/ZscmNlGxVVXGaPVQOLu1q19ubsTOZKwaDqm4k= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250106144421-5f5ef82da422/go.mod h1:s4mHJ3FfG8P6A3O+gZ8TVqB3ufjOl9UG3ANCMMwCHmo= @@ -1587,6 +1685,8 @@ google.golang.org/genproto/googleapis/bytestream v0.0.0-20250512202823-5a2f75b73 google.golang.org/genproto/googleapis/bytestream v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250603155806-513f23925822 h1:zWFRixYR5QlotL+Uv3YfsPRENIrQFXiGs+iwqel6fOQ= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250603155806-513f23925822/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20250715232539-7130f93afb79 h1:IpwY95CV9qj08VMQEirHQF61g0THzlzHaj9sQ3vlExY= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20250715232539-7130f93afb79/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= @@ -1605,8 +1705,10 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250219182151-9fdb1cabc7b2/go. google.golang.org/genproto/googleapis/rpc v0.0.0-20250227231956-55c901821b1e/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250414145226-207652e42e2e/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1626,6 +1728,8 @@ google.golang.org/grpc v1.68.1/go.mod h1:+q1XYFJjShcqn0QZHvCyeR4CXPA+llXIeUIfIe0 google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= google.golang.org/grpc v1.71.1/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= +google.golang.org/grpc v1.72.1/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20 h1:MLBCGN1O7GzIx+cBiwfYPwtmZ41U3Mn/cotLJciaArI= google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20/go.mod h1:Nr5H8+MlGWr5+xX/STzdoEqJrO+YteqFbMyCsrb6mH0= diff --git a/pkg/gofr/container/mock_container.go b/pkg/gofr/container/mock_container.go index 8fd7681df..5acc9e11b 100644 --- a/pkg/gofr/container/mock_container.go +++ b/pkg/gofr/container/mock_container.go @@ -26,6 +26,7 @@ type Mocks struct { OpenTSDB *MockOpenTSDB SurrealDB *MockSurrealDB Elasticsearch *MockElasticsearch + InfluxDB *MockInfluxDB PubSub *MockPubSubProvider File *file.MockFileSystemProvider HTTPService *service.MockHTTP @@ -98,6 +99,9 @@ func NewMockContainer(t *testing.T, options ...options) (*Container, *Mocks) { elasticsearchMock := NewMockElasticsearch(ctrl) container.Elasticsearch = elasticsearchMock + influxdbMock := NewMockInfluxDB(ctrl) + container.InfluxDB = influxdbMock + pubsubMock := NewMockPubSubProvider(ctrl) container.PubSub = pubsubMock @@ -132,6 +136,7 @@ func NewMockContainer(t *testing.T, options ...options) (*Container, *Mocks) { OpenTSDB: opentsdbMock, ArangoDB: arangoMock, SurrealDB: surrealMock, + InfluxDB: influxdbMock, Elasticsearch: elasticsearchMock, PubSub: pubsubMock, Metrics: mockMetrics, diff --git a/pkg/gofr/container/mock_datasources.go b/pkg/gofr/container/mock_datasources.go index 3dc04196b..6c3f15729 100644 --- a/pkg/gofr/container/mock_datasources.go +++ b/pkg/gofr/container/mock_datasources.go @@ -10794,22 +10794,6 @@ type MockPubSubProvider struct { isgomock struct{} } -func (m *MockPubSubProvider) Query(ctx context.Context, query string, args ...any) ([]byte, error) { - m.ctrl.T.Helper() - callArgs := append([]any{ctx, query}, args...) - ret := m.ctrl.Call(m, "Query", callArgs...) - ret0, _ := ret[0].([]byte) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Query indicates an expected call of Query. -func (mr *MockPubSubProviderMockRecorder) Query(ctx, query any, args ...any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Query", reflect.TypeOf((*MockPubSubProvider)(nil).Query), - append([]any{ctx, query}, args...)..., ) -} - // MockPubSubProviderMockRecorder is the mock recorder for MockPubSubProvider. type MockPubSubProviderMockRecorder struct { mock *MockPubSubProvider @@ -10909,6 +10893,26 @@ func (mr *MockPubSubProviderMockRecorder) Publish(ctx, topic, message any) *gomo return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Publish", reflect.TypeOf((*MockPubSubProvider)(nil).Publish), ctx, topic, message) } +// Query mocks base method. +func (m *MockPubSubProvider) Query(ctx context.Context, query string, args ...any) ([]byte, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, query} + for _, a := range args { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Query", varargs...) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Query indicates an expected call of Query. +func (mr *MockPubSubProviderMockRecorder) Query(ctx, query any, args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, query}, args...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Query", reflect.TypeOf((*MockPubSubProvider)(nil).Query), varargs...) +} + // Subscribe mocks base method. func (m *MockPubSubProvider) Subscribe(ctx context.Context, topic string) (*pubsub.Message, error) { m.ctrl.T.Helper() @@ -13397,3 +13401,393 @@ func (mr *MockElasticsearchProviderMockRecorder) UseTracer(tracer any) *gomock.C mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseTracer", reflect.TypeOf((*MockElasticsearchProvider)(nil).UseTracer), tracer) } + +// MockInfluxDB is a mock of InfluxDB interface. +type MockInfluxDB struct { + ctrl *gomock.Controller + recorder *MockInfluxDBMockRecorder + isgomock struct{} +} + +// MockInfluxDBMockRecorder is the mock recorder for MockInfluxDB. +type MockInfluxDBMockRecorder struct { + mock *MockInfluxDB +} + +// NewMockInfluxDB creates a new mock instance. +func NewMockInfluxDB(ctrl *gomock.Controller) *MockInfluxDB { + mock := &MockInfluxDB{ctrl: ctrl} + mock.recorder = &MockInfluxDBMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockInfluxDB) EXPECT() *MockInfluxDBMockRecorder { + return m.recorder +} + +// CreateBucket mocks base method. +func (m *MockInfluxDB) CreateBucket(ctx context.Context, org, bucket string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateBucket", ctx, org, bucket) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateBucket indicates an expected call of CreateBucket. +func (mr *MockInfluxDBMockRecorder) CreateBucket(ctx, org, bucket any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucket", reflect.TypeOf((*MockInfluxDB)(nil).CreateBucket), ctx, org, bucket) +} + +// CreateOrganization mocks base method. +func (m *MockInfluxDB) CreateOrganization(ctx context.Context, org string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateOrganization", ctx, org) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateOrganization indicates an expected call of CreateOrganization. +func (mr *MockInfluxDBMockRecorder) CreateOrganization(ctx, org any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrganization", reflect.TypeOf((*MockInfluxDB)(nil).CreateOrganization), ctx, org) +} + +// DeleteBucket mocks base method. +func (m *MockInfluxDB) DeleteBucket(ctx context.Context, bucketID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteBucket", ctx, bucketID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteBucket indicates an expected call of DeleteBucket. +func (mr *MockInfluxDBMockRecorder) DeleteBucket(ctx, bucketID any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBucket", reflect.TypeOf((*MockInfluxDB)(nil).DeleteBucket), ctx, bucketID) +} + +// DeleteOrganization mocks base method. +func (m *MockInfluxDB) DeleteOrganization(ctx context.Context, orgID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteOrganization", ctx, orgID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteOrganization indicates an expected call of DeleteOrganization. +func (mr *MockInfluxDBMockRecorder) DeleteOrganization(ctx, orgID any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteOrganization", reflect.TypeOf((*MockInfluxDB)(nil).DeleteOrganization), ctx, orgID) +} + +// HealthCheck mocks base method. +func (m *MockInfluxDB) HealthCheck(arg0 context.Context) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HealthCheck", arg0) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// HealthCheck indicates an expected call of HealthCheck. +func (mr *MockInfluxDBMockRecorder) HealthCheck(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HealthCheck", reflect.TypeOf((*MockInfluxDB)(nil).HealthCheck), arg0) +} + +// ListBuckets mocks base method. +func (m *MockInfluxDB) ListBuckets(ctx context.Context, org string) (map[string]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListBuckets", ctx, org) + ret0, _ := ret[0].(map[string]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListBuckets indicates an expected call of ListBuckets. +func (mr *MockInfluxDBMockRecorder) ListBuckets(ctx, org any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListBuckets", reflect.TypeOf((*MockInfluxDB)(nil).ListBuckets), ctx, org) +} + +// ListOrganization mocks base method. +func (m *MockInfluxDB) ListOrganization(ctx context.Context) (map[string]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListOrganization", ctx) + ret0, _ := ret[0].(map[string]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListOrganization indicates an expected call of ListOrganization. +func (mr *MockInfluxDBMockRecorder) ListOrganization(ctx any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListOrganization", reflect.TypeOf((*MockInfluxDB)(nil).ListOrganization), ctx) +} + +// Ping mocks base method. +func (m *MockInfluxDB) Ping(ctx context.Context) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Ping", ctx) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Ping indicates an expected call of Ping. +func (mr *MockInfluxDBMockRecorder) Ping(ctx any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ping", reflect.TypeOf((*MockInfluxDB)(nil).Ping), ctx) +} + +// Query mocks base method. +func (m *MockInfluxDB) Query(ctx context.Context, org, fluxQuery string) ([]map[string]any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Query", ctx, org, fluxQuery) + ret0, _ := ret[0].([]map[string]any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Query indicates an expected call of Query. +func (mr *MockInfluxDBMockRecorder) Query(ctx, org, fluxQuery any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Query", reflect.TypeOf((*MockInfluxDB)(nil).Query), ctx, org, fluxQuery) +} + +// WritePoint mocks base method. +func (m *MockInfluxDB) WritePoint(ctx context.Context, org, bucket, measurement string, tags map[string]string, fields map[string]any, timestamp time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WritePoint", ctx, org, bucket, measurement, tags, fields, timestamp) + ret0, _ := ret[0].(error) + return ret0 +} + +// WritePoint indicates an expected call of WritePoint. +func (mr *MockInfluxDBMockRecorder) WritePoint(ctx, org, bucket, measurement, tags, fields, timestamp any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WritePoint", reflect.TypeOf((*MockInfluxDB)(nil).WritePoint), ctx, org, bucket, measurement, tags, fields, timestamp) +} + +// MockInfluxDBProvider is a mock of InfluxDBProvider interface. +type MockInfluxDBProvider struct { + ctrl *gomock.Controller + recorder *MockInfluxDBProviderMockRecorder + isgomock struct{} +} + +// MockInfluxDBProviderMockRecorder is the mock recorder for MockInfluxDBProvider. +type MockInfluxDBProviderMockRecorder struct { + mock *MockInfluxDBProvider +} + +// NewMockInfluxDBProvider creates a new mock instance. +func NewMockInfluxDBProvider(ctrl *gomock.Controller) *MockInfluxDBProvider { + mock := &MockInfluxDBProvider{ctrl: ctrl} + mock.recorder = &MockInfluxDBProviderMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockInfluxDBProvider) EXPECT() *MockInfluxDBProviderMockRecorder { + return m.recorder +} + +// Connect mocks base method. +func (m *MockInfluxDBProvider) Connect() { + m.ctrl.T.Helper() + m.ctrl.Call(m, "Connect") +} + +// Connect indicates an expected call of Connect. +func (mr *MockInfluxDBProviderMockRecorder) Connect() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Connect", reflect.TypeOf((*MockInfluxDBProvider)(nil).Connect)) +} + +// CreateBucket mocks base method. +func (m *MockInfluxDBProvider) CreateBucket(ctx context.Context, org, bucket string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateBucket", ctx, org, bucket) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateBucket indicates an expected call of CreateBucket. +func (mr *MockInfluxDBProviderMockRecorder) CreateBucket(ctx, org, bucket any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucket", reflect.TypeOf((*MockInfluxDBProvider)(nil).CreateBucket), ctx, org, bucket) +} + +// CreateOrganization mocks base method. +func (m *MockInfluxDBProvider) CreateOrganization(ctx context.Context, org string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateOrganization", ctx, org) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateOrganization indicates an expected call of CreateOrganization. +func (mr *MockInfluxDBProviderMockRecorder) CreateOrganization(ctx, org any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrganization", reflect.TypeOf((*MockInfluxDBProvider)(nil).CreateOrganization), ctx, org) +} + +// DeleteBucket mocks base method. +func (m *MockInfluxDBProvider) DeleteBucket(ctx context.Context, bucketID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteBucket", ctx, bucketID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteBucket indicates an expected call of DeleteBucket. +func (mr *MockInfluxDBProviderMockRecorder) DeleteBucket(ctx, bucketID any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBucket", reflect.TypeOf((*MockInfluxDBProvider)(nil).DeleteBucket), ctx, bucketID) +} + +// DeleteOrganization mocks base method. +func (m *MockInfluxDBProvider) DeleteOrganization(ctx context.Context, orgID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteOrganization", ctx, orgID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteOrganization indicates an expected call of DeleteOrganization. +func (mr *MockInfluxDBProviderMockRecorder) DeleteOrganization(ctx, orgID any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteOrganization", reflect.TypeOf((*MockInfluxDBProvider)(nil).DeleteOrganization), ctx, orgID) +} + +// HealthCheck mocks base method. +func (m *MockInfluxDBProvider) HealthCheck(arg0 context.Context) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HealthCheck", arg0) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// HealthCheck indicates an expected call of HealthCheck. +func (mr *MockInfluxDBProviderMockRecorder) HealthCheck(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HealthCheck", reflect.TypeOf((*MockInfluxDBProvider)(nil).HealthCheck), arg0) +} + +// ListBuckets mocks base method. +func (m *MockInfluxDBProvider) ListBuckets(ctx context.Context, org string) (map[string]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListBuckets", ctx, org) + ret0, _ := ret[0].(map[string]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListBuckets indicates an expected call of ListBuckets. +func (mr *MockInfluxDBProviderMockRecorder) ListBuckets(ctx, org any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListBuckets", reflect.TypeOf((*MockInfluxDBProvider)(nil).ListBuckets), ctx, org) +} + +// ListOrganization mocks base method. +func (m *MockInfluxDBProvider) ListOrganization(ctx context.Context) (map[string]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListOrganization", ctx) + ret0, _ := ret[0].(map[string]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListOrganization indicates an expected call of ListOrganization. +func (mr *MockInfluxDBProviderMockRecorder) ListOrganization(ctx any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListOrganization", reflect.TypeOf((*MockInfluxDBProvider)(nil).ListOrganization), ctx) +} + +// Ping mocks base method. +func (m *MockInfluxDBProvider) Ping(ctx context.Context) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Ping", ctx) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Ping indicates an expected call of Ping. +func (mr *MockInfluxDBProviderMockRecorder) Ping(ctx any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ping", reflect.TypeOf((*MockInfluxDBProvider)(nil).Ping), ctx) +} + +// Query mocks base method. +func (m *MockInfluxDBProvider) Query(ctx context.Context, org, fluxQuery string) ([]map[string]any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Query", ctx, org, fluxQuery) + ret0, _ := ret[0].([]map[string]any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Query indicates an expected call of Query. +func (mr *MockInfluxDBProviderMockRecorder) Query(ctx, org, fluxQuery any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Query", reflect.TypeOf((*MockInfluxDBProvider)(nil).Query), ctx, org, fluxQuery) +} + +// UseLogger mocks base method. +func (m *MockInfluxDBProvider) UseLogger(logger any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseLogger", logger) +} + +// UseLogger indicates an expected call of UseLogger. +func (mr *MockInfluxDBProviderMockRecorder) UseLogger(logger any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseLogger", reflect.TypeOf((*MockInfluxDBProvider)(nil).UseLogger), logger) +} + +// UseMetrics mocks base method. +func (m *MockInfluxDBProvider) UseMetrics(metrics any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseMetrics", metrics) +} + +// UseMetrics indicates an expected call of UseMetrics. +func (mr *MockInfluxDBProviderMockRecorder) UseMetrics(metrics any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseMetrics", reflect.TypeOf((*MockInfluxDBProvider)(nil).UseMetrics), metrics) +} + +// UseTracer mocks base method. +func (m *MockInfluxDBProvider) UseTracer(tracer any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseTracer", tracer) +} + +// UseTracer indicates an expected call of UseTracer. +func (mr *MockInfluxDBProviderMockRecorder) UseTracer(tracer any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseTracer", reflect.TypeOf((*MockInfluxDBProvider)(nil).UseTracer), tracer) +} + +// WritePoint mocks base method. +func (m *MockInfluxDBProvider) WritePoint(ctx context.Context, org, bucket, measurement string, tags map[string]string, fields map[string]any, timestamp time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WritePoint", ctx, org, bucket, measurement, tags, fields, timestamp) + ret0, _ := ret[0].(error) + return ret0 +} + +// WritePoint indicates an expected call of WritePoint. +func (mr *MockInfluxDBProviderMockRecorder) WritePoint(ctx, org, bucket, measurement, tags, fields, timestamp any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WritePoint", reflect.TypeOf((*MockInfluxDBProvider)(nil).WritePoint), ctx, org, bucket, measurement, tags, fields, timestamp) +} diff --git a/pkg/gofr/container/mock_metrics.go b/pkg/gofr/container/mock_metrics.go index 4a15b1a06..81b8324d6 100644 --- a/pkg/gofr/container/mock_metrics.go +++ b/pkg/gofr/container/mock_metrics.go @@ -6,6 +6,7 @@ // mockgen -source=metrics.go -destination=mock_metrics.go -package=container // +// Package container is a generated GoMock package. package container import ( @@ -19,6 +20,7 @@ import ( type MockMetrics struct { ctrl *gomock.Controller recorder *MockMetricsMockRecorder + isgomock struct{} } // MockMetricsMockRecorder is the mock recorder for MockMetrics. diff --git a/pkg/gofr/datasource/influxdb/metrics_logger.go b/pkg/gofr/datasource/influxdb/metrics_logger.go new file mode 100644 index 000000000..69fa89f67 --- /dev/null +++ b/pkg/gofr/datasource/influxdb/metrics_logger.go @@ -0,0 +1,75 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: ./metrics.go +// +// Generated by this command: +// +// mockgen -source=./metrics.go -destination=./metrics_logger.go -package=influxdb +// + +// Package influxdb is a generated GoMock package. +package influxdb + +import ( + context "context" + reflect "reflect" + + gomock "go.uber.org/mock/gomock" +) + +// MockMetrics is a mock of Metrics interface. +type MockMetrics struct { + ctrl *gomock.Controller + recorder *MockMetricsMockRecorder + isgomock struct{} +} + +// MockMetricsMockRecorder is the mock recorder for MockMetrics. +type MockMetricsMockRecorder struct { + mock *MockMetrics +} + +// NewMockMetrics creates a new mock instance. +func NewMockMetrics(ctrl *gomock.Controller) *MockMetrics { + mock := &MockMetrics{ctrl: ctrl} + mock.recorder = &MockMetricsMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockMetrics) EXPECT() *MockMetricsMockRecorder { + return m.recorder +} + +// NewHistogram mocks base method. +func (m *MockMetrics) NewHistogram(name, desc string, buckets ...float64) { + m.ctrl.T.Helper() + varargs := []any{name, desc} + for _, a := range buckets { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "NewHistogram", varargs...) +} + +// NewHistogram indicates an expected call of NewHistogram. +func (mr *MockMetricsMockRecorder) NewHistogram(name, desc any, buckets ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{name, desc}, buckets...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewHistogram", reflect.TypeOf((*MockMetrics)(nil).NewHistogram), varargs...) +} + +// RecordHistogram mocks base method. +func (m *MockMetrics) RecordHistogram(ctx context.Context, name string, value float64, labels ...string) { + m.ctrl.T.Helper() + varargs := []any{ctx, name, value} + for _, a := range labels { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "RecordHistogram", varargs...) +} + +// RecordHistogram indicates an expected call of RecordHistogram. +func (mr *MockMetricsMockRecorder) RecordHistogram(ctx, name, value any, labels ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, name, value}, labels...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RecordHistogram", reflect.TypeOf((*MockMetrics)(nil).RecordHistogram), varargs...) +} diff --git a/pkg/gofr/datasource/influxdb/mock_logger.go b/pkg/gofr/datasource/influxdb/mock_logger.go new file mode 100644 index 000000000..efa7c4b51 --- /dev/null +++ b/pkg/gofr/datasource/influxdb/mock_logger.go @@ -0,0 +1,139 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: ./logger.go +// +// Generated by this command: +// +// mockgen -source=./logger.go -destination=./mock_logger.go -package=influxdb +// + +// Package influxdb is a generated GoMock package. +package influxdb + +import ( + reflect "reflect" + + gomock "go.uber.org/mock/gomock" +) + +// MockLogger is a mock of Logger interface. +type MockLogger struct { + ctrl *gomock.Controller + recorder *MockLoggerMockRecorder + isgomock struct{} +} + +// MockLoggerMockRecorder is the mock recorder for MockLogger. +type MockLoggerMockRecorder struct { + mock *MockLogger +} + +// NewMockLogger creates a new mock instance. +func NewMockLogger(ctrl *gomock.Controller) *MockLogger { + mock := &MockLogger{ctrl: ctrl} + mock.recorder = &MockLoggerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockLogger) EXPECT() *MockLoggerMockRecorder { + return m.recorder +} + +// Debug mocks base method. +func (m *MockLogger) Debug(args ...any) { + m.ctrl.T.Helper() + varargs := []any{} + for _, a := range args { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Debug", varargs...) +} + +// Debug indicates an expected call of Debug. +func (mr *MockLoggerMockRecorder) Debug(args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Debug", reflect.TypeOf((*MockLogger)(nil).Debug), args...) +} + +// Debugf mocks base method. +func (m *MockLogger) Debugf(pattern string, args ...any) { + m.ctrl.T.Helper() + varargs := []any{pattern} + for _, a := range args { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Debugf", varargs...) +} + +// Debugf indicates an expected call of Debugf. +func (mr *MockLoggerMockRecorder) Debugf(pattern any, args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{pattern}, args...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Debugf", reflect.TypeOf((*MockLogger)(nil).Debugf), varargs...) +} + +// Error mocks base method. +func (m *MockLogger) Error(args ...any) { + m.ctrl.T.Helper() + varargs := []any{} + for _, a := range args { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Error", varargs...) +} + +// Error indicates an expected call of Error. +func (mr *MockLoggerMockRecorder) Error(args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Error", reflect.TypeOf((*MockLogger)(nil).Error), args...) +} + +// Errorf mocks base method. +func (m *MockLogger) Errorf(pattern string, args ...any) { + m.ctrl.T.Helper() + varargs := []any{pattern} + for _, a := range args { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Errorf", varargs...) +} + +// Errorf indicates an expected call of Errorf. +func (mr *MockLoggerMockRecorder) Errorf(pattern any, args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{pattern}, args...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Errorf", reflect.TypeOf((*MockLogger)(nil).Errorf), varargs...) +} + +// Log mocks base method. +func (m *MockLogger) Log(args ...any) { + m.ctrl.T.Helper() + varargs := []any{} + for _, a := range args { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Log", varargs...) +} + +// Log indicates an expected call of Log. +func (mr *MockLoggerMockRecorder) Log(args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Log", reflect.TypeOf((*MockLogger)(nil).Log), args...) +} + +// Logf mocks base method. +func (m *MockLogger) Logf(pattern string, args ...any) { + m.ctrl.T.Helper() + varargs := []any{pattern} + for _, a := range args { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Logf", varargs...) +} + +// Logf indicates an expected call of Logf. +func (mr *MockLoggerMockRecorder) Logf(pattern any, args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{pattern}, args...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Logf", reflect.TypeOf((*MockLogger)(nil).Logf), varargs...) +} From 9befb085049d0fc2057af7af02ca6cd5910832a5 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Mon, 4 Aug 2025 21:46:39 +0530 Subject: [PATCH 20/44] [removed] docker-compose.yml (was just experiment) --- docker-compose.yml | 142 --------------------------------------------- 1 file changed, 142 deletions(-) delete mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 633108abc..000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,142 +0,0 @@ -version: "3.8" - -services: - mongodb: - image: mongodb/mongodb-community-server:latest - container_name: mongodb - ports: - - "27017:27017" - environment: - MONGO_INITDB_ROOT_USERNAME: user - MONGO_INITDB_ROOT_PASSWORD: password - - ftp-server: - image: delfer/alpine-ftp-server - ports: - - "21:21" - - "21000-21010:21000-21010" - environment: - USERS: "user|password" - - opentsdb: - image: petergrace/opentsdb-docker:latest - container_name: gofr-opentsdb - ports: - - "4242:4242" - - mysql: - image: mysql:8.0.30 - container_name: gofr-mysql - environment: - MYSQL_ROOT_PASSWORD: password - MYSQL_DATABASE: test - ports: - - "2001:3306" - - redis: - image: redis:7.0.5 - container_name: gofr-redis - ports: - - "2002:6379" - - solr: - image: solr - container_name: gofr-solr - command: solr -DzkRun - ports: - - "2020:8983" - - zipkin: - image: openzipkin/zipkin:2 - container_name: gofr-zipkin - ports: - - "2005:9411" - - localstack: - image: localstack/localstack - ports: - - "4566:4566" - - "4510-4559:4510-4559" - tty: true - stdin_open: true - restart: unless-stopped - - cassandra: - image: cassandra:latest - container_name: cassandra-node - ports: - - "9042:9042" - volumes: - - cassandra_data:/var/lib/cassandra - - postgres: - image: postgres:15.1 - container_name: gofr-pgsql - environment: - POSTGRES_DB: customers - POSTGRES_PASSWORD: root123 - ports: - - "2006:5432" - - mssql: - image: mcr.microsoft.com/azure-sql-edge - container_name: gofr-mssql - environment: - ACCEPT_EULA: "Y" - SA_PASSWORD: "reallyStrongPwd123" - ports: - - "2007:1433" - - kafka: - image: bitnami/kafka:3.4 - container_name: kafka-1 - ports: - - "9092:9092" - environment: - KAFKA_ENABLE_KRAFT: "yes" - KAFKA_CFG_PROCESS_ROLES: "broker,controller" - KAFKA_CFG_CONTROLLER_LISTENER_NAMES: "CONTROLLER" - KAFKA_CFG_LISTENERS: "PLAINTEXT://:9092,CONTROLLER://:9093" - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT" - KAFKA_CFG_ADVERTISED_LISTENERS: "PLAINTEXT://127.0.0.1:9092" - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "true" - KAFKA_BROKER_ID: "1" - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: "1@127.0.0.1:9093" - ALLOW_PLAINTEXT_LISTENER: "yes" - KAFKA_CFG_NODE_ID: "1" - volumes: - - kafka_data:/bitnami - - scylla: - image: scylladb/scylla - container_name: scylla - ports: - - "2025:9042" - - nats: - image: nats:latest - container_name: nats-server - command: -js - ports: - - "4222:4222" - - "8222:8222" - - surrealdb: - image: surrealdb/surrealdb:latest - container_name: surrealdb - command: start --bind 0.0.0.0:8000 - ports: - - "8000:8000" - - arangodb: - image: arangodb:latest - container_name: arangodb - ports: - - "8529:8529" - environment: - ARANGO_ROOT_PASSWORD: rootpassword - pull_policy: always - -volumes: - cassandra_data: - kafka_data: From 1588bf7718c7ae22e0e82898960a3df5553a93f2 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Tue, 5 Aug 2025 15:03:07 +0530 Subject: [PATCH 21/44] [fix] metric + tracer added. --- pkg/gofr/external_db.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/gofr/external_db.go b/pkg/gofr/external_db.go index 363df61fd..86828eb2e 100644 --- a/pkg/gofr/external_db.go +++ b/pkg/gofr/external_db.go @@ -197,7 +197,11 @@ func (a *App) AddElasticsearch(db container.ElasticsearchProvider) { func (a *App) AddInfluxDB(db container.InfluxDBProvider) { db.UseLogger(a.Logger()) - db.UseMetrics(a.Logger()) + db.UseMetrics(a.Metrics()) + + tracer := otel.GetTracerProvider().Tracer("gofr-influxdb") + db.UseTracer(tracer) db.Connect() + a.container.InfluxDB = db } From 2f0e55f44b00cd96597a02b52cc48e226e2c684c Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 7 Aug 2025 00:46:17 +0530 Subject: [PATCH 22/44] [mock] influx client for mock tests. --- go.work.sum | 7 + pkg/gofr/datasource/influxdb/go.mod | 92 +---- pkg/gofr/datasource/influxdb/go.sum | 314 +---------------- pkg/gofr/datasource/influxdb/influxdb_test.go | 54 +++ pkg/gofr/datasource/influxdb/interface.go | 65 ++++ .../datasource/influxdb/metrics_logger.go | 2 +- .../datasource/influxdb/mock_interfaces.go | 322 ++++++++++++++++++ pkg/gofr/datasource/influxdb/mock_logger.go | 2 +- 8 files changed, 460 insertions(+), 398 deletions(-) create mode 100644 pkg/gofr/datasource/influxdb/influxdb_test.go create mode 100644 pkg/gofr/datasource/influxdb/interface.go create mode 100644 pkg/gofr/datasource/influxdb/mock_interfaces.go diff --git a/go.work.sum b/go.work.sum index d42ad0e5e..76397fe17 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1280,6 +1280,7 @@ github.com/yosssi/ace v0.0.5 h1:tUkIP/BLdKqrlrPwcmH0shwEEhTRHoGnc1wFIWmaBUA= github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= @@ -1409,6 +1410,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= @@ -1435,6 +1437,7 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= @@ -1472,6 +1475,7 @@ golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1500,6 +1504,7 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -1521,6 +1526,7 @@ golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1568,6 +1574,7 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= diff --git a/pkg/gofr/datasource/influxdb/go.mod b/pkg/gofr/datasource/influxdb/go.mod index 9700b33fb..31316060b 100644 --- a/pkg/gofr/datasource/influxdb/go.mod +++ b/pkg/gofr/datasource/influxdb/go.mod @@ -3,109 +3,23 @@ module gofr.dev/pkg/gofr/datasource/influxdb go 1.24.2 require ( + github.com/golang/mock v1.6.0 github.com/influxdata/influxdb-client-go/v2 v2.14.0 - github.com/stretchr/testify v1.10.0 go.opencensus.io v0.24.0 - gofr.dev v1.42.3 + go.opentelemetry.io/otel v1.37.0 + go.uber.org/mock v0.5.2 ) require ( - cloud.google.com/go v0.120.0 // indirect - cloud.google.com/go/auth v0.16.2 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect - cloud.google.com/go/compute/metadata v0.7.0 // indirect - cloud.google.com/go/iam v1.5.2 // indirect - cloud.google.com/go/pubsub v1.49.0 // indirect - filippo.io/edwards25519 v1.1.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs v1.2.3 // indirect - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 // indirect - github.com/Azure/go-amqp v1.3.0 // indirect - github.com/DATA-DOG/go-sqlmock v1.5.2 // indirect - github.com/XSAM/otelsql v0.39.0 // indirect github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v5 v5.0.2 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/dgraph-io/dgo/v210 v210.0.0-20230328113526-b66f8ae53a2d // indirect - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/eclipse/paho.mqtt.golang v1.5.0 // indirect - github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-sql-driver/mysql v1.9.3 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v5 v5.2.2 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect - github.com/google/s2a-go v0.1.9 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect - github.com/googleapis/gax-go/v2 v2.14.2 // indirect - github.com/gorilla/mux v1.8.1 // indirect - github.com/gorilla/websocket v1.5.3 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect - github.com/joho/godotenv v1.5.1 // indirect - github.com/klauspost/compress v1.18.0 // indirect - github.com/lib/pq v1.10.9 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/ncruces/go-strftime v0.1.9 // indirect github.com/oapi-codegen/runtime v1.0.0 // indirect - github.com/openzipkin/zipkin-go v0.4.3 // indirect - github.com/pierrec/lz4/v4 v4.1.22 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.22.0 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.64.0 // indirect - github.com/prometheus/procfs v0.16.1 // indirect - github.com/redis/go-redis/extra/rediscmd/v9 v9.10.0 // indirect - github.com/redis/go-redis/extra/redisotel/v9 v9.10.0 // indirect - github.com/redis/go-redis/v9 v9.10.0 // indirect - github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - github.com/segmentio/kafka-go v0.4.48 // 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 go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.61.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect - go.opentelemetry.io/otel v1.37.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.58.0 // indirect - go.opentelemetry.io/otel/exporters/zipkin v1.36.0 // indirect go.opentelemetry.io/otel/metric v1.37.0 // indirect - go.opentelemetry.io/otel/sdk v1.37.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.37.0 // indirect go.opentelemetry.io/otel/trace v1.37.0 // indirect - go.opentelemetry.io/proto/otlp v1.7.0 // indirect - go.uber.org/mock v0.5.2 // indirect - gofr.dev/pkg/gofr/datasource/pubsub/eventhub v0.4.0 // indirect - golang.org/x/crypto v0.39.0 // indirect - golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect golang.org/x/net v0.41.0 // indirect - golang.org/x/oauth2 v0.30.0 // indirect - golang.org/x/sync v0.15.0 // indirect - golang.org/x/sys v0.33.0 // indirect - golang.org/x/term v0.32.0 // indirect - golang.org/x/text v0.26.0 // indirect - golang.org/x/time v0.12.0 // indirect - google.golang.org/api v0.238.0 // indirect - google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect - google.golang.org/grpc v1.73.0 // indirect - google.golang.org/protobuf v1.36.6 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - modernc.org/libc v1.65.10 // indirect - modernc.org/mathutil v1.7.1 // indirect - modernc.org/memory v1.11.0 // indirect - modernc.org/sqlite v1.38.0 // indirect ) diff --git a/pkg/gofr/datasource/influxdb/go.sum b/pkg/gofr/datasource/influxdb/go.sum index cf1cac4c9..a2791b1a9 100644 --- a/pkg/gofr/datasource/influxdb/go.sum +++ b/pkg/gofr/datasource/influxdb/go.sum @@ -1,98 +1,24 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.120.0 h1:wc6bgG9DHyKqF5/vQvX1CiZrtHnxJjBlKUyF9nP6meA= -cloud.google.com/go v0.120.0/go.mod h1:/beW32s8/pGRuj4IILWQNd4uuebeT4dkOhKmkfit64Q= -cloud.google.com/go/auth v0.16.2 h1:QvBAGFPLrDeoiNjyfVunhQ10HKNYuOwZ5noee0M5df4= -cloud.google.com/go/auth v0.16.2/go.mod h1:sRBas2Y1fB1vZTdurouM0AzuYQBMZinrUYL8EufhtEA= -cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= -cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= -cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= -cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= -cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= -cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= -cloud.google.com/go/kms v1.21.2 h1:c/PRUSMNQ8zXrc1sdAUnsenWWaNXN+PzTXfXOcSFdoE= -cloud.google.com/go/kms v1.21.2/go.mod h1:8wkMtHV/9Z8mLXEXr1GK7xPSBdi6knuLXIhqjuWcI6w= -cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= -cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= -cloud.google.com/go/pubsub v1.49.0 h1:5054IkbslnrMCgA2MAEPcsN3Ky+AyMpEZcii/DoySPo= -cloud.google.com/go/pubsub v1.49.0/go.mod h1:K1FswTWP+C1tI/nfi3HQecoVeFvL4HUOB1tdaNXKhUY= -filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= -filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0 h1:B/dfvscEQtew9dVuoxqxrUKKv8Ih2f55PydknDamU+g= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0/go.mod h1:fiPSssYvltE08HJchL04dOy+RD4hgrjph0cwGGMntdI= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= -github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs v1.2.3 h1:6bVZts/82H+hax9b3vdmSpi7+Hw9uWvEaJHeKlafnW4= -github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs v1.2.3/go.mod h1:qf3s/6aV9ePKYGeEYPsbndK6GGfeS7SrbA6OE/T7NIA= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/eventhub/armeventhub v1.2.0 h1:+dggnR89/BIIlRlQ6d19dkhhdd/mQUiQbXhyHUFiB4w= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/eventhub/armeventhub v1.2.0/go.mod h1:tI9M2Q/ueFi287QRkdrhb9LHm6ZnXgkVYLRC3FhYkPw= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 h1:PiSrjRPpkQNjrM8H0WwKMnZUdu1RGMtd/LdGKUrOo+c= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0/go.mod h1:oDrbWx4ewMylP7xHivfgixbfGBT6APAwsSoHRKotnIc= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 h1:mlmW46Q0B79I+Aj4azKC6xDMFN9a9SyZWESlGWYXbFs= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0/go.mod h1:PXe2h+LKcWTX9afWdZoHyODqR4fBa5boUM/8uJfZ0Jo= -github.com/Azure/go-amqp v1.3.0 h1://1rikYhoIQNXJFXyoO/Rlb4+4EkHYfJceNtLlys2/4= -github.com/Azure/go-amqp v1.3.0/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= -github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= -github.com/XSAM/otelsql v0.39.0 h1:4o374mEIMweaeevL7fd8Q3C710Xi2Jh/c8G4Qy9bvCY= -github.com/XSAM/otelsql v0.39.0/go.mod h1:uMOXLUX+wkuAuP0AR3B45NXX7E9lJS2mERa8gqdU8R0= -github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= -github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= -github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= -github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= -github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= -github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8= -github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/dgo/v210 v210.0.0-20230328113526-b66f8ae53a2d h1:abDbP7XBVgwda+h0J5Qra5p2OQpidU2FdkXvzCKL+H8= -github.com/dgraph-io/dgo/v210 v210.0.0-20230328113526-b66f8ae53a2d/go.mod h1:wKFzULXAPj3U2BDAPWXhSbQQNC6FU1+1/5iika6IY7g= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/eclipse/paho.mqtt.golang v1.5.0 h1:EH+bUVJNgttidWFkLLVKaQPGmkTUfQQqjOsyvMGvD6o= -github.com/eclipse/paho.mqtt.golang v1.5.0/go.mod h1:du/2qNQVqJf/Sqs4MEL77kR8QTqANF7XU7Fk0aOTAgk= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -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/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/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-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= -github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= -github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= @@ -102,7 +28,6 @@ github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -110,8 +35,6 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -120,285 +43,96 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= -github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= -github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= -github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= -github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= -github.com/googleapis/gax-go/v2 v2.14.2 h1:eBLnkZ9635krYIPD+ag1USrOAI0Nr0QYF3+/3GqO0k0= -github.com/googleapis/gax-go/v2 v2.14.2/go.mod h1:ON64QhlJkhVtSqp4v1uaK92VyZ2gmvDQsweuyLV+8+w= -github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= -github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= -github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 h1:X5VWvz21y3gzm9Nw/kaUeku/1+uBhcekkmy4IkffJww= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90= github.com/influxdata/influxdb-client-go/v2 v2.14.0 h1:AjbBfJuq+QoaXNcrova8smSjwJdUHnwvfjMF71M1iI4= github.com/influxdata/influxdb-client-go/v2 v2.14.0/go.mod h1:Ahpm3QXKMJslpXl3IftVLVezreAUtBOTZssDrjZEFHI= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= -github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= -github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= -github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= -github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/oapi-codegen/runtime v1.0.0 h1:P4rqFX5fMFWqRzY9M/3YF9+aPSPPB06IzP2P7oOxrWo= github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg= -github.com/openzipkin/zipkin-go v0.4.3/go.mod h1:M9wCJZFWCo2RiY+o1eBCEMe0Dp2S5LDHcMZmk3RmK7c= -github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= -github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= -github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= -github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.64.0 h1:pdZeA+g617P7oGv1CzdTzyeShxAGrTBsolKNOLQPGO4= -github.com/prometheus/common v0.64.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= -github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= -github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= -github.com/redis/go-redis/extra/rediscmd/v9 v9.10.0 h1:uTiEyEyfLhkw678n6EulHVto8AkcXVr8zUcBJNZ0ark= -github.com/redis/go-redis/extra/rediscmd/v9 v9.10.0/go.mod h1:eFYL/99JvdLP4T9/3FZ5t2pClnv7mMskc+WstTcyVr4= -github.com/redis/go-redis/extra/redisotel/v9 v9.10.0 h1:4z7/hCJ9Jft8EBb2tDmK38p2WjyIEJ1ShhhwAhjOCps= -github.com/redis/go-redis/extra/redisotel/v9 v9.10.0/go.mod h1:B0thqLh4hB8MvvcUKSwyP5YiIcCCp8UrQ0cA9gEqyjk= -github.com/redis/go-redis/v9 v9.10.0 h1:FxwK3eV8p/CQa0Ch276C7u2d0eNC9kCmAYQ7mCXCzVs= -github.com/redis/go-redis/v9 v9.10.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/segmentio/kafka-go v0.4.48 h1:9jyu9CWK4W5W+SroCe8EffbrRZVqAOkuaLd/ApID4Vs= -github.com/segmentio/kafka-go v0.4.48/go.mod h1:HjF6XbOKh0Pjlkr5GVZxt6CsjjwnmhVOfURM5KMd8qg= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= -github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= -github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= -github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= -github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M= -github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= -go.einride.tech/aip v0.68.1 h1:16/AfSxcQISGN5z9C5lM+0mLYXihrHbQ1onvYTr93aQ= -go.einride.tech/aip v0.68.1/go.mod h1:XaFtaj4HuA3Zwk9xoBtTWgNubZ0ZZXv9BZJCkuKuWbg= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= -go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.61.0 h1:lREC4C0ilyP4WibDhQ7Gg2ygAQFP8oR07Fst/5cafwI= -go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.61.0/go.mod h1:HfvuU0kW9HewH14VCOLImqKvUgONodURG7Alj/IrnGI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWSnwW9hGObjkIdmlnWSydO+Qs8OwzfzXLUPg4xOc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI= -go.opentelemetry.io/otel/exporters/prometheus v0.58.0 h1:CJAxWKFIqdBennqxJyOgnt5LqkeFRT+Mz3Yjz3hL+h8= -go.opentelemetry.io/otel/exporters/prometheus v0.58.0/go.mod h1:7qo/4CLI+zYSNbv0GMNquzuss2FVZo3OYrGh96n4HNc= -go.opentelemetry.io/otel/exporters/zipkin v1.36.0 h1:s0n95ya5tOG03exJ5JySOdJFtwGo4ZQ+KeY7Zro4CLI= -go.opentelemetry.io/otel/exporters/zipkin v1.36.0/go.mod h1:m9wRxtKA2MZ1HcnNC4BKI+9aYe434qRZTCvI7QGUN7Y= go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= -go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= -go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= -go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os= -go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -gofr.dev v1.42.3 h1:fryZ6AAU5S64F/iXkrzA3qAkE8AyuQj8vr2y1sPD47I= -gofr.dev v1.42.3/go.mod h1:viVap8+T4Uk6FbeK2brW3U8dau4R8xiGoo+/NyY7zrE= -gofr.dev/pkg/gofr/datasource/pubsub/eventhub v0.4.0 h1:iXGvtiRYY4cNPpCyJMSVbJWQo+QoNCT4QEDLxKcR2mI= -gofr.dev/pkg/gofr/datasource/pubsub/eventhub v0.4.0/go.mod h1:8pH6rtEcNk+tJyhvilwqStEmnOpAMdQl6yeq14tgthA= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= -golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= -golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= -golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= -golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= -golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= -golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= -golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= -golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= -golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= -golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.238.0 h1:+EldkglWIg/pWjkq97sd+XxH7PxakNYoe/rkSTbnvOs= -google.golang.org/api v0.238.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 h1:1tXaIXCracvtsRxSBsYDiSBN0cuJvM7QYW+MrpIRY78= -google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:49MsLSx0oWMOZqcpB3uL8ZOkAh1+TndpJ8ONoCBWiZk= -google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 h1:oWVWY3NzT7KJppx2UKhKmzPq4SRe0LdCijVRwvGeikY= -google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822/go.mod h1:h3c4v36UTKzUiuaOKQ6gr3S+0hovBtUrXzTG/i3+XEc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok= -google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -408,43 +142,9 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= -google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -modernc.org/cc/v4 v4.26.1 h1:+X5NtzVBn0KgsBCBe+xkDC7twLb/jNVj9FPgiwSQO3s= -modernc.org/cc/v4 v4.26.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= -modernc.org/ccgo/v4 v4.28.0 h1:rjznn6WWehKq7dG4JtLRKxb52Ecv8OUGah8+Z/SfpNU= -modernc.org/ccgo/v4 v4.28.0/go.mod h1:JygV3+9AV6SmPhDasu4JgquwU81XAKLd3OKTUDNOiKE= -modernc.org/fileutil v1.3.3 h1:3qaU+7f7xxTUmvU1pJTZiDLAIoJVdUSSauJNHg9yXoA= -modernc.org/fileutil v1.3.3/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= -modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= -modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= -modernc.org/libc v1.65.10 h1:ZwEk8+jhW7qBjHIT+wd0d9VjitRyQef9BnzlzGwMODc= -modernc.org/libc v1.65.10/go.mod h1:StFvYpx7i/mXtBAfVOjaU0PWZOvIRoZSgXhrwXzr8Po= -modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= -modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= -modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= -modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= -modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= -modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= -modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= -modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= -modernc.org/sqlite v1.38.0 h1:+4OrfPQ8pxHKuWG4md1JpR/EYAh3Md7TdejuuzE7EUI= -modernc.org/sqlite v1.38.0/go.mod h1:1Bj+yES4SVvBZ4cBOpVZ6QgesMCKpJZDq0nxYzOpmNE= -modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= -modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= -modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= -modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= -nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go new file mode 100644 index 000000000..725e0f681 --- /dev/null +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -0,0 +1,54 @@ +package influxdb + +import ( + "testing" + + gomock "github.com/golang/mock/gomock" + "go.opentelemetry.io/otel" +) + +func setupDB(t *testing.T) *Client { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + // Setup + mockLogger := NewMockLogger(ctrl) + mockMetrics := NewMockMetrics(ctrl) + mockInfluxClient := NewMockInfluxClient(ctrl) + + config := Config{ + URL: "http://localhost:8086", + Username: "admin", + Password: "admin1234", + Token: "token", + } + + client := New(config) + + client.UseLogger(mockLogger) + client.UseMetrics(mockMetrics) + client.UseTracer(otel.GetTracerProvider().Tracer("gofr-influxdb")) + + mockLogger.EXPECT().Debugf(gomock.Any(), gomock.Any()).AnyTimes() + // mockMetrics.EXPECT().Errorf(gomock.Any(), gomock.Any(), gomock.Any()) + + // Replace the client with our mocked version + client.client = mockInfluxClient + return client +} + +func Test_HelthCheckSuccess(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + // mockInflux := NewMockInfluxDB(ctrl) + client := *setupDB(t) + client.HealthCheck(t.Context()) + + // client.HealthCheck(t.Context()) + +} diff --git a/pkg/gofr/datasource/influxdb/interface.go b/pkg/gofr/datasource/influxdb/interface.go new file mode 100644 index 000000000..2d9a6a141 --- /dev/null +++ b/pkg/gofr/datasource/influxdb/interface.go @@ -0,0 +1,65 @@ +package influxdb + +import ( + "context" + + influxdb2 "github.com/influxdata/influxdb-client-go/v2" + + "github.com/influxdata/influxdb-client-go/v2/api" + "github.com/influxdata/influxdb-client-go/v2/api/http" + "github.com/influxdata/influxdb-client-go/v2/domain" +) + +// InfluxDB defines the operations required to interact with an InfluxDB instance. +type InfluxClient interface { + + // Setup sends request to initialise new InfluxDB server with user, org and bucket, and data retention period + // and returns details about newly created entities along with the authorization object. + // Retention period of zero will result to infinite retention. + Setup(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int) (*domain.OnboardingResponse, error) + // SetupWithToken sends request to initialise new InfluxDB server with user, org and bucket, data retention period and token + // and returns details about newly created entities along with the authorization object. + // Retention period of zero will result to infinite retention. + SetupWithToken(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int, token string) (*domain.OnboardingResponse, error) + // Ready returns InfluxDB uptime info of server. It doesn't validate authentication params. + Ready(ctx context.Context) (*domain.Ready, error) + // Health returns an InfluxDB server health check result. Read the HealthCheck.Status field to get server status. + // Health doesn't validate authentication params. + Health(ctx context.Context) (*domain.HealthCheck, error) + // Ping validates whether InfluxDB server is running. It doesn't validate authentication params. + Ping(ctx context.Context) (bool, error) + // Close ensures all ongoing asynchronous write clients finish. + // Also closes all idle connections, in case of HTTP client was created internally. + Close() + // Options returns the options associated with client + Options() *influxdb2.Options + // ServerURL returns the url of the server url client talks to + ServerURL() string + // HTTPService returns underlying HTTP service object used by client + HTTPService() http.Service + // WriteAPI returns the asynchronous, non-blocking, Write client. + // Ensures using a single WriteAPI instance for each org/bucket pair. + WriteAPI(org, bucket string) api.WriteAPI + // WriteAPIBlocking returns the synchronous, blocking, Write client. + // Ensures using a single WriteAPIBlocking instance for each org/bucket pair. + WriteAPIBlocking(org, bucket string) api.WriteAPIBlocking + // QueryAPI returns Query client. + // Ensures using a single QueryAPI instance each org. + QueryAPI(org string) api.QueryAPI + // AuthorizationsAPI returns Authorizations API client. + AuthorizationsAPI() api.AuthorizationsAPI + // OrganizationsAPI returns Organizations API client + OrganizationsAPI() api.OrganizationsAPI + // UsersAPI returns Users API client. + UsersAPI() api.UsersAPI + // DeleteAPI returns Delete API client + DeleteAPI() api.DeleteAPI + // BucketsAPI returns Buckets API client + BucketsAPI() api.BucketsAPI + // LabelsAPI returns Labels API client + LabelsAPI() api.LabelsAPI + // TasksAPI returns Tasks API client + TasksAPI() api.TasksAPI + + APIClient() *domain.Client +} diff --git a/pkg/gofr/datasource/influxdb/metrics_logger.go b/pkg/gofr/datasource/influxdb/metrics_logger.go index 69fa89f67..ac2c47adb 100644 --- a/pkg/gofr/datasource/influxdb/metrics_logger.go +++ b/pkg/gofr/datasource/influxdb/metrics_logger.go @@ -13,7 +13,7 @@ import ( context "context" reflect "reflect" - gomock "go.uber.org/mock/gomock" + gomock "github.com/golang/mock/gomock" ) // MockMetrics is a mock of Metrics interface. diff --git a/pkg/gofr/datasource/influxdb/mock_interfaces.go b/pkg/gofr/datasource/influxdb/mock_interfaces.go new file mode 100644 index 000000000..5f5b559be --- /dev/null +++ b/pkg/gofr/datasource/influxdb/mock_interfaces.go @@ -0,0 +1,322 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: interface.go + +// Package influxdb is a generated GoMock package. +package influxdb + +import ( + context "context" + reflect "reflect" + + gomock "github.com/golang/mock/gomock" + influxdb2 "github.com/influxdata/influxdb-client-go/v2" + api "github.com/influxdata/influxdb-client-go/v2/api" + http "github.com/influxdata/influxdb-client-go/v2/api/http" + domain "github.com/influxdata/influxdb-client-go/v2/domain" +) + +// MockInfluxClient is a mock of InfluxClient interface. +type MockInfluxClient struct { + ctrl *gomock.Controller + recorder *MockInfluxClientMockRecorder +} + +// MockInfluxClientMockRecorder is the mock recorder for MockInfluxClient. +type MockInfluxClientMockRecorder struct { + mock *MockInfluxClient +} + +// NewMockInfluxClient creates a new mock instance. +func NewMockInfluxClient(ctrl *gomock.Controller) *MockInfluxClient { + mock := &MockInfluxClient{ctrl: ctrl} + mock.recorder = &MockInfluxClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockInfluxClient) EXPECT() *MockInfluxClientMockRecorder { + return m.recorder +} + +// APIClient mocks base method. +func (m *MockInfluxClient) APIClient() *domain.Client { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "APIClient") + ret0, _ := ret[0].(*domain.Client) + return ret0 +} + +// APIClient indicates an expected call of APIClient. +func (mr *MockInfluxClientMockRecorder) APIClient() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "APIClient", reflect.TypeOf((*MockInfluxClient)(nil).APIClient)) +} + +// AuthorizationsAPI mocks base method. +func (m *MockInfluxClient) AuthorizationsAPI() api.AuthorizationsAPI { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AuthorizationsAPI") + ret0, _ := ret[0].(api.AuthorizationsAPI) + return ret0 +} + +// AuthorizationsAPI indicates an expected call of AuthorizationsAPI. +func (mr *MockInfluxClientMockRecorder) AuthorizationsAPI() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthorizationsAPI", reflect.TypeOf((*MockInfluxClient)(nil).AuthorizationsAPI)) +} + +// BucketsAPI mocks base method. +func (m *MockInfluxClient) BucketsAPI() api.BucketsAPI { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BucketsAPI") + ret0, _ := ret[0].(api.BucketsAPI) + return ret0 +} + +// BucketsAPI indicates an expected call of BucketsAPI. +func (mr *MockInfluxClientMockRecorder) BucketsAPI() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BucketsAPI", reflect.TypeOf((*MockInfluxClient)(nil).BucketsAPI)) +} + +// Close mocks base method. +func (m *MockInfluxClient) Close() { + m.ctrl.T.Helper() + m.ctrl.Call(m, "Close") +} + +// Close indicates an expected call of Close. +func (mr *MockInfluxClientMockRecorder) Close() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockInfluxClient)(nil).Close)) +} + +// DeleteAPI mocks base method. +func (m *MockInfluxClient) DeleteAPI() api.DeleteAPI { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteAPI") + ret0, _ := ret[0].(api.DeleteAPI) + return ret0 +} + +// DeleteAPI indicates an expected call of DeleteAPI. +func (mr *MockInfluxClientMockRecorder) DeleteAPI() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAPI", reflect.TypeOf((*MockInfluxClient)(nil).DeleteAPI)) +} + +// HTTPService mocks base method. +func (m *MockInfluxClient) HTTPService() http.Service { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HTTPService") + ret0, _ := ret[0].(http.Service) + return ret0 +} + +// HTTPService indicates an expected call of HTTPService. +func (mr *MockInfluxClientMockRecorder) HTTPService() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HTTPService", reflect.TypeOf((*MockInfluxClient)(nil).HTTPService)) +} + +// Health mocks base method. +func (m *MockInfluxClient) Health(ctx context.Context) (*domain.HealthCheck, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Health", ctx) + ret0, _ := ret[0].(*domain.HealthCheck) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Health indicates an expected call of Health. +func (mr *MockInfluxClientMockRecorder) Health(ctx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Health", reflect.TypeOf((*MockInfluxClient)(nil).Health), ctx) +} + +// LabelsAPI mocks base method. +func (m *MockInfluxClient) LabelsAPI() api.LabelsAPI { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LabelsAPI") + ret0, _ := ret[0].(api.LabelsAPI) + return ret0 +} + +// LabelsAPI indicates an expected call of LabelsAPI. +func (mr *MockInfluxClientMockRecorder) LabelsAPI() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LabelsAPI", reflect.TypeOf((*MockInfluxClient)(nil).LabelsAPI)) +} + +// Options mocks base method. +func (m *MockInfluxClient) Options() *influxdb2.Options { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Options") + ret0, _ := ret[0].(*influxdb2.Options) + return ret0 +} + +// Options indicates an expected call of Options. +func (mr *MockInfluxClientMockRecorder) Options() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Options", reflect.TypeOf((*MockInfluxClient)(nil).Options)) +} + +// OrganizationsAPI mocks base method. +func (m *MockInfluxClient) OrganizationsAPI() api.OrganizationsAPI { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OrganizationsAPI") + ret0, _ := ret[0].(api.OrganizationsAPI) + return ret0 +} + +// OrganizationsAPI indicates an expected call of OrganizationsAPI. +func (mr *MockInfluxClientMockRecorder) OrganizationsAPI() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OrganizationsAPI", reflect.TypeOf((*MockInfluxClient)(nil).OrganizationsAPI)) +} + +// Ping mocks base method. +func (m *MockInfluxClient) Ping(ctx context.Context) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Ping", ctx) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Ping indicates an expected call of Ping. +func (mr *MockInfluxClientMockRecorder) Ping(ctx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ping", reflect.TypeOf((*MockInfluxClient)(nil).Ping), ctx) +} + +// QueryAPI mocks base method. +func (m *MockInfluxClient) QueryAPI(org string) api.QueryAPI { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "QueryAPI", org) + ret0, _ := ret[0].(api.QueryAPI) + return ret0 +} + +// QueryAPI indicates an expected call of QueryAPI. +func (mr *MockInfluxClientMockRecorder) QueryAPI(org interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryAPI", reflect.TypeOf((*MockInfluxClient)(nil).QueryAPI), org) +} + +// Ready mocks base method. +func (m *MockInfluxClient) Ready(ctx context.Context) (*domain.Ready, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Ready", ctx) + ret0, _ := ret[0].(*domain.Ready) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Ready indicates an expected call of Ready. +func (mr *MockInfluxClientMockRecorder) Ready(ctx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ready", reflect.TypeOf((*MockInfluxClient)(nil).Ready), ctx) +} + +// ServerURL mocks base method. +func (m *MockInfluxClient) ServerURL() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ServerURL") + ret0, _ := ret[0].(string) + return ret0 +} + +// ServerURL indicates an expected call of ServerURL. +func (mr *MockInfluxClientMockRecorder) ServerURL() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ServerURL", reflect.TypeOf((*MockInfluxClient)(nil).ServerURL)) +} + +// Setup mocks base method. +func (m *MockInfluxClient) Setup(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int) (*domain.OnboardingResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Setup", ctx, username, password, org, bucket, retentionPeriodHours) + ret0, _ := ret[0].(*domain.OnboardingResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Setup indicates an expected call of Setup. +func (mr *MockInfluxClientMockRecorder) Setup(ctx, username, password, org, bucket, retentionPeriodHours interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Setup", reflect.TypeOf((*MockInfluxClient)(nil).Setup), ctx, username, password, org, bucket, retentionPeriodHours) +} + +// SetupWithToken mocks base method. +func (m *MockInfluxClient) SetupWithToken(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int, token string) (*domain.OnboardingResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetupWithToken", ctx, username, password, org, bucket, retentionPeriodHours, token) + ret0, _ := ret[0].(*domain.OnboardingResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SetupWithToken indicates an expected call of SetupWithToken. +func (mr *MockInfluxClientMockRecorder) SetupWithToken(ctx, username, password, org, bucket, retentionPeriodHours, token interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetupWithToken", reflect.TypeOf((*MockInfluxClient)(nil).SetupWithToken), ctx, username, password, org, bucket, retentionPeriodHours, token) +} + +// TasksAPI mocks base method. +func (m *MockInfluxClient) TasksAPI() api.TasksAPI { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TasksAPI") + ret0, _ := ret[0].(api.TasksAPI) + return ret0 +} + +// TasksAPI indicates an expected call of TasksAPI. +func (mr *MockInfluxClientMockRecorder) TasksAPI() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TasksAPI", reflect.TypeOf((*MockInfluxClient)(nil).TasksAPI)) +} + +// UsersAPI mocks base method. +func (m *MockInfluxClient) UsersAPI() api.UsersAPI { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UsersAPI") + ret0, _ := ret[0].(api.UsersAPI) + return ret0 +} + +// UsersAPI indicates an expected call of UsersAPI. +func (mr *MockInfluxClientMockRecorder) UsersAPI() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UsersAPI", reflect.TypeOf((*MockInfluxClient)(nil).UsersAPI)) +} + +// WriteAPI mocks base method. +func (m *MockInfluxClient) WriteAPI(org, bucket string) api.WriteAPI { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WriteAPI", org, bucket) + ret0, _ := ret[0].(api.WriteAPI) + return ret0 +} + +// WriteAPI indicates an expected call of WriteAPI. +func (mr *MockInfluxClientMockRecorder) WriteAPI(org, bucket interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WriteAPI", reflect.TypeOf((*MockInfluxClient)(nil).WriteAPI), org, bucket) +} + +// WriteAPIBlocking mocks base method. +func (m *MockInfluxClient) WriteAPIBlocking(org, bucket string) api.WriteAPIBlocking { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WriteAPIBlocking", org, bucket) + ret0, _ := ret[0].(api.WriteAPIBlocking) + return ret0 +} + +// WriteAPIBlocking indicates an expected call of WriteAPIBlocking. +func (mr *MockInfluxClientMockRecorder) WriteAPIBlocking(org, bucket interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WriteAPIBlocking", reflect.TypeOf((*MockInfluxClient)(nil).WriteAPIBlocking), org, bucket) +} diff --git a/pkg/gofr/datasource/influxdb/mock_logger.go b/pkg/gofr/datasource/influxdb/mock_logger.go index efa7c4b51..74ead6f59 100644 --- a/pkg/gofr/datasource/influxdb/mock_logger.go +++ b/pkg/gofr/datasource/influxdb/mock_logger.go @@ -12,7 +12,7 @@ package influxdb import ( reflect "reflect" - gomock "go.uber.org/mock/gomock" + gomock "github.com/golang/mock/gomock" ) // MockLogger is a mock of Logger interface. From 14b30485631a5c981188a1086423f1d02aadf739 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 7 Aug 2025 14:00:44 +0530 Subject: [PATCH 23/44] [mock] health Success + Fail (both completed) Ping test completed. --- pkg/gofr/datasource/influxdb/influx_test.go | 366 +++++++++--------- pkg/gofr/datasource/influxdb/influxdb_test.go | 82 +++- 2 files changed, 255 insertions(+), 193 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influx_test.go b/pkg/gofr/datasource/influxdb/influx_test.go index 83dde73d6..dc9984678 100644 --- a/pkg/gofr/datasource/influxdb/influx_test.go +++ b/pkg/gofr/datasource/influxdb/influx_test.go @@ -1,187 +1,187 @@ package influxdb -import ( - "context" - "os" - "testing" - "time" - - "github.com/stretchr/testify/require" - "gofr.dev/pkg/gofr" -) - -const ( - URL = "http://localhost:8086" - Username = "admin" - Password = "admin1234" - testOrgName = "org-test2" - testBucketName = "bucket-test2" - testFluxQuery = "from(bucket:\"bucket-test2\")|> range(start: -1h) |> filter(fn: (r) => r._measurement == \"stat\")" -) - -func getEnv(key, fallback string) string { - if val := os.Getenv(key); val != "" { - return val - } - - return fallback -} - -func setupInflux(t *testing.T) *Client { - t.Helper() - - token := getEnv("INFLUXDB_TOKEN", "") - - app := gofr.New() - client := New(Config{ - URL: URL, - Username: Username, - Password: Password, - Token: token, - }) - app.AddInfluxDB(client) - require.Equal(t, URL, client.config.URL) - require.Equal(t, Username, client.config.Username) - require.Equal(t, Password, client.config.Password, Password) - require.Equal(t, token, client.config.Token) - - return client -} - -func TestPing(t *testing.T) { - ctx := t.Context() - config := setupInflux(t) - health, err := config.Ping(ctx) - require.NoError(t, err) // empty organization name - require.True(t, health) -} - -func creatOrganization(t *testing.T, client *Client, orgName string) (orgID string) { - t.Helper() - - ctx := t.Context() - // try creating organization without name - orgID, err := client.CreateOrganization(ctx, "") - require.Error(t, err) // empty organization name - require.Empty(t, orgID) - - // actually creating organization - orgID, err = client.CreateOrganization(ctx, orgName) - require.NoError(t, err) - require.NotEmpty(t, orgID) - - return orgID -} - -func listOrganizations(ctx context.Context, t *testing.T, client *Client) map[string]string { - t.Helper() - - orgs, err := client.ListOrganization(ctx) - require.NoError(t, err) - - return orgs -} - -func listBuckets(ctx context.Context, t *testing.T, client *Client, orgID string) map[string]string { - t.Helper() - - buckets, err := client.ListBuckets(ctx, orgID) - require.NoError(t, err) - - return buckets -} - -func deleteOrganization(t *testing.T, client *Client, orgID string) { - t.Helper() - - ctx := t.Context() - - // try deleting empty id organization - err := client.DeleteOrganization(ctx, "") - require.Error(t, err) - - // actually deleting the organization - err = client.DeleteOrganization(ctx, orgID) - require.NoError(t, err) -} - -func createNewBucket(t *testing.T, client *Client, orgID, name string) (bucketID string) { - t.Helper() - - ctx := t.Context() - - // try creating organization without name - bucketID, err := client.CreateBucket(ctx, orgID, "") - require.Error(t, err) // empty organization name - require.Empty(t, bucketID) - - // actually creating organization - bucketID, err = client.CreateBucket(ctx, orgID, name) - require.NoError(t, err) - require.NotEmpty(t, bucketID) - - return bucketID -} - -func deleteBucket(t *testing.T, client *Client, bucketID string) { - t.Helper() - ctx := t.Context() - - // try creating delete empty bucket id - err := client.DeleteBucket(ctx, "") - require.Error(t, err) - - err = client.DeleteBucket(ctx, bucketID) - require.NoError(t, err) -} - -func TestOrganizationOperations(t *testing.T) { - ctx := t.Context() - client := setupInflux(t) - - beforeOrgList := listOrganizations(ctx, t, client) // before create the new organization - orgID := creatOrganization(t, client, testOrgName) - afterOrgList := listOrganizations(ctx, t, client) // after create the new organization - require.Greater(t, len(afterOrgList), len(beforeOrgList)) - deleteOrganization(t, client, orgID) -} - -func TestBucketOperations(t *testing.T) { - ctx := t.Context() - client := setupInflux(t) - orgID := creatOrganization(t, client, testOrgName) - - beforeBucketList := listBuckets(ctx, t, client, testOrgName) // before create the new organization - bucketID := createNewBucket(t, client, orgID, testBucketName) - afterBucketList := listBuckets(ctx, t, client, testOrgName) // before create the new organization - require.Greater(t, len(afterBucketList), len(beforeBucketList)) +// import ( +// "context" +// "os" +// "testing" +// "time" + +// "github.com/stretchr/testify/require" +// "gofr.dev/pkg/gofr" +// ) + +// const ( +// URL = "http://localhost:8086" +// Username = "admin" +// Password = "admin1234" +// testOrgName = "org-test2" +// testBucketName = "bucket-test2" +// testFluxQuery = "from(bucket:\"bucket-test2\")|> range(start: -1h) |> filter(fn: (r) => r._measurement == \"stat\")" +// ) + +// func getEnv(key, fallback string) string { +// if val := os.Getenv(key); val != "" { +// return val +// } + +// return fallback +// } + +// func setupInflux(t *testing.T) *Client { +// t.Helper() + +// token := getEnv("INFLUXDB_TOKEN", "") + +// app := gofr.New() +// client := New(Config{ +// URL: URL, +// Username: Username, +// Password: Password, +// Token: token, +// }) +// app.AddInfluxDB(client) +// require.Equal(t, URL, client.config.URL) +// require.Equal(t, Username, client.config.Username) +// require.Equal(t, Password, client.config.Password, Password) +// require.Equal(t, token, client.config.Token) + +// return client +// } + +// func TestPing(t *testing.T) { +// ctx := t.Context() +// config := setupInflux(t) +// health, err := config.Ping(ctx) +// require.NoError(t, err) // empty organization name +// require.True(t, health) +// } + +// func creatOrganization(t *testing.T, client *Client, orgName string) (orgID string) { +// t.Helper() + +// ctx := t.Context() +// // try creating organization without name +// orgID, err := client.CreateOrganization(ctx, "") +// require.Error(t, err) // empty organization name +// require.Empty(t, orgID) + +// // actually creating organization +// orgID, err = client.CreateOrganization(ctx, orgName) +// require.NoError(t, err) +// require.NotEmpty(t, orgID) + +// return orgID +// } + +// func listOrganizations(ctx context.Context, t *testing.T, client *Client) map[string]string { +// t.Helper() + +// orgs, err := client.ListOrganization(ctx) +// require.NoError(t, err) + +// return orgs +// } + +// func listBuckets(ctx context.Context, t *testing.T, client *Client, orgID string) map[string]string { +// t.Helper() + +// buckets, err := client.ListBuckets(ctx, orgID) +// require.NoError(t, err) + +// return buckets +// } + +// func deleteOrganization(t *testing.T, client *Client, orgID string) { +// t.Helper() + +// ctx := t.Context() + +// // try deleting empty id organization +// err := client.DeleteOrganization(ctx, "") +// require.Error(t, err) + +// // actually deleting the organization +// err = client.DeleteOrganization(ctx, orgID) +// require.NoError(t, err) +// } + +// func createNewBucket(t *testing.T, client *Client, orgID, name string) (bucketID string) { +// t.Helper() + +// ctx := t.Context() + +// // try creating organization without name +// bucketID, err := client.CreateBucket(ctx, orgID, "") +// require.Error(t, err) // empty organization name +// require.Empty(t, bucketID) + +// // actually creating organization +// bucketID, err = client.CreateBucket(ctx, orgID, name) +// require.NoError(t, err) +// require.NotEmpty(t, bucketID) + +// return bucketID +// } + +// func deleteBucket(t *testing.T, client *Client, bucketID string) { +// t.Helper() +// ctx := t.Context() + +// // try creating delete empty bucket id +// err := client.DeleteBucket(ctx, "") +// require.Error(t, err) + +// err = client.DeleteBucket(ctx, bucketID) +// require.NoError(t, err) +// } + +// func TestOrganizationOperations(t *testing.T) { +// ctx := t.Context() +// client := setupInflux(t) + +// beforeOrgList := listOrganizations(ctx, t, client) // before create the new organization +// orgID := creatOrganization(t, client, testOrgName) +// afterOrgList := listOrganizations(ctx, t, client) // after create the new organization +// require.Greater(t, len(afterOrgList), len(beforeOrgList)) +// deleteOrganization(t, client, orgID) +// } + +// func TestBucketOperations(t *testing.T) { +// ctx := t.Context() +// client := setupInflux(t) +// orgID := creatOrganization(t, client, testOrgName) + +// beforeBucketList := listBuckets(ctx, t, client, testOrgName) // before create the new organization +// bucketID := createNewBucket(t, client, orgID, testBucketName) +// afterBucketList := listBuckets(ctx, t, client, testOrgName) // before create the new organization +// require.Greater(t, len(afterBucketList), len(beforeBucketList)) - deleteBucket(t, client, bucketID) - deleteOrganization(t, client, orgID) -} - -func TestWritePoints(t *testing.T) { - ctx := t.Context() - client := setupInflux(t) - orgID := creatOrganization(t, client, testOrgName) - bucketID := createNewBucket(t, client, orgID, testBucketName) - - err := client.WritePoint( - ctx, - orgID, - bucketID, - "stat", - map[string]string{"unit": "temperature"}, - map[string]any{"avg": 24.5, "max": 45.0}, - time.Now(), - ) +// deleteBucket(t, client, bucketID) +// deleteOrganization(t, client, orgID) +// } + +// func TestWritePoints(t *testing.T) { +// ctx := t.Context() +// client := setupInflux(t) +// orgID := creatOrganization(t, client, testOrgName) +// bucketID := createNewBucket(t, client, orgID, testBucketName) + +// err := client.WritePoint( +// ctx, +// orgID, +// bucketID, +// "stat", +// map[string]string{"unit": "temperature"}, +// map[string]any{"avg": 24.5, "max": 45.0}, +// time.Now(), +// ) - require.NoError(t, err) - - result, err := client.Query(ctx, orgID, testFluxQuery) - require.NoError(t, err) - require.NotEmpty(t, result) - - deleteBucket(t, client, bucketID) - deleteOrganization(t, client, orgID) -} +// require.NoError(t, err) + +// result, err := client.Query(ctx, orgID, testFluxQuery) +// require.NoError(t, err) +// require.NotEmpty(t, result) + +// deleteBucket(t, client, bucketID) +// deleteOrganization(t, client, orgID) +// } diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index 725e0f681..4af91e518 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -4,16 +4,15 @@ import ( "testing" gomock "github.com/golang/mock/gomock" + "github.com/influxdata/influxdb-client-go/v2/domain" + "github.com/kataras/iris/v12/x/errors" + "github.com/stretchr/testify/require" "go.opentelemetry.io/otel" ) -func setupDB(t *testing.T) *Client { +func setupDB(t *testing.T, ctrl *gomock.Controller) *Client { t.Helper() - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - // Setup mockLogger := NewMockLogger(ctrl) mockMetrics := NewMockMetrics(ctrl) mockInfluxClient := NewMockInfluxClient(ctrl) @@ -32,7 +31,6 @@ func setupDB(t *testing.T) *Client { client.UseTracer(otel.GetTracerProvider().Tracer("gofr-influxdb")) mockLogger.EXPECT().Debugf(gomock.Any(), gomock.Any()).AnyTimes() - // mockMetrics.EXPECT().Errorf(gomock.Any(), gomock.Any(), gomock.Any()) // Replace the client with our mocked version client.client = mockInfluxClient @@ -45,10 +43,74 @@ func Test_HelthCheckSuccess(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - // mockInflux := NewMockInfluxDB(ctrl) - client := *setupDB(t) - client.HealthCheck(t.Context()) + client := *setupDB(t, ctrl) + mockInflux := client.client.(*MockInfluxClient) + + expectedHealth := &domain.HealthCheck{Status: "pass"} + mockInflux.EXPECT(). + Health(gomock.Any()). + Return(expectedHealth, nil). + Times(1) + + _, err := client.HealthCheck(t.Context()) + require.NoError(t, err) +} + +func Test_HelthCheckFail(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + client := *setupDB(t, ctrl) + mockInflux := client.client.(*MockInfluxClient) + + expectedHealth := &domain.HealthCheck{Status: "fail"} + mockInflux.EXPECT(). + Health(gomock.Any()). + Return(expectedHealth, errors.New("No influxdb found")). + Times(1) + + _, err := client.HealthCheck(t.Context()) + require.Error(t, err) +} + +func Test_PingSuccess(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + client := *setupDB(t, ctrl) + mockInflux := client.client.(*MockInfluxClient) + + mockInflux.EXPECT(). + Ping(gomock.Any()). + Return(true, nil). + Times(1) + + health, err := client.Ping(t.Context()) + + require.NoError(t, err) // empty organization name + require.True(t, health) +} + +func Test_PingFailed(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + client := *setupDB(t, ctrl) + mockInflux := client.client.(*MockInfluxClient) + + mockInflux.EXPECT(). + Ping(gomock.Any()). + Return(false, errors.New("Something Unexptected")). + Times(1) - // client.HealthCheck(t.Context()) + health, err := client.Ping(t.Context()) + require.Error(t, err) // empty organization name + require.False(t, health) } From 6b549db750988c31550b3af441d8e5a65a37e447 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 7 Aug 2025 17:03:13 +0530 Subject: [PATCH 24/44] [tests] createOrganization tests added, checking conditions of empty, dupliucate orgs, --- pkg/gofr/datasource/influxdb/influxdb_test.go | 77 +++- pkg/gofr/datasource/influxdb/interface.go | 50 ++- .../datasource/influxdb/mock_interfaces.go | 342 ++++++++++++++++++ 3 files changed, 466 insertions(+), 3 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index 4af91e518..6facecc11 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -19,8 +19,8 @@ func setupDB(t *testing.T, ctrl *gomock.Controller) *Client { config := Config{ URL: "http://localhost:8086", - Username: "admin", - Password: "admin1234", + Username: "username", + Password: "password", Token: "token", } @@ -31,6 +31,8 @@ func setupDB(t *testing.T, ctrl *gomock.Controller) *Client { client.UseTracer(otel.GetTracerProvider().Tracer("gofr-influxdb")) mockLogger.EXPECT().Debugf(gomock.Any(), gomock.Any()).AnyTimes() + mockLogger.EXPECT().Errorf(gomock.Any(), gomock.Any()).AnyTimes() + mockLogger.EXPECT().Errorf(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes() // Replace the client with our mocked version client.client = mockInfluxClient @@ -114,3 +116,74 @@ func Test_PingFailed(t *testing.T) { require.Error(t, err) // empty organization name require.False(t, health) } + +func Test_CreatOrganization(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyID := "dfdf" + + testCases := []struct { + name string + orgName string + resp *domain.Organization + expectErr bool + err error + }{ + { + name: "empty orgainzation name", + orgName: "", + resp: &domain.Organization{}, + expectErr: true, + err: errEmptyOrganizationName, + }, + { + name: "create new organization", + orgName: "testOrg", + resp: &domain.Organization{ + Id: &dummyID, + }, + expectErr: false, + err: nil, + }, + { + name: "create duplicate organization", + orgName: "testOrg", + resp: &domain.Organization{}, + expectErr: true, + err: errors.New("failed to create new organization"), + }, + } + + for _, tt := range testCases { + t.Run(tt.name, func(t *testing.T) { + + client := *setupDB(t, ctrl) + mockInflux := client.client.(*MockInfluxClient) + mockInfluxOrgApi := NewMockInfluxOrganizationsAPI(ctrl) + + mockInflux.EXPECT().OrganizationsAPI(). + Return(mockInfluxOrgApi). + AnyTimes() + + mockInfluxOrgApi.EXPECT(). + CreateOrganizationWithName(gomock.Any(), tt.orgName). + Return(tt.resp, tt.err). + AnyTimes() + + newOrgId, err := client.CreateOrganization(t.Context(), tt.orgName) + + if tt.expectErr { + require.Error(t, err) + require.Equal(t, err, tt.err) + require.Empty(t, newOrgId) + } else { + require.NoError(t, err) + } + + // fmt.Println(orgId, err) + }) + } +} diff --git a/pkg/gofr/datasource/influxdb/interface.go b/pkg/gofr/datasource/influxdb/interface.go index 2d9a6a141..9ae083140 100644 --- a/pkg/gofr/datasource/influxdb/interface.go +++ b/pkg/gofr/datasource/influxdb/interface.go @@ -5,7 +5,7 @@ import ( influxdb2 "github.com/influxdata/influxdb-client-go/v2" - "github.com/influxdata/influxdb-client-go/v2/api" + api "github.com/influxdata/influxdb-client-go/v2/api" "github.com/influxdata/influxdb-client-go/v2/api/http" "github.com/influxdata/influxdb-client-go/v2/domain" ) @@ -63,3 +63,51 @@ type InfluxClient interface { APIClient() *domain.Client } + +// OrganizationsAPI provides methods for managing Organizations in a InfluxDB server. +type InfluxOrganizationsAPI interface { + // GetOrganizations returns all organizations. + // GetOrganizations supports PagingOptions: Offset, Limit, Descending + GetOrganizations(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) + // FindOrganizationByName returns an organization found using orgName. + FindOrganizationByName(ctx context.Context, orgName string) (*domain.Organization, error) + // FindOrganizationByID returns an organization found using orgID. + FindOrganizationByID(ctx context.Context, orgID string) (*domain.Organization, error) + // FindOrganizationsByUserID returns organizations an user with userID belongs to. + // FindOrganizationsByUserID supports PagingOptions: Offset, Limit, Descending + FindOrganizationsByUserID(ctx context.Context, userID string, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) + // CreateOrganization creates new organization. + CreateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) + // CreateOrganizationWithName creates new organization with orgName and with status active. + CreateOrganizationWithName(ctx context.Context, orgName string) (*domain.Organization, error) + // UpdateOrganization updates organization. + UpdateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) + // DeleteOrganization deletes an organization. + DeleteOrganization(ctx context.Context, org *domain.Organization) error + // DeleteOrganizationWithID deletes an organization with orgID. + DeleteOrganizationWithID(ctx context.Context, orgID string) error + // GetMembers returns members of an organization. + GetMembers(ctx context.Context, org *domain.Organization) (*[]domain.ResourceMember, error) + // GetMembersWithID returns members of an organization with orgID. + GetMembersWithID(ctx context.Context, orgID string) (*[]domain.ResourceMember, error) + // AddMember adds a member to an organization. + AddMember(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceMember, error) + // AddMemberWithID adds a member with id memberID to an organization with orgID. + AddMemberWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceMember, error) + // RemoveMember removes a member from an organization. + RemoveMember(ctx context.Context, org *domain.Organization, user *domain.User) error + // RemoveMemberWithID removes a member with id memberID from an organization with orgID. + RemoveMemberWithID(ctx context.Context, orgID, memberID string) error + // GetOwners returns owners of an organization. + GetOwners(ctx context.Context, org *domain.Organization) (*[]domain.ResourceOwner, error) + // GetOwnersWithID returns owners of an organization with orgID. + GetOwnersWithID(ctx context.Context, orgID string) (*[]domain.ResourceOwner, error) + // AddOwner adds an owner to an organization. + AddOwner(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceOwner, error) + // AddOwnerWithID adds an owner with id memberID to an organization with orgID. + AddOwnerWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceOwner, error) + // RemoveOwner removes an owner from an organization. + RemoveOwner(ctx context.Context, org *domain.Organization, user *domain.User) error + // RemoveOwnerWithID removes an owner with id memberID from an organization with orgID. + RemoveOwnerWithID(ctx context.Context, orgID, memberID string) error +} diff --git a/pkg/gofr/datasource/influxdb/mock_interfaces.go b/pkg/gofr/datasource/influxdb/mock_interfaces.go index 5f5b559be..5b77278b6 100644 --- a/pkg/gofr/datasource/influxdb/mock_interfaces.go +++ b/pkg/gofr/datasource/influxdb/mock_interfaces.go @@ -320,3 +320,345 @@ func (mr *MockInfluxClientMockRecorder) WriteAPIBlocking(org, bucket interface{} mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WriteAPIBlocking", reflect.TypeOf((*MockInfluxClient)(nil).WriteAPIBlocking), org, bucket) } + +// MockInfluxOrganizationsAPI is a mock of InfluxOrganizationsAPI interface. +type MockInfluxOrganizationsAPI struct { + ctrl *gomock.Controller + recorder *MockInfluxOrganizationsAPIMockRecorder +} + +// MockInfluxOrganizationsAPIMockRecorder is the mock recorder for MockInfluxOrganizationsAPI. +type MockInfluxOrganizationsAPIMockRecorder struct { + mock *MockInfluxOrganizationsAPI +} + +// NewMockInfluxOrganizationsAPI creates a new mock instance. +func NewMockInfluxOrganizationsAPI(ctrl *gomock.Controller) *MockInfluxOrganizationsAPI { + mock := &MockInfluxOrganizationsAPI{ctrl: ctrl} + mock.recorder = &MockInfluxOrganizationsAPIMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockInfluxOrganizationsAPI) EXPECT() *MockInfluxOrganizationsAPIMockRecorder { + return m.recorder +} + +// AddMember mocks base method. +func (m *MockInfluxOrganizationsAPI) AddMember(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceMember, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddMember", ctx, org, user) + ret0, _ := ret[0].(*domain.ResourceMember) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddMember indicates an expected call of AddMember. +func (mr *MockInfluxOrganizationsAPIMockRecorder) AddMember(ctx, org, user interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddMember", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).AddMember), ctx, org, user) +} + +// AddMemberWithID mocks base method. +func (m *MockInfluxOrganizationsAPI) AddMemberWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceMember, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddMemberWithID", ctx, orgID, memberID) + ret0, _ := ret[0].(*domain.ResourceMember) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddMemberWithID indicates an expected call of AddMemberWithID. +func (mr *MockInfluxOrganizationsAPIMockRecorder) AddMemberWithID(ctx, orgID, memberID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddMemberWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).AddMemberWithID), ctx, orgID, memberID) +} + +// AddOwner mocks base method. +func (m *MockInfluxOrganizationsAPI) AddOwner(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceOwner, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddOwner", ctx, org, user) + ret0, _ := ret[0].(*domain.ResourceOwner) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddOwner indicates an expected call of AddOwner. +func (mr *MockInfluxOrganizationsAPIMockRecorder) AddOwner(ctx, org, user interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddOwner", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).AddOwner), ctx, org, user) +} + +// AddOwnerWithID mocks base method. +func (m *MockInfluxOrganizationsAPI) AddOwnerWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceOwner, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddOwnerWithID", ctx, orgID, memberID) + ret0, _ := ret[0].(*domain.ResourceOwner) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddOwnerWithID indicates an expected call of AddOwnerWithID. +func (mr *MockInfluxOrganizationsAPIMockRecorder) AddOwnerWithID(ctx, orgID, memberID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddOwnerWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).AddOwnerWithID), ctx, orgID, memberID) +} + +// CreateOrganization mocks base method. +func (m *MockInfluxOrganizationsAPI) CreateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateOrganization", ctx, org) + ret0, _ := ret[0].(*domain.Organization) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateOrganization indicates an expected call of CreateOrganization. +func (mr *MockInfluxOrganizationsAPIMockRecorder) CreateOrganization(ctx, org interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrganization", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).CreateOrganization), ctx, org) +} + +// CreateOrganizationWithName mocks base method. +func (m *MockInfluxOrganizationsAPI) CreateOrganizationWithName(ctx context.Context, orgName string) (*domain.Organization, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateOrganizationWithName", ctx, orgName) + ret0, _ := ret[0].(*domain.Organization) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateOrganizationWithName indicates an expected call of CreateOrganizationWithName. +func (mr *MockInfluxOrganizationsAPIMockRecorder) CreateOrganizationWithName(ctx, orgName interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrganizationWithName", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).CreateOrganizationWithName), ctx, orgName) +} + +// DeleteOrganization mocks base method. +func (m *MockInfluxOrganizationsAPI) DeleteOrganization(ctx context.Context, org *domain.Organization) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteOrganization", ctx, org) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteOrganization indicates an expected call of DeleteOrganization. +func (mr *MockInfluxOrganizationsAPIMockRecorder) DeleteOrganization(ctx, org interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteOrganization", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).DeleteOrganization), ctx, org) +} + +// DeleteOrganizationWithID mocks base method. +func (m *MockInfluxOrganizationsAPI) DeleteOrganizationWithID(ctx context.Context, orgID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteOrganizationWithID", ctx, orgID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteOrganizationWithID indicates an expected call of DeleteOrganizationWithID. +func (mr *MockInfluxOrganizationsAPIMockRecorder) DeleteOrganizationWithID(ctx, orgID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteOrganizationWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).DeleteOrganizationWithID), ctx, orgID) +} + +// FindOrganizationByID mocks base method. +func (m *MockInfluxOrganizationsAPI) FindOrganizationByID(ctx context.Context, orgID string) (*domain.Organization, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FindOrganizationByID", ctx, orgID) + ret0, _ := ret[0].(*domain.Organization) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FindOrganizationByID indicates an expected call of FindOrganizationByID. +func (mr *MockInfluxOrganizationsAPIMockRecorder) FindOrganizationByID(ctx, orgID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindOrganizationByID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).FindOrganizationByID), ctx, orgID) +} + +// FindOrganizationByName mocks base method. +func (m *MockInfluxOrganizationsAPI) FindOrganizationByName(ctx context.Context, orgName string) (*domain.Organization, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FindOrganizationByName", ctx, orgName) + ret0, _ := ret[0].(*domain.Organization) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FindOrganizationByName indicates an expected call of FindOrganizationByName. +func (mr *MockInfluxOrganizationsAPIMockRecorder) FindOrganizationByName(ctx, orgName interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindOrganizationByName", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).FindOrganizationByName), ctx, orgName) +} + +// FindOrganizationsByUserID mocks base method. +func (m *MockInfluxOrganizationsAPI) FindOrganizationsByUserID(ctx context.Context, userID string, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx, userID} + for _, a := range pagingOptions { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "FindOrganizationsByUserID", varargs...) + ret0, _ := ret[0].(*[]domain.Organization) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FindOrganizationsByUserID indicates an expected call of FindOrganizationsByUserID. +func (mr *MockInfluxOrganizationsAPIMockRecorder) FindOrganizationsByUserID(ctx, userID interface{}, pagingOptions ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx, userID}, pagingOptions...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindOrganizationsByUserID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).FindOrganizationsByUserID), varargs...) +} + +// GetMembers mocks base method. +func (m *MockInfluxOrganizationsAPI) GetMembers(ctx context.Context, org *domain.Organization) (*[]domain.ResourceMember, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMembers", ctx, org) + ret0, _ := ret[0].(*[]domain.ResourceMember) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMembers indicates an expected call of GetMembers. +func (mr *MockInfluxOrganizationsAPIMockRecorder) GetMembers(ctx, org interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMembers", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).GetMembers), ctx, org) +} + +// GetMembersWithID mocks base method. +func (m *MockInfluxOrganizationsAPI) GetMembersWithID(ctx context.Context, orgID string) (*[]domain.ResourceMember, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMembersWithID", ctx, orgID) + ret0, _ := ret[0].(*[]domain.ResourceMember) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMembersWithID indicates an expected call of GetMembersWithID. +func (mr *MockInfluxOrganizationsAPIMockRecorder) GetMembersWithID(ctx, orgID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMembersWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).GetMembersWithID), ctx, orgID) +} + +// GetOrganizations mocks base method. +func (m *MockInfluxOrganizationsAPI) GetOrganizations(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx} + for _, a := range pagingOptions { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetOrganizations", varargs...) + ret0, _ := ret[0].(*[]domain.Organization) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetOrganizations indicates an expected call of GetOrganizations. +func (mr *MockInfluxOrganizationsAPIMockRecorder) GetOrganizations(ctx interface{}, pagingOptions ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx}, pagingOptions...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOrganizations", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).GetOrganizations), varargs...) +} + +// GetOwners mocks base method. +func (m *MockInfluxOrganizationsAPI) GetOwners(ctx context.Context, org *domain.Organization) (*[]domain.ResourceOwner, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetOwners", ctx, org) + ret0, _ := ret[0].(*[]domain.ResourceOwner) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetOwners indicates an expected call of GetOwners. +func (mr *MockInfluxOrganizationsAPIMockRecorder) GetOwners(ctx, org interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOwners", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).GetOwners), ctx, org) +} + +// GetOwnersWithID mocks base method. +func (m *MockInfluxOrganizationsAPI) GetOwnersWithID(ctx context.Context, orgID string) (*[]domain.ResourceOwner, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetOwnersWithID", ctx, orgID) + ret0, _ := ret[0].(*[]domain.ResourceOwner) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetOwnersWithID indicates an expected call of GetOwnersWithID. +func (mr *MockInfluxOrganizationsAPIMockRecorder) GetOwnersWithID(ctx, orgID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOwnersWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).GetOwnersWithID), ctx, orgID) +} + +// RemoveMember mocks base method. +func (m *MockInfluxOrganizationsAPI) RemoveMember(ctx context.Context, org *domain.Organization, user *domain.User) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RemoveMember", ctx, org, user) + ret0, _ := ret[0].(error) + return ret0 +} + +// RemoveMember indicates an expected call of RemoveMember. +func (mr *MockInfluxOrganizationsAPIMockRecorder) RemoveMember(ctx, org, user interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveMember", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).RemoveMember), ctx, org, user) +} + +// RemoveMemberWithID mocks base method. +func (m *MockInfluxOrganizationsAPI) RemoveMemberWithID(ctx context.Context, orgID, memberID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RemoveMemberWithID", ctx, orgID, memberID) + ret0, _ := ret[0].(error) + return ret0 +} + +// RemoveMemberWithID indicates an expected call of RemoveMemberWithID. +func (mr *MockInfluxOrganizationsAPIMockRecorder) RemoveMemberWithID(ctx, orgID, memberID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveMemberWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).RemoveMemberWithID), ctx, orgID, memberID) +} + +// RemoveOwner mocks base method. +func (m *MockInfluxOrganizationsAPI) RemoveOwner(ctx context.Context, org *domain.Organization, user *domain.User) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RemoveOwner", ctx, org, user) + ret0, _ := ret[0].(error) + return ret0 +} + +// RemoveOwner indicates an expected call of RemoveOwner. +func (mr *MockInfluxOrganizationsAPIMockRecorder) RemoveOwner(ctx, org, user interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveOwner", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).RemoveOwner), ctx, org, user) +} + +// RemoveOwnerWithID mocks base method. +func (m *MockInfluxOrganizationsAPI) RemoveOwnerWithID(ctx context.Context, orgID, memberID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RemoveOwnerWithID", ctx, orgID, memberID) + ret0, _ := ret[0].(error) + return ret0 +} + +// RemoveOwnerWithID indicates an expected call of RemoveOwnerWithID. +func (mr *MockInfluxOrganizationsAPIMockRecorder) RemoveOwnerWithID(ctx, orgID, memberID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveOwnerWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).RemoveOwnerWithID), ctx, orgID, memberID) +} + +// UpdateOrganization mocks base method. +func (m *MockInfluxOrganizationsAPI) UpdateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateOrganization", ctx, org) + ret0, _ := ret[0].(*domain.Organization) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateOrganization indicates an expected call of UpdateOrganization. +func (mr *MockInfluxOrganizationsAPIMockRecorder) UpdateOrganization(ctx, org interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateOrganization", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).UpdateOrganization), ctx, org) +} From 91d4b2f369d4c24eb7dc5b8471fa88436c06f9ba Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 7 Aug 2025 17:16:12 +0530 Subject: [PATCH 25/44] [tests] Test_DeleteOrganization tests added, checking conditions of empty, invalid orgId, --- pkg/gofr/datasource/influxdb/influxdb_test.go | 66 ++++++++++++++++++- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index 6facecc11..a1fd32b1b 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -117,13 +117,13 @@ func Test_PingFailed(t *testing.T) { require.False(t, health) } -func Test_CreatOrganization(t *testing.T) { +func Test_CreateOrganization(t *testing.T) { t.Helper() ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyID := "dfdf" + dummyID := "dummyID" testCases := []struct { name string @@ -182,8 +182,68 @@ func Test_CreatOrganization(t *testing.T) { } else { require.NoError(t, err) } + }) + } +} + +func Test_DeleteOrganization(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyID := "dummyID" - // fmt.Println(orgId, err) + testCases := []struct { + name string + orgID string + expectErr bool + err error + }{ + { + name: "delete empty orgainzation with id", + orgID: "", + expectErr: true, + err: errEmptyOrganizationID, + }, + { + name: "delete organization with id", + orgID: dummyID, + expectErr: false, + err: nil, + }, + { + name: "delete invalid organization with id", + orgID: dummyID, + expectErr: true, + err: errors.New("invalid organization id"), + }, + } + + for _, tt := range testCases { + t.Run(tt.name, func(t *testing.T) { + + client := *setupDB(t, ctrl) + mockInflux := client.client.(*MockInfluxClient) + mockInfluxOrgApi := NewMockInfluxOrganizationsAPI(ctrl) + + mockInflux.EXPECT().OrganizationsAPI(). + Return(mockInfluxOrgApi). + AnyTimes() + + mockInfluxOrgApi.EXPECT(). + DeleteOrganizationWithID(gomock.Any(), tt.orgID). + Return(tt.err). + AnyTimes() + + err := client.DeleteOrganization(t.Context(), tt.orgID) + + if tt.expectErr { + require.Error(t, err) + require.Equal(t, err, tt.err) + } else { + require.NoError(t, err) + } }) } } From cb68b3df6832b8c6922cc6a5fa4aa40783c40020 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 7 Aug 2025 18:50:23 +0530 Subject: [PATCH 26/44] [tests] Test_ListOrganization tests added for checking conditions of - error in fetching organization, test zero organization, fetching list of organization --- pkg/gofr/datasource/influxdb/influxdb_test.go | 98 ++++++++++++++++--- pkg/gofr/datasource/influxdb/interface.go | 11 ++- 2 files changed, 91 insertions(+), 18 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index a1fd32b1b..fc6beedcb 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -36,10 +36,11 @@ func setupDB(t *testing.T, ctrl *gomock.Controller) *Client { // Replace the client with our mocked version client.client = mockInfluxClient + return client } -func Test_HelthCheckSuccess(t *testing.T) { +func Test_HealthCheckSuccess(t *testing.T) { t.Helper() ctrl := gomock.NewController(t) @@ -58,7 +59,7 @@ func Test_HelthCheckSuccess(t *testing.T) { require.NoError(t, err) } -func Test_HelthCheckFail(t *testing.T) { +func Test_HealthCheckFail(t *testing.T) { t.Helper() ctrl := gomock.NewController(t) @@ -133,7 +134,7 @@ func Test_CreateOrganization(t *testing.T) { err error }{ { - name: "empty orgainzation name", + name: "empty organizations name", orgName: "", resp: &domain.Organization{}, expectErr: true, @@ -159,26 +160,25 @@ func Test_CreateOrganization(t *testing.T) { for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { - client := *setupDB(t, ctrl) mockInflux := client.client.(*MockInfluxClient) - mockInfluxOrgApi := NewMockInfluxOrganizationsAPI(ctrl) + mockInfluxOrgAPI := NewMockInfluxOrganizationsAPI(ctrl) mockInflux.EXPECT().OrganizationsAPI(). - Return(mockInfluxOrgApi). + Return(mockInfluxOrgAPI). AnyTimes() - mockInfluxOrgApi.EXPECT(). + mockInfluxOrgAPI.EXPECT(). CreateOrganizationWithName(gomock.Any(), tt.orgName). Return(tt.resp, tt.err). AnyTimes() - newOrgId, err := client.CreateOrganization(t.Context(), tt.orgName) + newOrgID, err := client.CreateOrganization(t.Context(), tt.orgName) if tt.expectErr { require.Error(t, err) require.Equal(t, err, tt.err) - require.Empty(t, newOrgId) + require.Empty(t, newOrgID) } else { require.NoError(t, err) } @@ -201,7 +201,7 @@ func Test_DeleteOrganization(t *testing.T) { err error }{ { - name: "delete empty orgainzation with id", + name: "delete empty organizations with id", orgID: "", expectErr: true, err: errEmptyOrganizationID, @@ -222,16 +222,15 @@ func Test_DeleteOrganization(t *testing.T) { for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { - client := *setupDB(t, ctrl) mockInflux := client.client.(*MockInfluxClient) - mockInfluxOrgApi := NewMockInfluxOrganizationsAPI(ctrl) + mockInfluxOrgAPI := NewMockInfluxOrganizationsAPI(ctrl) mockInflux.EXPECT().OrganizationsAPI(). - Return(mockInfluxOrgApi). + Return(mockInfluxOrgAPI). AnyTimes() - mockInfluxOrgApi.EXPECT(). + mockInfluxOrgAPI.EXPECT(). DeleteOrganizationWithID(gomock.Any(), tt.orgID). Return(tt.err). AnyTimes() @@ -247,3 +246,74 @@ func Test_DeleteOrganization(t *testing.T) { }) } } + +func Test_ListOrganization(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + client := *setupDB(t, ctrl) + mockInflux := client.client.(*MockInfluxClient) + mockInfluxOrgAPI := NewMockInfluxOrganizationsAPI(ctrl) + + t.Run("test zero organization", func(t *testing.T) { + allOrgs := []domain.Organization{} + + mockInflux.EXPECT().OrganizationsAPI().Return(mockInfluxOrgAPI).Times(1) + mockInfluxOrgAPI.EXPECT(). + GetOrganizations(gomock.Any()). + Return(&allOrgs, nil). + Times(1) + + orgs, err := client.ListOrganization(t.Context()) + require.NoError(t, err) + require.Empty(t, orgs) + }) + + t.Run("testing error in fetching organization", func(t *testing.T) { + allOrgs := &[]domain.Organization{} + + mockInflux.EXPECT().OrganizationsAPI().Return(mockInfluxOrgAPI).Times(1) + mockInfluxOrgAPI.EXPECT(). + GetOrganizations(gomock.Any()). + Return(allOrgs, errFetchOrganization). + Times(1) + + orgs, err := client.ListOrganization(t.Context()) + require.Empty(t, orgs) + require.Error(t, err) + require.Equal(t, err, errFetchOrganization) + }) + + t.Run("testing fetching list of organization", func(t *testing.T) { + id1, name1 := "id1", "name1" + id2, name2 := "id1", "name1" + + allOrg := &[]domain.Organization{ + {Id: &id1, Name: name1}, + {Id: &id2, Name: name2}, + } + + wantOrg := map[string]string{id1: name1, id2: name2} + + mockInflux.EXPECT().OrganizationsAPI().Return(mockInfluxOrgAPI).Times(1) + mockInfluxOrgAPI.EXPECT(). + GetOrganizations(gomock.Any()). + Return(allOrg, nil). + Times(1) + + resultOrg, err := client.ListOrganization(t.Context()) + + require.NoError(t, err) + require.NotEmpty(t, resultOrg) + + orgs := make(map[string]string, len(*allOrg)) + + for _, org := range *allOrg { + orgs[*org.Id] = org.Name + } + + require.Equal(t, wantOrg, orgs) + }) +} diff --git a/pkg/gofr/datasource/influxdb/interface.go b/pkg/gofr/datasource/influxdb/interface.go index 9ae083140..acb4b0656 100644 --- a/pkg/gofr/datasource/influxdb/interface.go +++ b/pkg/gofr/datasource/influxdb/interface.go @@ -4,7 +4,6 @@ import ( "context" influxdb2 "github.com/influxdata/influxdb-client-go/v2" - api "github.com/influxdata/influxdb-client-go/v2/api" "github.com/influxdata/influxdb-client-go/v2/api/http" "github.com/influxdata/influxdb-client-go/v2/domain" @@ -13,14 +12,18 @@ import ( // InfluxDB defines the operations required to interact with an InfluxDB instance. type InfluxClient interface { - // Setup sends request to initialise new InfluxDB server with user, org and bucket, and data retention period + // Setup sends request to initialize new InfluxDB server with user, org and bucket, and data retention period // and returns details about newly created entities along with the authorization object. // Retention period of zero will result to infinite retention. Setup(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int) (*domain.OnboardingResponse, error) - // SetupWithToken sends request to initialise new InfluxDB server with user, org and bucket, data retention period and token + // SetupWithToken sends request to initialize new InfluxDB server with user, org and bucket, data retention period and token // and returns details about newly created entities along with the authorization object. // Retention period of zero will result to infinite retention. - SetupWithToken(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int, token string) (*domain.OnboardingResponse, error) + SetupWithToken( + ctx context.Context, + username, password, org, bucket string, + retentionPeriodHours int, token string) (*domain.OnboardingResponse, error) + // Ready returns InfluxDB uptime info of server. It doesn't validate authentication params. Ready(ctx context.Context) (*domain.Ready, error) // Health returns an InfluxDB server health check result. Read the HealthCheck.Status field to get server status. From f8bc4c4875c0c2f03f30f35598264cdd68c52322 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 7 Aug 2025 23:05:24 +0530 Subject: [PATCH 27/44] [tests] Test_CreateBucket tests added. Currently coverage - 47% . --- go.work.sum | 2 + pkg/gofr/datasource/influxdb/influxdb_test.go | 99 ++++- pkg/gofr/datasource/influxdb/interface.go | 52 +++ .../mock_interface.go} | 387 ++++++++++++++++++ 4 files changed, 529 insertions(+), 11 deletions(-) rename pkg/gofr/datasource/influxdb/{mock_interfaces.go => mocks/mock_interface.go} (62%) diff --git a/go.work.sum b/go.work.sum index 76397fe17..b7e0af40f 100644 --- a/go.work.sum +++ b/go.work.sum @@ -907,6 +907,7 @@ github.com/docker/docker v28.2.2+incompatible h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5Jxw github.com/docker/docker v28.2.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v28.3.2+incompatible h1:wn66NJ6pWB1vBZIilP8G3qQPqHy5XymfYn5vsqeA5oA= github.com/docker/docker v28.3.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.3.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -1694,6 +1695,7 @@ google.golang.org/genproto/googleapis/bytestream v0.0.0-20250603155806-513f23925 google.golang.org/genproto/googleapis/bytestream v0.0.0-20250603155806-513f23925822/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250715232539-7130f93afb79 h1:IpwY95CV9qj08VMQEirHQF61g0THzlzHaj9sQ3vlExY= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250715232539-7130f93afb79/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20250728155136-f173205681a0/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index fc6beedcb..493efe6b1 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -8,6 +8,7 @@ import ( "github.com/kataras/iris/v12/x/errors" "github.com/stretchr/testify/require" "go.opentelemetry.io/otel" + influxdb_mock "gofr.dev/pkg/gofr/datasource/influxdb/mocks" ) func setupDB(t *testing.T, ctrl *gomock.Controller) *Client { @@ -15,7 +16,7 @@ func setupDB(t *testing.T, ctrl *gomock.Controller) *Client { mockLogger := NewMockLogger(ctrl) mockMetrics := NewMockMetrics(ctrl) - mockInfluxClient := NewMockInfluxClient(ctrl) + mockInfluxClient := influxdb_mock.NewMockInfluxClient(ctrl) config := Config{ URL: "http://localhost:8086", @@ -47,7 +48,7 @@ func Test_HealthCheckSuccess(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.client.(*MockInfluxClient) + mockInflux := client.client.(*influxdb_mock.MockInfluxClient) expectedHealth := &domain.HealthCheck{Status: "pass"} mockInflux.EXPECT(). @@ -66,7 +67,7 @@ func Test_HealthCheckFail(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.client.(*MockInfluxClient) + mockInflux := client.client.(*influxdb_mock.MockInfluxClient) expectedHealth := &domain.HealthCheck{Status: "fail"} mockInflux.EXPECT(). @@ -85,7 +86,7 @@ func Test_PingSuccess(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.client.(*MockInfluxClient) + mockInflux := client.client.(*influxdb_mock.MockInfluxClient) mockInflux.EXPECT(). Ping(gomock.Any()). @@ -105,7 +106,7 @@ func Test_PingFailed(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.client.(*MockInfluxClient) + mockInflux := client.client.(*influxdb_mock.MockInfluxClient) mockInflux.EXPECT(). Ping(gomock.Any()). @@ -161,8 +162,8 @@ func Test_CreateOrganization(t *testing.T) { for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { client := *setupDB(t, ctrl) - mockInflux := client.client.(*MockInfluxClient) - mockInfluxOrgAPI := NewMockInfluxOrganizationsAPI(ctrl) + mockInflux := client.client.(*influxdb_mock.MockInfluxClient) + mockInfluxOrgAPI := influxdb_mock.NewMockInfluxOrganizationsAPI(ctrl) mockInflux.EXPECT().OrganizationsAPI(). Return(mockInfluxOrgAPI). @@ -223,8 +224,8 @@ func Test_DeleteOrganization(t *testing.T) { for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { client := *setupDB(t, ctrl) - mockInflux := client.client.(*MockInfluxClient) - mockInfluxOrgAPI := NewMockInfluxOrganizationsAPI(ctrl) + mockInflux := client.client.(*influxdb_mock.MockInfluxClient) + mockInfluxOrgAPI := influxdb_mock.NewMockInfluxOrganizationsAPI(ctrl) mockInflux.EXPECT().OrganizationsAPI(). Return(mockInfluxOrgAPI). @@ -254,8 +255,8 @@ func Test_ListOrganization(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.client.(*MockInfluxClient) - mockInfluxOrgAPI := NewMockInfluxOrganizationsAPI(ctrl) + mockInflux := client.client.(*influxdb_mock.MockInfluxClient) + mockInfluxOrgAPI := influxdb_mock.NewMockInfluxOrganizationsAPI(ctrl) t.Run("test zero organization", func(t *testing.T) { allOrgs := []domain.Organization{} @@ -317,3 +318,79 @@ func Test_ListOrganization(t *testing.T) { require.Equal(t, wantOrg, orgs) }) } + +func Test_CreateBucket(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyId := "id1" + dummyOrgID := "org123" + dummyBucketName := "bucket123" + + testCases := []struct { + name string + orgID string + bucketName string + respBucket *domain.Bucket + wantBucketID string + expectErr bool + err error + }{ + { + name: "try creating bucket with empty organization id", + orgID: "", + bucketName: dummyBucketName, + expectErr: true, + respBucket: nil, + wantBucketID: "", + err: errEmptyOrganizationID, + }, + { + name: "try creating bucket with empty bucket name", + orgID: dummyOrgID, + bucketName: "", + expectErr: true, + respBucket: nil, + wantBucketID: "", + err: errEmptyBucketName, + }, + { + name: "try creating bucket with empty bucket name", + orgID: dummyOrgID, + bucketName: dummyBucketName, + expectErr: false, + respBucket: &domain.Bucket{Id: &dummyId}, + wantBucketID: dummyId, + err: nil, + }, + } + + for _, tt := range testCases { + t.Run(tt.name, func(t *testing.T) { + client := *setupDB(t, ctrl) + mockInflux := client.client.(*influxdb_mock.MockInfluxClient) + mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) + + mockInflux.EXPECT().BucketsAPI(). + Return(mockInfluxBucketAPI). + AnyTimes() + + mockInfluxBucketAPI.EXPECT(). + CreateBucketWithNameWithID(gomock.Any(), tt.orgID, tt.bucketName). + Return(tt.respBucket, tt.err). + AnyTimes() + + bucketID, err := client.CreateBucket(t.Context(), tt.orgID, tt.bucketName) + + if tt.expectErr { + require.Error(t, err) + require.Equal(t, err, tt.err) + } else { + require.Equal(t, tt.wantBucketID, bucketID) + require.NoError(t, err) + } + }) + } +} diff --git a/pkg/gofr/datasource/influxdb/interface.go b/pkg/gofr/datasource/influxdb/interface.go index acb4b0656..4ab8bad4d 100644 --- a/pkg/gofr/datasource/influxdb/interface.go +++ b/pkg/gofr/datasource/influxdb/interface.go @@ -114,3 +114,55 @@ type InfluxOrganizationsAPI interface { // RemoveOwnerWithID removes an owner with id memberID from an organization with orgID. RemoveOwnerWithID(ctx context.Context, orgID, memberID string) error } + +// BucketsAPI provides methods for managing Buckets in a InfluxDB server. +type BucketsAPI interface { + // GetBuckets returns all buckets. + // GetBuckets supports PagingOptions: Offset, Limit, After. Empty pagingOptions means the default paging (first 20 results). + GetBuckets(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) + // FindBucketByName returns a bucket found using bucketName. + FindBucketByName(ctx context.Context, bucketName string) (*domain.Bucket, error) + // FindBucketByID returns a bucket found using bucketID. + FindBucketByID(ctx context.Context, bucketID string) (*domain.Bucket, error) + // FindBucketsByOrgID returns buckets belonging to the organization with ID orgID. + // FindBucketsByOrgID supports PagingOptions: Offset, Limit, After. Empty pagingOptions means the default paging (first 20 results). + FindBucketsByOrgID(ctx context.Context, orgID string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) + // FindBucketsByOrgName returns buckets belonging to the organization with name orgName, with the specified paging. Empty pagingOptions means the default paging (first 20 results). + FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) + // CreateBucket creates a new bucket. + CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) + // CreateBucketWithName creates a new bucket with bucketName in organization org, with retention specified in rules. Empty rules means infinite retention. + CreateBucketWithName(ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) + // CreateBucketWithNameWithID creates a new bucket with bucketName in organization with orgID, with retention specified in rules. Empty rules means infinite retention. + CreateBucketWithNameWithID(ctx context.Context, orgID, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) + // UpdateBucket updates a bucket. + UpdateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) + // DeleteBucket deletes a bucket. + DeleteBucket(ctx context.Context, bucket *domain.Bucket) error + // DeleteBucketWithID deletes a bucket with bucketID. + DeleteBucketWithID(ctx context.Context, bucketID string) error + // GetMembers returns members of a bucket. + GetMembers(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceMember, error) + // GetMembersWithID returns members of a bucket with bucketID. + GetMembersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceMember, error) + // AddMember adds a member to a bucket. + AddMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceMember, error) + // AddMemberWithID adds a member with id memberID to a bucket with bucketID. + AddMemberWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceMember, error) + // RemoveMember removes a member from a bucket. + RemoveMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) error + // RemoveMemberWithID removes a member with id memberID from a bucket with bucketID. + RemoveMemberWithID(ctx context.Context, bucketID, memberID string) error + // GetOwners returns owners of a bucket. + GetOwners(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceOwner, error) + // GetOwnersWithID returns owners of a bucket with bucketID. + GetOwnersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceOwner, error) + // AddOwner adds an owner to a bucket. + AddOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceOwner, error) + // AddOwnerWithID adds an owner with id memberID to a bucket with bucketID. + AddOwnerWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceOwner, error) + // RemoveOwner removes an owner from a bucket. + RemoveOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) error + // RemoveOwnerWithID removes a member with id memberID from a bucket with bucketID. + RemoveOwnerWithID(ctx context.Context, bucketID, memberID string) error +} diff --git a/pkg/gofr/datasource/influxdb/mock_interfaces.go b/pkg/gofr/datasource/influxdb/mocks/mock_interface.go similarity index 62% rename from pkg/gofr/datasource/influxdb/mock_interfaces.go rename to pkg/gofr/datasource/influxdb/mocks/mock_interface.go index 5b77278b6..cf410e32b 100644 --- a/pkg/gofr/datasource/influxdb/mock_interfaces.go +++ b/pkg/gofr/datasource/influxdb/mocks/mock_interface.go @@ -662,3 +662,390 @@ func (mr *MockInfluxOrganizationsAPIMockRecorder) UpdateOrganization(ctx, org in mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateOrganization", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).UpdateOrganization), ctx, org) } + +// MockBucketsAPI is a mock of BucketsAPI interface. +type MockBucketsAPI struct { + ctrl *gomock.Controller + recorder *MockBucketsAPIMockRecorder +} + +// MockBucketsAPIMockRecorder is the mock recorder for MockBucketsAPI. +type MockBucketsAPIMockRecorder struct { + mock *MockBucketsAPI +} + +// NewMockBucketsAPI creates a new mock instance. +func NewMockBucketsAPI(ctrl *gomock.Controller) *MockBucketsAPI { + mock := &MockBucketsAPI{ctrl: ctrl} + mock.recorder = &MockBucketsAPIMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockBucketsAPI) EXPECT() *MockBucketsAPIMockRecorder { + return m.recorder +} + +// AddMember mocks base method. +func (m *MockBucketsAPI) AddMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceMember, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddMember", ctx, bucket, user) + ret0, _ := ret[0].(*domain.ResourceMember) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddMember indicates an expected call of AddMember. +func (mr *MockBucketsAPIMockRecorder) AddMember(ctx, bucket, user interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddMember", reflect.TypeOf((*MockBucketsAPI)(nil).AddMember), ctx, bucket, user) +} + +// AddMemberWithID mocks base method. +func (m *MockBucketsAPI) AddMemberWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceMember, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddMemberWithID", ctx, bucketID, memberID) + ret0, _ := ret[0].(*domain.ResourceMember) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddMemberWithID indicates an expected call of AddMemberWithID. +func (mr *MockBucketsAPIMockRecorder) AddMemberWithID(ctx, bucketID, memberID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddMemberWithID", reflect.TypeOf((*MockBucketsAPI)(nil).AddMemberWithID), ctx, bucketID, memberID) +} + +// AddOwner mocks base method. +func (m *MockBucketsAPI) AddOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceOwner, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddOwner", ctx, bucket, user) + ret0, _ := ret[0].(*domain.ResourceOwner) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddOwner indicates an expected call of AddOwner. +func (mr *MockBucketsAPIMockRecorder) AddOwner(ctx, bucket, user interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddOwner", reflect.TypeOf((*MockBucketsAPI)(nil).AddOwner), ctx, bucket, user) +} + +// AddOwnerWithID mocks base method. +func (m *MockBucketsAPI) AddOwnerWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceOwner, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddOwnerWithID", ctx, bucketID, memberID) + ret0, _ := ret[0].(*domain.ResourceOwner) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddOwnerWithID indicates an expected call of AddOwnerWithID. +func (mr *MockBucketsAPIMockRecorder) AddOwnerWithID(ctx, bucketID, memberID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddOwnerWithID", reflect.TypeOf((*MockBucketsAPI)(nil).AddOwnerWithID), ctx, bucketID, memberID) +} + +// CreateBucket mocks base method. +func (m *MockBucketsAPI) CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateBucket", ctx, bucket) + ret0, _ := ret[0].(*domain.Bucket) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateBucket indicates an expected call of CreateBucket. +func (mr *MockBucketsAPIMockRecorder) CreateBucket(ctx, bucket interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucket", reflect.TypeOf((*MockBucketsAPI)(nil).CreateBucket), ctx, bucket) +} + +// CreateBucketWithName mocks base method. +func (m *MockBucketsAPI) CreateBucketWithName(ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx, org, bucketName} + for _, a := range rules { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "CreateBucketWithName", varargs...) + ret0, _ := ret[0].(*domain.Bucket) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateBucketWithName indicates an expected call of CreateBucketWithName. +func (mr *MockBucketsAPIMockRecorder) CreateBucketWithName(ctx, org, bucketName interface{}, rules ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx, org, bucketName}, rules...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucketWithName", reflect.TypeOf((*MockBucketsAPI)(nil).CreateBucketWithName), varargs...) +} + +// CreateBucketWithNameWithID mocks base method. +func (m *MockBucketsAPI) CreateBucketWithNameWithID(ctx context.Context, orgID, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx, orgID, bucketName} + for _, a := range rules { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "CreateBucketWithNameWithID", varargs...) + ret0, _ := ret[0].(*domain.Bucket) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateBucketWithNameWithID indicates an expected call of CreateBucketWithNameWithID. +func (mr *MockBucketsAPIMockRecorder) CreateBucketWithNameWithID(ctx, orgID, bucketName interface{}, rules ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx, orgID, bucketName}, rules...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucketWithNameWithID", reflect.TypeOf((*MockBucketsAPI)(nil).CreateBucketWithNameWithID), varargs...) +} + +// DeleteBucket mocks base method. +func (m *MockBucketsAPI) DeleteBucket(ctx context.Context, bucket *domain.Bucket) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteBucket", ctx, bucket) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteBucket indicates an expected call of DeleteBucket. +func (mr *MockBucketsAPIMockRecorder) DeleteBucket(ctx, bucket interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBucket", reflect.TypeOf((*MockBucketsAPI)(nil).DeleteBucket), ctx, bucket) +} + +// DeleteBucketWithID mocks base method. +func (m *MockBucketsAPI) DeleteBucketWithID(ctx context.Context, bucketID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteBucketWithID", ctx, bucketID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteBucketWithID indicates an expected call of DeleteBucketWithID. +func (mr *MockBucketsAPIMockRecorder) DeleteBucketWithID(ctx, bucketID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBucketWithID", reflect.TypeOf((*MockBucketsAPI)(nil).DeleteBucketWithID), ctx, bucketID) +} + +// FindBucketByID mocks base method. +func (m *MockBucketsAPI) FindBucketByID(ctx context.Context, bucketID string) (*domain.Bucket, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FindBucketByID", ctx, bucketID) + ret0, _ := ret[0].(*domain.Bucket) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FindBucketByID indicates an expected call of FindBucketByID. +func (mr *MockBucketsAPIMockRecorder) FindBucketByID(ctx, bucketID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketByID", reflect.TypeOf((*MockBucketsAPI)(nil).FindBucketByID), ctx, bucketID) +} + +// FindBucketByName mocks base method. +func (m *MockBucketsAPI) FindBucketByName(ctx context.Context, bucketName string) (*domain.Bucket, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FindBucketByName", ctx, bucketName) + ret0, _ := ret[0].(*domain.Bucket) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FindBucketByName indicates an expected call of FindBucketByName. +func (mr *MockBucketsAPIMockRecorder) FindBucketByName(ctx, bucketName interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketByName", reflect.TypeOf((*MockBucketsAPI)(nil).FindBucketByName), ctx, bucketName) +} + +// FindBucketsByOrgID mocks base method. +func (m *MockBucketsAPI) FindBucketsByOrgID(ctx context.Context, orgID string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx, orgID} + for _, a := range pagingOptions { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "FindBucketsByOrgID", varargs...) + ret0, _ := ret[0].(*[]domain.Bucket) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FindBucketsByOrgID indicates an expected call of FindBucketsByOrgID. +func (mr *MockBucketsAPIMockRecorder) FindBucketsByOrgID(ctx, orgID interface{}, pagingOptions ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx, orgID}, pagingOptions...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketsByOrgID", reflect.TypeOf((*MockBucketsAPI)(nil).FindBucketsByOrgID), varargs...) +} + +// FindBucketsByOrgName mocks base method. +func (m *MockBucketsAPI) FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx, orgName} + for _, a := range pagingOptions { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "FindBucketsByOrgName", varargs...) + ret0, _ := ret[0].(*[]domain.Bucket) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FindBucketsByOrgName indicates an expected call of FindBucketsByOrgName. +func (mr *MockBucketsAPIMockRecorder) FindBucketsByOrgName(ctx, orgName interface{}, pagingOptions ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx, orgName}, pagingOptions...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketsByOrgName", reflect.TypeOf((*MockBucketsAPI)(nil).FindBucketsByOrgName), varargs...) +} + +// GetBuckets mocks base method. +func (m *MockBucketsAPI) GetBuckets(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx} + for _, a := range pagingOptions { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetBuckets", varargs...) + ret0, _ := ret[0].(*[]domain.Bucket) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetBuckets indicates an expected call of GetBuckets. +func (mr *MockBucketsAPIMockRecorder) GetBuckets(ctx interface{}, pagingOptions ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx}, pagingOptions...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBuckets", reflect.TypeOf((*MockBucketsAPI)(nil).GetBuckets), varargs...) +} + +// GetMembers mocks base method. +func (m *MockBucketsAPI) GetMembers(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceMember, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMembers", ctx, bucket) + ret0, _ := ret[0].(*[]domain.ResourceMember) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMembers indicates an expected call of GetMembers. +func (mr *MockBucketsAPIMockRecorder) GetMembers(ctx, bucket interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMembers", reflect.TypeOf((*MockBucketsAPI)(nil).GetMembers), ctx, bucket) +} + +// GetMembersWithID mocks base method. +func (m *MockBucketsAPI) GetMembersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceMember, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMembersWithID", ctx, bucketID) + ret0, _ := ret[0].(*[]domain.ResourceMember) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMembersWithID indicates an expected call of GetMembersWithID. +func (mr *MockBucketsAPIMockRecorder) GetMembersWithID(ctx, bucketID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMembersWithID", reflect.TypeOf((*MockBucketsAPI)(nil).GetMembersWithID), ctx, bucketID) +} + +// GetOwners mocks base method. +func (m *MockBucketsAPI) GetOwners(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceOwner, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetOwners", ctx, bucket) + ret0, _ := ret[0].(*[]domain.ResourceOwner) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetOwners indicates an expected call of GetOwners. +func (mr *MockBucketsAPIMockRecorder) GetOwners(ctx, bucket interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOwners", reflect.TypeOf((*MockBucketsAPI)(nil).GetOwners), ctx, bucket) +} + +// GetOwnersWithID mocks base method. +func (m *MockBucketsAPI) GetOwnersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceOwner, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetOwnersWithID", ctx, bucketID) + ret0, _ := ret[0].(*[]domain.ResourceOwner) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetOwnersWithID indicates an expected call of GetOwnersWithID. +func (mr *MockBucketsAPIMockRecorder) GetOwnersWithID(ctx, bucketID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOwnersWithID", reflect.TypeOf((*MockBucketsAPI)(nil).GetOwnersWithID), ctx, bucketID) +} + +// RemoveMember mocks base method. +func (m *MockBucketsAPI) RemoveMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RemoveMember", ctx, bucket, user) + ret0, _ := ret[0].(error) + return ret0 +} + +// RemoveMember indicates an expected call of RemoveMember. +func (mr *MockBucketsAPIMockRecorder) RemoveMember(ctx, bucket, user interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveMember", reflect.TypeOf((*MockBucketsAPI)(nil).RemoveMember), ctx, bucket, user) +} + +// RemoveMemberWithID mocks base method. +func (m *MockBucketsAPI) RemoveMemberWithID(ctx context.Context, bucketID, memberID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RemoveMemberWithID", ctx, bucketID, memberID) + ret0, _ := ret[0].(error) + return ret0 +} + +// RemoveMemberWithID indicates an expected call of RemoveMemberWithID. +func (mr *MockBucketsAPIMockRecorder) RemoveMemberWithID(ctx, bucketID, memberID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveMemberWithID", reflect.TypeOf((*MockBucketsAPI)(nil).RemoveMemberWithID), ctx, bucketID, memberID) +} + +// RemoveOwner mocks base method. +func (m *MockBucketsAPI) RemoveOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RemoveOwner", ctx, bucket, user) + ret0, _ := ret[0].(error) + return ret0 +} + +// RemoveOwner indicates an expected call of RemoveOwner. +func (mr *MockBucketsAPIMockRecorder) RemoveOwner(ctx, bucket, user interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveOwner", reflect.TypeOf((*MockBucketsAPI)(nil).RemoveOwner), ctx, bucket, user) +} + +// RemoveOwnerWithID mocks base method. +func (m *MockBucketsAPI) RemoveOwnerWithID(ctx context.Context, bucketID, memberID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RemoveOwnerWithID", ctx, bucketID, memberID) + ret0, _ := ret[0].(error) + return ret0 +} + +// RemoveOwnerWithID indicates an expected call of RemoveOwnerWithID. +func (mr *MockBucketsAPIMockRecorder) RemoveOwnerWithID(ctx, bucketID, memberID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveOwnerWithID", reflect.TypeOf((*MockBucketsAPI)(nil).RemoveOwnerWithID), ctx, bucketID, memberID) +} + +// UpdateBucket mocks base method. +func (m *MockBucketsAPI) UpdateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateBucket", ctx, bucket) + ret0, _ := ret[0].(*domain.Bucket) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateBucket indicates an expected call of UpdateBucket. +func (mr *MockBucketsAPIMockRecorder) UpdateBucket(ctx, bucket interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateBucket", reflect.TypeOf((*MockBucketsAPI)(nil).UpdateBucket), ctx, bucket) +} From dcafa99298635166cb4f09ba891cd92472846cdf Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 7 Aug 2025 23:42:23 +0530 Subject: [PATCH 28/44] [tests] Test_DeleteBucket tests added. Currently coverage - 48% . --- pkg/gofr/datasource/influxdb/influxdb_test.go | 60 ++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index 493efe6b1..438984897 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -357,7 +357,7 @@ func Test_CreateBucket(t *testing.T) { err: errEmptyBucketName, }, { - name: "try creating bucket with empty bucket name", + name: "successfully creating a new bucket", orgID: dummyOrgID, bucketName: dummyBucketName, expectErr: false, @@ -394,3 +394,61 @@ func Test_CreateBucket(t *testing.T) { }) } } + +func Test_DeleteBucket(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyId := "id1" + + testCases := []struct { + name string + orgID string + bucketId string + expectErr bool + err error + }{ + { + name: "try deleting bucket with empty bucket id", + orgID: "", + bucketId: "", + expectErr: true, + err: errEmptyBucketID, + }, + { + name: "successfully deleting a new bucket", + orgID: "", + bucketId: dummyId, + expectErr: false, + err: nil, + }, + } + + for _, tt := range testCases { + t.Run(tt.name, func(t *testing.T) { + client := *setupDB(t, ctrl) + mockInflux := client.client.(*influxdb_mock.MockInfluxClient) + mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) + + mockInflux.EXPECT().BucketsAPI(). + Return(mockInfluxBucketAPI). + AnyTimes() + + mockInfluxBucketAPI.EXPECT(). + DeleteBucketWithID(gomock.Any(), tt.bucketId). + Return(tt.err). + AnyTimes() + + err := client.DeleteBucket(t.Context(), tt.bucketId) + + if tt.expectErr { + require.Error(t, err) + require.Equal(t, err, tt.err) + } else { + require.NoError(t, err) + } + }) + } +} From c2e703613f2e94efa2a011047c373cc39e6ee6c5 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Fri, 8 Aug 2025 00:08:58 +0530 Subject: [PATCH 29/44] [tests] Test_ListBucket tests added. coverage - 54.3% . --- pkg/gofr/datasource/influxdb/influxdb.go | 8 +-- pkg/gofr/datasource/influxdb/influxdb_test.go | 72 +++++++++++++++++++ 2 files changed, 74 insertions(+), 6 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index c45964537..b54521394 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -234,18 +234,14 @@ Returns: func (c *Client) ListBuckets(ctx context.Context, org string) (buckets map[string]string, err error) { // Validate input if org == "" { - return nil, errEmptyOrganizationID + return nil, errEmptyOrganizationName } bucketsAPI := c.client.BucketsAPI() bucketsDomain, err := bucketsAPI.FindBucketsByOrgName(ctx, org) if err != nil { - return nil, errFindingBuckets - } - - if bucketsDomain == nil { - return nil, nil + return nil, err } buckets = make(map[string]string) // Initialize the map diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index 438984897..211e37fee 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -452,3 +452,75 @@ func Test_DeleteBucket(t *testing.T) { }) } } + +func Test_ListBucket(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyOrgName := "orgName" + id1, name1 := "id1", "name1" + id2, name2 := "id1", "name1" + + testCases := []struct { + name string + orgName string + resp *[]domain.Bucket + wantBuckets map[string]string + expectErr bool + err error + }{ + { + name: "try list bucket with empty organization name", + orgName: "", + expectErr: true, + wantBuckets: nil, + resp: &[]domain.Bucket{}, + err: errEmptyOrganizationName, + }, + + { + name: "success list organizations", + orgName: dummyOrgName, + resp: &[]domain.Bucket{ + {Id: &id1, Name: name1}, + {Id: &id2, Name: name2}, + }, + wantBuckets: map[string]string{ + id1: name1, + id2: name2, + }, + expectErr: false, + err: nil, + }, + } + + for _, tt := range testCases { + t.Run(tt.name, func(t *testing.T) { + client := *setupDB(t, ctrl) + mockInflux := client.client.(*influxdb_mock.MockInfluxClient) + mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) + + mockInflux.EXPECT().BucketsAPI(). + Return(mockInfluxBucketAPI). + AnyTimes() + + mockInfluxBucketAPI.EXPECT(). + FindBucketsByOrgName(gomock.Any(), tt.orgName). + Return(tt.resp, tt.err). + AnyTimes() + + buckets, err := client.ListBuckets(t.Context(), tt.orgName) + + if tt.expectErr { + require.Error(t, err) + require.Equal(t, err, tt.err) + } else { + require.NoError(t, err) + require.NotEmpty(t, buckets) + require.Equal(t, buckets, tt.wantBuckets) + } + }) + } +} From be1f3f592489180734a59f902514017358a7546d Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Fri, 8 Aug 2025 00:10:54 +0530 Subject: [PATCH 30/44] [file delete] old test file deleted, which was not mocking the influx, instead actually connecting to the database. --- pkg/gofr/datasource/influxdb/influx_test.go | 187 -------------------- 1 file changed, 187 deletions(-) delete mode 100644 pkg/gofr/datasource/influxdb/influx_test.go diff --git a/pkg/gofr/datasource/influxdb/influx_test.go b/pkg/gofr/datasource/influxdb/influx_test.go deleted file mode 100644 index dc9984678..000000000 --- a/pkg/gofr/datasource/influxdb/influx_test.go +++ /dev/null @@ -1,187 +0,0 @@ -package influxdb - -// import ( -// "context" -// "os" -// "testing" -// "time" - -// "github.com/stretchr/testify/require" -// "gofr.dev/pkg/gofr" -// ) - -// const ( -// URL = "http://localhost:8086" -// Username = "admin" -// Password = "admin1234" -// testOrgName = "org-test2" -// testBucketName = "bucket-test2" -// testFluxQuery = "from(bucket:\"bucket-test2\")|> range(start: -1h) |> filter(fn: (r) => r._measurement == \"stat\")" -// ) - -// func getEnv(key, fallback string) string { -// if val := os.Getenv(key); val != "" { -// return val -// } - -// return fallback -// } - -// func setupInflux(t *testing.T) *Client { -// t.Helper() - -// token := getEnv("INFLUXDB_TOKEN", "") - -// app := gofr.New() -// client := New(Config{ -// URL: URL, -// Username: Username, -// Password: Password, -// Token: token, -// }) -// app.AddInfluxDB(client) -// require.Equal(t, URL, client.config.URL) -// require.Equal(t, Username, client.config.Username) -// require.Equal(t, Password, client.config.Password, Password) -// require.Equal(t, token, client.config.Token) - -// return client -// } - -// func TestPing(t *testing.T) { -// ctx := t.Context() -// config := setupInflux(t) -// health, err := config.Ping(ctx) -// require.NoError(t, err) // empty organization name -// require.True(t, health) -// } - -// func creatOrganization(t *testing.T, client *Client, orgName string) (orgID string) { -// t.Helper() - -// ctx := t.Context() -// // try creating organization without name -// orgID, err := client.CreateOrganization(ctx, "") -// require.Error(t, err) // empty organization name -// require.Empty(t, orgID) - -// // actually creating organization -// orgID, err = client.CreateOrganization(ctx, orgName) -// require.NoError(t, err) -// require.NotEmpty(t, orgID) - -// return orgID -// } - -// func listOrganizations(ctx context.Context, t *testing.T, client *Client) map[string]string { -// t.Helper() - -// orgs, err := client.ListOrganization(ctx) -// require.NoError(t, err) - -// return orgs -// } - -// func listBuckets(ctx context.Context, t *testing.T, client *Client, orgID string) map[string]string { -// t.Helper() - -// buckets, err := client.ListBuckets(ctx, orgID) -// require.NoError(t, err) - -// return buckets -// } - -// func deleteOrganization(t *testing.T, client *Client, orgID string) { -// t.Helper() - -// ctx := t.Context() - -// // try deleting empty id organization -// err := client.DeleteOrganization(ctx, "") -// require.Error(t, err) - -// // actually deleting the organization -// err = client.DeleteOrganization(ctx, orgID) -// require.NoError(t, err) -// } - -// func createNewBucket(t *testing.T, client *Client, orgID, name string) (bucketID string) { -// t.Helper() - -// ctx := t.Context() - -// // try creating organization without name -// bucketID, err := client.CreateBucket(ctx, orgID, "") -// require.Error(t, err) // empty organization name -// require.Empty(t, bucketID) - -// // actually creating organization -// bucketID, err = client.CreateBucket(ctx, orgID, name) -// require.NoError(t, err) -// require.NotEmpty(t, bucketID) - -// return bucketID -// } - -// func deleteBucket(t *testing.T, client *Client, bucketID string) { -// t.Helper() -// ctx := t.Context() - -// // try creating delete empty bucket id -// err := client.DeleteBucket(ctx, "") -// require.Error(t, err) - -// err = client.DeleteBucket(ctx, bucketID) -// require.NoError(t, err) -// } - -// func TestOrganizationOperations(t *testing.T) { -// ctx := t.Context() -// client := setupInflux(t) - -// beforeOrgList := listOrganizations(ctx, t, client) // before create the new organization -// orgID := creatOrganization(t, client, testOrgName) -// afterOrgList := listOrganizations(ctx, t, client) // after create the new organization -// require.Greater(t, len(afterOrgList), len(beforeOrgList)) -// deleteOrganization(t, client, orgID) -// } - -// func TestBucketOperations(t *testing.T) { -// ctx := t.Context() -// client := setupInflux(t) -// orgID := creatOrganization(t, client, testOrgName) - -// beforeBucketList := listBuckets(ctx, t, client, testOrgName) // before create the new organization -// bucketID := createNewBucket(t, client, orgID, testBucketName) -// afterBucketList := listBuckets(ctx, t, client, testOrgName) // before create the new organization -// require.Greater(t, len(afterBucketList), len(beforeBucketList)) - -// deleteBucket(t, client, bucketID) -// deleteOrganization(t, client, orgID) -// } - -// func TestWritePoints(t *testing.T) { -// ctx := t.Context() -// client := setupInflux(t) -// orgID := creatOrganization(t, client, testOrgName) -// bucketID := createNewBucket(t, client, orgID, testBucketName) - -// err := client.WritePoint( -// ctx, -// orgID, -// bucketID, -// "stat", -// map[string]string{"unit": "temperature"}, -// map[string]any{"avg": 24.5, "max": 45.0}, -// time.Now(), -// ) - -// require.NoError(t, err) - -// result, err := client.Query(ctx, orgID, testFluxQuery) -// require.NoError(t, err) -// require.NotEmpty(t, result) - -// deleteBucket(t, client, bucketID) -// deleteOrganization(t, client, orgID) -// } From 70933b72d10a5ccba0ba60382da36a968e67a7e7 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Fri, 8 Aug 2025 00:17:13 +0530 Subject: [PATCH 31/44] [linting] fixed linting issues. --- pkg/gofr/datasource/influxdb/influxdb.go | 1 - pkg/gofr/datasource/influxdb/influxdb_test.go | 21 ++++++++++--------- pkg/gofr/datasource/influxdb/interface.go | 16 ++++++++------ 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index b54521394..02755aca3 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -43,7 +43,6 @@ var ( errEmptyOrganizationID = errors.New("organization id must not be empty") errEmptyBucketID = errors.New("bucket id must not be empty") errEmptyBucketName = errors.New("bucket name must not be empty") - errFindingBuckets = errors.New("failed in finding buckets") errFetchOrganization = errors.New("failed to fetch all organizations") errHealthCheckFailed = errors.New("influxdb health check failed") ) diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index 211e37fee..05c23091e 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -8,6 +8,7 @@ import ( "github.com/kataras/iris/v12/x/errors" "github.com/stretchr/testify/require" "go.opentelemetry.io/otel" + influxdb_mock "gofr.dev/pkg/gofr/datasource/influxdb/mocks" ) @@ -325,7 +326,7 @@ func Test_CreateBucket(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyId := "id1" + dummyID := "id1" dummyOrgID := "org123" dummyBucketName := "bucket123" @@ -361,8 +362,8 @@ func Test_CreateBucket(t *testing.T) { orgID: dummyOrgID, bucketName: dummyBucketName, expectErr: false, - respBucket: &domain.Bucket{Id: &dummyId}, - wantBucketID: dummyId, + respBucket: &domain.Bucket{Id: &dummyID}, + wantBucketID: dummyID, err: nil, }, } @@ -401,26 +402,26 @@ func Test_DeleteBucket(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyId := "id1" + dummyID := "id1" testCases := []struct { name string orgID string - bucketId string + bucketID string expectErr bool err error }{ { name: "try deleting bucket with empty bucket id", orgID: "", - bucketId: "", + bucketID: "", expectErr: true, err: errEmptyBucketID, }, { name: "successfully deleting a new bucket", orgID: "", - bucketId: dummyId, + bucketID: dummyID, expectErr: false, err: nil, }, @@ -437,11 +438,11 @@ func Test_DeleteBucket(t *testing.T) { AnyTimes() mockInfluxBucketAPI.EXPECT(). - DeleteBucketWithID(gomock.Any(), tt.bucketId). + DeleteBucketWithID(gomock.Any(), tt.bucketID). Return(tt.err). AnyTimes() - err := client.DeleteBucket(t.Context(), tt.bucketId) + err := client.DeleteBucket(t.Context(), tt.bucketID) if tt.expectErr { require.Error(t, err) @@ -519,7 +520,7 @@ func Test_ListBucket(t *testing.T) { } else { require.NoError(t, err) require.NotEmpty(t, buckets) - require.Equal(t, buckets, tt.wantBuckets) + require.Equal(t, tt.wantBuckets, buckets) } }) } diff --git a/pkg/gofr/datasource/influxdb/interface.go b/pkg/gofr/datasource/influxdb/interface.go index 4ab8bad4d..c95dabc0b 100644 --- a/pkg/gofr/datasource/influxdb/interface.go +++ b/pkg/gofr/datasource/influxdb/interface.go @@ -9,7 +9,7 @@ import ( "github.com/influxdata/influxdb-client-go/v2/domain" ) -// InfluxDB defines the operations required to interact with an InfluxDB instance. +// InfluxClient defines the operations required to interact with an InfluxDB instance. type InfluxClient interface { // Setup sends request to initialize new InfluxDB server with user, org and bucket, and data retention period @@ -67,7 +67,7 @@ type InfluxClient interface { APIClient() *domain.Client } -// OrganizationsAPI provides methods for managing Organizations in a InfluxDB server. +// InfluxOrganizationsAPI provides methods for managing Organizations in a InfluxDB server. type InfluxOrganizationsAPI interface { // GetOrganizations returns all organizations. // GetOrganizations supports PagingOptions: Offset, Limit, Descending @@ -127,13 +127,17 @@ type BucketsAPI interface { // FindBucketsByOrgID returns buckets belonging to the organization with ID orgID. // FindBucketsByOrgID supports PagingOptions: Offset, Limit, After. Empty pagingOptions means the default paging (first 20 results). FindBucketsByOrgID(ctx context.Context, orgID string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) - // FindBucketsByOrgName returns buckets belonging to the organization with name orgName, with the specified paging. Empty pagingOptions means the default paging (first 20 results). + // FindBucketsByOrgName returns buckets belonging to the organization with name orgName, with the specified paging. + // Empty pagingOptions means the default paging (first 20 results). FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) // CreateBucket creates a new bucket. CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) - // CreateBucketWithName creates a new bucket with bucketName in organization org, with retention specified in rules. Empty rules means infinite retention. - CreateBucketWithName(ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) - // CreateBucketWithNameWithID creates a new bucket with bucketName in organization with orgID, with retention specified in rules. Empty rules means infinite retention. + // CreateBucketWithName creates a new bucket with bucketName in organization org, with retention specified in rules. + // Empty rules means infinite retention. + CreateBucketWithName( + ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) + // CreateBucketWithNameWithID creates a new bucket with bucketName in organization with orgID, with retention specified in rules. + // Empty rules means infinite retention. CreateBucketWithNameWithID(ctx context.Context, orgID, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) // UpdateBucket updates a bucket. UpdateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) From 8859e294346290650a18b4a713342f400c627c0e Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Fri, 8 Aug 2025 23:09:19 +0530 Subject: [PATCH 32/44] [tests] Test_Query tests added. coverage - 57.1% . --- pkg/gofr/datasource/influxdb/influxdb_test.go | 55 ++++++++++++ pkg/gofr/datasource/influxdb/interface.go | 7 ++ .../influxdb/mocks/mock_interface.go | 83 +++++++++++++++++++ 3 files changed, 145 insertions(+) diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index 05c23091e..a1b2a937f 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -4,6 +4,7 @@ import ( "testing" gomock "github.com/golang/mock/gomock" + api "github.com/influxdata/influxdb-client-go/v2/api" "github.com/influxdata/influxdb-client-go/v2/domain" "github.com/kataras/iris/v12/x/errors" "github.com/stretchr/testify/require" @@ -525,3 +526,57 @@ func Test_ListBucket(t *testing.T) { }) } } + +func Test_Query(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + testCases := []struct { + name string + resp *api.QueryTableResult + wantResults map[string]any + orgName string + inputQuery string + expectErr bool + err error + }{ + { + name: "failing error query", + orgName: "org1", + inputQuery: "dummyQuery1", + expectErr: true, + wantResults: map[string]any{}, + resp: &api.QueryTableResult{}, + err: errors.New("Something"), + }, + } + + for _, tt := range testCases { + t.Run(tt.name, func(t *testing.T) { + client := *setupDB(t, ctrl) + mockInflux := client.client.(*influxdb_mock.MockInfluxClient) + mockInfluxQueryAPI := influxdb_mock.NewMockInfluxQueryAPI(ctrl) + + mockInflux.EXPECT().QueryAPI(tt.orgName). + Return(mockInfluxQueryAPI). + AnyTimes() + + mockInfluxQueryAPI.EXPECT(). + Query(gomock.Any(), tt.inputQuery). + Return(tt.resp, tt.err). + AnyTimes() + + result, err := client.Query(t.Context(), tt.orgName, tt.inputQuery) + + if tt.expectErr { + require.Error(t, err) + require.Equal(t, err, tt.err) + require.Empty(t, result) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/pkg/gofr/datasource/influxdb/interface.go b/pkg/gofr/datasource/influxdb/interface.go index c95dabc0b..627b9b508 100644 --- a/pkg/gofr/datasource/influxdb/interface.go +++ b/pkg/gofr/datasource/influxdb/interface.go @@ -170,3 +170,10 @@ type BucketsAPI interface { // RemoveOwnerWithID removes a member with id memberID from a bucket with bucketID. RemoveOwnerWithID(ctx context.Context, bucketID, memberID string) error } + +type InfluxQueryAPI interface { + QueryRaw(ctx context.Context, query string, dialect *domain.Dialect) (string, error) + QueryRawWithParams(ctx context.Context, query string, dialect *domain.Dialect, params any) (string, error) + Query(ctx context.Context, query string) (*api.QueryTableResult, error) + QueryWithParams(ctx context.Context, query string, params any) (*api.QueryTableResult, error) +} diff --git a/pkg/gofr/datasource/influxdb/mocks/mock_interface.go b/pkg/gofr/datasource/influxdb/mocks/mock_interface.go index cf410e32b..95a76071d 100644 --- a/pkg/gofr/datasource/influxdb/mocks/mock_interface.go +++ b/pkg/gofr/datasource/influxdb/mocks/mock_interface.go @@ -1049,3 +1049,86 @@ func (mr *MockBucketsAPIMockRecorder) UpdateBucket(ctx, bucket interface{}) *gom mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateBucket", reflect.TypeOf((*MockBucketsAPI)(nil).UpdateBucket), ctx, bucket) } + +// MockInfluxQueryAPI is a mock of InfluxQueryAPI interface. +type MockInfluxQueryAPI struct { + ctrl *gomock.Controller + recorder *MockInfluxQueryAPIMockRecorder +} + +// MockInfluxQueryAPIMockRecorder is the mock recorder for MockInfluxQueryAPI. +type MockInfluxQueryAPIMockRecorder struct { + mock *MockInfluxQueryAPI +} + +// NewMockInfluxQueryAPI creates a new mock instance. +func NewMockInfluxQueryAPI(ctrl *gomock.Controller) *MockInfluxQueryAPI { + mock := &MockInfluxQueryAPI{ctrl: ctrl} + mock.recorder = &MockInfluxQueryAPIMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockInfluxQueryAPI) EXPECT() *MockInfluxQueryAPIMockRecorder { + return m.recorder +} + +// Query mocks base method. +func (m *MockInfluxQueryAPI) Query(ctx context.Context, query string) (*api.QueryTableResult, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Query", ctx, query) + ret0, _ := ret[0].(*api.QueryTableResult) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Query indicates an expected call of Query. +func (mr *MockInfluxQueryAPIMockRecorder) Query(ctx, query interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Query", reflect.TypeOf((*MockInfluxQueryAPI)(nil).Query), ctx, query) +} + +// QueryRaw mocks base method. +func (m *MockInfluxQueryAPI) QueryRaw(ctx context.Context, query string, dialect *domain.Dialect) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "QueryRaw", ctx, query, dialect) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// QueryRaw indicates an expected call of QueryRaw. +func (mr *MockInfluxQueryAPIMockRecorder) QueryRaw(ctx, query, dialect interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryRaw", reflect.TypeOf((*MockInfluxQueryAPI)(nil).QueryRaw), ctx, query, dialect) +} + +// QueryRawWithParams mocks base method. +func (m *MockInfluxQueryAPI) QueryRawWithParams(ctx context.Context, query string, dialect *domain.Dialect, params interface{}) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "QueryRawWithParams", ctx, query, dialect, params) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// QueryRawWithParams indicates an expected call of QueryRawWithParams. +func (mr *MockInfluxQueryAPIMockRecorder) QueryRawWithParams(ctx, query, dialect, params interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryRawWithParams", reflect.TypeOf((*MockInfluxQueryAPI)(nil).QueryRawWithParams), ctx, query, dialect, params) +} + +// QueryWithParams mocks base method. +func (m *MockInfluxQueryAPI) QueryWithParams(ctx context.Context, query string, params interface{}) (*api.QueryTableResult, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "QueryWithParams", ctx, query, params) + ret0, _ := ret[0].(*api.QueryTableResult) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// QueryWithParams indicates an expected call of QueryWithParams. +func (mr *MockInfluxQueryAPIMockRecorder) QueryWithParams(ctx, query, params interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryWithParams", reflect.TypeOf((*MockInfluxQueryAPI)(nil).QueryWithParams), ctx, query, params) +} From cb85903b8261ace0049ea425cb3bb4f7e380ef40 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Sun, 10 Aug 2025 16:56:11 +0530 Subject: [PATCH 33/44] [docs] added index in navigation. --- docs/navigation.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/navigation.js b/docs/navigation.js index bd211e440..87e4da58e 100644 --- a/docs/navigation.js +++ b/docs/navigation.js @@ -217,6 +217,11 @@ export const navigation = [ href: "/docs/datasources/elasticsearch", desc: "Learn how to connect to and interact with elasticsearch in GoFr." }, + { + title: "InfluxDB", + href: "/docs/datasources/influxdb", + desc: "Learn how to connect to and interact with influxdb in GoFr." + }, ], }, { From e797747715382d6e7bd63f44a09617a68b52b619 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Mon, 11 Aug 2025 22:30:39 +0530 Subject: [PATCH 34/44] [logger] fixed , using app logger instead of fmt. --- docs/datasources/influxdb/page.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/datasources/influxdb/page.md b/docs/datasources/influxdb/page.md index ff68589b8..77d1e7f1a 100644 --- a/docs/datasources/influxdb/page.md +++ b/docs/datasources/influxdb/page.md @@ -75,7 +75,7 @@ func main() { // Ping InfluxDB ok, err := client.Ping(context.Background()) if err != nil { - fmt.Println("Ping failed:", err) + app.Logger().Debug(err) return } fmt.Println("InfluxDB connected:", ok) @@ -83,7 +83,7 @@ func main() { // Create organization orgID, err := client.CreateOrganization(context.Background(), "demo-org") if err != nil { - fmt.Println("CreateOrganization error:", err) + app.Logger().Debug(err) return } @@ -91,7 +91,7 @@ func main() { orgs, _ := client.ListOrganization(context.Background()) fmt.Println("Organizations:") for id, name := range orgs { - fmt.Printf("- %s: %s\n", id, name) + app.Logger().Debug(id, name) } // Create bucket @@ -104,21 +104,21 @@ func main() { // List buckets for organization buckets, err := client.ListBuckets(context.Background(), "demo-org") if err != nil { - fmt.Println("ListBuckets error:", err) + app.Logger().Debug(err) return } fmt.Println("Buckets:", buckets) // Delete bucket if err := client.DeleteBucket(context.Background(), orgID, bucketID); err != nil { - fmt.Println("DeleteBucket error:", err) + app.Logger().Debug(err) return } fmt.Println("Bucket deleted successfully") // Delete organization if err := client.DeleteOrganization(context.Background(), orgID); err != nil { - fmt.Println("DeleteOrganization error:", err) + app.Logger().Debug(err) return } fmt.Println("Organization deleted successfully") From b1e30861c8dcc432ebb58e242622f15f6e622cb3 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Mon, 11 Aug 2025 22:31:50 +0530 Subject: [PATCH 35/44] [logger] fixed , using app logger instead of fmt. --- docs/datasources/influxdb/page.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/datasources/influxdb/page.md b/docs/datasources/influxdb/page.md index 77d1e7f1a..0b34d187b 100644 --- a/docs/datasources/influxdb/page.md +++ b/docs/datasources/influxdb/page.md @@ -78,7 +78,7 @@ func main() { app.Logger().Debug(err) return } - fmt.Println("InfluxDB connected:", ok) + app.Logger().Debug("InfluxDB connected: ", ok) // Create organization orgID, err := client.CreateOrganization(context.Background(), "demo-org") @@ -89,15 +89,15 @@ func main() { // List organizations orgs, _ := client.ListOrganization(context.Background()) - fmt.Println("Organizations:") + app.Logger().Debug("Organizations: ") for id, name := range orgs { app.Logger().Debug(id, name) } // Create bucket - bucketID, err := client.CreateBucket(context.Background(), orgID, "demo-bucket", time.Hour) + bucketID, err := client.CreateBucket(context.Background(), orgID, "demo-bucket") if err != nil { - fmt.Println("CreateBucket error:", err) + app.Logger().Debug(err) return } @@ -107,22 +107,21 @@ func main() { app.Logger().Debug(err) return } - fmt.Println("Buckets:", buckets) + app.Logger().Debug("Buckets:", buckets) // Delete bucket - if err := client.DeleteBucket(context.Background(), orgID, bucketID); err != nil { + if err := client.DeleteBucket(context.Background(), bucketID); err != nil { app.Logger().Debug(err) return } - fmt.Println("Bucket deleted successfully") + app.Logger().Debug("Bucket deleted successfully") // Delete organization if err := client.DeleteOrganization(context.Background(), orgID); err != nil { app.Logger().Debug(err) return } - fmt.Println("Organization deleted successfully") - + app.Logger().Debug("Organization deleted successfully") // Start the server app.Run() } From 5262ff0821b1dbd244c249941310c745231beb58 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Tue, 12 Aug 2025 19:25:23 +0530 Subject: [PATCH 36/44] [minimized] InfluxClient inteface got rid of extra function which are not implemented. --- pkg/gofr/datasource/influxdb/influxdb.go | 2 +- pkg/gofr/datasource/influxdb/interface.go | 80 +--------- .../influxdb/mocks/mock_interface.go | 149 +----------------- 3 files changed, 6 insertions(+), 225 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 02755aca3..10e02a6cf 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -20,7 +20,7 @@ type Config struct { // Client represents the InfluxDB client. type Client struct { config Config - client influxdb2.Client + client InfluxClient logger Logger metrics Metrics tracer trace.Tracer diff --git a/pkg/gofr/datasource/influxdb/interface.go b/pkg/gofr/datasource/influxdb/interface.go index 627b9b508..97a334698 100644 --- a/pkg/gofr/datasource/influxdb/interface.go +++ b/pkg/gofr/datasource/influxdb/interface.go @@ -4,114 +4,46 @@ import ( "context" influxdb2 "github.com/influxdata/influxdb-client-go/v2" - api "github.com/influxdata/influxdb-client-go/v2/api" - "github.com/influxdata/influxdb-client-go/v2/api/http" + "github.com/influxdata/influxdb-client-go/v2/api" "github.com/influxdata/influxdb-client-go/v2/domain" ) // InfluxClient defines the operations required to interact with an InfluxDB instance. type InfluxClient interface { - - // Setup sends request to initialize new InfluxDB server with user, org and bucket, and data retention period - // and returns details about newly created entities along with the authorization object. - // Retention period of zero will result to infinite retention. Setup(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int) (*domain.OnboardingResponse, error) - // SetupWithToken sends request to initialize new InfluxDB server with user, org and bucket, data retention period and token - // and returns details about newly created entities along with the authorization object. - // Retention period of zero will result to infinite retention. - SetupWithToken( - ctx context.Context, - username, password, org, bucket string, - retentionPeriodHours int, token string) (*domain.OnboardingResponse, error) - - // Ready returns InfluxDB uptime info of server. It doesn't validate authentication params. - Ready(ctx context.Context) (*domain.Ready, error) - // Health returns an InfluxDB server health check result. Read the HealthCheck.Status field to get server status. - // Health doesn't validate authentication params. Health(ctx context.Context) (*domain.HealthCheck, error) - // Ping validates whether InfluxDB server is running. It doesn't validate authentication params. Ping(ctx context.Context) (bool, error) - // Close ensures all ongoing asynchronous write clients finish. - // Also closes all idle connections, in case of HTTP client was created internally. - Close() - // Options returns the options associated with client Options() *influxdb2.Options - // ServerURL returns the url of the server url client talks to - ServerURL() string - // HTTPService returns underlying HTTP service object used by client - HTTPService() http.Service - // WriteAPI returns the asynchronous, non-blocking, Write client. - // Ensures using a single WriteAPI instance for each org/bucket pair. - WriteAPI(org, bucket string) api.WriteAPI - // WriteAPIBlocking returns the synchronous, blocking, Write client. - // Ensures using a single WriteAPIBlocking instance for each org/bucket pair. WriteAPIBlocking(org, bucket string) api.WriteAPIBlocking - // QueryAPI returns Query client. - // Ensures using a single QueryAPI instance each org. QueryAPI(org string) api.QueryAPI - // AuthorizationsAPI returns Authorizations API client. AuthorizationsAPI() api.AuthorizationsAPI - // OrganizationsAPI returns Organizations API client OrganizationsAPI() api.OrganizationsAPI - // UsersAPI returns Users API client. - UsersAPI() api.UsersAPI - // DeleteAPI returns Delete API client DeleteAPI() api.DeleteAPI - // BucketsAPI returns Buckets API client BucketsAPI() api.BucketsAPI - // LabelsAPI returns Labels API client - LabelsAPI() api.LabelsAPI - // TasksAPI returns Tasks API client - TasksAPI() api.TasksAPI - - APIClient() *domain.Client } // InfluxOrganizationsAPI provides methods for managing Organizations in a InfluxDB server. type InfluxOrganizationsAPI interface { - // GetOrganizations returns all organizations. - // GetOrganizations supports PagingOptions: Offset, Limit, Descending GetOrganizations(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) - // FindOrganizationByName returns an organization found using orgName. FindOrganizationByName(ctx context.Context, orgName string) (*domain.Organization, error) - // FindOrganizationByID returns an organization found using orgID. FindOrganizationByID(ctx context.Context, orgID string) (*domain.Organization, error) - // FindOrganizationsByUserID returns organizations an user with userID belongs to. - // FindOrganizationsByUserID supports PagingOptions: Offset, Limit, Descending FindOrganizationsByUserID(ctx context.Context, userID string, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) - // CreateOrganization creates new organization. CreateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) - // CreateOrganizationWithName creates new organization with orgName and with status active. CreateOrganizationWithName(ctx context.Context, orgName string) (*domain.Organization, error) - // UpdateOrganization updates organization. UpdateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) - // DeleteOrganization deletes an organization. DeleteOrganization(ctx context.Context, org *domain.Organization) error - // DeleteOrganizationWithID deletes an organization with orgID. DeleteOrganizationWithID(ctx context.Context, orgID string) error - // GetMembers returns members of an organization. GetMembers(ctx context.Context, org *domain.Organization) (*[]domain.ResourceMember, error) - // GetMembersWithID returns members of an organization with orgID. GetMembersWithID(ctx context.Context, orgID string) (*[]domain.ResourceMember, error) - // AddMember adds a member to an organization. AddMember(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceMember, error) - // AddMemberWithID adds a member with id memberID to an organization with orgID. AddMemberWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceMember, error) - // RemoveMember removes a member from an organization. RemoveMember(ctx context.Context, org *domain.Organization, user *domain.User) error - // RemoveMemberWithID removes a member with id memberID from an organization with orgID. RemoveMemberWithID(ctx context.Context, orgID, memberID string) error - // GetOwners returns owners of an organization. GetOwners(ctx context.Context, org *domain.Organization) (*[]domain.ResourceOwner, error) - // GetOwnersWithID returns owners of an organization with orgID. GetOwnersWithID(ctx context.Context, orgID string) (*[]domain.ResourceOwner, error) - // AddOwner adds an owner to an organization. AddOwner(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceOwner, error) - // AddOwnerWithID adds an owner with id memberID to an organization with orgID. AddOwnerWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceOwner, error) - // RemoveOwner removes an owner from an organization. RemoveOwner(ctx context.Context, org *domain.Organization, user *domain.User) error - // RemoveOwnerWithID removes an owner with id memberID from an organization with orgID. RemoveOwnerWithID(ctx context.Context, orgID, memberID string) error } @@ -149,25 +81,15 @@ type BucketsAPI interface { GetMembers(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceMember, error) // GetMembersWithID returns members of a bucket with bucketID. GetMembersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceMember, error) - // AddMember adds a member to a bucket. AddMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceMember, error) - // AddMemberWithID adds a member with id memberID to a bucket with bucketID. AddMemberWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceMember, error) - // RemoveMember removes a member from a bucket. RemoveMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) error - // RemoveMemberWithID removes a member with id memberID from a bucket with bucketID. RemoveMemberWithID(ctx context.Context, bucketID, memberID string) error - // GetOwners returns owners of a bucket. GetOwners(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceOwner, error) - // GetOwnersWithID returns owners of a bucket with bucketID. GetOwnersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceOwner, error) - // AddOwner adds an owner to a bucket. AddOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceOwner, error) - // AddOwnerWithID adds an owner with id memberID to a bucket with bucketID. AddOwnerWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceOwner, error) - // RemoveOwner removes an owner from a bucket. RemoveOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) error - // RemoveOwnerWithID removes a member with id memberID from a bucket with bucketID. RemoveOwnerWithID(ctx context.Context, bucketID, memberID string) error } diff --git a/pkg/gofr/datasource/influxdb/mocks/mock_interface.go b/pkg/gofr/datasource/influxdb/mocks/mock_interface.go index 95a76071d..46644afdb 100644 --- a/pkg/gofr/datasource/influxdb/mocks/mock_interface.go +++ b/pkg/gofr/datasource/influxdb/mocks/mock_interface.go @@ -1,8 +1,8 @@ // Code generated by MockGen. DO NOT EDIT. // Source: interface.go -// Package influxdb is a generated GoMock package. -package influxdb +// Package influxdb_mock is a generated GoMock package. +package influxdb_mock import ( context "context" @@ -11,7 +11,6 @@ import ( gomock "github.com/golang/mock/gomock" influxdb2 "github.com/influxdata/influxdb-client-go/v2" api "github.com/influxdata/influxdb-client-go/v2/api" - http "github.com/influxdata/influxdb-client-go/v2/api/http" domain "github.com/influxdata/influxdb-client-go/v2/domain" ) @@ -38,20 +37,6 @@ func (m *MockInfluxClient) EXPECT() *MockInfluxClientMockRecorder { return m.recorder } -// APIClient mocks base method. -func (m *MockInfluxClient) APIClient() *domain.Client { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "APIClient") - ret0, _ := ret[0].(*domain.Client) - return ret0 -} - -// APIClient indicates an expected call of APIClient. -func (mr *MockInfluxClientMockRecorder) APIClient() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "APIClient", reflect.TypeOf((*MockInfluxClient)(nil).APIClient)) -} - // AuthorizationsAPI mocks base method. func (m *MockInfluxClient) AuthorizationsAPI() api.AuthorizationsAPI { m.ctrl.T.Helper() @@ -80,18 +65,6 @@ func (mr *MockInfluxClientMockRecorder) BucketsAPI() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BucketsAPI", reflect.TypeOf((*MockInfluxClient)(nil).BucketsAPI)) } -// Close mocks base method. -func (m *MockInfluxClient) Close() { - m.ctrl.T.Helper() - m.ctrl.Call(m, "Close") -} - -// Close indicates an expected call of Close. -func (mr *MockInfluxClientMockRecorder) Close() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockInfluxClient)(nil).Close)) -} - // DeleteAPI mocks base method. func (m *MockInfluxClient) DeleteAPI() api.DeleteAPI { m.ctrl.T.Helper() @@ -106,20 +79,6 @@ func (mr *MockInfluxClientMockRecorder) DeleteAPI() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAPI", reflect.TypeOf((*MockInfluxClient)(nil).DeleteAPI)) } -// HTTPService mocks base method. -func (m *MockInfluxClient) HTTPService() http.Service { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "HTTPService") - ret0, _ := ret[0].(http.Service) - return ret0 -} - -// HTTPService indicates an expected call of HTTPService. -func (mr *MockInfluxClientMockRecorder) HTTPService() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HTTPService", reflect.TypeOf((*MockInfluxClient)(nil).HTTPService)) -} - // Health mocks base method. func (m *MockInfluxClient) Health(ctx context.Context) (*domain.HealthCheck, error) { m.ctrl.T.Helper() @@ -135,20 +94,6 @@ func (mr *MockInfluxClientMockRecorder) Health(ctx interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Health", reflect.TypeOf((*MockInfluxClient)(nil).Health), ctx) } -// LabelsAPI mocks base method. -func (m *MockInfluxClient) LabelsAPI() api.LabelsAPI { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "LabelsAPI") - ret0, _ := ret[0].(api.LabelsAPI) - return ret0 -} - -// LabelsAPI indicates an expected call of LabelsAPI. -func (mr *MockInfluxClientMockRecorder) LabelsAPI() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LabelsAPI", reflect.TypeOf((*MockInfluxClient)(nil).LabelsAPI)) -} - // Options mocks base method. func (m *MockInfluxClient) Options() *influxdb2.Options { m.ctrl.T.Helper() @@ -206,35 +151,6 @@ func (mr *MockInfluxClientMockRecorder) QueryAPI(org interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryAPI", reflect.TypeOf((*MockInfluxClient)(nil).QueryAPI), org) } -// Ready mocks base method. -func (m *MockInfluxClient) Ready(ctx context.Context) (*domain.Ready, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Ready", ctx) - ret0, _ := ret[0].(*domain.Ready) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Ready indicates an expected call of Ready. -func (mr *MockInfluxClientMockRecorder) Ready(ctx interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ready", reflect.TypeOf((*MockInfluxClient)(nil).Ready), ctx) -} - -// ServerURL mocks base method. -func (m *MockInfluxClient) ServerURL() string { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ServerURL") - ret0, _ := ret[0].(string) - return ret0 -} - -// ServerURL indicates an expected call of ServerURL. -func (mr *MockInfluxClientMockRecorder) ServerURL() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ServerURL", reflect.TypeOf((*MockInfluxClient)(nil).ServerURL)) -} - // Setup mocks base method. func (m *MockInfluxClient) Setup(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int) (*domain.OnboardingResponse, error) { m.ctrl.T.Helper() @@ -250,63 +166,6 @@ func (mr *MockInfluxClientMockRecorder) Setup(ctx, username, password, org, buck return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Setup", reflect.TypeOf((*MockInfluxClient)(nil).Setup), ctx, username, password, org, bucket, retentionPeriodHours) } -// SetupWithToken mocks base method. -func (m *MockInfluxClient) SetupWithToken(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int, token string) (*domain.OnboardingResponse, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SetupWithToken", ctx, username, password, org, bucket, retentionPeriodHours, token) - ret0, _ := ret[0].(*domain.OnboardingResponse) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// SetupWithToken indicates an expected call of SetupWithToken. -func (mr *MockInfluxClientMockRecorder) SetupWithToken(ctx, username, password, org, bucket, retentionPeriodHours, token interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetupWithToken", reflect.TypeOf((*MockInfluxClient)(nil).SetupWithToken), ctx, username, password, org, bucket, retentionPeriodHours, token) -} - -// TasksAPI mocks base method. -func (m *MockInfluxClient) TasksAPI() api.TasksAPI { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "TasksAPI") - ret0, _ := ret[0].(api.TasksAPI) - return ret0 -} - -// TasksAPI indicates an expected call of TasksAPI. -func (mr *MockInfluxClientMockRecorder) TasksAPI() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TasksAPI", reflect.TypeOf((*MockInfluxClient)(nil).TasksAPI)) -} - -// UsersAPI mocks base method. -func (m *MockInfluxClient) UsersAPI() api.UsersAPI { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UsersAPI") - ret0, _ := ret[0].(api.UsersAPI) - return ret0 -} - -// UsersAPI indicates an expected call of UsersAPI. -func (mr *MockInfluxClientMockRecorder) UsersAPI() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UsersAPI", reflect.TypeOf((*MockInfluxClient)(nil).UsersAPI)) -} - -// WriteAPI mocks base method. -func (m *MockInfluxClient) WriteAPI(org, bucket string) api.WriteAPI { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "WriteAPI", org, bucket) - ret0, _ := ret[0].(api.WriteAPI) - return ret0 -} - -// WriteAPI indicates an expected call of WriteAPI. -func (mr *MockInfluxClientMockRecorder) WriteAPI(org, bucket interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WriteAPI", reflect.TypeOf((*MockInfluxClient)(nil).WriteAPI), org, bucket) -} - // WriteAPIBlocking mocks base method. func (m *MockInfluxClient) WriteAPIBlocking(org, bucket string) api.WriteAPIBlocking { m.ctrl.T.Helper() @@ -1104,7 +963,7 @@ func (mr *MockInfluxQueryAPIMockRecorder) QueryRaw(ctx, query, dialect interface } // QueryRawWithParams mocks base method. -func (m *MockInfluxQueryAPI) QueryRawWithParams(ctx context.Context, query string, dialect *domain.Dialect, params interface{}) (string, error) { +func (m *MockInfluxQueryAPI) QueryRawWithParams(ctx context.Context, query string, dialect *domain.Dialect, params any) (string, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "QueryRawWithParams", ctx, query, dialect, params) ret0, _ := ret[0].(string) @@ -1119,7 +978,7 @@ func (mr *MockInfluxQueryAPIMockRecorder) QueryRawWithParams(ctx, query, dialect } // QueryWithParams mocks base method. -func (m *MockInfluxQueryAPI) QueryWithParams(ctx context.Context, query string, params interface{}) (*api.QueryTableResult, error) { +func (m *MockInfluxQueryAPI) QueryWithParams(ctx context.Context, query string, params any) (*api.QueryTableResult, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "QueryWithParams", ctx, query, params) ret0, _ := ret[0].(*api.QueryTableResult) From e6038eda6c850cf282c87a32697337d22ce46c38 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 14 Aug 2025 12:45:53 +0530 Subject: [PATCH 37/44] [refactor] coverage completed, getting 41% coverage. --- go.work.sum | 80 +- pkg/gofr/datasource/influxdb/go.mod | 29 +- pkg/gofr/datasource/influxdb/go.sum | 129 +++- pkg/gofr/datasource/influxdb/influxdb.go | 84 +- pkg/gofr/datasource/influxdb/influxdb_test.go | 580 +++++++------- pkg/gofr/datasource/influxdb/interface.go | 64 +- pkg/gofr/datasource/influxdb/internal.go | 79 ++ .../influxdb/mocks/mock_interface.go | 729 +++--------------- 8 files changed, 709 insertions(+), 1065 deletions(-) create mode 100644 pkg/gofr/datasource/influxdb/internal.go diff --git a/go.work.sum b/go.work.sum index b7e0af40f..2f17f155c 100644 --- a/go.work.sum +++ b/go.work.sum @@ -762,16 +762,10 @@ github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0= github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v6 v6.2.0 h1:EpcZ6SR9n28BUGtNJSvlBqf90IpjeFr36Tizxhn/oME= -github.com/CloudyKit/jet/v6 v6.2.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.0 h1:oVLqHXhnYtUwM89y9T1fXGaK9wTkXHgNp8/ZNMQzUxE= github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.0/go.mod h1:dppbR7CwXD4pgtV9t3wD1812RaLDcBjtblcDF5f1vI0= github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.2 h1:DBjmt6/otSdULyJdVg2BlG0qGZO5tKL4VzOs0jpvw5Q= @@ -804,8 +798,6 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapp github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0/go.mod h1:otE2jQekW/PqXk1Awf5lmfokJx4uwuqcj1ab5SpGeW0= github.com/IBM/sarama v1.43.1 h1:Z5uz65Px7f4DhI/jQqEm/tV9t8aU+JUdTyW/K/fCXpA= github.com/IBM/sarama v1.43.1/go.mod h1:GG5q1RURtDNPz8xxJs3mgX6Ytak8Z9eLhAkJPObe2xE= -github.com/Joker/jade v1.1.3 h1:Qbeh12Vq6BxURXT1qZBRHsDxeURB8ztcL6f3EXSGeHk= -github.com/Joker/jade v1.1.3/go.mod h1:T+2WLyt7VH6Lp0TRxQrUYEs64nRc83wkMQrfeIQKduM= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= @@ -813,8 +805,6 @@ github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8= github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w= github.com/RaveNoX/go-jsoncommentstrip v1.0.0 h1:t527LHHE3HmiHrq74QMpNPZpGCIJzTx+apLkMKt4HC0= -github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06 h1:KkH3I3sJuOLP3TjA/dfr4NAY8bghDwnXiU7cTKxQqo0= -github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= github.com/alecthomas/kingpin/v2 v2.4.0 h1:f48lwail6p8zpO1bC4TxtqACaGqHYA22qkHjHpqDjYY= github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= @@ -823,9 +813,8 @@ github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwc github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/arrow/go/v15 v15.0.2 h1:60IliRbiyTWCWjERBCkO1W4Qun9svcYoZrSLcyOsMLE= github.com/apache/arrow/go/v15 v15.0.2/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA= -github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= -github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/bmatcuk/doublestar v1.1.1 h1:YroD6BJCZBYx06yYFEWvUuKVWQn3vLLQAVmDmvTSaiQ= github.com/bytedance/sonic v1.10.0-rc3 h1:uNSnscRapXTwUgTyOF0GVljYD08p9X/Lbr9MweSV3V0= github.com/bytedance/sonic v1.10.0-rc3/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= @@ -834,7 +823,10 @@ github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= 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 v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= github.com/chenzhuoyu/iasm v0.9.0 h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo= @@ -887,10 +879,14 @@ github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHf github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= +github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= +github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de h1:t0UHb5vdojIDUqktM6+xJAfScFBsVpXZmqC9dsgJmeA= +github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/djherbis/atime v1.1.0/go.mod h1:28OF6Y8s3NQWwacXc5eZTsEsiMzp7LF8MbXE+XJPdBE= github.com/dmarkham/enumer v1.5.9 h1:NM/1ma/AUNieHZg74w67GkHFBNB15muOt3sj486QVZk= github.com/dmarkham/enumer v1.5.9/go.mod h1:e4VILe2b1nYK3JKJpRmNdl5xbDQvELc6tQ8b+GsGk6E= github.com/dmarkham/enumer v1.5.10 h1:ygL0L6quiTiH1jpp68DyvsWaea6MaZLZrTTkIS++R0M= @@ -939,10 +935,7 @@ github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6 github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= -github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/flosch/pongo2/v4 v4.0.2 h1:gv+5Pe3vaSVmiJvh/BZa82b7/00YUGm0PIyVVLop0Hw= -github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= @@ -983,6 +976,7 @@ github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk= github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= +github.com/gobwas/ws v1.3.0/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= @@ -1012,8 +1006,6 @@ github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgj github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/gomarkdown/markdown v0.0.0-20230716120725-531d2d74bc12 h1:uK3X/2mt4tbSGoHvbLBHUny7CKiuwUip3MArtukol4E= -github.com/gomarkdown/markdown v0.0.0-20230716120725-531d2d74bc12/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= @@ -1059,8 +1051,7 @@ github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07 github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= 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/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= -github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= @@ -1081,8 +1072,7 @@ github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465 h1:KwWnWVW github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/iris-contrib/schema v0.0.6 h1:CPSBLyx2e91H2yJzPuhGuifVRnZBBJ3pCOMbOvPZaTw= -github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= +github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= @@ -1099,8 +1089,6 @@ github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZ github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -1111,18 +1099,8 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d h1:c93kUJDtVAXFEhsCh5jSxyOJmFHuzcihnslQiX8Urwo= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kataras/blocks v0.0.7 h1:cF3RDY/vxnSRezc7vLFlQFTYXG/yAr1o7WImJuZbzC4= -github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= -github.com/kataras/golog v0.1.9 h1:vLvSDpP7kihFGKFAvBSofYo7qZNULYSHOH2D7rPTKJk= -github.com/kataras/golog v0.1.9/go.mod h1:jlpk/bOaYCyqDqH18pgDHdaJab72yBE6i0O3s30hpWY= -github.com/kataras/iris/v12 v12.2.5 h1:R5UzUW4MIByBM6tKMG3UqJ7hL1JCEE+dkqQ8L72f6PU= -github.com/kataras/iris/v12 v12.2.5/go.mod h1:bf3oblPF8tQmRgyPCzPZr0mLazvEDFgImdaGZYuN4hw= -github.com/kataras/pio v0.0.12 h1:o52SfVYauS3J5X08fNjlGS5arXHjW/ItLkyLcKjoH6w= -github.com/kataras/pio v0.0.12/go.mod h1:ODK/8XBhhQ5WqrAhKy+9lTPS7sBf6O3KcLhc9klfRcY= -github.com/kataras/sitemap v0.0.6 h1:w71CRMMKYMJh6LR2wTgnk5hSgjVNB9KL60n5e2KHvLY= -github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= -github.com/kataras/tunnel v0.0.4 h1:sCAqWuJV7nPzGrlb0os3j49lk2JhILT0rID38NHNLpA= -github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= +github.com/kataras/jwt v0.1.9/go.mod h1:Kw6GZv2JQN8K4D3NGaSc/qZzTYfaRdyaC2zWi+RBRIQ= +github.com/kataras/neffos v0.0.22/go.mod h1:IIJZcUDvwBxJGlDj942dqQgyznVKYDti91f8Ez+RRxE= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kisielk/errcheck v1.5.0 h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY= @@ -1146,12 +1124,8 @@ github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0V github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailgun/raymond/v2 v2.0.48 h1:5dmlB680ZkFG2RN/0lvTAghrSxIESeu9/2aeDqACtjw= -github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/microcosm-cc/bluemonday v1.0.25 h1:4NEwSfiJ+Wva0VxN5B8OwMicaJvD8r9tlJWm9rtloEg= -github.com/microcosm-cc/bluemonday v1.0.25/go.mod h1:ZIOjCQp1OrzBBPIJmfX4qDYFuhU02nx4bn030ixfHLE= +github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= +github.com/mediocregopher/radix/v3 v3.8.1/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/microsoft/ApplicationInsights-Go v0.4.4 h1:G4+H9WNs6ygSCe6sUyxRc2U81TI5Es90b2t/MwX5KqY= github.com/microsoft/ApplicationInsights-Go v0.4.4/go.mod h1:fKRUseBqkw6bDiXTs3ESTiU/4YTIHsQS4W3fP2ieF4U= github.com/mkevac/debugcharts v0.0.0-20191222103121-ae1c48aa8615 h1:/mD+ABZyXD39BzJI2XyRJlqdZG11gXFo0SSynL+OFeU= @@ -1220,12 +1194,9 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk= -github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.23.7/go.mod h1:c4gnmoRC0hQuaLqvxnx1//VXQ0Ms/X9UnJF8pddY5z4= github.com/shirou/gopsutil/v3 v3.23.12 h1:z90NtUkp3bMtmICZKpC4+WaknU1eXtp5vtbQ11DgpE4= github.com/shirou/gopsutil/v3 v3.23.12/go.mod h1:1FrWgea594Jp7qmjHUUPlJDTPgcsb9mGnXDxavtikzM= github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs= @@ -1246,10 +1217,6 @@ github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8W github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad h1:fiWzISvDn0Csy5H0iwgAuJGQTUpVfEMJJd4nRFXogbc= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/tdewolff/minify/v2 v2.12.8 h1:Q2BqOTmlMjoutkuD/OPCnJUpIqrzT3nRPkw+q+KpXS0= -github.com/tdewolff/minify/v2 v2.12.8/go.mod h1:YRgk7CC21LZnbuke2fmYnCTq+zhCgpb0yJACOTUNJ1E= -github.com/tdewolff/parse/v2 v2.6.7 h1:WrFllrqmzAcrKHzoYgMupqgUBIfBVOb0yscFzDf8bBg= -github.com/tdewolff/parse/v2 v2.6.7/go.mod h1:XHDhaU6IBgsryfdnpzUXBlT6leW/l25yrFBTEb4eIyM= github.com/testcontainers/testcontainers-go v0.28.0 h1:1HLm9qm+J5VikzFDYhOd+Zw12NtOl+8drH2E8nTY1r8= github.com/testcontainers/testcontainers-go v0.28.0/go.mod h1:COlDpUXbwW3owtpMkEB1zo9gwb1CoKVKlyrVPejF4AU= github.com/testcontainers/testcontainers-go v0.33.0 h1:zJS9PfXYT5O0ZFXM2xxXfk4J5UMw/kRiISng037Gxdw= @@ -1267,18 +1234,10 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= -github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= -github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= -github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= -github.com/yosssi/ace v0.0.5 h1:tUkIP/BLdKqrlrPwcmH0shwEEhTRHoGnc1wFIWmaBUA= -github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= @@ -1291,6 +1250,7 @@ github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1527,7 +1487,6 @@ golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1744,7 +1703,6 @@ google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20 h1:MLBCGN1O7G google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20/go.mod h1:Nr5H8+MlGWr5+xX/STzdoEqJrO+YteqFbMyCsrb6mH0= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= @@ -1755,8 +1713,6 @@ google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojt google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/pkg/gofr/datasource/influxdb/go.mod b/pkg/gofr/datasource/influxdb/go.mod index 31316060b..27ee93631 100644 --- a/pkg/gofr/datasource/influxdb/go.mod +++ b/pkg/gofr/datasource/influxdb/go.mod @@ -5,21 +5,48 @@ go 1.24.2 require ( github.com/golang/mock v1.6.0 github.com/influxdata/influxdb-client-go/v2 v2.14.0 + github.com/kataras/iris/v12 v12.2.5 + github.com/stretchr/testify v1.10.0 go.opencensus.io v0.24.0 go.opentelemetry.io/otel v1.37.0 - go.uber.org/mock v0.5.2 ) require ( + github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06 // indirect + github.com/andybalholm/brotli v1.0.5 // indirect github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect + github.com/aymerick/douceur v0.2.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fatih/structs v1.1.0 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/gomarkdown/markdown v0.0.0-20230716120725-531d2d74bc12 // indirect github.com/google/uuid v1.6.0 // indirect + github.com/gorilla/css v1.0.0 // indirect github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect + github.com/iris-contrib/schema v0.0.6 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/kataras/golog v0.1.9 // indirect + github.com/kataras/pio v0.0.12 // indirect + github.com/klauspost/compress v1.16.7 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/microcosm-cc/bluemonday v1.0.25 // indirect github.com/oapi-codegen/runtime v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/tdewolff/minify/v2 v2.12.8 // indirect + github.com/tdewolff/parse/v2 v2.6.7 // indirect + github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect + github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/otel/metric v1.37.0 // indirect go.opentelemetry.io/otel/trace v1.37.0 // indirect + golang.org/x/crypto v0.39.0 // indirect golang.org/x/net v0.41.0 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.26.0 // indirect + golang.org/x/time v0.3.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/gofr/datasource/influxdb/go.sum b/pkg/gofr/datasource/influxdb/go.sum index a2791b1a9..15fe360fb 100644 --- a/pkg/gofr/datasource/influxdb/go.sum +++ b/pkg/gofr/datasource/influxdb/go.sum @@ -1,8 +1,24 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= +github.com/CloudyKit/jet/v6 v6.2.0 h1:EpcZ6SR9n28BUGtNJSvlBqf90IpjeFr36Tizxhn/oME= +github.com/CloudyKit/jet/v6 v6.2.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= +github.com/Joker/jade v1.1.3 h1:Qbeh12Vq6BxURXT1qZBRHsDxeURB8ztcL6f3EXSGeHk= +github.com/Joker/jade v1.1.3/go.mod h1:T+2WLyt7VH6Lp0TRxQrUYEs64nRc83wkMQrfeIQKduM= github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= +github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06 h1:KkH3I3sJuOLP3TjA/dfr4NAY8bghDwnXiU7cTKxQqo0= +github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= +github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= +github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= +github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= @@ -14,11 +30,19 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/flosch/pongo2/v4 v4.0.2 h1:gv+5Pe3vaSVmiJvh/BZa82b7/00YUGm0PIyVVLop0Hw= +github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/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/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= @@ -35,6 +59,10 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomarkdown/markdown v0.0.0-20230716120725-531d2d74bc12 h1:uK3X/2mt4tbSGoHvbLBHUny7CKiuwUip3MArtukol4E= +github.com/gomarkdown/markdown v0.0.0-20230716120725-531d2d74bc12/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -43,29 +71,112 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/influxdata/influxdb-client-go/v2 v2.14.0 h1:AjbBfJuq+QoaXNcrova8smSjwJdUHnwvfjMF71M1iI4= github.com/influxdata/influxdb-client-go/v2 v2.14.0/go.mod h1:Ahpm3QXKMJslpXl3IftVLVezreAUtBOTZssDrjZEFHI= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/iris-contrib/httpexpect/v2 v2.15.1 h1:G2/TW0EZ5UhNNdljNDBBQDfdfumLlV6ljRqdTk3cAmc= +github.com/iris-contrib/httpexpect/v2 v2.15.1/go.mod h1:cUwf1Mm5CWs5ahZNHtDq82WuGOitAWBg/eMGevX9ilg= +github.com/iris-contrib/schema v0.0.6 h1:CPSBLyx2e91H2yJzPuhGuifVRnZBBJ3pCOMbOvPZaTw= +github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= +github.com/kataras/blocks v0.0.7 h1:cF3RDY/vxnSRezc7vLFlQFTYXG/yAr1o7WImJuZbzC4= +github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= +github.com/kataras/golog v0.1.9 h1:vLvSDpP7kihFGKFAvBSofYo7qZNULYSHOH2D7rPTKJk= +github.com/kataras/golog v0.1.9/go.mod h1:jlpk/bOaYCyqDqH18pgDHdaJab72yBE6i0O3s30hpWY= +github.com/kataras/iris/v12 v12.2.5 h1:R5UzUW4MIByBM6tKMG3UqJ7hL1JCEE+dkqQ8L72f6PU= +github.com/kataras/iris/v12 v12.2.5/go.mod h1:bf3oblPF8tQmRgyPCzPZr0mLazvEDFgImdaGZYuN4hw= +github.com/kataras/pio v0.0.12 h1:o52SfVYauS3J5X08fNjlGS5arXHjW/ItLkyLcKjoH6w= +github.com/kataras/pio v0.0.12/go.mod h1:ODK/8XBhhQ5WqrAhKy+9lTPS7sBf6O3KcLhc9klfRcY= +github.com/kataras/sitemap v0.0.6 h1:w71CRMMKYMJh6LR2wTgnk5hSgjVNB9KL60n5e2KHvLY= +github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= +github.com/kataras/tunnel v0.0.4 h1:sCAqWuJV7nPzGrlb0os3j49lk2JhILT0rID38NHNLpA= +github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailgun/raymond/v2 v2.0.48 h1:5dmlB680ZkFG2RN/0lvTAghrSxIESeu9/2aeDqACtjw= +github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/microcosm-cc/bluemonday v1.0.25 h1:4NEwSfiJ+Wva0VxN5B8OwMicaJvD8r9tlJWm9rtloEg= +github.com/microcosm-cc/bluemonday v1.0.25/go.mod h1:ZIOjCQp1OrzBBPIJmfX4qDYFuhU02nx4bn030ixfHLE= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/oapi-codegen/runtime v1.0.0 h1:P4rqFX5fMFWqRzY9M/3YF9+aPSPPB06IzP2P7oOxrWo= github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo= +github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= +github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk= +github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tdewolff/minify/v2 v2.12.8 h1:Q2BqOTmlMjoutkuD/OPCnJUpIqrzT3nRPkw+q+KpXS0= +github.com/tdewolff/minify/v2 v2.12.8/go.mod h1:YRgk7CC21LZnbuke2fmYnCTq+zhCgpb0yJACOTUNJ1E= +github.com/tdewolff/parse/v2 v2.6.7 h1:WrFllrqmzAcrKHzoYgMupqgUBIfBVOb0yscFzDf8bBg= +github.com/tdewolff/parse/v2 v2.6.7/go.mod h1:XHDhaU6IBgsryfdnpzUXBlT6leW/l25yrFBTEb4eIyM= +github.com/tdewolff/test v1.0.9 h1:SswqJCmeN4B+9gEAi/5uqT0qpi1y2/2O47V/1hhGZT0= +github.com/tdewolff/test v1.0.9/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY= +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= +github.com/yosssi/ace v0.0.5 h1:tUkIP/BLdKqrlrPwcmH0shwEEhTRHoGnc1wFIWmaBUA= +github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= +github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3IfnEUduWvb9is428/nNb5L3U01M= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= @@ -77,11 +188,11 @@ go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/Wgbsd go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= -go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= -go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -109,9 +220,15 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -142,9 +259,17 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +moul.io/http2curl/v2 v2.3.0 h1:9r3JfDzWPcbIklMOs2TnIFzDYvfAZvjeavG6EzP7jYs= +moul.io/http2curl/v2 v2.3.0/go.mod h1:RW4hyBjTWSYDOxapodpNEtX0g5Eb16sxklBqmd2RHcE= diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 10e02a6cf..4385edb2d 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -17,10 +17,17 @@ type Config struct { Password string } +type influx struct { + client client + organization organization + bucket bucket + query query +} + // Client represents the InfluxDB client. type Client struct { + influx influx config Config - client InfluxClient logger Logger metrics Metrics tracer trace.Tracer @@ -62,9 +69,7 @@ func (c *Client) CreateOrganization(ctx context.Context, orgName string) (string return "", errEmptyOrganizationName } - orgAPI := c.client.OrganizationsAPI() - newOrg, err := orgAPI.CreateOrganizationWithName(ctx, orgName) - + newOrg, err := c.influx.organization.CreateOrganizationWithName(ctx, orgName) if err != nil { c.logger.Errorf("failed to create new organization with name '%v' %v", orgName, err) return "", err @@ -89,9 +94,7 @@ func (c *Client) DeleteOrganization(ctx context.Context, orgID string) error { return errEmptyOrganizationID } - orgAPI := c.client.OrganizationsAPI() - - err := orgAPI.DeleteOrganizationWithID(ctx, orgID) + err := c.influx.organization.DeleteOrganizationWithID(ctx, orgID) if err != nil { return err } @@ -109,9 +112,7 @@ func (c *Client) DeleteOrganization(ctx context.Context, orgID string) error { // - orgs: A map of organization IDs to their corresponding names. // - err: Error if the API call fails or the organizations cannot be retrieved. func (c *Client) ListOrganization(ctx context.Context) (map[string]string, error) { - orgAPI := c.client.OrganizationsAPI() - - allOrg, err := orgAPI.GetOrganizations(ctx) + allOrg, err := c.influx.organization.GetOrganizations(ctx) if err != nil { return nil, errFetchOrganization } @@ -149,9 +150,7 @@ func (c *Client) CreateBucket(ctx context.Context, orgID, bucketName string) (bu return "", errEmptyBucketName } - bucketsAPI := c.client.BucketsAPI() - - newBucket, err := bucketsAPI.CreateBucketWithNameWithID(ctx, orgID, bucketName) + newBucket, err := c.influx.bucket.CreateBucketWithNameWithID(ctx, orgID, bucketName) if err != nil { return "", err } @@ -172,10 +171,10 @@ func (c *Client) DeleteBucket(ctx context.Context, bucketID string) error { return errEmptyBucketID } - bucketsAPI := c.client.BucketsAPI() - if err := bucketsAPI.DeleteBucketWithID(ctx, bucketID); err != nil { - return err - } + // bucketsAPI := c.client.BucketsAPI() + // if err := bucketsAPI.DeleteBucketWithID(ctx, bucketID); err != nil { + // return err + // } return nil } @@ -199,7 +198,7 @@ func (c *Client) HealthCheck(ctx context.Context) (any, error) { h.Details["Username"] = c.config.Username h.Details["Url"] = c.config.URL - health, err := c.client.Health(ctx) + health, err := c.influx.client.Health(ctx) if err != nil { h.Status = statusDown h.Details["error"] = err.Error() @@ -236,20 +235,20 @@ func (c *Client) ListBuckets(ctx context.Context, org string) (buckets map[strin return nil, errEmptyOrganizationName } - bucketsAPI := c.client.BucketsAPI() + // bucketsAPI := c.client.BucketsAPI() - bucketsDomain, err := bucketsAPI.FindBucketsByOrgName(ctx, org) - if err != nil { - return nil, err - } + // bucketsDomain, err := bucketsAPI.FindBucketsByOrgName(ctx, org) + // if err != nil { + // return nil, err + // } - buckets = make(map[string]string) // Initialize the map + // buckets = make(map[string]string) // Initialize the map - for _, bucket := range *bucketsDomain { - if bucket.Name != "" { - buckets[*bucket.Id] = bucket.Name - } - } + // for _, bucket := range *bucketsDomain { + // if bucket.Name != "" { + // buckets[*bucket.Id] = bucket.Name + // } + // } return buckets, nil } @@ -264,7 +263,7 @@ func (c *Client) ListBuckets(ctx context.Context, org string) (buckets map[strin // - bool: True if the InfluxDB server is reachable; false otherwise. // - err: Error if the ping request fails. func (c *Client) Ping(ctx context.Context) (bool, error) { - ping, err := c.client.Ping(ctx) + ping, err := c.influx.client.Ping(ctx) if err != nil { c.logger.Errorf("%v", err) return false, err @@ -274,9 +273,7 @@ func (c *Client) Ping(ctx context.Context) (bool, error) { } func (c *Client) Query(ctx context.Context, org, fluxQuery string) ([]map[string]any, error) { - queryAPI := c.client.QueryAPI(org) - - result, err := queryAPI.Query(ctx, fluxQuery) + result, err := c.influx.query.Query(ctx, fluxQuery) if err != nil { c.logger.Errorf("InfluxDB Flux Query '%v' failed: %v", fluxQuery, err.Error()) return nil, err @@ -329,14 +326,12 @@ func (c *Client) WritePoint(ctx context.Context, org, bucket, measurement string, tags map[string]string, fields map[string]any, timestamp time.Time, ) error { - p := influxdb2.NewPoint(measurement, tags, fields, timestamp) - writeAPI := c.client.WriteAPIBlocking(org, bucket) - - if err := writeAPI.WritePoint(ctx, p); err != nil { - c.logger.Errorf("Failed to write point to influxdb: %v", err.Error()) - return err - } - + // p := influxdb2.NewPoint(measurement, tags, fields, timestamp) + // writeAPI := c.client.WriteAPIBlocking(org, bucket) + // if err := writeAPI.WritePoint(ctx, p); err != nil { + // c.logger.Errorf("Failed to write point to influxdb: %v", err.Error()) + // return err + // } return nil } @@ -353,14 +348,17 @@ func New(config Config) *Client { // If the health check fails, it logs an error and exits early without returning an error. // No parameters or return values. func (c *Client) Connect() { - c.logger.Debugf("connecting to influxdb at %v", c.config.URL) + c.logger.Logf("connecting to influxdb at %v", c.config.URL) // Create a new client using an InfluxDB server base URL and an authentication token - c.client = influxdb2.NewClient( + c.influx.client = influxdb2.NewClient( c.config.URL, c.config.Token, ) + c.influx.organization = NewInfluxdbOrganizationAPI(c.influx.client.OrganizationsAPI()) + c.influx.bucket = NewInfluxdbBucketAPI(c.influx.client.BucketsAPI()) + if _, err := c.HealthCheck(context.Background()); err != nil { c.logger.Errorf("InfluxDB health check failed: %v", err.Error()) return diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index a1b2a937f..f2ef8a40c 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -1,24 +1,28 @@ package influxdb import ( + "errors" "testing" gomock "github.com/golang/mock/gomock" - api "github.com/influxdata/influxdb-client-go/v2/api" "github.com/influxdata/influxdb-client-go/v2/domain" - "github.com/kataras/iris/v12/x/errors" "github.com/stretchr/testify/require" "go.opentelemetry.io/otel" influxdb_mock "gofr.dev/pkg/gofr/datasource/influxdb/mocks" ) +var ( + errInvalidOrgID = errors.New("invalid organization id") + errFailedCreatingOrg = errors.New("failed to create new organization") + errPingFailed = errors.New("failed to ping") +) + func setupDB(t *testing.T, ctrl *gomock.Controller) *Client { t.Helper() mockLogger := NewMockLogger(ctrl) mockMetrics := NewMockMetrics(ctrl) - mockInfluxClient := influxdb_mock.NewMockInfluxClient(ctrl) config := Config{ URL: "http://localhost:8086", @@ -38,7 +42,7 @@ func setupDB(t *testing.T, ctrl *gomock.Controller) *Client { mockLogger.EXPECT().Errorf(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes() // Replace the client with our mocked version - client.client = mockInfluxClient + client.influx.client = influxdb_mock.NewMockclient(ctrl) return client } @@ -50,7 +54,7 @@ func Test_HealthCheckSuccess(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.client.(*influxdb_mock.MockInfluxClient) + mockInflux := client.influx.client.(*influxdb_mock.Mockclient) expectedHealth := &domain.HealthCheck{Status: "pass"} mockInflux.EXPECT(). @@ -69,12 +73,12 @@ func Test_HealthCheckFail(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.client.(*influxdb_mock.MockInfluxClient) + mockInflux := client.influx.client.(*influxdb_mock.Mockclient) expectedHealth := &domain.HealthCheck{Status: "fail"} mockInflux.EXPECT(). Health(gomock.Any()). - Return(expectedHealth, errors.New("No influxdb found")). + Return(expectedHealth, errEmptyBucketID). Times(1) _, err := client.HealthCheck(t.Context()) @@ -88,7 +92,7 @@ func Test_PingSuccess(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.client.(*influxdb_mock.MockInfluxClient) + mockInflux := client.influx.client.(*influxdb_mock.Mockclient) mockInflux.EXPECT(). Ping(gomock.Any()). @@ -108,11 +112,11 @@ func Test_PingFailed(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.client.(*influxdb_mock.MockInfluxClient) + mockInflux := client.influx.client.(*influxdb_mock.Mockclient) mockInflux.EXPECT(). Ping(gomock.Any()). - Return(false, errors.New("Something Unexptected")). + Return(false, errPingFailed). Times(1) health, err := client.Ping(t.Context()) @@ -157,21 +161,17 @@ func Test_CreateOrganization(t *testing.T) { orgName: "testOrg", resp: &domain.Organization{}, expectErr: true, - err: errors.New("failed to create new organization"), + err: errFailedCreatingOrg, }, } for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { client := *setupDB(t, ctrl) - mockInflux := client.client.(*influxdb_mock.MockInfluxClient) - mockInfluxOrgAPI := influxdb_mock.NewMockInfluxOrganizationsAPI(ctrl) + mockOrganization := influxdb_mock.NewMockorganization(ctrl) - mockInflux.EXPECT().OrganizationsAPI(). - Return(mockInfluxOrgAPI). - AnyTimes() - - mockInfluxOrgAPI.EXPECT(). + client.influx.organization = mockOrganization + mockOrganization.EXPECT(). CreateOrganizationWithName(gomock.Any(), tt.orgName). Return(tt.resp, tt.err). AnyTimes() @@ -219,21 +219,17 @@ func Test_DeleteOrganization(t *testing.T) { name: "delete invalid organization with id", orgID: dummyID, expectErr: true, - err: errors.New("invalid organization id"), + err: errInvalidOrgID, }, } for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { client := *setupDB(t, ctrl) - mockInflux := client.client.(*influxdb_mock.MockInfluxClient) - mockInfluxOrgAPI := influxdb_mock.NewMockInfluxOrganizationsAPI(ctrl) - - mockInflux.EXPECT().OrganizationsAPI(). - Return(mockInfluxOrgAPI). - AnyTimes() + mockOrganization := influxdb_mock.NewMockorganization(ctrl) + client.influx.organization = mockOrganization - mockInfluxOrgAPI.EXPECT(). + mockOrganization.EXPECT(). DeleteOrganizationWithID(gomock.Any(), tt.orgID). Return(tt.err). AnyTimes() @@ -257,14 +253,14 @@ func Test_ListOrganization(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.client.(*influxdb_mock.MockInfluxClient) - mockInfluxOrgAPI := influxdb_mock.NewMockInfluxOrganizationsAPI(ctrl) + mockOrganization := influxdb_mock.NewMockorganization(ctrl) + client.influx.organization = mockOrganization t.Run("test zero organization", func(t *testing.T) { allOrgs := []domain.Organization{} - mockInflux.EXPECT().OrganizationsAPI().Return(mockInfluxOrgAPI).Times(1) - mockInfluxOrgAPI.EXPECT(). + // mockInflux.EXPECT().OrganizationsAPI().Return(mockOrganization).Times(1) + mockOrganization.EXPECT(). GetOrganizations(gomock.Any()). Return(&allOrgs, nil). Times(1) @@ -277,8 +273,7 @@ func Test_ListOrganization(t *testing.T) { t.Run("testing error in fetching organization", func(t *testing.T) { allOrgs := &[]domain.Organization{} - mockInflux.EXPECT().OrganizationsAPI().Return(mockInfluxOrgAPI).Times(1) - mockInfluxOrgAPI.EXPECT(). + mockOrganization.EXPECT(). GetOrganizations(gomock.Any()). Return(allOrgs, errFetchOrganization). Times(1) @@ -300,8 +295,7 @@ func Test_ListOrganization(t *testing.T) { wantOrg := map[string]string{id1: name1, id2: name2} - mockInflux.EXPECT().OrganizationsAPI().Return(mockInfluxOrgAPI).Times(1) - mockInfluxOrgAPI.EXPECT(). + mockOrganization.EXPECT(). GetOrganizations(gomock.Any()). Return(allOrg, nil). Times(1) @@ -321,262 +315,262 @@ func Test_ListOrganization(t *testing.T) { }) } -func Test_CreateBucket(t *testing.T) { - t.Helper() - - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - dummyID := "id1" - dummyOrgID := "org123" - dummyBucketName := "bucket123" - - testCases := []struct { - name string - orgID string - bucketName string - respBucket *domain.Bucket - wantBucketID string - expectErr bool - err error - }{ - { - name: "try creating bucket with empty organization id", - orgID: "", - bucketName: dummyBucketName, - expectErr: true, - respBucket: nil, - wantBucketID: "", - err: errEmptyOrganizationID, - }, - { - name: "try creating bucket with empty bucket name", - orgID: dummyOrgID, - bucketName: "", - expectErr: true, - respBucket: nil, - wantBucketID: "", - err: errEmptyBucketName, - }, - { - name: "successfully creating a new bucket", - orgID: dummyOrgID, - bucketName: dummyBucketName, - expectErr: false, - respBucket: &domain.Bucket{Id: &dummyID}, - wantBucketID: dummyID, - err: nil, - }, - } - - for _, tt := range testCases { - t.Run(tt.name, func(t *testing.T) { - client := *setupDB(t, ctrl) - mockInflux := client.client.(*influxdb_mock.MockInfluxClient) - mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) - - mockInflux.EXPECT().BucketsAPI(). - Return(mockInfluxBucketAPI). - AnyTimes() - - mockInfluxBucketAPI.EXPECT(). - CreateBucketWithNameWithID(gomock.Any(), tt.orgID, tt.bucketName). - Return(tt.respBucket, tt.err). - AnyTimes() - - bucketID, err := client.CreateBucket(t.Context(), tt.orgID, tt.bucketName) - - if tt.expectErr { - require.Error(t, err) - require.Equal(t, err, tt.err) - } else { - require.Equal(t, tt.wantBucketID, bucketID) - require.NoError(t, err) - } - }) - } -} - -func Test_DeleteBucket(t *testing.T) { - t.Helper() - - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - dummyID := "id1" - - testCases := []struct { - name string - orgID string - bucketID string - expectErr bool - err error - }{ - { - name: "try deleting bucket with empty bucket id", - orgID: "", - bucketID: "", - expectErr: true, - err: errEmptyBucketID, - }, - { - name: "successfully deleting a new bucket", - orgID: "", - bucketID: dummyID, - expectErr: false, - err: nil, - }, - } - - for _, tt := range testCases { - t.Run(tt.name, func(t *testing.T) { - client := *setupDB(t, ctrl) - mockInflux := client.client.(*influxdb_mock.MockInfluxClient) - mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) - - mockInflux.EXPECT().BucketsAPI(). - Return(mockInfluxBucketAPI). - AnyTimes() - - mockInfluxBucketAPI.EXPECT(). - DeleteBucketWithID(gomock.Any(), tt.bucketID). - Return(tt.err). - AnyTimes() - - err := client.DeleteBucket(t.Context(), tt.bucketID) - - if tt.expectErr { - require.Error(t, err) - require.Equal(t, err, tt.err) - } else { - require.NoError(t, err) - } - }) - } -} - -func Test_ListBucket(t *testing.T) { - t.Helper() - - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - dummyOrgName := "orgName" - id1, name1 := "id1", "name1" - id2, name2 := "id1", "name1" - - testCases := []struct { - name string - orgName string - resp *[]domain.Bucket - wantBuckets map[string]string - expectErr bool - err error - }{ - { - name: "try list bucket with empty organization name", - orgName: "", - expectErr: true, - wantBuckets: nil, - resp: &[]domain.Bucket{}, - err: errEmptyOrganizationName, - }, - - { - name: "success list organizations", - orgName: dummyOrgName, - resp: &[]domain.Bucket{ - {Id: &id1, Name: name1}, - {Id: &id2, Name: name2}, - }, - wantBuckets: map[string]string{ - id1: name1, - id2: name2, - }, - expectErr: false, - err: nil, - }, - } - - for _, tt := range testCases { - t.Run(tt.name, func(t *testing.T) { - client := *setupDB(t, ctrl) - mockInflux := client.client.(*influxdb_mock.MockInfluxClient) - mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) - - mockInflux.EXPECT().BucketsAPI(). - Return(mockInfluxBucketAPI). - AnyTimes() - - mockInfluxBucketAPI.EXPECT(). - FindBucketsByOrgName(gomock.Any(), tt.orgName). - Return(tt.resp, tt.err). - AnyTimes() - - buckets, err := client.ListBuckets(t.Context(), tt.orgName) - - if tt.expectErr { - require.Error(t, err) - require.Equal(t, err, tt.err) - } else { - require.NoError(t, err) - require.NotEmpty(t, buckets) - require.Equal(t, tt.wantBuckets, buckets) - } - }) - } -} - -func Test_Query(t *testing.T) { - t.Helper() - - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - testCases := []struct { - name string - resp *api.QueryTableResult - wantResults map[string]any - orgName string - inputQuery string - expectErr bool - err error - }{ - { - name: "failing error query", - orgName: "org1", - inputQuery: "dummyQuery1", - expectErr: true, - wantResults: map[string]any{}, - resp: &api.QueryTableResult{}, - err: errors.New("Something"), - }, - } - - for _, tt := range testCases { - t.Run(tt.name, func(t *testing.T) { - client := *setupDB(t, ctrl) - mockInflux := client.client.(*influxdb_mock.MockInfluxClient) - mockInfluxQueryAPI := influxdb_mock.NewMockInfluxQueryAPI(ctrl) - - mockInflux.EXPECT().QueryAPI(tt.orgName). - Return(mockInfluxQueryAPI). - AnyTimes() - - mockInfluxQueryAPI.EXPECT(). - Query(gomock.Any(), tt.inputQuery). - Return(tt.resp, tt.err). - AnyTimes() - - result, err := client.Query(t.Context(), tt.orgName, tt.inputQuery) - - if tt.expectErr { - require.Error(t, err) - require.Equal(t, err, tt.err) - require.Empty(t, result) - } else { - require.NoError(t, err) - } - }) - } -} +// func Test_CreateBucket(t *testing.T) { +// t.Helper() + +// ctrl := gomock.NewController(t) +// defer ctrl.Finish() + +// dummyID := "id1" +// dummyOrgID := "org123" +// dummyBucketName := "bucket123" + +// testCases := []struct { +// name string +// orgID string +// bucketName string +// respBucket *domain.Bucket +// wantBucketID string +// expectErr bool +// err error +// }{ +// { +// name: "try creating bucket with empty organization id", +// orgID: "", +// bucketName: dummyBucketName, +// expectErr: true, +// respBucket: nil, +// wantBucketID: "", +// err: errEmptyOrganizationID, +// }, +// { +// name: "try creating bucket with empty bucket name", +// orgID: dummyOrgID, +// bucketName: "", +// expectErr: true, +// respBucket: nil, +// wantBucketID: "", +// err: errEmptyBucketName, +// }, +// { +// name: "successfully creating a new bucket", +// orgID: dummyOrgID, +// bucketName: dummyBucketName, +// expectErr: false, +// respBucket: &domain.Bucket{Id: &dummyID}, +// wantBucketID: dummyID, +// err: nil, +// }, +// } + +// for _, tt := range testCases { +// t.Run(tt.name, func(t *testing.T) { +// client := *setupDB(t, ctrl) +// mockInflux := client.client.(*influxdb_mock.MockInfluxClient) +// mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) + +// mockInflux.EXPECT().BucketsAPI(). +// Return(mockInfluxBucketAPI). +// AnyTimes() + +// mockInfluxBucketAPI.EXPECT(). +// CreateBucketWithNameWithID(gomock.Any(), tt.orgID, tt.bucketName). +// Return(tt.respBucket, tt.err). +// AnyTimes() + +// bucketID, err := client.CreateBucket(t.Context(), tt.orgID, tt.bucketName) + +// if tt.expectErr { +// require.Error(t, err) +// require.Equal(t, err, tt.err) +// } else { +// require.Equal(t, tt.wantBucketID, bucketID) +// require.NoError(t, err) +// } +// }) +// } +// } + +// func Test_DeleteBucket(t *testing.T) { +// t.Helper() + +// ctrl := gomock.NewController(t) +// defer ctrl.Finish() + +// dummyID := "id1" + +// testCases := []struct { +// name string +// orgID string +// bucketID string +// expectErr bool +// err error +// }{ +// { +// name: "try deleting bucket with empty bucket id", +// orgID: "", +// bucketID: "", +// expectErr: true, +// err: errEmptyBucketID, +// }, +// { +// name: "successfully deleting a new bucket", +// orgID: "", +// bucketID: dummyID, +// expectErr: false, +// err: nil, +// }, +// } + +// for _, tt := range testCases { +// t.Run(tt.name, func(t *testing.T) { +// client := *setupDB(t, ctrl) +// mockInflux := client.client.(*influxdb_mock.MockInfluxClient) +// mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) + +// mockInflux.EXPECT().BucketsAPI(). +// Return(mockInfluxBucketAPI). +// AnyTimes() + +// mockInfluxBucketAPI.EXPECT(). +// DeleteBucketWithID(gomock.Any(), tt.bucketID). +// Return(tt.err). +// AnyTimes() + +// err := client.DeleteBucket(t.Context(), tt.bucketID) + +// if tt.expectErr { +// require.Error(t, err) +// require.Equal(t, err, tt.err) +// } else { +// require.NoError(t, err) +// } +// }) +// } +// } + +// func Test_ListBucket(t *testing.T) { +// t.Helper() + +// ctrl := gomock.NewController(t) +// defer ctrl.Finish() + +// dummyOrgName := "orgName" +// id1, name1 := "id1", "name1" +// id2, name2 := "id1", "name1" + +// testCases := []struct { +// name string +// orgName string +// resp *[]domain.Bucket +// wantBuckets map[string]string +// expectErr bool +// err error +// }{ +// { +// name: "try list bucket with empty organization name", +// orgName: "", +// expectErr: true, +// wantBuckets: nil, +// resp: &[]domain.Bucket{}, +// err: errEmptyOrganizationName, +// }, + +// { +// name: "success list organizations", +// orgName: dummyOrgName, +// resp: &[]domain.Bucket{ +// {Id: &id1, Name: name1}, +// {Id: &id2, Name: name2}, +// }, +// wantBuckets: map[string]string{ +// id1: name1, +// id2: name2, +// }, +// expectErr: false, +// err: nil, +// }, +// } + +// for _, tt := range testCases { +// t.Run(tt.name, func(t *testing.T) { +// client := *setupDB(t, ctrl) +// mockInflux := client.client.(*influxdb_mock.MockInfluxClient) +// mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) + +// mockInflux.EXPECT().BucketsAPI(). +// Return(mockInfluxBucketAPI). +// AnyTimes() + +// mockInfluxBucketAPI.EXPECT(). +// FindBucketsByOrgName(gomock.Any(), tt.orgName). +// Return(tt.resp, tt.err). +// AnyTimes() + +// buckets, err := client.ListBuckets(t.Context(), tt.orgName) + +// if tt.expectErr { +// require.Error(t, err) +// require.Equal(t, err, tt.err) +// } else { +// require.NoError(t, err) +// require.NotEmpty(t, buckets) +// require.Equal(t, tt.wantBuckets, buckets) +// } +// }) +// } +// } + +// func Test_Query(t *testing.T) { +// t.Helper() + +// ctrl := gomock.NewController(t) +// defer ctrl.Finish() + +// testCases := []struct { +// name string +// resp *api.QueryTableResult +// wantResults map[string]any +// orgName string +// inputQuery string +// expectErr bool +// err error +// }{ +// { +// name: "failing error query", +// orgName: "org1", +// inputQuery: "dummyQuery1", +// expectErr: true, +// wantResults: map[string]any{}, +// resp: &api.QueryTableResult{}, +// err: errors.New("Something"), +// }, +// } + +// for _, tt := range testCases { +// t.Run(tt.name, func(t *testing.T) { +// client := *setupDB(t, ctrl) +// mockInflux := client.client.(*influxdb_mock.MockInfluxClient) +// mockInfluxQueryAPI := influxdb_mock.NewMockInfluxQueryAPI(ctrl) + +// mockInflux.EXPECT().QueryAPI(tt.orgName). +// Return(mockInfluxQueryAPI). +// AnyTimes() + +// mockInfluxQueryAPI.EXPECT(). +// Query(gomock.Any(), tt.inputQuery). +// Return(tt.resp, tt.err). +// AnyTimes() + +// result, err := client.Query(t.Context(), tt.orgName, tt.inputQuery) + +// if tt.expectErr { +// require.Error(t, err) +// require.Equal(t, err, tt.err) +// require.Empty(t, result) +// } else { +// require.NoError(t, err) +// } +// }) +// } +// } diff --git a/pkg/gofr/datasource/influxdb/interface.go b/pkg/gofr/datasource/influxdb/interface.go index 97a334698..66ac19fd2 100644 --- a/pkg/gofr/datasource/influxdb/interface.go +++ b/pkg/gofr/datasource/influxdb/interface.go @@ -8,8 +8,8 @@ import ( "github.com/influxdata/influxdb-client-go/v2/domain" ) -// InfluxClient defines the operations required to interact with an InfluxDB instance. -type InfluxClient interface { +// client defines the operations required to interact with an InfluxDB instance. +type client interface { Setup(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int) (*domain.OnboardingResponse, error) Health(ctx context.Context) (*domain.HealthCheck, error) Ping(ctx context.Context) (bool, error) @@ -22,78 +22,28 @@ type InfluxClient interface { BucketsAPI() api.BucketsAPI } -// InfluxOrganizationsAPI provides methods for managing Organizations in a InfluxDB server. -type InfluxOrganizationsAPI interface { +// organization provides methods for managing Organizations in a InfluxDB server. +type organization interface { GetOrganizations(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) FindOrganizationByName(ctx context.Context, orgName string) (*domain.Organization, error) - FindOrganizationByID(ctx context.Context, orgID string) (*domain.Organization, error) - FindOrganizationsByUserID(ctx context.Context, userID string, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) - CreateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) CreateOrganizationWithName(ctx context.Context, orgName string) (*domain.Organization, error) - UpdateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) - DeleteOrganization(ctx context.Context, org *domain.Organization) error DeleteOrganizationWithID(ctx context.Context, orgID string) error - GetMembers(ctx context.Context, org *domain.Organization) (*[]domain.ResourceMember, error) - GetMembersWithID(ctx context.Context, orgID string) (*[]domain.ResourceMember, error) - AddMember(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceMember, error) - AddMemberWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceMember, error) - RemoveMember(ctx context.Context, org *domain.Organization, user *domain.User) error - RemoveMemberWithID(ctx context.Context, orgID, memberID string) error - GetOwners(ctx context.Context, org *domain.Organization) (*[]domain.ResourceOwner, error) - GetOwnersWithID(ctx context.Context, orgID string) (*[]domain.ResourceOwner, error) - AddOwner(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceOwner, error) - AddOwnerWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceOwner, error) - RemoveOwner(ctx context.Context, org *domain.Organization, user *domain.User) error - RemoveOwnerWithID(ctx context.Context, orgID, memberID string) error } -// BucketsAPI provides methods for managing Buckets in a InfluxDB server. -type BucketsAPI interface { - // GetBuckets returns all buckets. - // GetBuckets supports PagingOptions: Offset, Limit, After. Empty pagingOptions means the default paging (first 20 results). +// bucket provides methods for managing Buckets in a InfluxDB server. +type bucket interface { GetBuckets(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) - // FindBucketByName returns a bucket found using bucketName. FindBucketByName(ctx context.Context, bucketName string) (*domain.Bucket, error) - // FindBucketByID returns a bucket found using bucketID. FindBucketByID(ctx context.Context, bucketID string) (*domain.Bucket, error) - // FindBucketsByOrgID returns buckets belonging to the organization with ID orgID. - // FindBucketsByOrgID supports PagingOptions: Offset, Limit, After. Empty pagingOptions means the default paging (first 20 results). - FindBucketsByOrgID(ctx context.Context, orgID string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) - // FindBucketsByOrgName returns buckets belonging to the organization with name orgName, with the specified paging. - // Empty pagingOptions means the default paging (first 20 results). - FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) - // CreateBucket creates a new bucket. CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) - // CreateBucketWithName creates a new bucket with bucketName in organization org, with retention specified in rules. - // Empty rules means infinite retention. CreateBucketWithName( ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) - // CreateBucketWithNameWithID creates a new bucket with bucketName in organization with orgID, with retention specified in rules. - // Empty rules means infinite retention. CreateBucketWithNameWithID(ctx context.Context, orgID, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) - // UpdateBucket updates a bucket. UpdateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) - // DeleteBucket deletes a bucket. - DeleteBucket(ctx context.Context, bucket *domain.Bucket) error - // DeleteBucketWithID deletes a bucket with bucketID. DeleteBucketWithID(ctx context.Context, bucketID string) error - // GetMembers returns members of a bucket. - GetMembers(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceMember, error) - // GetMembersWithID returns members of a bucket with bucketID. - GetMembersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceMember, error) - AddMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceMember, error) - AddMemberWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceMember, error) - RemoveMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) error - RemoveMemberWithID(ctx context.Context, bucketID, memberID string) error - GetOwners(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceOwner, error) - GetOwnersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceOwner, error) - AddOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceOwner, error) - AddOwnerWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceOwner, error) - RemoveOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) error - RemoveOwnerWithID(ctx context.Context, bucketID, memberID string) error } -type InfluxQueryAPI interface { +type query interface { QueryRaw(ctx context.Context, query string, dialect *domain.Dialect) (string, error) QueryRawWithParams(ctx context.Context, query string, dialect *domain.Dialect, params any) (string, error) Query(ctx context.Context, query string) (*api.QueryTableResult, error) diff --git a/pkg/gofr/datasource/influxdb/internal.go b/pkg/gofr/datasource/influxdb/internal.go new file mode 100644 index 000000000..df88ba992 --- /dev/null +++ b/pkg/gofr/datasource/influxdb/internal.go @@ -0,0 +1,79 @@ +package influxdb + +import ( + "context" + + "github.com/influxdata/influxdb-client-go/v2/api" + "github.com/influxdata/influxdb-client-go/v2/domain" +) + +type influxdbOrganizationAPI struct { + api api.OrganizationsAPI +} + +// NewInfluxdbOrganizationAPI creates a new bucket API wrapper. +func NewInfluxdbOrganizationAPI(a api.OrganizationsAPI) organization { + return influxdbOrganizationAPI{api: a} +} + +func (a influxdbOrganizationAPI) GetOrganizations(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) { + return a.api.GetOrganizations(ctx, pagingOptions...) +} + +func (a influxdbOrganizationAPI) FindOrganizationByName(ctx context.Context, orgName string) (*domain.Organization, error) { + return a.api.FindOrganizationByName(ctx, orgName) +} + +func (a influxdbOrganizationAPI) CreateOrganizationWithName(ctx context.Context, orgName string) (*domain.Organization, error) { + return a.api.CreateOrganizationWithName(ctx, orgName) +} + +func (a influxdbOrganizationAPI) DeleteOrganizationWithID(ctx context.Context, orgID string) error { + return a.api.DeleteOrganizationWithID(ctx, orgID) +} + +// influxdbBucketAPI. +type influxdbBucketAPI struct { + api api.BucketsAPI +} + +// NewInfluxdbBucketAPI creates a new bucket API wrapper. +func NewInfluxdbBucketAPI(a api.BucketsAPI) bucket { + return &influxdbBucketAPI{api: a} +} + +func (b *influxdbBucketAPI) GetBuckets(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { + return b.api.GetBuckets(ctx, pagingOptions...) +} + +func (b *influxdbBucketAPI) FindBucketByName(ctx context.Context, bucketName string) (*domain.Bucket, error) { + return b.api.FindBucketByName(ctx, bucketName) +} + +func (b *influxdbBucketAPI) FindBucketByID(ctx context.Context, bucketID string) (*domain.Bucket, error) { + return b.api.FindBucketByID(ctx, bucketID) +} + +func (b *influxdbBucketAPI) CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { + return b.api.CreateBucket(ctx, bucket) +} + +func (b *influxdbBucketAPI) CreateBucketWithName( + ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule, +) (*domain.Bucket, error) { + return b.api.CreateBucketWithName(ctx, org, bucketName, rules...) +} + +func (b *influxdbBucketAPI) CreateBucketWithNameWithID( + ctx context.Context, orgID, bucketName string, rules ...domain.RetentionRule, +) (*domain.Bucket, error) { + return b.api.CreateBucketWithNameWithID(ctx, orgID, bucketName, rules...) +} + +func (b *influxdbBucketAPI) UpdateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { + return b.api.UpdateBucket(ctx, bucket) +} + +func (b *influxdbBucketAPI) DeleteBucketWithID(ctx context.Context, bucketID string) error { + return b.api.DeleteBucketWithID(ctx, bucketID) +} diff --git a/pkg/gofr/datasource/influxdb/mocks/mock_interface.go b/pkg/gofr/datasource/influxdb/mocks/mock_interface.go index 46644afdb..2e3a1d0c8 100644 --- a/pkg/gofr/datasource/influxdb/mocks/mock_interface.go +++ b/pkg/gofr/datasource/influxdb/mocks/mock_interface.go @@ -14,31 +14,31 @@ import ( domain "github.com/influxdata/influxdb-client-go/v2/domain" ) -// MockInfluxClient is a mock of InfluxClient interface. -type MockInfluxClient struct { +// Mockclient is a mock of client interface. +type Mockclient struct { ctrl *gomock.Controller - recorder *MockInfluxClientMockRecorder + recorder *MockclientMockRecorder } -// MockInfluxClientMockRecorder is the mock recorder for MockInfluxClient. -type MockInfluxClientMockRecorder struct { - mock *MockInfluxClient +// MockclientMockRecorder is the mock recorder for Mockclient. +type MockclientMockRecorder struct { + mock *Mockclient } -// NewMockInfluxClient creates a new mock instance. -func NewMockInfluxClient(ctrl *gomock.Controller) *MockInfluxClient { - mock := &MockInfluxClient{ctrl: ctrl} - mock.recorder = &MockInfluxClientMockRecorder{mock} +// NewMockclient creates a new mock instance. +func NewMockclient(ctrl *gomock.Controller) *Mockclient { + mock := &Mockclient{ctrl: ctrl} + mock.recorder = &MockclientMockRecorder{mock} return mock } // EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockInfluxClient) EXPECT() *MockInfluxClientMockRecorder { +func (m *Mockclient) EXPECT() *MockclientMockRecorder { return m.recorder } // AuthorizationsAPI mocks base method. -func (m *MockInfluxClient) AuthorizationsAPI() api.AuthorizationsAPI { +func (m *Mockclient) AuthorizationsAPI() api.AuthorizationsAPI { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AuthorizationsAPI") ret0, _ := ret[0].(api.AuthorizationsAPI) @@ -46,13 +46,13 @@ func (m *MockInfluxClient) AuthorizationsAPI() api.AuthorizationsAPI { } // AuthorizationsAPI indicates an expected call of AuthorizationsAPI. -func (mr *MockInfluxClientMockRecorder) AuthorizationsAPI() *gomock.Call { +func (mr *MockclientMockRecorder) AuthorizationsAPI() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthorizationsAPI", reflect.TypeOf((*MockInfluxClient)(nil).AuthorizationsAPI)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthorizationsAPI", reflect.TypeOf((*Mockclient)(nil).AuthorizationsAPI)) } // BucketsAPI mocks base method. -func (m *MockInfluxClient) BucketsAPI() api.BucketsAPI { +func (m *Mockclient) BucketsAPI() api.BucketsAPI { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "BucketsAPI") ret0, _ := ret[0].(api.BucketsAPI) @@ -60,13 +60,13 @@ func (m *MockInfluxClient) BucketsAPI() api.BucketsAPI { } // BucketsAPI indicates an expected call of BucketsAPI. -func (mr *MockInfluxClientMockRecorder) BucketsAPI() *gomock.Call { +func (mr *MockclientMockRecorder) BucketsAPI() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BucketsAPI", reflect.TypeOf((*MockInfluxClient)(nil).BucketsAPI)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BucketsAPI", reflect.TypeOf((*Mockclient)(nil).BucketsAPI)) } // DeleteAPI mocks base method. -func (m *MockInfluxClient) DeleteAPI() api.DeleteAPI { +func (m *Mockclient) DeleteAPI() api.DeleteAPI { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DeleteAPI") ret0, _ := ret[0].(api.DeleteAPI) @@ -74,13 +74,13 @@ func (m *MockInfluxClient) DeleteAPI() api.DeleteAPI { } // DeleteAPI indicates an expected call of DeleteAPI. -func (mr *MockInfluxClientMockRecorder) DeleteAPI() *gomock.Call { +func (mr *MockclientMockRecorder) DeleteAPI() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAPI", reflect.TypeOf((*MockInfluxClient)(nil).DeleteAPI)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAPI", reflect.TypeOf((*Mockclient)(nil).DeleteAPI)) } // Health mocks base method. -func (m *MockInfluxClient) Health(ctx context.Context) (*domain.HealthCheck, error) { +func (m *Mockclient) Health(ctx context.Context) (*domain.HealthCheck, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Health", ctx) ret0, _ := ret[0].(*domain.HealthCheck) @@ -89,13 +89,13 @@ func (m *MockInfluxClient) Health(ctx context.Context) (*domain.HealthCheck, err } // Health indicates an expected call of Health. -func (mr *MockInfluxClientMockRecorder) Health(ctx interface{}) *gomock.Call { +func (mr *MockclientMockRecorder) Health(ctx interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Health", reflect.TypeOf((*MockInfluxClient)(nil).Health), ctx) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Health", reflect.TypeOf((*Mockclient)(nil).Health), ctx) } // Options mocks base method. -func (m *MockInfluxClient) Options() *influxdb2.Options { +func (m *Mockclient) Options() *influxdb2.Options { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Options") ret0, _ := ret[0].(*influxdb2.Options) @@ -103,13 +103,13 @@ func (m *MockInfluxClient) Options() *influxdb2.Options { } // Options indicates an expected call of Options. -func (mr *MockInfluxClientMockRecorder) Options() *gomock.Call { +func (mr *MockclientMockRecorder) Options() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Options", reflect.TypeOf((*MockInfluxClient)(nil).Options)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Options", reflect.TypeOf((*Mockclient)(nil).Options)) } // OrganizationsAPI mocks base method. -func (m *MockInfluxClient) OrganizationsAPI() api.OrganizationsAPI { +func (m *Mockclient) OrganizationsAPI() api.OrganizationsAPI { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "OrganizationsAPI") ret0, _ := ret[0].(api.OrganizationsAPI) @@ -117,13 +117,13 @@ func (m *MockInfluxClient) OrganizationsAPI() api.OrganizationsAPI { } // OrganizationsAPI indicates an expected call of OrganizationsAPI. -func (mr *MockInfluxClientMockRecorder) OrganizationsAPI() *gomock.Call { +func (mr *MockclientMockRecorder) OrganizationsAPI() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OrganizationsAPI", reflect.TypeOf((*MockInfluxClient)(nil).OrganizationsAPI)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OrganizationsAPI", reflect.TypeOf((*Mockclient)(nil).OrganizationsAPI)) } // Ping mocks base method. -func (m *MockInfluxClient) Ping(ctx context.Context) (bool, error) { +func (m *Mockclient) Ping(ctx context.Context) (bool, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Ping", ctx) ret0, _ := ret[0].(bool) @@ -132,13 +132,13 @@ func (m *MockInfluxClient) Ping(ctx context.Context) (bool, error) { } // Ping indicates an expected call of Ping. -func (mr *MockInfluxClientMockRecorder) Ping(ctx interface{}) *gomock.Call { +func (mr *MockclientMockRecorder) Ping(ctx interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ping", reflect.TypeOf((*MockInfluxClient)(nil).Ping), ctx) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ping", reflect.TypeOf((*Mockclient)(nil).Ping), ctx) } // QueryAPI mocks base method. -func (m *MockInfluxClient) QueryAPI(org string) api.QueryAPI { +func (m *Mockclient) QueryAPI(org string) api.QueryAPI { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "QueryAPI", org) ret0, _ := ret[0].(api.QueryAPI) @@ -146,13 +146,13 @@ func (m *MockInfluxClient) QueryAPI(org string) api.QueryAPI { } // QueryAPI indicates an expected call of QueryAPI. -func (mr *MockInfluxClientMockRecorder) QueryAPI(org interface{}) *gomock.Call { +func (mr *MockclientMockRecorder) QueryAPI(org interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryAPI", reflect.TypeOf((*MockInfluxClient)(nil).QueryAPI), org) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryAPI", reflect.TypeOf((*Mockclient)(nil).QueryAPI), org) } // Setup mocks base method. -func (m *MockInfluxClient) Setup(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int) (*domain.OnboardingResponse, error) { +func (m *Mockclient) Setup(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int) (*domain.OnboardingResponse, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Setup", ctx, username, password, org, bucket, retentionPeriodHours) ret0, _ := ret[0].(*domain.OnboardingResponse) @@ -161,13 +161,13 @@ func (m *MockInfluxClient) Setup(ctx context.Context, username, password, org, b } // Setup indicates an expected call of Setup. -func (mr *MockInfluxClientMockRecorder) Setup(ctx, username, password, org, bucket, retentionPeriodHours interface{}) *gomock.Call { +func (mr *MockclientMockRecorder) Setup(ctx, username, password, org, bucket, retentionPeriodHours interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Setup", reflect.TypeOf((*MockInfluxClient)(nil).Setup), ctx, username, password, org, bucket, retentionPeriodHours) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Setup", reflect.TypeOf((*Mockclient)(nil).Setup), ctx, username, password, org, bucket, retentionPeriodHours) } // WriteAPIBlocking mocks base method. -func (m *MockInfluxClient) WriteAPIBlocking(org, bucket string) api.WriteAPIBlocking { +func (m *Mockclient) WriteAPIBlocking(org, bucket string) api.WriteAPIBlocking { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "WriteAPIBlocking", org, bucket) ret0, _ := ret[0].(api.WriteAPIBlocking) @@ -175,111 +175,36 @@ func (m *MockInfluxClient) WriteAPIBlocking(org, bucket string) api.WriteAPIBloc } // WriteAPIBlocking indicates an expected call of WriteAPIBlocking. -func (mr *MockInfluxClientMockRecorder) WriteAPIBlocking(org, bucket interface{}) *gomock.Call { +func (mr *MockclientMockRecorder) WriteAPIBlocking(org, bucket interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WriteAPIBlocking", reflect.TypeOf((*MockInfluxClient)(nil).WriteAPIBlocking), org, bucket) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WriteAPIBlocking", reflect.TypeOf((*Mockclient)(nil).WriteAPIBlocking), org, bucket) } -// MockInfluxOrganizationsAPI is a mock of InfluxOrganizationsAPI interface. -type MockInfluxOrganizationsAPI struct { +// Mockorganization is a mock of organization interface. +type Mockorganization struct { ctrl *gomock.Controller - recorder *MockInfluxOrganizationsAPIMockRecorder + recorder *MockorganizationMockRecorder } -// MockInfluxOrganizationsAPIMockRecorder is the mock recorder for MockInfluxOrganizationsAPI. -type MockInfluxOrganizationsAPIMockRecorder struct { - mock *MockInfluxOrganizationsAPI +// MockorganizationMockRecorder is the mock recorder for Mockorganization. +type MockorganizationMockRecorder struct { + mock *Mockorganization } -// NewMockInfluxOrganizationsAPI creates a new mock instance. -func NewMockInfluxOrganizationsAPI(ctrl *gomock.Controller) *MockInfluxOrganizationsAPI { - mock := &MockInfluxOrganizationsAPI{ctrl: ctrl} - mock.recorder = &MockInfluxOrganizationsAPIMockRecorder{mock} +// NewMockorganization creates a new mock instance. +func NewMockorganization(ctrl *gomock.Controller) *Mockorganization { + mock := &Mockorganization{ctrl: ctrl} + mock.recorder = &MockorganizationMockRecorder{mock} return mock } // EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockInfluxOrganizationsAPI) EXPECT() *MockInfluxOrganizationsAPIMockRecorder { +func (m *Mockorganization) EXPECT() *MockorganizationMockRecorder { return m.recorder } -// AddMember mocks base method. -func (m *MockInfluxOrganizationsAPI) AddMember(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceMember, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddMember", ctx, org, user) - ret0, _ := ret[0].(*domain.ResourceMember) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// AddMember indicates an expected call of AddMember. -func (mr *MockInfluxOrganizationsAPIMockRecorder) AddMember(ctx, org, user interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddMember", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).AddMember), ctx, org, user) -} - -// AddMemberWithID mocks base method. -func (m *MockInfluxOrganizationsAPI) AddMemberWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceMember, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddMemberWithID", ctx, orgID, memberID) - ret0, _ := ret[0].(*domain.ResourceMember) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// AddMemberWithID indicates an expected call of AddMemberWithID. -func (mr *MockInfluxOrganizationsAPIMockRecorder) AddMemberWithID(ctx, orgID, memberID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddMemberWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).AddMemberWithID), ctx, orgID, memberID) -} - -// AddOwner mocks base method. -func (m *MockInfluxOrganizationsAPI) AddOwner(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceOwner, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddOwner", ctx, org, user) - ret0, _ := ret[0].(*domain.ResourceOwner) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// AddOwner indicates an expected call of AddOwner. -func (mr *MockInfluxOrganizationsAPIMockRecorder) AddOwner(ctx, org, user interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddOwner", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).AddOwner), ctx, org, user) -} - -// AddOwnerWithID mocks base method. -func (m *MockInfluxOrganizationsAPI) AddOwnerWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceOwner, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddOwnerWithID", ctx, orgID, memberID) - ret0, _ := ret[0].(*domain.ResourceOwner) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// AddOwnerWithID indicates an expected call of AddOwnerWithID. -func (mr *MockInfluxOrganizationsAPIMockRecorder) AddOwnerWithID(ctx, orgID, memberID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddOwnerWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).AddOwnerWithID), ctx, orgID, memberID) -} - -// CreateOrganization mocks base method. -func (m *MockInfluxOrganizationsAPI) CreateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateOrganization", ctx, org) - ret0, _ := ret[0].(*domain.Organization) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// CreateOrganization indicates an expected call of CreateOrganization. -func (mr *MockInfluxOrganizationsAPIMockRecorder) CreateOrganization(ctx, org interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrganization", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).CreateOrganization), ctx, org) -} - // CreateOrganizationWithName mocks base method. -func (m *MockInfluxOrganizationsAPI) CreateOrganizationWithName(ctx context.Context, orgName string) (*domain.Organization, error) { +func (m *Mockorganization) CreateOrganizationWithName(ctx context.Context, orgName string) (*domain.Organization, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CreateOrganizationWithName", ctx, orgName) ret0, _ := ret[0].(*domain.Organization) @@ -288,27 +213,13 @@ func (m *MockInfluxOrganizationsAPI) CreateOrganizationWithName(ctx context.Cont } // CreateOrganizationWithName indicates an expected call of CreateOrganizationWithName. -func (mr *MockInfluxOrganizationsAPIMockRecorder) CreateOrganizationWithName(ctx, orgName interface{}) *gomock.Call { +func (mr *MockorganizationMockRecorder) CreateOrganizationWithName(ctx, orgName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrganizationWithName", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).CreateOrganizationWithName), ctx, orgName) -} - -// DeleteOrganization mocks base method. -func (m *MockInfluxOrganizationsAPI) DeleteOrganization(ctx context.Context, org *domain.Organization) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteOrganization", ctx, org) - ret0, _ := ret[0].(error) - return ret0 -} - -// DeleteOrganization indicates an expected call of DeleteOrganization. -func (mr *MockInfluxOrganizationsAPIMockRecorder) DeleteOrganization(ctx, org interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteOrganization", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).DeleteOrganization), ctx, org) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrganizationWithName", reflect.TypeOf((*Mockorganization)(nil).CreateOrganizationWithName), ctx, orgName) } // DeleteOrganizationWithID mocks base method. -func (m *MockInfluxOrganizationsAPI) DeleteOrganizationWithID(ctx context.Context, orgID string) error { +func (m *Mockorganization) DeleteOrganizationWithID(ctx context.Context, orgID string) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DeleteOrganizationWithID", ctx, orgID) ret0, _ := ret[0].(error) @@ -316,28 +227,13 @@ func (m *MockInfluxOrganizationsAPI) DeleteOrganizationWithID(ctx context.Contex } // DeleteOrganizationWithID indicates an expected call of DeleteOrganizationWithID. -func (mr *MockInfluxOrganizationsAPIMockRecorder) DeleteOrganizationWithID(ctx, orgID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteOrganizationWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).DeleteOrganizationWithID), ctx, orgID) -} - -// FindOrganizationByID mocks base method. -func (m *MockInfluxOrganizationsAPI) FindOrganizationByID(ctx context.Context, orgID string) (*domain.Organization, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "FindOrganizationByID", ctx, orgID) - ret0, _ := ret[0].(*domain.Organization) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// FindOrganizationByID indicates an expected call of FindOrganizationByID. -func (mr *MockInfluxOrganizationsAPIMockRecorder) FindOrganizationByID(ctx, orgID interface{}) *gomock.Call { +func (mr *MockorganizationMockRecorder) DeleteOrganizationWithID(ctx, orgID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindOrganizationByID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).FindOrganizationByID), ctx, orgID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteOrganizationWithID", reflect.TypeOf((*Mockorganization)(nil).DeleteOrganizationWithID), ctx, orgID) } // FindOrganizationByName mocks base method. -func (m *MockInfluxOrganizationsAPI) FindOrganizationByName(ctx context.Context, orgName string) (*domain.Organization, error) { +func (m *Mockorganization) FindOrganizationByName(ctx context.Context, orgName string) (*domain.Organization, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "FindOrganizationByName", ctx, orgName) ret0, _ := ret[0].(*domain.Organization) @@ -346,63 +242,13 @@ func (m *MockInfluxOrganizationsAPI) FindOrganizationByName(ctx context.Context, } // FindOrganizationByName indicates an expected call of FindOrganizationByName. -func (mr *MockInfluxOrganizationsAPIMockRecorder) FindOrganizationByName(ctx, orgName interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindOrganizationByName", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).FindOrganizationByName), ctx, orgName) -} - -// FindOrganizationsByUserID mocks base method. -func (m *MockInfluxOrganizationsAPI) FindOrganizationsByUserID(ctx context.Context, userID string, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) { - m.ctrl.T.Helper() - varargs := []interface{}{ctx, userID} - for _, a := range pagingOptions { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "FindOrganizationsByUserID", varargs...) - ret0, _ := ret[0].(*[]domain.Organization) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// FindOrganizationsByUserID indicates an expected call of FindOrganizationsByUserID. -func (mr *MockInfluxOrganizationsAPIMockRecorder) FindOrganizationsByUserID(ctx, userID interface{}, pagingOptions ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{ctx, userID}, pagingOptions...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindOrganizationsByUserID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).FindOrganizationsByUserID), varargs...) -} - -// GetMembers mocks base method. -func (m *MockInfluxOrganizationsAPI) GetMembers(ctx context.Context, org *domain.Organization) (*[]domain.ResourceMember, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetMembers", ctx, org) - ret0, _ := ret[0].(*[]domain.ResourceMember) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetMembers indicates an expected call of GetMembers. -func (mr *MockInfluxOrganizationsAPIMockRecorder) GetMembers(ctx, org interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMembers", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).GetMembers), ctx, org) -} - -// GetMembersWithID mocks base method. -func (m *MockInfluxOrganizationsAPI) GetMembersWithID(ctx context.Context, orgID string) (*[]domain.ResourceMember, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetMembersWithID", ctx, orgID) - ret0, _ := ret[0].(*[]domain.ResourceMember) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetMembersWithID indicates an expected call of GetMembersWithID. -func (mr *MockInfluxOrganizationsAPIMockRecorder) GetMembersWithID(ctx, orgID interface{}) *gomock.Call { +func (mr *MockorganizationMockRecorder) FindOrganizationByName(ctx, orgName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMembersWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).GetMembersWithID), ctx, orgID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindOrganizationByName", reflect.TypeOf((*Mockorganization)(nil).FindOrganizationByName), ctx, orgName) } // GetOrganizations mocks base method. -func (m *MockInfluxOrganizationsAPI) GetOrganizations(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) { +func (m *Mockorganization) GetOrganizations(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) { m.ctrl.T.Helper() varargs := []interface{}{ctx} for _, a := range pagingOptions { @@ -415,198 +261,37 @@ func (m *MockInfluxOrganizationsAPI) GetOrganizations(ctx context.Context, pagin } // GetOrganizations indicates an expected call of GetOrganizations. -func (mr *MockInfluxOrganizationsAPIMockRecorder) GetOrganizations(ctx interface{}, pagingOptions ...interface{}) *gomock.Call { +func (mr *MockorganizationMockRecorder) GetOrganizations(ctx interface{}, pagingOptions ...interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() varargs := append([]interface{}{ctx}, pagingOptions...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOrganizations", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).GetOrganizations), varargs...) -} - -// GetOwners mocks base method. -func (m *MockInfluxOrganizationsAPI) GetOwners(ctx context.Context, org *domain.Organization) (*[]domain.ResourceOwner, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOwners", ctx, org) - ret0, _ := ret[0].(*[]domain.ResourceOwner) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetOwners indicates an expected call of GetOwners. -func (mr *MockInfluxOrganizationsAPIMockRecorder) GetOwners(ctx, org interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOwners", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).GetOwners), ctx, org) -} - -// GetOwnersWithID mocks base method. -func (m *MockInfluxOrganizationsAPI) GetOwnersWithID(ctx context.Context, orgID string) (*[]domain.ResourceOwner, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOwnersWithID", ctx, orgID) - ret0, _ := ret[0].(*[]domain.ResourceOwner) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetOwnersWithID indicates an expected call of GetOwnersWithID. -func (mr *MockInfluxOrganizationsAPIMockRecorder) GetOwnersWithID(ctx, orgID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOwnersWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).GetOwnersWithID), ctx, orgID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOrganizations", reflect.TypeOf((*Mockorganization)(nil).GetOrganizations), varargs...) } -// RemoveMember mocks base method. -func (m *MockInfluxOrganizationsAPI) RemoveMember(ctx context.Context, org *domain.Organization, user *domain.User) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RemoveMember", ctx, org, user) - ret0, _ := ret[0].(error) - return ret0 -} - -// RemoveMember indicates an expected call of RemoveMember. -func (mr *MockInfluxOrganizationsAPIMockRecorder) RemoveMember(ctx, org, user interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveMember", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).RemoveMember), ctx, org, user) -} - -// RemoveMemberWithID mocks base method. -func (m *MockInfluxOrganizationsAPI) RemoveMemberWithID(ctx context.Context, orgID, memberID string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RemoveMemberWithID", ctx, orgID, memberID) - ret0, _ := ret[0].(error) - return ret0 -} - -// RemoveMemberWithID indicates an expected call of RemoveMemberWithID. -func (mr *MockInfluxOrganizationsAPIMockRecorder) RemoveMemberWithID(ctx, orgID, memberID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveMemberWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).RemoveMemberWithID), ctx, orgID, memberID) -} - -// RemoveOwner mocks base method. -func (m *MockInfluxOrganizationsAPI) RemoveOwner(ctx context.Context, org *domain.Organization, user *domain.User) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RemoveOwner", ctx, org, user) - ret0, _ := ret[0].(error) - return ret0 -} - -// RemoveOwner indicates an expected call of RemoveOwner. -func (mr *MockInfluxOrganizationsAPIMockRecorder) RemoveOwner(ctx, org, user interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveOwner", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).RemoveOwner), ctx, org, user) -} - -// RemoveOwnerWithID mocks base method. -func (m *MockInfluxOrganizationsAPI) RemoveOwnerWithID(ctx context.Context, orgID, memberID string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RemoveOwnerWithID", ctx, orgID, memberID) - ret0, _ := ret[0].(error) - return ret0 -} - -// RemoveOwnerWithID indicates an expected call of RemoveOwnerWithID. -func (mr *MockInfluxOrganizationsAPIMockRecorder) RemoveOwnerWithID(ctx, orgID, memberID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveOwnerWithID", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).RemoveOwnerWithID), ctx, orgID, memberID) -} - -// UpdateOrganization mocks base method. -func (m *MockInfluxOrganizationsAPI) UpdateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpdateOrganization", ctx, org) - ret0, _ := ret[0].(*domain.Organization) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// UpdateOrganization indicates an expected call of UpdateOrganization. -func (mr *MockInfluxOrganizationsAPIMockRecorder) UpdateOrganization(ctx, org interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateOrganization", reflect.TypeOf((*MockInfluxOrganizationsAPI)(nil).UpdateOrganization), ctx, org) -} - -// MockBucketsAPI is a mock of BucketsAPI interface. -type MockBucketsAPI struct { +// Mockbucket is a mock of bucket interface. +type Mockbucket struct { ctrl *gomock.Controller - recorder *MockBucketsAPIMockRecorder + recorder *MockbucketMockRecorder } -// MockBucketsAPIMockRecorder is the mock recorder for MockBucketsAPI. -type MockBucketsAPIMockRecorder struct { - mock *MockBucketsAPI +// MockbucketMockRecorder is the mock recorder for Mockbucket. +type MockbucketMockRecorder struct { + mock *Mockbucket } -// NewMockBucketsAPI creates a new mock instance. -func NewMockBucketsAPI(ctrl *gomock.Controller) *MockBucketsAPI { - mock := &MockBucketsAPI{ctrl: ctrl} - mock.recorder = &MockBucketsAPIMockRecorder{mock} +// NewMockbucket creates a new mock instance. +func NewMockbucket(ctrl *gomock.Controller) *Mockbucket { + mock := &Mockbucket{ctrl: ctrl} + mock.recorder = &MockbucketMockRecorder{mock} return mock } // EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockBucketsAPI) EXPECT() *MockBucketsAPIMockRecorder { +func (m *Mockbucket) EXPECT() *MockbucketMockRecorder { return m.recorder } -// AddMember mocks base method. -func (m *MockBucketsAPI) AddMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceMember, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddMember", ctx, bucket, user) - ret0, _ := ret[0].(*domain.ResourceMember) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// AddMember indicates an expected call of AddMember. -func (mr *MockBucketsAPIMockRecorder) AddMember(ctx, bucket, user interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddMember", reflect.TypeOf((*MockBucketsAPI)(nil).AddMember), ctx, bucket, user) -} - -// AddMemberWithID mocks base method. -func (m *MockBucketsAPI) AddMemberWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceMember, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddMemberWithID", ctx, bucketID, memberID) - ret0, _ := ret[0].(*domain.ResourceMember) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// AddMemberWithID indicates an expected call of AddMemberWithID. -func (mr *MockBucketsAPIMockRecorder) AddMemberWithID(ctx, bucketID, memberID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddMemberWithID", reflect.TypeOf((*MockBucketsAPI)(nil).AddMemberWithID), ctx, bucketID, memberID) -} - -// AddOwner mocks base method. -func (m *MockBucketsAPI) AddOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceOwner, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddOwner", ctx, bucket, user) - ret0, _ := ret[0].(*domain.ResourceOwner) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// AddOwner indicates an expected call of AddOwner. -func (mr *MockBucketsAPIMockRecorder) AddOwner(ctx, bucket, user interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddOwner", reflect.TypeOf((*MockBucketsAPI)(nil).AddOwner), ctx, bucket, user) -} - -// AddOwnerWithID mocks base method. -func (m *MockBucketsAPI) AddOwnerWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceOwner, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddOwnerWithID", ctx, bucketID, memberID) - ret0, _ := ret[0].(*domain.ResourceOwner) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// AddOwnerWithID indicates an expected call of AddOwnerWithID. -func (mr *MockBucketsAPIMockRecorder) AddOwnerWithID(ctx, bucketID, memberID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddOwnerWithID", reflect.TypeOf((*MockBucketsAPI)(nil).AddOwnerWithID), ctx, bucketID, memberID) -} - // CreateBucket mocks base method. -func (m *MockBucketsAPI) CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { +func (m *Mockbucket) CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CreateBucket", ctx, bucket) ret0, _ := ret[0].(*domain.Bucket) @@ -615,13 +300,13 @@ func (m *MockBucketsAPI) CreateBucket(ctx context.Context, bucket *domain.Bucket } // CreateBucket indicates an expected call of CreateBucket. -func (mr *MockBucketsAPIMockRecorder) CreateBucket(ctx, bucket interface{}) *gomock.Call { +func (mr *MockbucketMockRecorder) CreateBucket(ctx, bucket interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucket", reflect.TypeOf((*MockBucketsAPI)(nil).CreateBucket), ctx, bucket) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucket", reflect.TypeOf((*Mockbucket)(nil).CreateBucket), ctx, bucket) } // CreateBucketWithName mocks base method. -func (m *MockBucketsAPI) CreateBucketWithName(ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) { +func (m *Mockbucket) CreateBucketWithName(ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) { m.ctrl.T.Helper() varargs := []interface{}{ctx, org, bucketName} for _, a := range rules { @@ -634,14 +319,14 @@ func (m *MockBucketsAPI) CreateBucketWithName(ctx context.Context, org *domain.O } // CreateBucketWithName indicates an expected call of CreateBucketWithName. -func (mr *MockBucketsAPIMockRecorder) CreateBucketWithName(ctx, org, bucketName interface{}, rules ...interface{}) *gomock.Call { +func (mr *MockbucketMockRecorder) CreateBucketWithName(ctx, org, bucketName interface{}, rules ...interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() varargs := append([]interface{}{ctx, org, bucketName}, rules...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucketWithName", reflect.TypeOf((*MockBucketsAPI)(nil).CreateBucketWithName), varargs...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucketWithName", reflect.TypeOf((*Mockbucket)(nil).CreateBucketWithName), varargs...) } // CreateBucketWithNameWithID mocks base method. -func (m *MockBucketsAPI) CreateBucketWithNameWithID(ctx context.Context, orgID, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) { +func (m *Mockbucket) CreateBucketWithNameWithID(ctx context.Context, orgID, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) { m.ctrl.T.Helper() varargs := []interface{}{ctx, orgID, bucketName} for _, a := range rules { @@ -654,28 +339,14 @@ func (m *MockBucketsAPI) CreateBucketWithNameWithID(ctx context.Context, orgID, } // CreateBucketWithNameWithID indicates an expected call of CreateBucketWithNameWithID. -func (mr *MockBucketsAPIMockRecorder) CreateBucketWithNameWithID(ctx, orgID, bucketName interface{}, rules ...interface{}) *gomock.Call { +func (mr *MockbucketMockRecorder) CreateBucketWithNameWithID(ctx, orgID, bucketName interface{}, rules ...interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() varargs := append([]interface{}{ctx, orgID, bucketName}, rules...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucketWithNameWithID", reflect.TypeOf((*MockBucketsAPI)(nil).CreateBucketWithNameWithID), varargs...) -} - -// DeleteBucket mocks base method. -func (m *MockBucketsAPI) DeleteBucket(ctx context.Context, bucket *domain.Bucket) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteBucket", ctx, bucket) - ret0, _ := ret[0].(error) - return ret0 -} - -// DeleteBucket indicates an expected call of DeleteBucket. -func (mr *MockBucketsAPIMockRecorder) DeleteBucket(ctx, bucket interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBucket", reflect.TypeOf((*MockBucketsAPI)(nil).DeleteBucket), ctx, bucket) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucketWithNameWithID", reflect.TypeOf((*Mockbucket)(nil).CreateBucketWithNameWithID), varargs...) } // DeleteBucketWithID mocks base method. -func (m *MockBucketsAPI) DeleteBucketWithID(ctx context.Context, bucketID string) error { +func (m *Mockbucket) DeleteBucketWithID(ctx context.Context, bucketID string) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DeleteBucketWithID", ctx, bucketID) ret0, _ := ret[0].(error) @@ -683,13 +354,13 @@ func (m *MockBucketsAPI) DeleteBucketWithID(ctx context.Context, bucketID string } // DeleteBucketWithID indicates an expected call of DeleteBucketWithID. -func (mr *MockBucketsAPIMockRecorder) DeleteBucketWithID(ctx, bucketID interface{}) *gomock.Call { +func (mr *MockbucketMockRecorder) DeleteBucketWithID(ctx, bucketID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBucketWithID", reflect.TypeOf((*MockBucketsAPI)(nil).DeleteBucketWithID), ctx, bucketID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBucketWithID", reflect.TypeOf((*Mockbucket)(nil).DeleteBucketWithID), ctx, bucketID) } // FindBucketByID mocks base method. -func (m *MockBucketsAPI) FindBucketByID(ctx context.Context, bucketID string) (*domain.Bucket, error) { +func (m *Mockbucket) FindBucketByID(ctx context.Context, bucketID string) (*domain.Bucket, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "FindBucketByID", ctx, bucketID) ret0, _ := ret[0].(*domain.Bucket) @@ -698,13 +369,13 @@ func (m *MockBucketsAPI) FindBucketByID(ctx context.Context, bucketID string) (* } // FindBucketByID indicates an expected call of FindBucketByID. -func (mr *MockBucketsAPIMockRecorder) FindBucketByID(ctx, bucketID interface{}) *gomock.Call { +func (mr *MockbucketMockRecorder) FindBucketByID(ctx, bucketID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketByID", reflect.TypeOf((*MockBucketsAPI)(nil).FindBucketByID), ctx, bucketID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketByID", reflect.TypeOf((*Mockbucket)(nil).FindBucketByID), ctx, bucketID) } // FindBucketByName mocks base method. -func (m *MockBucketsAPI) FindBucketByName(ctx context.Context, bucketName string) (*domain.Bucket, error) { +func (m *Mockbucket) FindBucketByName(ctx context.Context, bucketName string) (*domain.Bucket, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "FindBucketByName", ctx, bucketName) ret0, _ := ret[0].(*domain.Bucket) @@ -713,53 +384,13 @@ func (m *MockBucketsAPI) FindBucketByName(ctx context.Context, bucketName string } // FindBucketByName indicates an expected call of FindBucketByName. -func (mr *MockBucketsAPIMockRecorder) FindBucketByName(ctx, bucketName interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketByName", reflect.TypeOf((*MockBucketsAPI)(nil).FindBucketByName), ctx, bucketName) -} - -// FindBucketsByOrgID mocks base method. -func (m *MockBucketsAPI) FindBucketsByOrgID(ctx context.Context, orgID string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { - m.ctrl.T.Helper() - varargs := []interface{}{ctx, orgID} - for _, a := range pagingOptions { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "FindBucketsByOrgID", varargs...) - ret0, _ := ret[0].(*[]domain.Bucket) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// FindBucketsByOrgID indicates an expected call of FindBucketsByOrgID. -func (mr *MockBucketsAPIMockRecorder) FindBucketsByOrgID(ctx, orgID interface{}, pagingOptions ...interface{}) *gomock.Call { +func (mr *MockbucketMockRecorder) FindBucketByName(ctx, bucketName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{ctx, orgID}, pagingOptions...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketsByOrgID", reflect.TypeOf((*MockBucketsAPI)(nil).FindBucketsByOrgID), varargs...) -} - -// FindBucketsByOrgName mocks base method. -func (m *MockBucketsAPI) FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { - m.ctrl.T.Helper() - varargs := []interface{}{ctx, orgName} - for _, a := range pagingOptions { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "FindBucketsByOrgName", varargs...) - ret0, _ := ret[0].(*[]domain.Bucket) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// FindBucketsByOrgName indicates an expected call of FindBucketsByOrgName. -func (mr *MockBucketsAPIMockRecorder) FindBucketsByOrgName(ctx, orgName interface{}, pagingOptions ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{ctx, orgName}, pagingOptions...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketsByOrgName", reflect.TypeOf((*MockBucketsAPI)(nil).FindBucketsByOrgName), varargs...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketByName", reflect.TypeOf((*Mockbucket)(nil).FindBucketByName), ctx, bucketName) } // GetBuckets mocks base method. -func (m *MockBucketsAPI) GetBuckets(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { +func (m *Mockbucket) GetBuckets(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { m.ctrl.T.Helper() varargs := []interface{}{ctx} for _, a := range pagingOptions { @@ -772,130 +403,14 @@ func (m *MockBucketsAPI) GetBuckets(ctx context.Context, pagingOptions ...api.Pa } // GetBuckets indicates an expected call of GetBuckets. -func (mr *MockBucketsAPIMockRecorder) GetBuckets(ctx interface{}, pagingOptions ...interface{}) *gomock.Call { +func (mr *MockbucketMockRecorder) GetBuckets(ctx interface{}, pagingOptions ...interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() varargs := append([]interface{}{ctx}, pagingOptions...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBuckets", reflect.TypeOf((*MockBucketsAPI)(nil).GetBuckets), varargs...) -} - -// GetMembers mocks base method. -func (m *MockBucketsAPI) GetMembers(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceMember, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetMembers", ctx, bucket) - ret0, _ := ret[0].(*[]domain.ResourceMember) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetMembers indicates an expected call of GetMembers. -func (mr *MockBucketsAPIMockRecorder) GetMembers(ctx, bucket interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMembers", reflect.TypeOf((*MockBucketsAPI)(nil).GetMembers), ctx, bucket) -} - -// GetMembersWithID mocks base method. -func (m *MockBucketsAPI) GetMembersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceMember, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetMembersWithID", ctx, bucketID) - ret0, _ := ret[0].(*[]domain.ResourceMember) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetMembersWithID indicates an expected call of GetMembersWithID. -func (mr *MockBucketsAPIMockRecorder) GetMembersWithID(ctx, bucketID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMembersWithID", reflect.TypeOf((*MockBucketsAPI)(nil).GetMembersWithID), ctx, bucketID) -} - -// GetOwners mocks base method. -func (m *MockBucketsAPI) GetOwners(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceOwner, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOwners", ctx, bucket) - ret0, _ := ret[0].(*[]domain.ResourceOwner) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetOwners indicates an expected call of GetOwners. -func (mr *MockBucketsAPIMockRecorder) GetOwners(ctx, bucket interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOwners", reflect.TypeOf((*MockBucketsAPI)(nil).GetOwners), ctx, bucket) -} - -// GetOwnersWithID mocks base method. -func (m *MockBucketsAPI) GetOwnersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceOwner, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOwnersWithID", ctx, bucketID) - ret0, _ := ret[0].(*[]domain.ResourceOwner) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetOwnersWithID indicates an expected call of GetOwnersWithID. -func (mr *MockBucketsAPIMockRecorder) GetOwnersWithID(ctx, bucketID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOwnersWithID", reflect.TypeOf((*MockBucketsAPI)(nil).GetOwnersWithID), ctx, bucketID) -} - -// RemoveMember mocks base method. -func (m *MockBucketsAPI) RemoveMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RemoveMember", ctx, bucket, user) - ret0, _ := ret[0].(error) - return ret0 -} - -// RemoveMember indicates an expected call of RemoveMember. -func (mr *MockBucketsAPIMockRecorder) RemoveMember(ctx, bucket, user interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveMember", reflect.TypeOf((*MockBucketsAPI)(nil).RemoveMember), ctx, bucket, user) -} - -// RemoveMemberWithID mocks base method. -func (m *MockBucketsAPI) RemoveMemberWithID(ctx context.Context, bucketID, memberID string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RemoveMemberWithID", ctx, bucketID, memberID) - ret0, _ := ret[0].(error) - return ret0 -} - -// RemoveMemberWithID indicates an expected call of RemoveMemberWithID. -func (mr *MockBucketsAPIMockRecorder) RemoveMemberWithID(ctx, bucketID, memberID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveMemberWithID", reflect.TypeOf((*MockBucketsAPI)(nil).RemoveMemberWithID), ctx, bucketID, memberID) -} - -// RemoveOwner mocks base method. -func (m *MockBucketsAPI) RemoveOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RemoveOwner", ctx, bucket, user) - ret0, _ := ret[0].(error) - return ret0 -} - -// RemoveOwner indicates an expected call of RemoveOwner. -func (mr *MockBucketsAPIMockRecorder) RemoveOwner(ctx, bucket, user interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveOwner", reflect.TypeOf((*MockBucketsAPI)(nil).RemoveOwner), ctx, bucket, user) -} - -// RemoveOwnerWithID mocks base method. -func (m *MockBucketsAPI) RemoveOwnerWithID(ctx context.Context, bucketID, memberID string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "RemoveOwnerWithID", ctx, bucketID, memberID) - ret0, _ := ret[0].(error) - return ret0 -} - -// RemoveOwnerWithID indicates an expected call of RemoveOwnerWithID. -func (mr *MockBucketsAPIMockRecorder) RemoveOwnerWithID(ctx, bucketID, memberID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveOwnerWithID", reflect.TypeOf((*MockBucketsAPI)(nil).RemoveOwnerWithID), ctx, bucketID, memberID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBuckets", reflect.TypeOf((*Mockbucket)(nil).GetBuckets), varargs...) } // UpdateBucket mocks base method. -func (m *MockBucketsAPI) UpdateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { +func (m *Mockbucket) UpdateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "UpdateBucket", ctx, bucket) ret0, _ := ret[0].(*domain.Bucket) @@ -904,36 +419,36 @@ func (m *MockBucketsAPI) UpdateBucket(ctx context.Context, bucket *domain.Bucket } // UpdateBucket indicates an expected call of UpdateBucket. -func (mr *MockBucketsAPIMockRecorder) UpdateBucket(ctx, bucket interface{}) *gomock.Call { +func (mr *MockbucketMockRecorder) UpdateBucket(ctx, bucket interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateBucket", reflect.TypeOf((*MockBucketsAPI)(nil).UpdateBucket), ctx, bucket) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateBucket", reflect.TypeOf((*Mockbucket)(nil).UpdateBucket), ctx, bucket) } -// MockInfluxQueryAPI is a mock of InfluxQueryAPI interface. -type MockInfluxQueryAPI struct { +// Mockquery is a mock of query interface. +type Mockquery struct { ctrl *gomock.Controller - recorder *MockInfluxQueryAPIMockRecorder + recorder *MockqueryMockRecorder } -// MockInfluxQueryAPIMockRecorder is the mock recorder for MockInfluxQueryAPI. -type MockInfluxQueryAPIMockRecorder struct { - mock *MockInfluxQueryAPI +// MockqueryMockRecorder is the mock recorder for Mockquery. +type MockqueryMockRecorder struct { + mock *Mockquery } -// NewMockInfluxQueryAPI creates a new mock instance. -func NewMockInfluxQueryAPI(ctrl *gomock.Controller) *MockInfluxQueryAPI { - mock := &MockInfluxQueryAPI{ctrl: ctrl} - mock.recorder = &MockInfluxQueryAPIMockRecorder{mock} +// NewMockquery creates a new mock instance. +func NewMockquery(ctrl *gomock.Controller) *Mockquery { + mock := &Mockquery{ctrl: ctrl} + mock.recorder = &MockqueryMockRecorder{mock} return mock } // EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockInfluxQueryAPI) EXPECT() *MockInfluxQueryAPIMockRecorder { +func (m *Mockquery) EXPECT() *MockqueryMockRecorder { return m.recorder } // Query mocks base method. -func (m *MockInfluxQueryAPI) Query(ctx context.Context, query string) (*api.QueryTableResult, error) { +func (m *Mockquery) Query(ctx context.Context, query string) (*api.QueryTableResult, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Query", ctx, query) ret0, _ := ret[0].(*api.QueryTableResult) @@ -942,13 +457,13 @@ func (m *MockInfluxQueryAPI) Query(ctx context.Context, query string) (*api.Quer } // Query indicates an expected call of Query. -func (mr *MockInfluxQueryAPIMockRecorder) Query(ctx, query interface{}) *gomock.Call { +func (mr *MockqueryMockRecorder) Query(ctx, query interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Query", reflect.TypeOf((*MockInfluxQueryAPI)(nil).Query), ctx, query) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Query", reflect.TypeOf((*Mockquery)(nil).Query), ctx, query) } // QueryRaw mocks base method. -func (m *MockInfluxQueryAPI) QueryRaw(ctx context.Context, query string, dialect *domain.Dialect) (string, error) { +func (m *Mockquery) QueryRaw(ctx context.Context, query string, dialect *domain.Dialect) (string, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "QueryRaw", ctx, query, dialect) ret0, _ := ret[0].(string) @@ -957,13 +472,13 @@ func (m *MockInfluxQueryAPI) QueryRaw(ctx context.Context, query string, dialect } // QueryRaw indicates an expected call of QueryRaw. -func (mr *MockInfluxQueryAPIMockRecorder) QueryRaw(ctx, query, dialect interface{}) *gomock.Call { +func (mr *MockqueryMockRecorder) QueryRaw(ctx, query, dialect interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryRaw", reflect.TypeOf((*MockInfluxQueryAPI)(nil).QueryRaw), ctx, query, dialect) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryRaw", reflect.TypeOf((*Mockquery)(nil).QueryRaw), ctx, query, dialect) } // QueryRawWithParams mocks base method. -func (m *MockInfluxQueryAPI) QueryRawWithParams(ctx context.Context, query string, dialect *domain.Dialect, params any) (string, error) { +func (m *Mockquery) QueryRawWithParams(ctx context.Context, query string, dialect *domain.Dialect, params any) (string, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "QueryRawWithParams", ctx, query, dialect, params) ret0, _ := ret[0].(string) @@ -972,13 +487,13 @@ func (m *MockInfluxQueryAPI) QueryRawWithParams(ctx context.Context, query strin } // QueryRawWithParams indicates an expected call of QueryRawWithParams. -func (mr *MockInfluxQueryAPIMockRecorder) QueryRawWithParams(ctx, query, dialect, params interface{}) *gomock.Call { +func (mr *MockqueryMockRecorder) QueryRawWithParams(ctx, query, dialect, params interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryRawWithParams", reflect.TypeOf((*MockInfluxQueryAPI)(nil).QueryRawWithParams), ctx, query, dialect, params) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryRawWithParams", reflect.TypeOf((*Mockquery)(nil).QueryRawWithParams), ctx, query, dialect, params) } // QueryWithParams mocks base method. -func (m *MockInfluxQueryAPI) QueryWithParams(ctx context.Context, query string, params any) (*api.QueryTableResult, error) { +func (m *Mockquery) QueryWithParams(ctx context.Context, query string, params any) (*api.QueryTableResult, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "QueryWithParams", ctx, query, params) ret0, _ := ret[0].(*api.QueryTableResult) @@ -987,7 +502,7 @@ func (m *MockInfluxQueryAPI) QueryWithParams(ctx context.Context, query string, } // QueryWithParams indicates an expected call of QueryWithParams. -func (mr *MockInfluxQueryAPIMockRecorder) QueryWithParams(ctx, query, params interface{}) *gomock.Call { +func (mr *MockqueryMockRecorder) QueryWithParams(ctx, query, params interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryWithParams", reflect.TypeOf((*MockInfluxQueryAPI)(nil).QueryWithParams), ctx, query, params) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryWithParams", reflect.TypeOf((*Mockquery)(nil).QueryWithParams), ctx, query, params) } From 3a21868679cff93c61eb62e04b455b7e562f4335 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Thu, 14 Aug 2025 13:40:42 +0530 Subject: [PATCH 38/44] [tests] added tests for the Buckets, 50% coverrage. --- pkg/gofr/datasource/influxdb/influxdb.go | 31 +- pkg/gofr/datasource/influxdb/influxdb_test.go | 348 +++++++++--------- pkg/gofr/datasource/influxdb/interface.go | 1 + pkg/gofr/datasource/influxdb/internal.go | 26 +- .../influxdb/mocks/mock_interface.go | 20 + 5 files changed, 218 insertions(+), 208 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 4385edb2d..0670879a3 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -170,12 +170,9 @@ func (c *Client) DeleteBucket(ctx context.Context, bucketID string) error { if bucketID == "" { return errEmptyBucketID } - - // bucketsAPI := c.client.BucketsAPI() - // if err := bucketsAPI.DeleteBucketWithID(ctx, bucketID); err != nil { - // return err - // } - + if err := c.influx.bucket.DeleteBucketWithID(ctx, bucketID); err != nil { + return err + } return nil } @@ -235,20 +232,18 @@ func (c *Client) ListBuckets(ctx context.Context, org string) (buckets map[strin return nil, errEmptyOrganizationName } - // bucketsAPI := c.client.BucketsAPI() - - // bucketsDomain, err := bucketsAPI.FindBucketsByOrgName(ctx, org) - // if err != nil { - // return nil, err - // } + bucketsDomain, err := c.influx.bucket.FindBucketsByOrgName(ctx, org) + if err != nil { + return nil, err + } - // buckets = make(map[string]string) // Initialize the map + buckets = make(map[string]string) // Initialize the map - // for _, bucket := range *bucketsDomain { - // if bucket.Name != "" { - // buckets[*bucket.Id] = bucket.Name - // } - // } + for _, bucket := range *bucketsDomain { + if bucket.Name != "" { + buckets[*bucket.Id] = bucket.Name + } + } return buckets, nil } diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index f2ef8a40c..f50dd2fca 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -315,211 +315,201 @@ func Test_ListOrganization(t *testing.T) { }) } -// func Test_CreateBucket(t *testing.T) { -// t.Helper() +func Test_CreateBucket(t *testing.T) { + t.Helper() -// ctrl := gomock.NewController(t) -// defer ctrl.Finish() + ctrl := gomock.NewController(t) + defer ctrl.Finish() -// dummyID := "id1" -// dummyOrgID := "org123" -// dummyBucketName := "bucket123" + dummyID := "id1" + dummyOrgID := "org123" + dummyBucketName := "bucket123" -// testCases := []struct { -// name string -// orgID string -// bucketName string -// respBucket *domain.Bucket -// wantBucketID string -// expectErr bool -// err error -// }{ -// { -// name: "try creating bucket with empty organization id", -// orgID: "", -// bucketName: dummyBucketName, -// expectErr: true, -// respBucket: nil, -// wantBucketID: "", -// err: errEmptyOrganizationID, -// }, -// { -// name: "try creating bucket with empty bucket name", -// orgID: dummyOrgID, -// bucketName: "", -// expectErr: true, -// respBucket: nil, -// wantBucketID: "", -// err: errEmptyBucketName, -// }, -// { -// name: "successfully creating a new bucket", -// orgID: dummyOrgID, -// bucketName: dummyBucketName, -// expectErr: false, -// respBucket: &domain.Bucket{Id: &dummyID}, -// wantBucketID: dummyID, -// err: nil, -// }, -// } + testCases := []struct { + name string + orgID string + bucketName string + respBucket *domain.Bucket + wantBucketID string + expectErr bool + err error + }{ + { + name: "try creating bucket with empty organization id", + orgID: "", + bucketName: dummyBucketName, + expectErr: true, + respBucket: nil, + wantBucketID: "", + err: errEmptyOrganizationID, + }, + { + name: "try creating bucket with empty bucket name", + orgID: dummyOrgID, + bucketName: "", + expectErr: true, + respBucket: nil, + wantBucketID: "", + err: errEmptyBucketName, + }, + { + name: "successfully creating a new bucket", + orgID: dummyOrgID, + bucketName: dummyBucketName, + expectErr: false, + respBucket: &domain.Bucket{Id: &dummyID}, + wantBucketID: dummyID, + err: nil, + }, + } -// for _, tt := range testCases { -// t.Run(tt.name, func(t *testing.T) { -// client := *setupDB(t, ctrl) -// mockInflux := client.client.(*influxdb_mock.MockInfluxClient) -// mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) + for _, tt := range testCases { + t.Run(tt.name, func(t *testing.T) { + client := *setupDB(t, ctrl) -// mockInflux.EXPECT().BucketsAPI(). -// Return(mockInfluxBucketAPI). -// AnyTimes() + mockBucket := influxdb_mock.NewMockbucket(ctrl) -// mockInfluxBucketAPI.EXPECT(). -// CreateBucketWithNameWithID(gomock.Any(), tt.orgID, tt.bucketName). -// Return(tt.respBucket, tt.err). -// AnyTimes() + client.influx.bucket = mockBucket + mockBucket.EXPECT(). + CreateBucketWithNameWithID(gomock.Any(), tt.orgID, tt.bucketName). + Return(tt.respBucket, tt.err). + AnyTimes() -// bucketID, err := client.CreateBucket(t.Context(), tt.orgID, tt.bucketName) + bucketID, err := client.CreateBucket(t.Context(), tt.orgID, tt.bucketName) -// if tt.expectErr { -// require.Error(t, err) -// require.Equal(t, err, tt.err) -// } else { -// require.Equal(t, tt.wantBucketID, bucketID) -// require.NoError(t, err) -// } -// }) -// } -// } - -// func Test_DeleteBucket(t *testing.T) { -// t.Helper() + if tt.expectErr { + require.Error(t, err) + require.Equal(t, err, tt.err) + } else { + require.Equal(t, tt.wantBucketID, bucketID) + require.NoError(t, err) + } + }) + } +} -// ctrl := gomock.NewController(t) -// defer ctrl.Finish() +func Test_DeleteBucket(t *testing.T) { + t.Helper() -// dummyID := "id1" + ctrl := gomock.NewController(t) + defer ctrl.Finish() -// testCases := []struct { -// name string -// orgID string -// bucketID string -// expectErr bool -// err error -// }{ -// { -// name: "try deleting bucket with empty bucket id", -// orgID: "", -// bucketID: "", -// expectErr: true, -// err: errEmptyBucketID, -// }, -// { -// name: "successfully deleting a new bucket", -// orgID: "", -// bucketID: dummyID, -// expectErr: false, -// err: nil, -// }, -// } + dummyID := "id1" -// for _, tt := range testCases { -// t.Run(tt.name, func(t *testing.T) { -// client := *setupDB(t, ctrl) -// mockInflux := client.client.(*influxdb_mock.MockInfluxClient) -// mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) + testCases := []struct { + name string + orgID string + bucketID string + expectErr bool + err error + }{ + { + name: "try deleting bucket with empty bucket id", + orgID: "", + bucketID: "", + expectErr: true, + err: errEmptyBucketID, + }, + { + name: "successfully deleting a new bucket", + orgID: "", + bucketID: dummyID, + expectErr: false, + err: nil, + }, + } -// mockInflux.EXPECT().BucketsAPI(). -// Return(mockInfluxBucketAPI). -// AnyTimes() + for _, tt := range testCases { + t.Run(tt.name, func(t *testing.T) { + client := *setupDB(t, ctrl) + mockBucket := influxdb_mock.NewMockbucket(ctrl) -// mockInfluxBucketAPI.EXPECT(). -// DeleteBucketWithID(gomock.Any(), tt.bucketID). -// Return(tt.err). -// AnyTimes() + client.influx.bucket = mockBucket + mockBucket.EXPECT(). + DeleteBucketWithID(gomock.Any(), tt.bucketID). + Return(tt.err). + AnyTimes() -// err := client.DeleteBucket(t.Context(), tt.bucketID) + err := client.DeleteBucket(t.Context(), tt.bucketID) -// if tt.expectErr { -// require.Error(t, err) -// require.Equal(t, err, tt.err) -// } else { -// require.NoError(t, err) -// } -// }) -// } -// } + if tt.expectErr { + require.Error(t, err) + require.Equal(t, err, tt.err) + } else { + require.NoError(t, err) + } + }) + } +} -// func Test_ListBucket(t *testing.T) { -// t.Helper() +func Test_ListBucket(t *testing.T) { + t.Helper() -// ctrl := gomock.NewController(t) -// defer ctrl.Finish() + ctrl := gomock.NewController(t) + defer ctrl.Finish() -// dummyOrgName := "orgName" -// id1, name1 := "id1", "name1" -// id2, name2 := "id1", "name1" + dummyOrgName := "orgName" + id1, name1 := "id1", "name1" + id2, name2 := "id1", "name1" -// testCases := []struct { -// name string -// orgName string -// resp *[]domain.Bucket -// wantBuckets map[string]string -// expectErr bool -// err error -// }{ -// { -// name: "try list bucket with empty organization name", -// orgName: "", -// expectErr: true, -// wantBuckets: nil, -// resp: &[]domain.Bucket{}, -// err: errEmptyOrganizationName, -// }, + testCases := []struct { + name string + orgName string + resp *[]domain.Bucket + wantBuckets map[string]string + expectErr bool + err error + }{ + { + name: "try list bucket with empty organization name", + orgName: "", + expectErr: true, + wantBuckets: nil, + resp: &[]domain.Bucket{}, + err: errEmptyOrganizationName, + }, -// { -// name: "success list organizations", -// orgName: dummyOrgName, -// resp: &[]domain.Bucket{ -// {Id: &id1, Name: name1}, -// {Id: &id2, Name: name2}, -// }, -// wantBuckets: map[string]string{ -// id1: name1, -// id2: name2, -// }, -// expectErr: false, -// err: nil, -// }, -// } + { + name: "success list organizations", + orgName: dummyOrgName, + resp: &[]domain.Bucket{ + {Id: &id1, Name: name1}, + {Id: &id2, Name: name2}, + }, + wantBuckets: map[string]string{ + id1: name1, + id2: name2, + }, + expectErr: false, + err: nil, + }, + } -// for _, tt := range testCases { -// t.Run(tt.name, func(t *testing.T) { -// client := *setupDB(t, ctrl) -// mockInflux := client.client.(*influxdb_mock.MockInfluxClient) -// mockInfluxBucketAPI := influxdb_mock.NewMockBucketsAPI(ctrl) + for _, tt := range testCases { + t.Run(tt.name, func(t *testing.T) { + client := *setupDB(t, ctrl) -// mockInflux.EXPECT().BucketsAPI(). -// Return(mockInfluxBucketAPI). -// AnyTimes() + mockBucket := influxdb_mock.NewMockbucket(ctrl) -// mockInfluxBucketAPI.EXPECT(). -// FindBucketsByOrgName(gomock.Any(), tt.orgName). -// Return(tt.resp, tt.err). -// AnyTimes() + client.influx.bucket = mockBucket + mockBucket.EXPECT(). + FindBucketsByOrgName(gomock.Any(), tt.orgName). + Return(tt.resp, tt.err). + AnyTimes() -// buckets, err := client.ListBuckets(t.Context(), tt.orgName) + buckets, err := client.ListBuckets(t.Context(), tt.orgName) -// if tt.expectErr { -// require.Error(t, err) -// require.Equal(t, err, tt.err) -// } else { -// require.NoError(t, err) -// require.NotEmpty(t, buckets) -// require.Equal(t, tt.wantBuckets, buckets) -// } -// }) -// } -// } + if tt.expectErr { + require.Error(t, err) + require.Equal(t, err, tt.err) + } else { + require.NoError(t, err) + require.NotEmpty(t, buckets) + require.Equal(t, tt.wantBuckets, buckets) + } + }) + } +} // func Test_Query(t *testing.T) { // t.Helper() diff --git a/pkg/gofr/datasource/influxdb/interface.go b/pkg/gofr/datasource/influxdb/interface.go index 66ac19fd2..4085a4ce5 100644 --- a/pkg/gofr/datasource/influxdb/interface.go +++ b/pkg/gofr/datasource/influxdb/interface.go @@ -35,6 +35,7 @@ type bucket interface { GetBuckets(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) FindBucketByName(ctx context.Context, bucketName string) (*domain.Bucket, error) FindBucketByID(ctx context.Context, bucketID string) (*domain.Bucket, error) + FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) CreateBucketWithName( ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) diff --git a/pkg/gofr/datasource/influxdb/internal.go b/pkg/gofr/datasource/influxdb/internal.go index df88ba992..4985ccf2c 100644 --- a/pkg/gofr/datasource/influxdb/internal.go +++ b/pkg/gofr/datasource/influxdb/internal.go @@ -12,8 +12,8 @@ type influxdbOrganizationAPI struct { } // NewInfluxdbOrganizationAPI creates a new bucket API wrapper. -func NewInfluxdbOrganizationAPI(a api.OrganizationsAPI) organization { - return influxdbOrganizationAPI{api: a} +func NewInfluxdbOrganizationAPI(api api.OrganizationsAPI) organization { + return influxdbOrganizationAPI{api: api} } func (a influxdbOrganizationAPI) GetOrganizations(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) { @@ -39,41 +39,45 @@ type influxdbBucketAPI struct { // NewInfluxdbBucketAPI creates a new bucket API wrapper. func NewInfluxdbBucketAPI(a api.BucketsAPI) bucket { - return &influxdbBucketAPI{api: a} + return influxdbBucketAPI{api: a} } -func (b *influxdbBucketAPI) GetBuckets(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { +func (b influxdbBucketAPI) GetBuckets(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { return b.api.GetBuckets(ctx, pagingOptions...) } -func (b *influxdbBucketAPI) FindBucketByName(ctx context.Context, bucketName string) (*domain.Bucket, error) { +func (b influxdbBucketAPI) FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { + return b.api.FindBucketsByOrgName(ctx, orgName, pagingOptions...) +} + +func (b influxdbBucketAPI) FindBucketByName(ctx context.Context, bucketName string) (*domain.Bucket, error) { return b.api.FindBucketByName(ctx, bucketName) } -func (b *influxdbBucketAPI) FindBucketByID(ctx context.Context, bucketID string) (*domain.Bucket, error) { +func (b influxdbBucketAPI) FindBucketByID(ctx context.Context, bucketID string) (*domain.Bucket, error) { return b.api.FindBucketByID(ctx, bucketID) } -func (b *influxdbBucketAPI) CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { +func (b influxdbBucketAPI) CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { return b.api.CreateBucket(ctx, bucket) } -func (b *influxdbBucketAPI) CreateBucketWithName( +func (b influxdbBucketAPI) CreateBucketWithName( ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule, ) (*domain.Bucket, error) { return b.api.CreateBucketWithName(ctx, org, bucketName, rules...) } -func (b *influxdbBucketAPI) CreateBucketWithNameWithID( +func (b influxdbBucketAPI) CreateBucketWithNameWithID( ctx context.Context, orgID, bucketName string, rules ...domain.RetentionRule, ) (*domain.Bucket, error) { return b.api.CreateBucketWithNameWithID(ctx, orgID, bucketName, rules...) } -func (b *influxdbBucketAPI) UpdateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { +func (b influxdbBucketAPI) UpdateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) { return b.api.UpdateBucket(ctx, bucket) } -func (b *influxdbBucketAPI) DeleteBucketWithID(ctx context.Context, bucketID string) error { +func (b influxdbBucketAPI) DeleteBucketWithID(ctx context.Context, bucketID string) error { return b.api.DeleteBucketWithID(ctx, bucketID) } diff --git a/pkg/gofr/datasource/influxdb/mocks/mock_interface.go b/pkg/gofr/datasource/influxdb/mocks/mock_interface.go index 2e3a1d0c8..21f0fb41b 100644 --- a/pkg/gofr/datasource/influxdb/mocks/mock_interface.go +++ b/pkg/gofr/datasource/influxdb/mocks/mock_interface.go @@ -389,6 +389,26 @@ func (mr *MockbucketMockRecorder) FindBucketByName(ctx, bucketName interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketByName", reflect.TypeOf((*Mockbucket)(nil).FindBucketByName), ctx, bucketName) } +// FindBucketsByOrgName mocks base method. +func (m *Mockbucket) FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx, orgName} + for _, a := range pagingOptions { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "FindBucketsByOrgName", varargs...) + ret0, _ := ret[0].(*[]domain.Bucket) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FindBucketsByOrgName indicates an expected call of FindBucketsByOrgName. +func (mr *MockbucketMockRecorder) FindBucketsByOrgName(ctx, orgName interface{}, pagingOptions ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx, orgName}, pagingOptions...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindBucketsByOrgName", reflect.TypeOf((*Mockbucket)(nil).FindBucketsByOrgName), varargs...) +} + // GetBuckets mocks base method. func (m *Mockbucket) GetBuckets(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { m.ctrl.T.Helper() From 1fd9cae226a0d44e19fdfd319ae48c7a071a812e Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Wed, 27 Aug 2025 17:38:39 +0530 Subject: [PATCH 39/44] [revert] container mocks (not relevent to my PR) --- go.work.sum | 3 +++ pkg/gofr/container/mock_container.go | 13 ++++++------- pkg/gofr/container/mock_datasources.go | 2 -- pkg/gofr/container/mock_metrics.go | 2 -- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/go.work.sum b/go.work.sum index f75fb1f5b..e58e7a8a6 100644 --- a/go.work.sum +++ b/go.work.sum @@ -900,6 +900,7 @@ github.com/docker/docker v28.1.1+incompatible h1:49M11BFLsVO1gxY9UX9p/zwkE/rswgg github.com/docker/docker v28.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v28.2.2+incompatible h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5JxwYeqtMOEe0LDw= github.com/docker/docker v28.2.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.3.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -1316,6 +1317,7 @@ go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= +golang.org/x/arch v0.4.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= @@ -1642,6 +1644,7 @@ google.golang.org/genproto/googleapis/bytestream v0.0.0-20250512202823-5a2f75b73 google.golang.org/genproto/googleapis/bytestream v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250603155806-513f23925822 h1:zWFRixYR5QlotL+Uv3YfsPRENIrQFXiGs+iwqel6fOQ= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250603155806-513f23925822/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20250728155136-f173205681a0/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= diff --git a/pkg/gofr/container/mock_container.go b/pkg/gofr/container/mock_container.go index abca987ea..9bdeeae3b 100644 --- a/pkg/gofr/container/mock_container.go +++ b/pkg/gofr/container/mock_container.go @@ -26,7 +26,6 @@ type Mocks struct { OpenTSDB *MockOpenTSDB SurrealDB *MockSurrealDB Elasticsearch *MockElasticsearch - InfluxDB *MockInfluxDB PubSub *MockPubSubProvider Couchbase *MockCouchbase File *file.MockFileSystemProvider @@ -133,12 +132,12 @@ func NewMockContainer(t *testing.T, options ...options) (*Container, *Mocks) { KVStore: container.KVStore.(*MockKVStore), File: container.File.(*file.MockFileSystemProvider), HTTPService: httpMock, - DGraph: dgraphMock, - OpenTSDB: opentsdbMock, - ArangoDB: arangoMock, - SurrealDB: surrealMock, - Elasticsearch: elasticsearchMock, - PubSub: pubsubMock, + DGraph: container.DGraph.(*MockDgraph), + OpenTSDB: container.OpenTSDB.(*MockOpenTSDB), + ArangoDB: container.ArangoDB.(*MockArangoDBProvider), + SurrealDB: container.SurrealDB.(*MockSurrealDB), + Elasticsearch: container.Elasticsearch.(*MockElasticsearch), + PubSub: container.PubSub.(*MockPubSubProvider), Metrics: mockMetrics, Oracle: container.Oracle.(*MockOracleDB), ScyllaDB: container.ScyllaDB.(*MockScyllaDB), diff --git a/pkg/gofr/container/mock_datasources.go b/pkg/gofr/container/mock_datasources.go index af00f9765..7af441bd5 100644 --- a/pkg/gofr/container/mock_datasources.go +++ b/pkg/gofr/container/mock_datasources.go @@ -6,7 +6,6 @@ // mockgen -source=datasources.go -destination=mock_datasources.go -package=container // -// Package container is a generated GoMock package. package container import ( @@ -27,7 +26,6 @@ import ( type MockDB struct { ctrl *gomock.Controller recorder *MockDBMockRecorder - isgomock struct{} } // MockDBMockRecorder is the mock recorder for MockDB. diff --git a/pkg/gofr/container/mock_metrics.go b/pkg/gofr/container/mock_metrics.go index 81b8324d6..4a15b1a06 100644 --- a/pkg/gofr/container/mock_metrics.go +++ b/pkg/gofr/container/mock_metrics.go @@ -6,7 +6,6 @@ // mockgen -source=metrics.go -destination=mock_metrics.go -package=container // -// Package container is a generated GoMock package. package container import ( @@ -20,7 +19,6 @@ import ( type MockMetrics struct { ctrl *gomock.Controller recorder *MockMetricsMockRecorder - isgomock struct{} } // MockMetricsMockRecorder is the mock recorder for MockMetrics. From 9437e09cbdf1ec4c8655f8e36e5dc0220de24c74 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Wed, 27 Aug 2025 21:47:02 +0530 Subject: [PATCH 40/44] change path of the interface mock code to same folder. --- pkg/gofr/datasource/influxdb/influxdb.go | 12 +- pkg/gofr/datasource/influxdb/influxdb_test.go | 127 +++++++++--------- .../influxdb/{mocks => }/mock_interface.go | 4 +- 3 files changed, 69 insertions(+), 74 deletions(-) rename pkg/gofr/datasource/influxdb/{mocks => }/mock_interface.go (99%) diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 0670879a3..0fcc351cd 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -321,12 +321,12 @@ func (c *Client) WritePoint(ctx context.Context, org, bucket, measurement string, tags map[string]string, fields map[string]any, timestamp time.Time, ) error { - // p := influxdb2.NewPoint(measurement, tags, fields, timestamp) - // writeAPI := c.client.WriteAPIBlocking(org, bucket) - // if err := writeAPI.WritePoint(ctx, p); err != nil { - // c.logger.Errorf("Failed to write point to influxdb: %v", err.Error()) - // return err - // } + p := influxdb2.NewPoint(measurement, tags, fields, timestamp) + writeAPI := c.influx.client.WriteAPIBlocking(org, bucket) + if err := writeAPI.WritePoint(ctx, p); err != nil { + c.logger.Errorf("Failed to write point to influxdb: %v", err.Error()) + return err + } return nil } diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index f50dd2fca..eebb1086e 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -5,11 +5,10 @@ import ( "testing" gomock "github.com/golang/mock/gomock" + "github.com/influxdata/influxdb-client-go/v2/api" "github.com/influxdata/influxdb-client-go/v2/domain" "github.com/stretchr/testify/require" "go.opentelemetry.io/otel" - - influxdb_mock "gofr.dev/pkg/gofr/datasource/influxdb/mocks" ) var ( @@ -42,7 +41,7 @@ func setupDB(t *testing.T, ctrl *gomock.Controller) *Client { mockLogger.EXPECT().Errorf(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes() // Replace the client with our mocked version - client.influx.client = influxdb_mock.NewMockclient(ctrl) + client.influx.client = NewMockclient(ctrl) return client } @@ -54,7 +53,7 @@ func Test_HealthCheckSuccess(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.influx.client.(*influxdb_mock.Mockclient) + mockInflux := client.influx.client.(*Mockclient) expectedHealth := &domain.HealthCheck{Status: "pass"} mockInflux.EXPECT(). @@ -73,7 +72,7 @@ func Test_HealthCheckFail(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.influx.client.(*influxdb_mock.Mockclient) + mockInflux := client.influx.client.(*Mockclient) expectedHealth := &domain.HealthCheck{Status: "fail"} mockInflux.EXPECT(). @@ -92,7 +91,7 @@ func Test_PingSuccess(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.influx.client.(*influxdb_mock.Mockclient) + mockInflux := client.influx.client.(*Mockclient) mockInflux.EXPECT(). Ping(gomock.Any()). @@ -112,7 +111,7 @@ func Test_PingFailed(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockInflux := client.influx.client.(*influxdb_mock.Mockclient) + mockInflux := client.influx.client.(*Mockclient) mockInflux.EXPECT(). Ping(gomock.Any()). @@ -168,7 +167,7 @@ func Test_CreateOrganization(t *testing.T) { for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { client := *setupDB(t, ctrl) - mockOrganization := influxdb_mock.NewMockorganization(ctrl) + mockOrganization := NewMockorganization(ctrl) client.influx.organization = mockOrganization mockOrganization.EXPECT(). @@ -226,7 +225,7 @@ func Test_DeleteOrganization(t *testing.T) { for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { client := *setupDB(t, ctrl) - mockOrganization := influxdb_mock.NewMockorganization(ctrl) + mockOrganization := NewMockorganization(ctrl) client.influx.organization = mockOrganization mockOrganization.EXPECT(). @@ -253,7 +252,7 @@ func Test_ListOrganization(t *testing.T) { defer ctrl.Finish() client := *setupDB(t, ctrl) - mockOrganization := influxdb_mock.NewMockorganization(ctrl) + mockOrganization := NewMockorganization(ctrl) client.influx.organization = mockOrganization t.Run("test zero organization", func(t *testing.T) { @@ -367,7 +366,7 @@ func Test_CreateBucket(t *testing.T) { t.Run(tt.name, func(t *testing.T) { client := *setupDB(t, ctrl) - mockBucket := influxdb_mock.NewMockbucket(ctrl) + mockBucket := NewMockbucket(ctrl) client.influx.bucket = mockBucket mockBucket.EXPECT(). @@ -422,7 +421,7 @@ func Test_DeleteBucket(t *testing.T) { for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { client := *setupDB(t, ctrl) - mockBucket := influxdb_mock.NewMockbucket(ctrl) + mockBucket := NewMockbucket(ctrl) client.influx.bucket = mockBucket mockBucket.EXPECT(). @@ -489,7 +488,7 @@ func Test_ListBucket(t *testing.T) { t.Run(tt.name, func(t *testing.T) { client := *setupDB(t, ctrl) - mockBucket := influxdb_mock.NewMockbucket(ctrl) + mockBucket := NewMockbucket(ctrl) client.influx.bucket = mockBucket mockBucket.EXPECT(). @@ -511,56 +510,52 @@ func Test_ListBucket(t *testing.T) { } } -// func Test_Query(t *testing.T) { -// t.Helper() - -// ctrl := gomock.NewController(t) -// defer ctrl.Finish() - -// testCases := []struct { -// name string -// resp *api.QueryTableResult -// wantResults map[string]any -// orgName string -// inputQuery string -// expectErr bool -// err error -// }{ -// { -// name: "failing error query", -// orgName: "org1", -// inputQuery: "dummyQuery1", -// expectErr: true, -// wantResults: map[string]any{}, -// resp: &api.QueryTableResult{}, -// err: errors.New("Something"), -// }, -// } - -// for _, tt := range testCases { -// t.Run(tt.name, func(t *testing.T) { -// client := *setupDB(t, ctrl) -// mockInflux := client.client.(*influxdb_mock.MockInfluxClient) -// mockInfluxQueryAPI := influxdb_mock.NewMockInfluxQueryAPI(ctrl) - -// mockInflux.EXPECT().QueryAPI(tt.orgName). -// Return(mockInfluxQueryAPI). -// AnyTimes() - -// mockInfluxQueryAPI.EXPECT(). -// Query(gomock.Any(), tt.inputQuery). -// Return(tt.resp, tt.err). -// AnyTimes() - -// result, err := client.Query(t.Context(), tt.orgName, tt.inputQuery) - -// if tt.expectErr { -// require.Error(t, err) -// require.Equal(t, err, tt.err) -// require.Empty(t, result) -// } else { -// require.NoError(t, err) -// } -// }) -// } -// } +func Test_Query(t *testing.T) { + t.Helper() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + testCases := []struct { + name string + resp *api.QueryTableResult + wantResults map[string]any + orgName string + inputQuery string + expectErr bool + err error + }{ + { + name: "failing error query", + orgName: "org1", + inputQuery: "dummyQuery1", + expectErr: true, + wantResults: map[string]any{}, + resp: &api.QueryTableResult{}, + err: errors.New("Something"), + }, + } + for _, tt := range testCases { + t.Run(tt.name, func(t *testing.T) { + client := *setupDB(t, ctrl) + mockQuery := NewMockquery(ctrl) + + client.influx.query = mockQuery + + mockQuery.EXPECT(). + Query(gomock.Any(), tt.inputQuery). + Return(tt.resp, tt.err). + AnyTimes() + + result, err := client.Query(t.Context(), tt.orgName, tt.inputQuery) + + if tt.expectErr { + require.Error(t, err) + require.Equal(t, err, tt.err) + require.Empty(t, result) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/pkg/gofr/datasource/influxdb/mocks/mock_interface.go b/pkg/gofr/datasource/influxdb/mock_interface.go similarity index 99% rename from pkg/gofr/datasource/influxdb/mocks/mock_interface.go rename to pkg/gofr/datasource/influxdb/mock_interface.go index 21f0fb41b..4caaf6860 100644 --- a/pkg/gofr/datasource/influxdb/mocks/mock_interface.go +++ b/pkg/gofr/datasource/influxdb/mock_interface.go @@ -1,8 +1,8 @@ // Code generated by MockGen. DO NOT EDIT. // Source: interface.go -// Package influxdb_mock is a generated GoMock package. -package influxdb_mock +// Package mock_influxdb is a generated GoMock package. +package influxdb import ( context "context" From c9b87024ae409c1fdb6e146cb024ffb3201173e6 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Wed, 27 Aug 2025 23:48:47 +0530 Subject: [PATCH 41/44] [Fixed linting] --- pkg/gofr/cmd/request_test.go | 1 - pkg/gofr/container/datasources.go | 3 +-- pkg/gofr/cron_test.go | 1 - pkg/gofr/datasource/influxdb/influxdb.go | 6 +++++- pkg/gofr/datasource/influxdb/influxdb_test.go | 6 +++--- pkg/gofr/datasource/influxdb/internal.go | 8 +++++--- pkg/gofr/external_db_test.go | 1 + 7 files changed, 15 insertions(+), 11 deletions(-) diff --git a/pkg/gofr/cmd/request_test.go b/pkg/gofr/cmd/request_test.go index 5ca6f2bf8..d65510ba4 100644 --- a/pkg/gofr/cmd/request_test.go +++ b/pkg/gofr/cmd/request_test.go @@ -44,7 +44,6 @@ func TestRequest_Bind(t *testing.T) { osHostName, _ := os.Hostname() - //nolint:usetesting // Comparing context.Background() directly is intentional and safe in this case. assert.Equal(t, context.Background(), ctx, "TEST Failed.\n context is not context.Background.") assert.Equal(t, osHostName, hostName, "TEST Failed.\n Hostname did not match.") diff --git a/pkg/gofr/container/datasources.go b/pkg/gofr/container/datasources.go index 0c44691b4..d1f98d809 100644 --- a/pkg/gofr/container/datasources.go +++ b/pkg/gofr/container/datasources.go @@ -780,7 +780,6 @@ type CouchbaseProvider interface { // InfluxDB defines the operations required to interact with an InfluxDB instance. type InfluxDB interface { - // CreateOrganization create new bucket in the influxdb CreateOrganization(ctx context.Context, org string) (string, error) @@ -800,7 +799,7 @@ type InfluxDB interface { // Query runs a Flux query and returns the result as a slice of maps, // where each map is a row with column name-value pairs. - Query(ctx context.Context, org, fluxQuery string) ([]map[string]any, error) + Query(ctx context.Context, fluxQuery string) ([]map[string]any, error) // CreateBucket creates a new bucket under the specified organization. CreateBucket(ctx context.Context, org, bucket string) (string, error) diff --git a/pkg/gofr/cron_test.go b/pkg/gofr/cron_test.go index f47593848..f188b2920 100644 --- a/pkg/gofr/cron_test.go +++ b/pkg/gofr/cron_test.go @@ -328,7 +328,6 @@ func TestJob_tick(t *testing.T) { func Test_noopRequest(t *testing.T) { noop := noopRequest{} - //nolint:usetesting // Using context.Background() intentionally instead of t.Context() assert.Equal(t, context.Background(), noop.Context()) assert.Empty(t, noop.Param("")) assert.Empty(t, noop.PathParam("")) diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index 0fcc351cd..d1e5571cf 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -170,9 +170,11 @@ func (c *Client) DeleteBucket(ctx context.Context, bucketID string) error { if bucketID == "" { return errEmptyBucketID } + if err := c.influx.bucket.DeleteBucketWithID(ctx, bucketID); err != nil { return err } + return nil } @@ -267,7 +269,7 @@ func (c *Client) Ping(ctx context.Context) (bool, error) { return ping, nil } -func (c *Client) Query(ctx context.Context, org, fluxQuery string) ([]map[string]any, error) { +func (c *Client) Query(ctx context.Context, fluxQuery string) ([]map[string]any, error) { result, err := c.influx.query.Query(ctx, fluxQuery) if err != nil { c.logger.Errorf("InfluxDB Flux Query '%v' failed: %v", fluxQuery, err.Error()) @@ -323,10 +325,12 @@ func (c *Client) WritePoint(ctx context.Context, ) error { p := influxdb2.NewPoint(measurement, tags, fields, timestamp) writeAPI := c.influx.client.WriteAPIBlocking(org, bucket) + if err := writeAPI.WritePoint(ctx, p); err != nil { c.logger.Errorf("Failed to write point to influxdb: %v", err.Error()) return err } + return nil } diff --git a/pkg/gofr/datasource/influxdb/influxdb_test.go b/pkg/gofr/datasource/influxdb/influxdb_test.go index eebb1086e..4866e1599 100644 --- a/pkg/gofr/datasource/influxdb/influxdb_test.go +++ b/pkg/gofr/datasource/influxdb/influxdb_test.go @@ -15,6 +15,7 @@ var ( errInvalidOrgID = errors.New("invalid organization id") errFailedCreatingOrg = errors.New("failed to create new organization") errPingFailed = errors.New("failed to ping") + errFailedQuery = errors.New("error failed query") ) func setupDB(t *testing.T, ctrl *gomock.Controller) *Client { @@ -258,7 +259,6 @@ func Test_ListOrganization(t *testing.T) { t.Run("test zero organization", func(t *testing.T) { allOrgs := []domain.Organization{} - // mockInflux.EXPECT().OrganizationsAPI().Return(mockOrganization).Times(1) mockOrganization.EXPECT(). GetOrganizations(gomock.Any()). Return(&allOrgs, nil). @@ -532,7 +532,7 @@ func Test_Query(t *testing.T) { expectErr: true, wantResults: map[string]any{}, resp: &api.QueryTableResult{}, - err: errors.New("Something"), + err: errFailedQuery, }, } for _, tt := range testCases { @@ -547,7 +547,7 @@ func Test_Query(t *testing.T) { Return(tt.resp, tt.err). AnyTimes() - result, err := client.Query(t.Context(), tt.orgName, tt.inputQuery) + result, err := client.Query(t.Context(), tt.inputQuery) if tt.expectErr { require.Error(t, err) diff --git a/pkg/gofr/datasource/influxdb/internal.go b/pkg/gofr/datasource/influxdb/internal.go index 4985ccf2c..6d5dc26e1 100644 --- a/pkg/gofr/datasource/influxdb/internal.go +++ b/pkg/gofr/datasource/influxdb/internal.go @@ -12,8 +12,8 @@ type influxdbOrganizationAPI struct { } // NewInfluxdbOrganizationAPI creates a new bucket API wrapper. -func NewInfluxdbOrganizationAPI(api api.OrganizationsAPI) organization { - return influxdbOrganizationAPI{api: api} +func NewInfluxdbOrganizationAPI(a api.OrganizationsAPI) organization { + return influxdbOrganizationAPI{api: a} } func (a influxdbOrganizationAPI) GetOrganizations(ctx context.Context, pagingOptions ...api.PagingOption) (*[]domain.Organization, error) { @@ -46,7 +46,9 @@ func (b influxdbBucketAPI) GetBuckets(ctx context.Context, pagingOptions ...api. return b.api.GetBuckets(ctx, pagingOptions...) } -func (b influxdbBucketAPI) FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...api.PagingOption) (*[]domain.Bucket, error) { +func (b influxdbBucketAPI) FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...api.PagingOption) ( + *[]domain.Bucket, error, +) { return b.api.FindBucketsByOrgName(ctx, orgName, pagingOptions...) } diff --git a/pkg/gofr/external_db_test.go b/pkg/gofr/external_db_test.go index 3de58d662..38b7b9caf 100644 --- a/pkg/gofr/external_db_test.go +++ b/pkg/gofr/external_db_test.go @@ -205,6 +205,7 @@ func TestApp_AddOpenTSDB(t *testing.T) { assert.Equal(t, mock, app.container.OpenTSDB) }) } + func TestApp_AddScyllaDB(t *testing.T) { t.Run("Adding ScyllaDB", func(t *testing.T) { testutil.NewServerConfigs(t) From 3802a722fb08cf9832fe2129e9917d6e83e477d1 Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Wed, 3 Sep 2025 23:01:27 +0530 Subject: [PATCH 42/44] [typo] replace influx2 -> influx --- pkg/gofr/datasource/influxdb/influxdb.go | 6 +++--- pkg/gofr/datasource/influxdb/interface.go | 4 ++-- pkg/gofr/datasource/influxdb/mock_interface.go | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/gofr/datasource/influxdb/influxdb.go b/pkg/gofr/datasource/influxdb/influxdb.go index d1e5571cf..075eb80d6 100644 --- a/pkg/gofr/datasource/influxdb/influxdb.go +++ b/pkg/gofr/datasource/influxdb/influxdb.go @@ -5,7 +5,7 @@ import ( "errors" "time" - influxdb2 "github.com/influxdata/influxdb-client-go/v2" + influxdb "github.com/influxdata/influxdb-client-go/v2" "go.opencensus.io/trace" ) @@ -323,7 +323,7 @@ func (c *Client) WritePoint(ctx context.Context, org, bucket, measurement string, tags map[string]string, fields map[string]any, timestamp time.Time, ) error { - p := influxdb2.NewPoint(measurement, tags, fields, timestamp) + p := influxdb.NewPoint(measurement, tags, fields, timestamp) writeAPI := c.influx.client.WriteAPIBlocking(org, bucket) if err := writeAPI.WritePoint(ctx, p); err != nil { @@ -350,7 +350,7 @@ func (c *Client) Connect() { c.logger.Logf("connecting to influxdb at %v", c.config.URL) // Create a new client using an InfluxDB server base URL and an authentication token - c.influx.client = influxdb2.NewClient( + c.influx.client = influxdb.NewClient( c.config.URL, c.config.Token, ) diff --git a/pkg/gofr/datasource/influxdb/interface.go b/pkg/gofr/datasource/influxdb/interface.go index 4085a4ce5..41319079f 100644 --- a/pkg/gofr/datasource/influxdb/interface.go +++ b/pkg/gofr/datasource/influxdb/interface.go @@ -3,7 +3,7 @@ package influxdb import ( "context" - influxdb2 "github.com/influxdata/influxdb-client-go/v2" + influxdb "github.com/influxdata/influxdb-client-go/v2" "github.com/influxdata/influxdb-client-go/v2/api" "github.com/influxdata/influxdb-client-go/v2/domain" ) @@ -13,7 +13,7 @@ type client interface { Setup(ctx context.Context, username, password, org, bucket string, retentionPeriodHours int) (*domain.OnboardingResponse, error) Health(ctx context.Context) (*domain.HealthCheck, error) Ping(ctx context.Context) (bool, error) - Options() *influxdb2.Options + Options() *influxdb.Options WriteAPIBlocking(org, bucket string) api.WriteAPIBlocking QueryAPI(org string) api.QueryAPI AuthorizationsAPI() api.AuthorizationsAPI diff --git a/pkg/gofr/datasource/influxdb/mock_interface.go b/pkg/gofr/datasource/influxdb/mock_interface.go index 4caaf6860..8f3d83a26 100644 --- a/pkg/gofr/datasource/influxdb/mock_interface.go +++ b/pkg/gofr/datasource/influxdb/mock_interface.go @@ -9,7 +9,7 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - influxdb2 "github.com/influxdata/influxdb-client-go/v2" + influxdb "github.com/influxdata/influxdb-client-go/v2" api "github.com/influxdata/influxdb-client-go/v2/api" domain "github.com/influxdata/influxdb-client-go/v2/domain" ) @@ -95,10 +95,10 @@ func (mr *MockclientMockRecorder) Health(ctx interface{}) *gomock.Call { } // Options mocks base method. -func (m *Mockclient) Options() *influxdb2.Options { +func (m *Mockclient) Options() *influxdb.Options { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Options") - ret0, _ := ret[0].(*influxdb2.Options) + ret0, _ := ret[0].(*influxdb.Options) return ret0 } From f842ee8ce29afe504811249ae581b58beb42abdc Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Wed, 3 Sep 2025 23:19:19 +0530 Subject: [PATCH 43/44] [revert] changes reverted beacause of the side effect of golint --fix --- pkg/gofr/cmd/request_test.go | 1 + pkg/gofr/cron_test.go | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/gofr/cmd/request_test.go b/pkg/gofr/cmd/request_test.go index d65510ba4..5ca6f2bf8 100644 --- a/pkg/gofr/cmd/request_test.go +++ b/pkg/gofr/cmd/request_test.go @@ -44,6 +44,7 @@ func TestRequest_Bind(t *testing.T) { osHostName, _ := os.Hostname() + //nolint:usetesting // Comparing context.Background() directly is intentional and safe in this case. assert.Equal(t, context.Background(), ctx, "TEST Failed.\n context is not context.Background.") assert.Equal(t, osHostName, hostName, "TEST Failed.\n Hostname did not match.") diff --git a/pkg/gofr/cron_test.go b/pkg/gofr/cron_test.go index f188b2920..ddecc8d2e 100644 --- a/pkg/gofr/cron_test.go +++ b/pkg/gofr/cron_test.go @@ -143,7 +143,8 @@ func TestCron_parseSchedule_Error(t *testing.T) { "* * ab/2 * *", "* 1,2/10 * * *", "* * 1,2,3,1-15/10 * *", - "a b c d e"}, + "a b c d e", + }, expErrString: "unable to parse", }, } @@ -328,6 +329,7 @@ func TestJob_tick(t *testing.T) { func Test_noopRequest(t *testing.T) { noop := noopRequest{} + //nolint:usetesting // Using context.Background() intentionally instead of t.Context() assert.Equal(t, context.Background(), noop.Context()) assert.Empty(t, noop.Param("")) assert.Empty(t, noop.PathParam("")) From 656f88972721be6e81d05182f31719c82b4555cc Mon Sep 17 00:00:00 2001 From: Akhilesh Date: Wed, 3 Sep 2025 23:25:32 +0530 Subject: [PATCH 44/44] [revert] golint --fix side effects. --- pkg/gofr/container/mock_datasources.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/gofr/container/mock_datasources.go b/pkg/gofr/container/mock_datasources.go index 7af441bd5..af00f9765 100644 --- a/pkg/gofr/container/mock_datasources.go +++ b/pkg/gofr/container/mock_datasources.go @@ -6,6 +6,7 @@ // mockgen -source=datasources.go -destination=mock_datasources.go -package=container // +// Package container is a generated GoMock package. package container import ( @@ -26,6 +27,7 @@ import ( type MockDB struct { ctrl *gomock.Controller recorder *MockDBMockRecorder + isgomock struct{} } // MockDBMockRecorder is the mock recorder for MockDB.