NOISSUE - Remove internal env package (#32)

* refactor(env): Remove internal env package

- update env package to v10
- fix jaeger not sending traces
- added jaeger URL as url.URL rather than string value
- made changes to jaeger provider

* feat(auth): Modify env variables in .env file

Update the AccessDuration variable in main.go to reflect the desired token duration for authentication.
Additionally, modify various environment variables in the .env file related to the auth module.
These changes include updating configuration settings for auth and datastore services, such as token duration, logging level, database details, and server settings.
These modifications are necessary for proper functionality and are intended for use in a Docker Compose file.

Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>

* fix(docker): fix incorrect variable name in docker-compose.yml

Fixed an issue where the variable name for the PostgreSQL database was incorrect in the docker-compose.yml file. Updated the variable name from "MG_AUTH_DB" to "MG_AUTH_DB_NAME" to properly set the name of the database.

Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>

---------

Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
This commit is contained in:
b1ackd0t
2023-11-16 18:46:46 +03:00
committed by GitHub
parent c294e84d24
commit 2bccf0c85e
38 changed files with 209 additions and 458 deletions
+16 -24
View File
@@ -7,6 +7,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"time"
@@ -22,7 +23,6 @@ import (
"github.com/absmach/magistrala/internal"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/postgres"
"github.com/absmach/magistrala/internal/server"
grpcserver "github.com/absmach/magistrala/internal/server/grpc"
@@ -32,6 +32,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/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
"go.opentelemetry.io/otel/trace"
@@ -53,17 +54,17 @@ const (
)
type config struct {
LogLevel string `env:"MG_AUTH_LOG_LEVEL" envDefault:"info"`
SecretKey string `env:"MG_AUTH_SECRET_KEY" envDefault:"secret"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_AUTH_ADAPTER_INSTANCE_ID" envDefault:""`
AccessDuration string `env:"MG_AUTH_ACCESS_TOKEN_DURATION" envDefault:"30m"`
RefreshDuration string `env:"MG_AUTH_REFRESH_TOKEN_DURATION" envDefault:"24h"`
SpicedbHost string `env:"MG_SPICEDB_HOST" envDefault:"localhost"`
SpicedbPort string `env:"MG_SPICEDB_PORT" envDefault:"50051"`
SpicedbSchemaFile string `env:"MG_SPICEDB_SCHEMA_FILE" envDefault:"./docker/spicedb/schema.zed"`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
LogLevel string `env:"MG_AUTH_LOG_LEVEL" envDefault:"info"`
SecretKey string `env:"MG_AUTH_SECRET_KEY" envDefault:"secret"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_AUTH_ADAPTER_INSTANCE_ID" envDefault:""`
AccessDuration time.Duration `env:"MG_AUTH_ACCESS_TOKEN_DURATION" envDefault:"1h"`
RefreshDuration time.Duration `env:"MG_AUTH_REFRESH_TOKEN_DURATION" envDefault:"24h"`
SpicedbHost string `env:"MG_SPICEDB_HOST" envDefault:"localhost"`
SpicedbPort string `env:"MG_SPICEDB_PORT" envDefault:"50051"`
SpicedbSchemaFile string `env:"MG_SPICEDB_SCHEMA_FILE" envDefault:"./docker/spicedb/schema.zed"`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
}
func main() {
@@ -126,7 +127,7 @@ func main() {
svc := newService(db, tracer, cfg, dbConfig, logger, spicedbclient)
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err.Error()))
exitCode = 1
return
@@ -134,7 +135,7 @@ func main() {
hs := httpserver.New(ctx, cancel, svcName, httpServerConfig, httpapi.MakeHandler(svc, logger, cfg.InstanceID), logger)
grpcServerConfig := server.Config{Port: defSvcGRPCPort}
if err := env.Parse(&grpcServerConfig, env.Options{Prefix: envPrefixGrpc}); err != nil {
if err := env.ParseWithOptions(&grpcServerConfig, env.Options{Prefix: envPrefixGrpc}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s gRPC server configuration : %s", svcName, err.Error()))
exitCode = 1
return
@@ -205,16 +206,7 @@ func newService(db *sqlx.DB, tracer trace.Tracer, cfg config, dbConfig pgclient.
idProvider := uuid.New()
t := jwt.New([]byte(cfg.SecretKey))
aDuration, err := time.ParseDuration(cfg.AccessDuration)
if err != nil {
logger.Error(fmt.Sprintf("failed to parse access token duration: %s", err.Error()))
}
rDuration, err := time.ParseDuration(cfg.RefreshDuration)
if err != nil {
logger.Error(fmt.Sprintf("failed to parse refresh token duration: %s", err.Error()))
}
svc := auth.New(keysRepo, domainsRepo, idProvider, t, pa, aDuration, rDuration)
svc := auth.New(keysRepo, domainsRepo, idProvider, t, pa, cfg.AccessDuration, cfg.RefreshDuration)
svc = api.LoggingMiddleware(svc, logger)
counter, latency := internal.MakeMetrics("groups", "api")
svc = api.MetricsMiddleware(svc, counter, latency)
+4 -3
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -21,7 +22,6 @@ import (
authclient "github.com/absmach/magistrala/internal/clients/grpc/auth"
"github.com/absmach/magistrala/internal/clients/jaeger"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/postgres"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
@@ -29,6 +29,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/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
"go.opentelemetry.io/otel/trace"
@@ -50,7 +51,7 @@ type config struct {
EncKey string `env:"MG_BOOTSTRAP_ENCRYPT_KEY" envDefault:"12345678910111213141516171819202"`
ESConsumerName string `env:"MG_BOOTSTRAP_EVENT_CONSUMER" envDefault:"bootstrap"`
ThingsURL string `env:"MG_THINGS_URL" envDefault:"http://localhost:9000"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_BOOTSTRAP_INSTANCE_ID" envDefault:""`
ESURL string `env:"MG_BOOTSTRAP_ES_URL" envDefault:"redis://localhost:6379/0"`
@@ -133,7 +134,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+2 -2
View File
@@ -14,7 +14,6 @@ import (
"github.com/absmach/magistrala/internal"
cassandraclient "github.com/absmach/magistrala/internal/clients/cassandra"
authclient "github.com/absmach/magistrala/internal/clients/grpc/auth"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -22,6 +21,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/gocql/gocql"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
@@ -100,7 +100,7 @@ func main() {
// Create new http server
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+4 -3
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -18,13 +19,13 @@ import (
"github.com/absmach/magistrala/internal"
cassandraclient "github.com/absmach/magistrala/internal/clients/cassandra"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
"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/gocql/gocql"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
@@ -41,7 +42,7 @@ type config struct {
LogLevel string `env:"MG_CASSANDRA_WRITER_LOG_LEVEL" envDefault:"info"`
ConfigPath string `env:"MG_CASSANDRA_WRITER_CONFIG_PATH" envDefault:"/config.toml"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_CASSANDRA_WRITER_INSTANCE_ID" envDefault:""`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
@@ -74,7 +75,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+4 -3
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -20,13 +21,13 @@ import (
authclient "github.com/absmach/magistrala/internal/clients/grpc/auth"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/postgres"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
mgsdk "github.com/absmach/magistrala/pkg/sdk/go"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
"go.opentelemetry.io/otel/trace"
@@ -45,7 +46,7 @@ type config struct {
LogLevel string `env:"MG_CERTS_LOG_LEVEL" envDefault:"info"`
CertsURL string `env:"MG_SDK_CERTS_URL" envDefault:"http://localhost"`
ThingsURL string `env:"MG_THINGS_URL" envDefault:"http://things:9000"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_CERTS_INSTANCE_ID" envDefault:""`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
@@ -137,7 +138,7 @@ func main() {
svc := newService(auth, db, tracer, logger, cfg, dbConfig, pkiclient)
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+5 -4
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -17,7 +18,6 @@ import (
"github.com/absmach/magistrala/internal"
authapi "github.com/absmach/magistrala/internal/clients/grpc/auth"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
coapserver "github.com/absmach/magistrala/internal/server/coap"
httpserver "github.com/absmach/magistrala/internal/server/http"
@@ -25,6 +25,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"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
)
@@ -40,7 +41,7 @@ const (
type config struct {
LogLevel string `env:"MG_COAP_ADAPTER_LOG_LEVEL" envDefault:"info"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_COAP_ADAPTER_INSTANCE_ID" envDefault:""`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
@@ -72,14 +73,14 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
}
coapServerConfig := server.Config{Port: defSvcCoAPPort}
if err := env.Parse(&coapServerConfig, env.Options{Prefix: envPrefix}); err != nil {
if err := env.ParseWithOptions(&coapServerConfig, env.Options{Prefix: envPrefix}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s CoAP server configuration : %s", svcName, err))
exitCode = 1
return
+4 -3
View File
@@ -9,6 +9,7 @@ import (
"fmt"
"log"
"net/http"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -17,7 +18,6 @@ import (
"github.com/absmach/magistrala/internal"
authapi "github.com/absmach/magistrala/internal/clients/grpc/auth"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -26,6 +26,7 @@ import (
brokerstracing "github.com/absmach/magistrala/pkg/messaging/brokers/tracing"
"github.com/absmach/magistrala/pkg/messaging/handler"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
chclient "github.com/mainflux/callhome/pkg/client"
mproxy "github.com/mainflux/mproxy/pkg/http"
"github.com/mainflux/mproxy/pkg/session"
@@ -44,7 +45,7 @@ const (
type config struct {
LogLevel string `env:"MG_HTTP_ADAPTER_LOG_LEVEL" envDefault:"info"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_HTTP_ADAPTER_INSTANCE_ID" envDefault:""`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
@@ -76,7 +77,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefix}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefix}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+5 -5
View File
@@ -14,7 +14,6 @@ import (
"github.com/absmach/magistrala/internal"
authclient "github.com/absmach/magistrala/internal/clients/grpc/auth"
influxdbclient "github.com/absmach/magistrala/internal/clients/influxdb"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -22,6 +21,7 @@ import (
"github.com/absmach/magistrala/readers"
"github.com/absmach/magistrala/readers/api"
"github.com/absmach/magistrala/readers/influxdb"
"github.com/caarlos0/env/v10"
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
@@ -35,8 +35,8 @@ const (
)
type config struct {
LogLevel string `env:"MG_INFLUX_READER_LOG_LEVEL" envDefault:"info"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
LogLevel string `env:"MG_INFLUX_READER_LOG_LEVEL" envDefault:"info"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_INFLUX_READER_INSTANCE_ID" envDefault:""`
}
@@ -86,7 +86,7 @@ func main() {
logger.Info("Successfully connected to things grpc server " + tcHandler.Secure())
influxDBConfig := influxdbclient.Config{}
if err := env.Parse(&influxDBConfig, env.Options{Prefix: envPrefixDB}); err != nil {
if err := env.ParseWithOptions(&influxDBConfig, env.Options{Prefix: envPrefixDB}); err != nil {
logger.Error(fmt.Sprintf("failed to load InfluxDB client configuration from environment variable : %s", err))
exitCode = 1
return
@@ -109,7 +109,7 @@ func main() {
repo := newService(client, repocfg, logger)
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+5 -4
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -17,13 +18,13 @@ import (
"github.com/absmach/magistrala/consumers/writers/influxdb"
influxdbclient "github.com/absmach/magistrala/internal/clients/influxdb"
"github.com/absmach/magistrala/internal/clients/jaeger"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
"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"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
)
@@ -39,7 +40,7 @@ type config struct {
LogLevel string `env:"MG_INFLUX_WRITER_LOG_LEVEL" envDefault:"info"`
ConfigPath string `env:"MG_INFLUX_WRITER_CONFIG_PATH" envDefault:"/config.toml"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_INFLUX_WRITER_INSTANCE_ID" envDefault:""`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
@@ -71,7 +72,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
@@ -100,7 +101,7 @@ func main() {
pubSub = brokerstracing.NewPubSub(httpServerConfig, tracer, pubSub)
influxDBConfig := influxdbclient.Config{}
if err := env.Parse(&influxDBConfig, env.Options{Prefix: envPrefixDB}); err != nil {
if err := env.ParseWithOptions(&influxDBConfig, env.Options{Prefix: envPrefixDB}); err != nil {
logger.Error(fmt.Sprintf("failed to load InfluxDB client configuration from environment variable : %s", err))
exitCode = 1
return
+4 -3
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"time"
@@ -15,7 +16,6 @@ import (
"github.com/absmach/magistrala/internal"
"github.com/absmach/magistrala/internal/clients/jaeger"
redisclient "github.com/absmach/magistrala/internal/clients/redis"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -28,6 +28,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"
mqttpaho "github.com/eclipse/paho.mqtt.golang"
"github.com/go-redis/redis/v8"
chclient "github.com/mainflux/callhome/pkg/client"
@@ -54,7 +55,7 @@ type config struct {
LoraMsgTimeout time.Duration `env:"MG_LORA_ADAPTER_MESSAGES_TIMEOUT" envDefault:"30s"`
ESConsumerName string `env:"MG_LORA_ADAPTER_EVENT_CONSUMER" envDefault:"lora-adapter"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_LORA_ADAPTER_INSTANCE_ID" envDefault:""`
ESURL string `env:"MG_LORA_ADAPTER_ES_URL" envDefault:"redis://localhost:6379/0"`
@@ -88,7 +89,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+2 -2
View File
@@ -14,7 +14,6 @@ import (
"github.com/absmach/magistrala/internal"
authclient "github.com/absmach/magistrala/internal/clients/grpc/auth"
mongoclient "github.com/absmach/magistrala/internal/clients/mongo"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -22,6 +21,7 @@ import (
"github.com/absmach/magistrala/readers"
"github.com/absmach/magistrala/readers/api"
"github.com/absmach/magistrala/readers/mongodb"
"github.com/caarlos0/env/v10"
chclient "github.com/mainflux/callhome/pkg/client"
"go.mongodb.org/mongo-driver/mongo"
"golang.org/x/sync/errgroup"
@@ -95,7 +95,7 @@ func main() {
logger.Info("Successfully connected to things grpc server " + tcHandler.Secure())
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+4 -3
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -18,13 +19,13 @@ import (
"github.com/absmach/magistrala/internal"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
mongoclient "github.com/absmach/magistrala/internal/clients/mongo"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
"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"
chclient "github.com/mainflux/callhome/pkg/client"
"go.mongodb.org/mongo-driver/mongo"
"golang.org/x/sync/errgroup"
@@ -41,7 +42,7 @@ type config struct {
LogLevel string `env:"MG_MONGO_WRITER_LOG_LEVEL" envDefault:"info"`
ConfigPath string `env:"MG_MONGO_WRITER_CONFIG_PATH" envDefault:"/config.toml"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_MONGO_WRITER_INSTANCE_ID" envDefault:""`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
@@ -73,7 +74,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+3 -2
View File
@@ -10,13 +10,13 @@ import (
"io"
"log"
"net/http"
"net/url"
"os"
"time"
"github.com/absmach/magistrala"
authapi "github.com/absmach/magistrala/internal/clients/grpc/auth"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/mqtt"
@@ -28,6 +28,7 @@ import (
"github.com/absmach/magistrala/pkg/messaging/handler"
mqttpub "github.com/absmach/magistrala/pkg/messaging/mqtt"
"github.com/absmach/magistrala/pkg/uuid"
"github.com/caarlos0/env/v10"
"github.com/cenkalti/backoff/v4"
chclient "github.com/mainflux/callhome/pkg/client"
mp "github.com/mainflux/mproxy/pkg/mqtt"
@@ -51,7 +52,7 @@ type config struct {
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 string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_MQTT_ADAPTER_INSTANCE_ID" envDefault:""`
+4 -3
View File
@@ -8,13 +8,13 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
redisclient "github.com/absmach/magistrala/internal/clients/redis"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -27,6 +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/go-redis/redis/v8"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
@@ -48,7 +49,7 @@ type config struct {
LogLevel string `env:"MG_OPCUA_ADAPTER_LOG_LEVEL" envDefault:"info"`
ESConsumerName string `env:"MG_OPCUA_ADAPTER_EVENT_CONSUMER" envDefault:"opcua-adapter"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_OPCUA_ADAPTER_INSTANCE_ID" envDefault:""`
ESURL string `env:"MG_OPCUA_ADAPTER_ES_URL" envDefault:"redis://localhost:6379/0"`
@@ -87,7 +88,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+2 -2
View File
@@ -14,7 +14,6 @@ import (
"github.com/absmach/magistrala/internal"
authclient "github.com/absmach/magistrala/internal/clients/grpc/auth"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -22,6 +21,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/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
@@ -103,7 +103,7 @@ func main() {
repo := newService(db, logger)
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+4 -3
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -18,13 +19,13 @@ import (
"github.com/absmach/magistrala/internal"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
"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/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
@@ -42,7 +43,7 @@ type config struct {
LogLevel string `env:"MG_POSTGRES_WRITER_LOG_LEVEL" envDefault:"info"`
ConfigPath string `env:"MG_POSTGRES_WRITER_CONFIG_PATH" envDefault:"/config.toml"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_POSTGRES_WRITER_INSTANCE_ID" envDefault:""`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
@@ -74,7 +75,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+1 -1
View File
@@ -13,7 +13,6 @@ import (
"reflect"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -24,6 +23,7 @@ import (
"github.com/absmach/magistrala/pkg/uuid"
"github.com/absmach/magistrala/provision"
"github.com/absmach/magistrala/provision/api"
"github.com/caarlos0/env/v10"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
)
+4 -3
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -21,7 +22,6 @@ import (
authclient "github.com/absmach/magistrala/internal/clients/grpc/auth"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -29,6 +29,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/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
"go.opentelemetry.io/otel/trace"
@@ -48,7 +49,7 @@ type config struct {
From string `env:"MG_SMPP_NOTIFIER_FROM_ADDR" envDefault:""`
ConfigPath string `env:"MG_SMPP_NOTIFIER_CONFIG_PATH" envDefault:"/config.toml"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_SMPP_NOTIFIER_INSTANCE_ID" envDefault:""`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
@@ -94,7 +95,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+4 -3
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -22,7 +23,6 @@ import (
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
"github.com/absmach/magistrala/internal/email"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -30,6 +30,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/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
"go.opentelemetry.io/otel/trace"
@@ -49,7 +50,7 @@ type config struct {
ConfigPath string `env:"MG_SMTP_NOTIFIER_CONFIG_PATH" envDefault:"/config.toml"`
From string `env:"MG_SMTP_NOTIFIER_FROM_ADDR" envDefault:""`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_SMTP_NOTIFIER_INSTANCE_ID" envDefault:""`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
@@ -97,7 +98,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+17 -21
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"time"
@@ -17,7 +18,6 @@ import (
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
redisclient "github.com/absmach/magistrala/internal/clients/redis"
"github.com/absmach/magistrala/internal/env"
mggroups "github.com/absmach/magistrala/internal/groups"
gapi "github.com/absmach/magistrala/internal/groups/api"
gpostgres "github.com/absmach/magistrala/internal/groups/postgres"
@@ -38,6 +38,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/go-chi/chi/v5"
"github.com/go-redis/redis/v8"
"github.com/jmoiron/sqlx"
@@ -59,16 +60,16 @@ const (
)
type config struct {
LogLevel string `env:"MG_THINGS_LOG_LEVEL" envDefault:"info"`
StandaloneID string `env:"MG_THINGS_STANDALONE_ID" envDefault:""`
StandaloneToken string `env:"MG_THINGS_STANDALONE_TOKEN" envDefault:""`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
CacheKeyDuration string `env:"MG_THINGS_CACHE_KEY_DURATION" envDefault:"10m"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_THINGS_INSTANCE_ID" envDefault:""`
ESURL string `env:"MG_THINGS_ES_URL" envDefault:"redis://localhost:6379/0"`
CacheURL string `env:"MG_THINGS_CACHE_URL" envDefault:"redis://localhost:6379/0"`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
LogLevel string `env:"MG_THINGS_LOG_LEVEL" envDefault:"info"`
StandaloneID string `env:"MG_THINGS_STANDALONE_ID" envDefault:""`
StandaloneToken string `env:"MG_THINGS_STANDALONE_TOKEN" envDefault:""`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
CacheKeyDuration time.Duration `env:"MG_THINGS_CACHE_KEY_DURATION" envDefault:"10m"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_THINGS_INSTANCE_ID" envDefault:""`
ESURL string `env:"MG_THINGS_ES_URL" envDefault:"redis://localhost:6379/0"`
CacheURL string `env:"MG_THINGS_CACHE_URL" envDefault:"redis://localhost:6379/0"`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
}
func main() {
@@ -162,7 +163,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
@@ -171,7 +172,7 @@ func main() {
httpSvc := httpserver.New(ctx, cancel, svcName, httpServerConfig, httpapi.MakeHandler(csvc, gsvc, mux, logger, cfg.InstanceID), logger)
grpcServerConfig := server.Config{Port: defSvcAuthGRPCPort}
if err := env.Parse(&grpcServerConfig, env.Options{Prefix: envPrefixGRPC}); err != nil {
if err := env.ParseWithOptions(&grpcServerConfig, env.Options{Prefix: envPrefixGRPC}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s gRPC server configuration : %s", svcName, err))
exitCode = 1
return
@@ -205,24 +206,19 @@ func main() {
}
}
func newService(ctx context.Context, db *sqlx.DB, dbConfig pgclient.Config, auth magistrala.AuthServiceClient, cacheClient *redis.Client, keyDuration, esURL string, tracer trace.Tracer, logger mglog.Logger) (things.Service, groups.Service, error) {
func newService(ctx context.Context, db *sqlx.DB, dbConfig pgclient.Config, auth magistrala.AuthServiceClient, cacheClient *redis.Client, keyDuration time.Duration, esURL string, tracer trace.Tracer, logger mglog.Logger) (things.Service, groups.Service, error) {
database := postgres.NewDatabase(db, dbConfig, tracer)
cRepo := thingspg.NewRepository(database)
gRepo := gpostgres.New(database)
idp := uuid.New()
kDuration, err := time.ParseDuration(keyDuration)
if err != nil {
logger.Error(fmt.Sprintf("failed to parse cache key duration: %s", err.Error()))
}
thingCache := thcache.NewCache(cacheClient, kDuration)
thingCache := thcache.NewCache(cacheClient, keyDuration)
csvc := things.NewService(auth, cRepo, gRepo, thingCache, idp)
gsvc := mggroups.NewService(gRepo, idp, auth)
csvc, err = thevents.NewEventStoreMiddleware(ctx, csvc, esURL)
csvc, err := thevents.NewEventStoreMiddleware(ctx, csvc, esURL)
if err != nil {
return nil, nil, err
}
+2 -2
View File
@@ -14,7 +14,6 @@ import (
"github.com/absmach/magistrala/internal"
authclient "github.com/absmach/magistrala/internal/clients/grpc/auth"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -22,6 +21,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/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
@@ -101,7 +101,7 @@ func main() {
logger.Info("Successfully connected to things grpc server " + tcHandler.Secure())
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+4 -3
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -18,13 +19,13 @@ import (
"github.com/absmach/magistrala/internal"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
"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/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
@@ -42,7 +43,7 @@ type config struct {
LogLevel string `env:"MG_TIMESCALE_WRITER_LOG_LEVEL" envDefault:"info"`
ConfigPath string `env:"MG_TIMESCALE_WRITER_CONFIG_PATH" envDefault:"/config.toml"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_TIMESCALE_WRITER_INSTANCE_ID" envDefault:""`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
@@ -74,7 +75,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+4 -3
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
@@ -16,7 +17,6 @@ import (
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
mongoclient "github.com/absmach/magistrala/internal/clients/mongo"
redisclient "github.com/absmach/magistrala/internal/clients/redis"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -31,6 +31,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/go-redis/redis/v8"
chclient "github.com/mainflux/callhome/pkg/client"
"go.mongodb.org/mongo-driver/mongo"
@@ -51,7 +52,7 @@ type config struct {
StandaloneToken string `env:"MG_TWINS_STANDALONE_TOKEN" envDefault:""`
ChannelID string `env:"MG_TWINS_CHANNEL_ID" envDefault:""`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_TWINS_INSTANCE_ID" envDefault:""`
ESURL string `env:"MG_TWINS_ES_URL" envDefault:"redis://localhost:6379/0"`
@@ -85,7 +86,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+15 -16
View File
@@ -8,6 +8,7 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"regexp"
"time"
@@ -19,7 +20,6 @@ import (
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
"github.com/absmach/magistrala/internal/email"
"github.com/absmach/magistrala/internal/env"
mggroups "github.com/absmach/magistrala/internal/groups"
gapi "github.com/absmach/magistrala/internal/groups/api"
gevents "github.com/absmach/magistrala/internal/groups/events"
@@ -40,6 +40,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/go-chi/chi/v5"
"github.com/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
@@ -58,20 +59,18 @@ const (
)
type config struct {
LogLevel string `env:"MG_USERS_LOG_LEVEL" envDefault:"info"`
SecretKey string `env:"MG_USERS_SECRET_KEY" envDefault:"secret"`
AdminEmail string `env:"MG_USERS_ADMIN_EMAIL" envDefault:""`
AdminPassword string `env:"MG_USERS_ADMIN_PASSWORD" envDefault:""`
PassRegexText string `env:"MG_USERS_PASS_REGEX" envDefault:"^.{8,}$"`
AccessDuration string `env:"MG_USERS_ACCESS_TOKEN_DURATION" envDefault:"15m"`
RefreshDuration string `env:"MG_USERS_REFRESH_TOKEN_DURATION" envDefault:"24h"`
ResetURL string `env:"MG_TOKEN_RESET_ENDPOINT" envDefault:"/reset-request"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_USERS_INSTANCE_ID" envDefault:""`
ESURL string `env:"MG_USERS_ES_URL" envDefault:"redis://localhost:6379/0"`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
PassRegex *regexp.Regexp
LogLevel string `env:"MG_USERS_LOG_LEVEL" envDefault:"info"`
SecretKey string `env:"MG_USERS_SECRET_KEY" envDefault:"secret"`
AdminEmail string `env:"MG_USERS_ADMIN_EMAIL" envDefault:""`
AdminPassword string `env:"MG_USERS_ADMIN_PASSWORD" envDefault:""`
PassRegexText string `env:"MG_USERS_PASS_REGEX" envDefault:"^.{8,}$"`
ResetURL string `env:"MG_TOKEN_RESET_ENDPOINT" envDefault:"/reset-request"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_USERS_INSTANCE_ID" envDefault:""`
ESURL string `env:"MG_USERS_ES_URL" envDefault:"redis://localhost:6379/0"`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
PassRegex *regexp.Regexp
}
func main() {
@@ -159,7 +158,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err.Error()))
exitCode = 1
return
+4 -3
View File
@@ -8,13 +8,13 @@ import (
"context"
"fmt"
"log"
"net/url"
"os"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
authapi "github.com/absmach/magistrala/internal/clients/grpc/auth"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
mglog "github.com/absmach/magistrala/logger"
@@ -25,6 +25,7 @@ import (
"github.com/absmach/magistrala/ws"
"github.com/absmach/magistrala/ws/api"
"github.com/absmach/magistrala/ws/tracing"
"github.com/caarlos0/env/v10"
chclient "github.com/mainflux/callhome/pkg/client"
"github.com/mainflux/mproxy/pkg/session"
"github.com/mainflux/mproxy/pkg/websockets"
@@ -43,7 +44,7 @@ const (
type config struct {
LogLevel string `env:"MG_WS_ADAPTER_LOG_LEVEL" envDefault:"info"`
BrokerURL string `env:"MG_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
JaegerURL string `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
JaegerURL url.URL `env:"MG_JAEGER_URL" envDefault:"http://jaeger:14268/api/traces"`
SendTelemetry bool `env:"MG_SEND_TELEMETRY" envDefault:"true"`
InstanceID string `env:"MG_WS_ADAPTER_INSTANCE_ID" envDefault:""`
TraceRatio float64 `env:"MG_JAEGER_TRACE_RATIO" envDefault:"1.0"`
@@ -75,7 +76,7 @@ func main() {
}
httpServerConfig := server.Config{Port: defSvcHTTPPort}
if err := env.Parse(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
if err := env.ParseWithOptions(&httpServerConfig, env.Options{Prefix: envPrefixHTTP}); err != nil {
logger.Error(fmt.Sprintf("failed to load %s HTTP server configuration : %s", svcName, err))
exitCode = 1
return
+26 -9
View File
@@ -56,11 +56,10 @@ MG_ES_STORE_TYPE=${MG_MESSAGE_BROKER_TYPE}
MG_ES_STORE_URL=${MG_NATS_URL}
## Jaeger
MG_JAEGER_PORT=6831
MG_JAEGER_COLLECTOR_OTLP_ENABLED=true
MG_JAEGER_FRONTEND=16686
MG_JAEGER_COLLECTOR=14268
MG_JAEGER_CONFIGS=5778
MG_JAEGER_URL=http://jaeger:14268/api/traces
MG_JAEGER_OLTP_HTTP=4318
MG_JAEGER_URL=http://jaeger:4318
MG_JAEGER_TRACE_RATIO=1.0
## Call home
@@ -73,17 +72,35 @@ MG_POSTGRES_MAX_CONNECTIONS=100
### Auth
MG_AUTH_LOG_LEVEL=debug
MG_AUTH_HTTP_HOST=auth
MG_AUTH_HTTP_PORT=8189
MG_AUTH_HTTP_SERVER_CERT=
MG_AUTH_HTTP_SERVER_KEY=
MG_AUTH_GRPC_HOST=auth
MG_AUTH_GRPC_PORT=8181
MG_AUTH_GRPC_URL=auth:8181
MG_AUTH_GRPC_TIMEOUT=300s
MG_AUTH_GRPC_SERVER_CERT=${GRPC_MTLS:+./ssl/certs/auth-grpc-server.crt}${GRPC_TLS:+./ssl/certs/auth-grpc-server.crt}
MG_AUTH_GRPC_SERVER_KEY=${GRPC_MTLS:+./ssl/certs/auth-grpc-server.key}${GRPC_TLS:+./ssl/certs/auth-grpc-server.key}
MG_AUTH_GRPC_SERVER_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}${GRPC_TLS:+./ssl/certs/ca.crt}
MG_AUTH_DB_HOST=auth-db
MG_AUTH_DB_PORT=5432
MG_AUTH_DB_USER=magistrala
MG_AUTH_DB_PASS=magistrala
MG_AUTH_DB=auth
MG_AUTH_SECRET=secret
MG_AUTH_ACCESS_TOKEN_DURATION="300m"
MG_AUTH_DB_NAME=auth
MG_AUTH_DB_SSL_MODE=disable
MG_AUTH_DB_SSL_CERT=
MG_AUTH_DB_SSL_KEY=
MG_AUTH_DB_SSL_ROOT_CERT=
MG_AUTH_SECRET_KEY=HyE2D4RUt9nnKG6v8zKEqAp6g6ka8hhZsqUpzgKvnwpXrNVQSH
MG_AUTH_ACCESS_TOKEN_DURATION="1h"
MG_AUTH_REFRESH_TOKEN_DURATION="24h"
MG_AUTH_ADAPTER_INSTANCE_ID=
#### Auth GRPC Client Config
MG_AUTH_GRPC_URL=auth:8181
MG_AUTH_GRPC_TIMEOUT=300s
MG_AUTH_GRPC_CLIENT_CERT=${GRPC_MTLS:+./ssl/certs/auth-grpc-client.crt}
MG_AUTH_GRPC_CLIENT_KEY=${GRPC_MTLS:+./ssl/certs/auth-grpc-client.key}
MG_AUTH_GRPC_CLIENT_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}
### SpiceDB Datastore config
MG_SPICEDB_DB_USER=magistrala
+30 -11
View File
@@ -79,7 +79,7 @@ services:
environment:
POSTGRES_USER: ${MG_AUTH_DB_USER}
POSTGRES_PASSWORD: ${MG_AUTH_DB_PASS}
POSTGRES_DB: ${MG_AUTH_DB}
POSTGRES_DB: ${MG_AUTH_DB_NAME}
networks:
- magistrala-base-net
volumes:
@@ -95,19 +95,38 @@ services:
- ${MG_AUTH_GRPC_PORT}
restart: on-failure
environment:
MG_AUTH_LOG_LEVEL: ${MG_AUTH_LOG_LEVEL}
MG_SPICEDB_SCHEMA_FILE: ${MG_SPICEDB_SCHEMA_FILE}
MG_SPICEDB_HOST: ${MG_SPICEDB_HOST}
MG_SPICEDB_PORT: ${MG_SPICEDB_PORT}
MG_AUTH_LOG_LEVEL: ${MG_AUTH_LOG_LEVEL}
MG_AUTH_DB_HOST: auth-db
MG_AUTH_ACCESS_TOKEN_DURATION: ${MG_AUTH_ACCESS_TOKEN_DURATION}
MG_AUTH_REFRESH_TOKEN_DURATION: ${MG_AUTH_REFRESH_TOKEN_DURATION}
MG_AUTH_SECRET_KEY: ${MG_AUTH_SECRET_KEY}
MG_AUTH_HTTP_HOST: ${MG_AUTH_HTTP_HOST}
MG_AUTH_HTTP_PORT: ${MG_AUTH_HTTP_PORT}
MG_AUTH_HTTP_SERVER_CERT: ${MG_AUTH_HTTP_SERVER_CERT}
MG_AUTH_HTTP_SERVER_KEY: ${MG_AUTH_HTTP_SERVER_KEY}
MG_AUTH_GRPC_HOST: ${MG_AUTH_GRPC_HOST}
MG_AUTH_GRPC_PORT: ${MG_AUTH_GRPC_PORT}
## Compose supports parameter expansion in environment,
## Eg: ${VAR:+replacement} or ${VAR+replacement} -> replacement if VAR is set and non-empty, otherwise empty
## Eg :${VAR:-default} or ${VAR-default} -> value of VAR if set and non-empty, otherwise default
MG_AUTH_GRPC_SERVER_CERT: ${MG_AUTH_GRPC_SERVER_CERT:+/auth-grpc-server.crt}
MG_AUTH_GRPC_SERVER_KEY: ${MG_AUTH_GRPC_SERVER_KEY:+/auth-grpc-server.key}
MG_AUTH_GRPC_SERVER_CA_CERTS: ${MG_AUTH_GRPC_SERVER_CA_CERTS:+/auth-grpc-server-ca.crt}
MG_AUTH_DB_HOST: ${MG_AUTH_DB_HOST}
MG_AUTH_DB_PORT: ${MG_AUTH_DB_PORT}
MG_AUTH_DB_USER: ${MG_AUTH_DB_USER}
MG_AUTH_DB_PASS: ${MG_AUTH_DB_PASS}
MG_AUTH_DB: ${MG_AUTH_DB}
MG_AUTH_HTTP_PORT: ${MG_AUTH_HTTP_PORT}
MG_AUTH_GRPC_PORT: ${MG_AUTH_GRPC_PORT}
MG_AUTH_SECRET: ${MG_AUTH_SECRET}
MG_AUTH_ACCESS_TOKEN_DURATION: ${MG_AUTH_ACCESS_TOKEN_DURATION}
MG_AUTH_DB_NAME: ${MG_AUTH_DB_NAME}
MG_AUTH_DB_SSL_MODE: ${MG_AUTH_DB_SSL_MODE}
MG_AUTH_DB_SSL_CERT: ${MG_AUTH_DB_SSL_CERT}
MG_AUTH_DB_SSL_KEY: ${MG_AUTH_DB_SSL_KEY}
MG_AUTH_DB_SSL_ROOT_CERT: ${MG_AUTH_DB_SSL_ROOT_CERT}
MG_JAEGER_URL: ${MG_JAEGER_URL}
MG_JAEGER_TRACE_RATIO: ${MG_JAEGER_TRACE_RATIO}
MG_SEND_TELEMETRY: ${MG_SEND_TELEMETRY}
MG_AUTH_ADAPTER_INSTANCE_ID: ${MG_AUTH_ADAPTER_INSTANCE_ID}
ports:
- ${MG_AUTH_HTTP_PORT}:${MG_AUTH_HTTP_PORT}
- ${MG_AUTH_GRPC_PORT}:${MG_AUTH_GRPC_PORT}
@@ -353,11 +372,11 @@ services:
jaeger:
image: jaegertracing/all-in-one:1.38.0
container_name: magistrala-jaeger
environment:
COLLECTOR_OTLP_ENABLED: ${MG_JAEGER_COLLECTOR_OTLP_ENABLED}
ports:
- ${MG_JAEGER_PORT}:${MG_JAEGER_PORT}/udp
- ${MG_JAEGER_FRONTEND}:${MG_JAEGER_FRONTEND}
- ${MG_JAEGER_COLLECTOR}:${MG_JAEGER_COLLECTOR}
- ${MG_JAEGER_CONFIGS}:${MG_JAEGER_CONFIGS}
- ${MG_JAEGER_OLTP_HTTP}:${MG_JAEGER_OLTP_HTTP}
networks:
- magistrala-base-net
+1 -1
View File
@@ -6,7 +6,7 @@ require (
github.com/0x6flab/namegenerator v1.1.0
github.com/authzed/authzed-go v0.10.1
github.com/authzed/grpcutil v0.0.0-20230908193239-4286bb1d6403
github.com/caarlos0/env/v7 v7.1.0
github.com/caarlos0/env/v10 v10.0.0
github.com/cenkalti/backoff/v4 v4.2.1
github.com/docker/docker v24.0.7+incompatible
github.com/eclipse/paho.mqtt.golang v1.4.3
+2 -2
View File
@@ -131,8 +131,8 @@ github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ
github.com/bytedance/sonic v1.10.2 h1:GQebETVBxYB7JGWJtLBi07OVzWwt+8dWA00gEVW2ZFE=
github.com/bytedance/sonic v1.10.2/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4=
github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34=
github.com/caarlos0/env/v7 v7.1.0 h1:9lzTF5amyQeWHZzuZeKlCb5FWSUxpG1js43mhbY8ozg=
github.com/caarlos0/env/v7 v7.1.0/go.mod h1:LPPWniDUq4JaO6Q41vtlyikhMknqymCLBw0eX4dcH1E=
github.com/caarlos0/env/v10 v10.0.0 h1:yIHUBZGsyqCnpTkbjk8asUlx6RFhhEs+h7TOBdgdzXA=
github.com/caarlos0/env/v10 v10.0.0/go.mod h1:ZfulV76NvVPw3tm591U4SwL3Xx9ldzBP9aGxzeN7G18=
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
github.com/cenkalti/backoff v2.0.0+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
+2 -2
View File
@@ -4,8 +4,8 @@
package cassandra
import (
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/pkg/errors"
"github.com/caarlos0/env/v10"
"github.com/gocql/gocql"
)
@@ -34,7 +34,7 @@ func Setup(envPrefix string) (*gocql.Session, error) {
// the initial query in database.
func SetupDB(envPrefix string, initQuery string) (*gocql.Session, error) {
config := Config{}
if err := env.Parse(&config, env.Options{Prefix: envPrefix}); err != nil {
if err := env.ParseWithOptions(&config, env.Options{Prefix: envPrefix}); err != nil {
return nil, errors.Wrap(errConfig, err)
}
cs, err := Connect(config)
+3 -3
View File
@@ -7,9 +7,9 @@ import (
"github.com/absmach/magistrala"
authgrpc "github.com/absmach/magistrala/auth/api/grpc"
grpcclient "github.com/absmach/magistrala/internal/clients/grpc"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/pkg/errors"
thingsauth "github.com/absmach/magistrala/things/api/grpc"
"github.com/caarlos0/env/v10"
)
const (
@@ -22,7 +22,7 @@ var errGrpcConfig = errors.New("failed to load grpc configuration")
// Setup loads Auth gRPC configuration from environment variable and creates new Auth gRPC API.
func Setup(svcName string) (magistrala.AuthServiceClient, grpcclient.ClientHandler, error) {
config := grpcclient.Config{}
if err := env.Parse(&config, env.Options{Prefix: envAuthGrpcPrefix}); err != nil {
if err := env.ParseWithOptions(&config, env.Options{Prefix: envAuthGrpcPrefix}); err != nil {
return nil, nil, errors.Wrap(errGrpcConfig, err)
}
c, ch, err := grpcclient.Setup(config, svcName)
@@ -36,7 +36,7 @@ func Setup(svcName string) (magistrala.AuthServiceClient, grpcclient.ClientHandl
// Setup loads Auth gRPC configuration from environment variable and creates new Auth gRPC API.
func SetupAuthz(svcName string) (magistrala.AuthzServiceClient, grpcclient.ClientHandler, error) {
config := grpcclient.Config{}
if err := env.Parse(&config, env.Options{Prefix: envAuthzGrpcPrefix}); err != nil {
if err := env.ParseWithOptions(&config, env.Options{Prefix: envAuthzGrpcPrefix}); err != nil {
return nil, nil, errors.Wrap(errGrpcConfig, err)
}
c, ch, err := grpcclient.Setup(config, svcName)
+2 -2
View File
@@ -7,8 +7,8 @@ import (
"context"
"time"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/pkg/errors"
"github.com/caarlos0/env/v10"
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
)
@@ -36,7 +36,7 @@ type Config struct {
// Setup load configuration from environment variable, create InfluxDB client and connect to InfluxDB server.
func Setup(ctx context.Context, envPrefix string) (influxdb2.Client, error) {
config := Config{}
if err := env.Parse(&config, env.Options{Prefix: envPrefix}); err != nil {
if err := env.ParseWithOptions(&config, env.Options{Prefix: envPrefix}); err != nil {
return nil, errors.Wrap(errConfig, err)
}
return Connect(ctx, config)
+11 -17
View File
@@ -25,8 +25,8 @@ var (
)
// NewProvider initializes Jaeger TraceProvider.
func NewProvider(ctx context.Context, svcName, jaegerUrl, instanceID string, fraction float64) (*trace.TracerProvider, error) {
if jaegerUrl == "" {
func NewProvider(ctx context.Context, svcName string, jaegerUrl url.URL, instanceID string, fraction float64) (*trace.TracerProvider, error) {
if jaegerUrl == (url.URL{}) {
return nil, errNoURL
}
@@ -34,27 +34,21 @@ func NewProvider(ctx context.Context, svcName, jaegerUrl, instanceID string, fra
return nil, errNoSvcName
}
url, err := url.Parse(jaegerUrl)
if err != nil {
return nil, err
}
var exporter *otlptrace.Exporter
switch url.Scheme {
var client otlptrace.Client
switch jaegerUrl.Scheme {
case "http":
exporter, err = otlptracehttp.New(ctx, otlptracehttp.WithEndpoint(url.Host), otlptracehttp.WithURLPath(url.Path), otlptracehttp.WithInsecure())
if err != nil {
return nil, err
}
client = otlptracehttp.NewClient(otlptracehttp.WithEndpoint(jaegerUrl.Host), otlptracehttp.WithURLPath(jaegerUrl.Path), otlptracehttp.WithInsecure())
case "https":
exporter, err = otlptracehttp.New(ctx, otlptracehttp.WithEndpoint(url.Host), otlptracehttp.WithURLPath(url.Path))
if err != nil {
return nil, err
}
client = otlptracehttp.NewClient(otlptracehttp.WithEndpoint(jaegerUrl.Host), otlptracehttp.WithURLPath(jaegerUrl.Path))
default:
return nil, errUnsupportedTraceURLScheme
}
exporter, err := otlptrace.New(ctx, client)
if err != nil {
return nil, err
}
attributes := []attribute.KeyValue{
semconv.ServiceNameKey.String(svcName),
attribute.String("host.id", instanceID),
+2 -2
View File
@@ -7,8 +7,8 @@ import (
"context"
"fmt"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/pkg/errors"
"github.com/caarlos0/env/v10"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
@@ -40,7 +40,7 @@ func Connect(cfg Config) (*mongo.Database, error) {
// Setup load configuration from environment, create new MongoDB client and connect to MongoDB server.
func Setup(envPrefix string) (*mongo.Database, error) {
cfg := Config{}
if err := env.Parse(&cfg, env.Options{Prefix: envPrefix}); err != nil {
if err := env.ParseWithOptions(&cfg, env.Options{Prefix: envPrefix}); err != nil {
return nil, errors.Wrap(errConfig, err)
}
db, err := Connect(cfg)
+3 -3
View File
@@ -6,8 +6,8 @@ package postgres
import (
"fmt"
"github.com/absmach/magistrala/internal/env"
"github.com/absmach/magistrala/pkg/errors"
"github.com/caarlos0/env/v10"
_ "github.com/jackc/pgx/v5/stdlib" // required for SQL access
"github.com/jmoiron/sqlx"
migrate "github.com/rubenv/sql-migrate"
@@ -41,7 +41,7 @@ func Setup(prefix string, migrations migrate.MemoryMigrationSource) (*sqlx.DB, e
// unapplied database migrations. A non-nil error is returned to indicate failure.
func SetupWithConfig(prefix string, migrations migrate.MemoryMigrationSource, defConfig Config) (*sqlx.DB, error) {
cfg := defConfig
if err := env.Parse(&cfg, env.Options{Prefix: prefix}); err != nil {
if err := env.ParseWithOptions(&cfg, env.Options{Prefix: prefix}); err != nil {
return nil, errors.Wrap(errConfig, err)
}
return SetupDB(cfg, migrations)
@@ -82,7 +82,7 @@ func MigrateDB(db *sqlx.DB, migrations migrate.MemoryMigrationSource) error {
}
func (c *Config) LoadEnv(prefix string) error {
if err := env.Parse(c, env.Options{Prefix: prefix}); err != nil {
if err := env.ParseWithOptions(c, env.Options{Prefix: prefix}); err != nil {
return errors.Wrap(errConfig, err)
}
return nil
-6
View File
@@ -1,6 +0,0 @@
// Copyright (c) Magistrala
// SPDX-License-Identifier: Apache-2.0
// Package env contains the domain concept definitions needed to support
// magistrala environment variable functionality.
package env
-41
View File
@@ -1,41 +0,0 @@
// Copyright (c) Magistrala
// SPDX-License-Identifier: Apache-2.0
package env
import (
"github.com/caarlos0/env/v7"
)
type Options struct {
// Environment keys and values that will be accessible for the service
Environment map[string]string
// TagName specifies another tagname to use rather than the default env
TagName string
// RequiredIfNoDef automatically sets all env as required if they do not declare 'envDefault'
RequiredIfNoDef bool
// OnSet allows to run a function when a value is set
OnSet env.OnSetFn
// Prefix define a prefix for each key
Prefix string
}
func Parse(v interface{}, opts ...Options) error {
altOpts := []env.Options{}
for _, opt := range opts {
altOpts = append(altOpts, env.Options{
Environment: opt.Environment,
TagName: opt.TagName,
RequiredIfNoDef: opt.RequiredIfNoDef,
OnSet: opt.OnSet,
Prefix: opt.Prefix,
})
}
return env.Parse(v, altOpts...)
}
-235
View File
@@ -1,235 +0,0 @@
// Copyright (c) Magistrala
// SPDX-License-Identifier: Apache-2.0
package env
import (
"fmt"
"testing"
"time"
"github.com/absmach/magistrala/internal/clients/grpc"
"github.com/absmach/magistrala/internal/server"
"github.com/absmach/magistrala/pkg/errors"
"github.com/stretchr/testify/assert"
)
var errNotDuration error = errors.New("unable to parse duration")
func TestParseServerConfig(t *testing.T) {
tests := []struct {
description string
config *server.Config
expectedConfig *server.Config
options []Options
err error
}{
{
"Parsing with Server Config",
&server.Config{},
&server.Config{
Host: "localhost",
Port: "8080",
CertFile: "cert",
KeyFile: "key",
ServerCAFile: "server-ca-certs",
ClientCAFile: "client-ca-certs",
},
[]Options{
{
Environment: map[string]string{
"HOST": "localhost",
"PORT": "8080",
"SERVER_CERT": "cert",
"SERVER_KEY": "key",
"SERVER_CA_CERTS": "server-ca-certs",
"CLIENT_CA_CERTS": "client-ca-certs",
},
},
},
nil,
},
{
"Parsing with Server Config with Prefix",
&server.Config{},
&server.Config{
Host: "localhost",
Port: "8080",
CertFile: "cert",
KeyFile: "key",
ServerCAFile: "server-ca-certs",
ClientCAFile: "client-ca-certs",
},
[]Options{
{
Environment: map[string]string{
"MG-HOST": "localhost",
"MG-PORT": "8080",
"MG-SERVER_CERT": "cert",
"MG-SERVER_KEY": "key",
"MG-SERVER_CA_CERTS": "server-ca-certs",
"MG-CLIENT_CA_CERTS": "client-ca-certs",
},
Prefix: "MG-",
},
},
nil,
},
}
for _, test := range tests {
err := Parse(test.config, test.options...)
switch test.err {
case nil:
assert.NoError(t, err, fmt.Sprintf("%s: expected no error but got %v", test.description, err))
default:
assert.Error(t, err, fmt.Sprintf("%s: expected error but got nil", test.description))
}
assert.Equal(t, test.expectedConfig, test.config, fmt.Sprintf("%s: expected %v got %v", test.description, test.expectedConfig, test.config))
}
}
func TestParseGRPCConfig(t *testing.T) {
tests := []struct {
description string
config *grpc.Config
expectedConfig *grpc.Config
options []Options
err error
}{
{
"Parsing a grpc.Config struct",
&grpc.Config{},
&grpc.Config{
URL: "val.com",
Timeout: time.Second,
},
[]Options{
{
Environment: map[string]string{
"URL": "val.com",
"TIMEOUT": time.Second.String(),
},
},
},
nil,
},
{
"Invalid type parsing",
&grpc.Config{},
&grpc.Config{URL: "val.com"},
[]Options{
{
Environment: map[string]string{
"URL": "val.com",
"TIMEOUT": "invalid",
},
},
},
errNotDuration,
},
{
"Parsing all configs",
&grpc.Config{},
&grpc.Config{
URL: "val.com",
Timeout: time.Second,
ServerCAFile: "server-ca-cert",
ClientCert: "client-cert",
ClientKey: "client-key",
},
[]Options{
{
Environment: map[string]string{
"MG-URL": "val.com",
"MG-TIMEOUT": "1s",
"MG-SERVER_CA_CERTS": "server-ca-cert",
"MG-CLIENT_CERT": "client-cert",
"MG-CLIENT_KEY": "client-key",
},
Prefix: "MG-",
},
},
nil,
},
}
for _, test := range tests {
err := Parse(test.config, test.options...)
switch test.err {
case nil:
assert.NoError(t, err, fmt.Sprintf("%s: expected no error but got %v", test.description, err))
default:
assert.Error(t, err, fmt.Sprintf("%s: expected error but got nil", test.description))
}
assert.Equal(t, test.expectedConfig, test.config, fmt.Sprintf("%s: expected %v got %v", test.description, test.expectedConfig, test.config))
}
}
func TestParseCustomConfig(t *testing.T) {
type CustomConfig struct {
Field1 string `env:"FIELD1" envDefault:"val1"`
Field2 int `env:"FIELD2"`
}
tests := []struct {
description string
config *CustomConfig
expectedConfig *CustomConfig
options []Options
err error
}{
{
"parse with missing required field",
&CustomConfig{},
&CustomConfig{Field1: "test val"},
[]Options{
{
Environment: map[string]string{
"FIELD1": "test val",
},
RequiredIfNoDef: true,
},
},
errors.New(`required environment variable "FIELD2" not set`),
},
{
"parse with wrong type",
&CustomConfig{},
&CustomConfig{Field1: "test val"},
[]Options{
{
Environment: map[string]string{
"FIELD1": "test val",
"FIELD2": "not int",
},
},
},
errors.New(`strconv.ParseInt`),
},
{
"parse with prefix",
&CustomConfig{},
&CustomConfig{Field1: "test val", Field2: 2},
[]Options{
{
Environment: map[string]string{
"MG-FIELD1": "test val",
"MG-FIELD2": "2",
},
Prefix: "MG-",
},
},
nil,
},
}
for _, test := range tests {
err := Parse(test.config, test.options...)
switch test.err {
case nil:
assert.NoError(t, err, fmt.Sprintf("expected no error but got %v", err))
default:
assert.Error(t, err, "expected error but got nil")
}
assert.Equal(t, test.expectedConfig, test.config, fmt.Sprintf("expected %v got %v", test.expectedConfig, test.config))
}
}