Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MG-2126 - Update messaging with mProxy TLS #2206

Open
wants to merge 41 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
288b64c
Update mqtt and http messaging
nyagamunene Apr 26, 2024
13169b8
Mproxy
nyagamunene Apr 29, 2024
5c0f45a
mqtt over websocket no tls
nyagamunene Apr 29, 2024
d65b87e
mqtt over websocket no tls test
nyagamunene Apr 29, 2024
e877c5a
mqtt over websocket no tls test
nyagamunene Apr 29, 2024
93af1d7
http sever from env variables
nyagamunene Apr 29, 2024
ced5c3f
Generated things certs
nyagamunene Apr 30, 2024
2de4bd2
Debugged endpoint and message tests
nyagamunene Apr 30, 2024
42638c8
linted code
nyagamunene Apr 30, 2024
c0f07b3
Testing server
nyagamunene Apr 30, 2024
5f67b94
TLS Testing
nyagamunene May 1, 2024
937b4ce
TLS Testing
nyagamunene May 1, 2024
29dcbf2
TLS Testing
nyagamunene May 1, 2024
be994fd
Commented the changes in docker compose
nyagamunene May 2, 2024
0eb54f6
Added interpolation in docker compose
nyagamunene May 2, 2024
fe01854
TLS Testing
nyagamunene May 2, 2024
a892198
TLS Testing
nyagamunene May 2, 2024
4485fdd
TLS Configuration changed
nyagamunene May 3, 2024
592b4cb
Updated documentation
nyagamunene May 3, 2024
43b3a0a
Removed panic
nyagamunene May 3, 2024
2a8bcd0
Upgraded Mproxy
nyagamunene May 5, 2024
7a0ebec
Updated the test
nyagamunene May 5, 2024
182a89c
Linted code
nyagamunene May 5, 2024
e70f7f6
Go mod tidy
nyagamunene May 5, 2024
31487ae
Changed all services to v11
nyagamunene May 6, 2024
7f40d4c
Undo change in make file
nyagamunene May 6, 2024
6c006ba
Refactored the variables
nyagamunene May 6, 2024
5cd72f2
Refactored the environment variables
nyagamunene May 6, 2024
c6b4e50
Reduced redundancy
nyagamunene May 6, 2024
cbe5210
Reverted the env and main.go files
nyagamunene May 7, 2024
4e35322
linted code
nyagamunene May 7, 2024
ef8cdef
Updated nginx config file
nyagamunene May 15, 2024
1d2c0d7
changed http configuration
nyagamunene May 20, 2024
4b8cdf2
updated http
nyagamunene May 20, 2024
ccb1770
updated http config settings
nyagamunene May 20, 2024
0b27cf9
Updated env file
nyagamunene May 21, 2024
57a0dd1
Corrected logging message
nyagamunene May 22, 2024
29a2a99
Corrected logging message
nyagamunene May 22, 2024
ed0cf3b
Updated the env file
nyagamunene May 23, 2024
227db9c
Updated the env file
nyagamunene May 23, 2024
c3225b7
Updated docker compose file
nyagamunene May 23, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/auth/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import (
v1 "github.com/authzed/authzed-go/proto/authzed/api/v1"
"github.com/authzed/authzed-go/v1"
"github.com/authzed/grpcutil"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/jmoiron/sqlx"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
Expand Down
2 changes: 1 addition & 1 deletion cmd/bootstrap/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import (
"github.com/absmach/magistrala/pkg/events/store"
mgsdk "github.com/absmach/magistrala/pkg/sdk/go"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/jmoiron/sqlx"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
Expand Down
2 changes: 1 addition & 1 deletion cmd/cassandra-reader/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
"github.com/absmach/magistrala/readers"
"github.com/absmach/magistrala/readers/api"
"github.com/absmach/magistrala/readers/cassandra"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/gocql/gocql"
"golang.org/x/sync/errgroup"
)
Expand Down
2 changes: 1 addition & 1 deletion cmd/cassandra-writer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import (
"github.com/absmach/magistrala/pkg/messaging/brokers"
brokerstracing "github.com/absmach/magistrala/pkg/messaging/brokers/tracing"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/gocql/gocql"
"golang.org/x/sync/errgroup"
)
Expand Down
2 changes: 1 addition & 1 deletion cmd/certs/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import (
"github.com/absmach/magistrala/pkg/auth"
mgsdk "github.com/absmach/magistrala/pkg/sdk/go"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/jmoiron/sqlx"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
Expand Down
2 changes: 1 addition & 1 deletion cmd/coap/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (
"github.com/absmach/magistrala/pkg/messaging/brokers"
brokerstracing "github.com/absmach/magistrala/pkg/messaging/brokers/tracing"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"golang.org/x/sync/errgroup"
)

Expand Down
45 changes: 18 additions & 27 deletions cmd/http/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package main

import (
"context"
"crypto/tls"
"fmt"
"log"
"log/slog"
Expand All @@ -32,7 +31,7 @@ import (
"github.com/absmach/mproxy"
mproxyhttp "github.com/absmach/mproxy/pkg/http"
"github.com/absmach/mproxy/pkg/session"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
rodneyosodo marked this conversation as resolved.
Show resolved Hide resolved
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
)
Expand Down Expand Up @@ -163,43 +162,35 @@ func newService(pub messaging.Publisher, tc magistrala.AuthzServiceClient, logge
}

func proxyHTTP(ctx context.Context, cfg server.Config, logger *slog.Logger, sessionHandler session.Handler) error {
config := mproxy.Config{
Address: fmt.Sprintf("%s:%s", "", cfg.Port),
Target: fmt.Sprintf("%s:%s", targetHTTPHost, targetHTTPPort),
PathPrefix: "/",
}
if cfg.CertFile != "" || cfg.KeyFile != "" {
tlsCert, err := tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile)
if err != nil {
return err
}
config.TLSConfig = &tls.Config{
Certificates: []tls.Certificate{tlsCert},
}
httpConfig, err := mproxy.NewConfig(env.Options{Prefix: envPrefix})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Specify the default Target to be used

if err != nil {
return err
}
if httpConfig.Address == "" {
httpConfig.Address = fmt.Sprintf("%s:%s", "", cfg.Port)
}
mp, err := mproxyhttp.NewProxy(config, sessionHandler, logger)
if httpConfig.Target == "" {
httpConfig.Target = fmt.Sprintf("%s:%s", targetHTTPHost, targetHTTPPort)
}

mp, err := mproxyhttp.NewProxy(httpConfig, sessionHandler, logger)
if err != nil {
return err
}
http.HandleFunc("/", mp.ServeHTTP)

errCh := make(chan error)
switch {
case cfg.CertFile != "" || cfg.KeyFile != "":
go func() {
errCh <- mp.Listen(ctx)
}()
go func() {
errCh <- mp.Listen(ctx)
}()
if httpConfig.TLSConfig != nil {
logger.Info(fmt.Sprintf("%s service https server listening at %s:%s with TLS cert %s and key %s", svcName, cfg.Host, cfg.Port, cfg.CertFile, cfg.KeyFile))
default:
go func() {
errCh <- mp.Listen(ctx)
}()
} else {
logger.Info(fmt.Sprintf("%s service http server listening at %s:%s without TLS", svcName, cfg.Host, cfg.Port))
}

select {
case <-ctx.Done():
logger.Info(fmt.Sprintf("proxy HTTP shutdown at %s", config.Target))
logger.Info(fmt.Sprintf("proxy HTTP shutdown at %s", httpConfig.Target))
return nil
case err := <-errCh:
return err
Expand Down
2 changes: 1 addition & 1 deletion cmd/influxdb-reader/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
"github.com/absmach/magistrala/readers"
"github.com/absmach/magistrala/readers/api"
"github.com/absmach/magistrala/readers/influxdb"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
"golang.org/x/sync/errgroup"
)
Expand Down
2 changes: 1 addition & 1 deletion cmd/influxdb-writer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (
"github.com/absmach/magistrala/pkg/messaging/brokers"
brokerstracing "github.com/absmach/magistrala/pkg/messaging/brokers/tracing"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"golang.org/x/sync/errgroup"
)

Expand Down
2 changes: 1 addition & 1 deletion cmd/invitations/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import (
"github.com/absmach/magistrala/pkg/auth"
mgsdk "github.com/absmach/magistrala/pkg/sdk/go"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/jmoiron/sqlx"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
Expand Down
2 changes: 1 addition & 1 deletion cmd/lora/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import (
"github.com/absmach/magistrala/pkg/messaging/brokers"
brokerstracing "github.com/absmach/magistrala/pkg/messaging/brokers/tracing"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
mqttpaho "github.com/eclipse/paho.mqtt.golang"
"github.com/go-redis/redis/v8"
"golang.org/x/sync/errgroup"
Expand Down
2 changes: 1 addition & 1 deletion cmd/mongodb-reader/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
"github.com/absmach/magistrala/readers"
"github.com/absmach/magistrala/readers/api"
"github.com/absmach/magistrala/readers/mongodb"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"go.mongodb.org/mongo-driver/mongo"
"golang.org/x/sync/errgroup"
)
Expand Down
2 changes: 1 addition & 1 deletion cmd/mongodb-writer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import (
"github.com/absmach/magistrala/pkg/messaging/brokers"
brokerstracing "github.com/absmach/magistrala/pkg/messaging/brokers/tracing"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"go.mongodb.org/mongo-driver/mongo"
"golang.org/x/sync/errgroup"
)
Expand Down
42 changes: 21 additions & 21 deletions cmd/mqtt/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,16 @@ import (
mproxymqtt "github.com/absmach/mproxy/pkg/mqtt"
"github.com/absmach/mproxy/pkg/mqtt/websocket"
"github.com/absmach/mproxy/pkg/session"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/cenkalti/backoff/v4"
"golang.org/x/sync/errgroup"
)

const (
svcName = "mqtt"
envPrefixAuthz = "MG_THINGS_AUTH_GRPC_"
envPrefixMQTT = "MG_MQTT_ADAPTER_"
envPrefixWS = "MG_MQTT_ADAPTER_WS_"
)

type config struct {
Expand All @@ -57,7 +59,6 @@ type config struct {
HTTPPort string `env:"MG_MQTT_ADAPTER_WS_PORT" envDefault:"8080"`
HTTPTargetHost string `env:"MG_MQTT_ADAPTER_WS_TARGET_HOST" envDefault:"localhost"`
HTTPTargetPort string `env:"MG_MQTT_ADAPTER_WS_TARGET_PORT" envDefault:"8080"`
HTTPTargetPath string `env:"MG_MQTT_ADAPTER_WS_TARGET_PATH" envDefault:"/mqtt"`
Instance string `env:"MG_MQTT_ADAPTER_INSTANCE" envDefault:""`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://localhost:14268/api/traces"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
Expand All @@ -75,7 +76,6 @@ func main() {
if err := env.Parse(&cfg); err != nil {
log.Fatalf("failed to load %s configuration : %s", svcName, err)
}

logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err.Error())
Expand Down Expand Up @@ -188,16 +188,16 @@ func main() {
chc := chclient.New(svcName, magistrala.Version, logger, cancel)
go chc.CallHome(ctx)
}

var interceptor session.Interceptor

logger.Info(fmt.Sprintf("Starting MQTT proxy on port %s", cfg.MQTTPort))
g.Go(func() error {
return proxyMQTT(ctx, cfg, logger, h, interceptor)
return proxyMQTT(ctx, logger, h, interceptor)
})

logger.Info(fmt.Sprintf("Starting MQTT over WS proxy on port %s", cfg.HTTPPort))
g.Go(func() error {
return proxyWS(ctx, cfg, logger, h, interceptor)
return proxyWS(ctx, logger, h, interceptor)
})

g.Go(func() error {
Expand All @@ -209,36 +209,36 @@ func main() {
}
}

func proxyMQTT(ctx context.Context, cfg config, logger *slog.Logger, sessionHandler session.Handler, interceptor session.Interceptor) error {
config := mproxy.Config{
Address: fmt.Sprintf(":%s", cfg.MQTTPort),
Target: fmt.Sprintf("%s:%s", cfg.MQTTTargetHost, cfg.MQTTTargetPort),
func proxyMQTT(ctx context.Context, logger *slog.Logger, sessionHandler session.Handler, interceptor session.Interceptor) error {
mqttConfig, err := mproxy.NewConfig(env.Options{Prefix: envPrefixMQTT})
if err != nil {
return (err)
}
mproxy := mproxymqtt.New(config, sessionHandler, interceptor, logger)

mqttProxy := mproxymqtt.New(mqttConfig, sessionHandler, interceptor, logger)

errCh := make(chan error)
go func() {
errCh <- mproxy.Listen(ctx)
errCh <- mqttProxy.Listen(ctx)
}()

select {
case <-ctx.Done():
logger.Info(fmt.Sprintf("proxy MQTT shutdown at %s", config.Target))
logger.Info(fmt.Sprintf("proxy MQTT shutdown at %s", mqttConfig.Target))
return nil
case err := <-errCh:
return err
}
}

func proxyWS(ctx context.Context, cfg config, logger *slog.Logger, sessionHandler session.Handler, interceptor session.Interceptor) error {
config := mproxy.Config{
Address: fmt.Sprintf("%s:%s", "", cfg.HTTPPort),
Target: fmt.Sprintf("%s:%s", cfg.HTTPTargetHost, cfg.HTTPTargetPort),
PathPrefix: "/mqtt",
func proxyWS(ctx context.Context, logger *slog.Logger, sessionHandler session.Handler, interceptor session.Interceptor) error {
wsConfig, err := mproxy.NewConfig(env.Options{Prefix: envPrefixWS})
if err != nil {
return (err)
}

wp := websocket.New(config, sessionHandler, interceptor, logger)
http.HandleFunc("/mqtt", wp.ServeHTTP)
wp := websocket.New(wsConfig, sessionHandler, interceptor, logger)
http.Handle("/mqtt", wp)

errCh := make(chan error)

Expand All @@ -248,7 +248,7 @@ func proxyWS(ctx context.Context, cfg config, logger *slog.Logger, sessionHandle

select {
case <-ctx.Done():
logger.Info(fmt.Sprintf("proxy MQTT WS shutdown at %s", config.Target))
logger.Info(fmt.Sprintf("proxy MQTT WS shutdown at %s", wsConfig.Target))
return nil
case err := <-errCh:
return err
Expand Down
2 changes: 1 addition & 1 deletion cmd/opcua/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import (
"github.com/absmach/magistrala/pkg/messaging/brokers"
brokerstracing "github.com/absmach/magistrala/pkg/messaging/brokers/tracing"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/go-redis/redis/v8"
"golang.org/x/sync/errgroup"
)
Expand Down
2 changes: 1 addition & 1 deletion cmd/postgres-reader/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
"github.com/absmach/magistrala/readers"
"github.com/absmach/magistrala/readers/api"
"github.com/absmach/magistrala/readers/postgres"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/jmoiron/sqlx"
"golang.org/x/sync/errgroup"
)
Expand Down
2 changes: 1 addition & 1 deletion cmd/postgres-writer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import (
"github.com/absmach/magistrala/pkg/messaging/brokers"
brokerstracing "github.com/absmach/magistrala/pkg/messaging/brokers/tracing"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/jmoiron/sqlx"
"golang.org/x/sync/errgroup"
)
Expand Down
2 changes: 1 addition & 1 deletion cmd/provision/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (
"github.com/absmach/magistrala/pkg/uuid"
"github.com/absmach/magistrala/provision"
"github.com/absmach/magistrala/provision/api"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"golang.org/x/sync/errgroup"
)

Expand Down
2 changes: 1 addition & 1 deletion cmd/smpp-notifier/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import (
brokerstracing "github.com/absmach/magistrala/pkg/messaging/brokers/tracing"
"github.com/absmach/magistrala/pkg/ulid"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/jmoiron/sqlx"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
Expand Down
2 changes: 1 addition & 1 deletion cmd/smtp-notifier/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import (
brokerstracing "github.com/absmach/magistrala/pkg/messaging/brokers/tracing"
"github.com/absmach/magistrala/pkg/ulid"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/jmoiron/sqlx"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
Expand Down
2 changes: 1 addition & 1 deletion cmd/things/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ import (
thingspg "github.com/absmach/magistrala/things/postgres"
localusers "github.com/absmach/magistrala/things/standalone"
ctracing "github.com/absmach/magistrala/things/tracing"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/go-chi/chi/v5"
"github.com/go-redis/redis/v8"
"github.com/jmoiron/sqlx"
Expand Down
2 changes: 1 addition & 1 deletion cmd/timescale-reader/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
"github.com/absmach/magistrala/readers"
"github.com/absmach/magistrala/readers/api"
"github.com/absmach/magistrala/readers/timescale"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/jmoiron/sqlx"
"golang.org/x/sync/errgroup"
)
Expand Down
2 changes: 1 addition & 1 deletion cmd/timescale-writer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import (
"github.com/absmach/magistrala/pkg/messaging/brokers"
brokerstracing "github.com/absmach/magistrala/pkg/messaging/brokers/tracing"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/jmoiron/sqlx"
"golang.org/x/sync/errgroup"
)
Expand Down
2 changes: 1 addition & 1 deletion cmd/twins/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import (
"github.com/absmach/magistrala/twins/events"
twmongodb "github.com/absmach/magistrala/twins/mongodb"
"github.com/absmach/magistrala/twins/tracing"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/go-redis/redis/v8"
"go.mongodb.org/mongo-driver/mongo"
"go.opentelemetry.io/otel/trace"
Expand Down
2 changes: 1 addition & 1 deletion cmd/users/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import (
"github.com/absmach/magistrala/users/hasher"
clientspg "github.com/absmach/magistrala/users/postgres"
ctracing "github.com/absmach/magistrala/users/tracing"
"github.com/caarlos0/env/v10"
"github.com/caarlos0/env/v11"
"github.com/go-chi/chi/v5"
"github.com/jmoiron/sqlx"
"go.opentelemetry.io/otel/trace"
Expand Down
Loading
Loading