MG-234 - Improve Logging (#255)

Signed-off-by: Musilah <nataleigh.nk@gmail.co>
Signed-off-by: Musilah <nataleigh.nk@gmail.com>
Co-authored-by: Musilah <nataleigh.nk@gmail.co>
Co-authored-by: Dušan Borovčanin <dusan.borovcanin@abstractmachines.fr>
This commit is contained in:
Nataly Musilah
2024-01-18 17:28:04 +03:00
committed by GitHub
parent 95f31d70a2
commit 8c084b177e
118 changed files with 413 additions and 1455 deletions
+6
View File
@@ -51,6 +51,12 @@ jobs:
with:
fetch-depth: 0
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: 1.21.x
cache-dependency-path: "go.sum"
- name: Check for changes in specific paths
uses: dorny/paths-filter@v2
id: changes
+1 -1
View File
@@ -18,7 +18,7 @@ linters-settings:
no-unaliased: true
no-extra-aliases: false
alias:
- pkg: github.com/mainflux/callhome/pkg/client
- pkg: github.com/absmach/callhome/pkg/client
alias: chclient
- pkg: github.com/absmach/magistrala/logger
alias: mglog
+3 -2
View File
@@ -4,16 +4,17 @@
package domains
import (
"log/slog"
"github.com/absmach/magistrala/auth"
"github.com/absmach/magistrala/internal/api"
"github.com/absmach/magistrala/internal/apiutil"
mglog "github.com/absmach/magistrala/logger"
"github.com/go-chi/chi/v5"
kithttp "github.com/go-kit/kit/transport/http"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
)
func MakeHandler(svc auth.Service, mux *chi.Mux, logger mglog.Logger) *chi.Mux {
func MakeHandler(svc auth.Service, mux *chi.Mux, logger *slog.Logger) *chi.Mux {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, api.EncodeError)),
}
+1 -2
View File
@@ -78,8 +78,7 @@ func newService() (auth.Service, *mocks.KeyRepository) {
}
func newServer(svc auth.Service) *httptest.Server {
logger := mglog.NewMock()
mux := httpapi.MakeHandler(svc, logger, "")
mux := httpapi.MakeHandler(svc, mglog.NewMock(), "")
return httptest.NewServer(mux)
}
+2 -2
View File
@@ -6,13 +6,13 @@ package keys
import (
"context"
"encoding/json"
"log/slog"
"net/http"
"strings"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/auth"
"github.com/absmach/magistrala/internal/apiutil"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
"github.com/go-chi/chi/v5"
kithttp "github.com/go-kit/kit/transport/http"
@@ -21,7 +21,7 @@ import (
const contentType = "application/json"
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc auth.Service, mux *chi.Mux, logger mglog.Logger) *chi.Mux {
func MakeHandler(svc auth.Service, mux *chi.Mux, logger *slog.Logger) *chi.Mux {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, encodeError)),
}
+2 -2
View File
@@ -3,19 +3,19 @@
package http
import (
"log/slog"
"net/http"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/auth"
"github.com/absmach/magistrala/auth/api/http/domains"
"github.com/absmach/magistrala/auth/api/http/keys"
mglog "github.com/absmach/magistrala/logger"
"github.com/go-chi/chi/v5"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc auth.Service, logger mglog.Logger, instanceID string) http.Handler {
func MakeHandler(svc auth.Service, logger *slog.Logger, instanceID string) http.Handler {
mux := chi.NewRouter()
mux = keys.MakeHandler(svc, mux, logger)
+3 -3
View File
@@ -8,21 +8,21 @@ package api
import (
"context"
"fmt"
"log/slog"
"time"
"github.com/absmach/magistrala/auth"
mglog "github.com/absmach/magistrala/logger"
)
var _ auth.Service = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
svc auth.Service
}
// LoggingMiddleware adds logging facilities to the core service.
func LoggingMiddleware(svc auth.Service, logger mglog.Logger) auth.Service {
func LoggingMiddleware(svc auth.Service, logger *slog.Logger) auth.Service {
return &loggingMiddleware{logger, svc}
}
+3 -3
View File
@@ -7,9 +7,9 @@ import (
"context"
"fmt"
"io"
"log/slog"
"github.com/absmach/magistrala/auth"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
svcerr "github.com/absmach/magistrala/pkg/errors/service"
v1 "github.com/authzed/authzed-go/proto/authzed/api/v1"
@@ -33,10 +33,10 @@ var (
type policyAgent struct {
client *authzed.ClientWithExperimental
permissionClient v1.PermissionsServiceClient
logger mglog.Logger
logger *slog.Logger
}
func NewPolicyAgent(client *authzed.ClientWithExperimental, logger mglog.Logger) auth.PolicyAgent {
func NewPolicyAgent(client *authzed.ClientWithExperimental, logger *slog.Logger) auth.PolicyAgent {
return &policyAgent{
client: client,
permissionClient: client.PermissionsServiceClient,
+3 -3
View File
@@ -8,21 +8,21 @@ package api
import (
"context"
"fmt"
"log/slog"
"time"
"github.com/absmach/magistrala/bootstrap"
mglog "github.com/absmach/magistrala/logger"
)
var _ bootstrap.Service = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
svc bootstrap.Service
}
// LoggingMiddleware adds logging facilities to the bootstrap service.
func LoggingMiddleware(svc bootstrap.Service, logger mglog.Logger) bootstrap.Service {
func LoggingMiddleware(svc bootstrap.Service, logger *slog.Logger) bootstrap.Service {
return &loggingMiddleware{logger, svc}
}
+2 -2
View File
@@ -6,6 +6,7 @@ package api
import (
"context"
"encoding/json"
"log/slog"
"net/http"
"net/url"
"strings"
@@ -13,7 +14,6 @@ import (
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/bootstrap"
"github.com/absmach/magistrala/internal/apiutil"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
svcerr "github.com/absmach/magistrala/pkg/errors/service"
"github.com/go-chi/chi/v5"
@@ -38,7 +38,7 @@ var (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc bootstrap.Service, reader bootstrap.ConfigReader, logger mglog.Logger, instanceID string) http.Handler {
func MakeHandler(svc bootstrap.Service, reader bootstrap.ConfigReader, logger *slog.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, encodeError)),
}
+3 -3
View File
@@ -8,12 +8,12 @@ import (
"database/sql"
"encoding/json"
"fmt"
"log/slog"
"strings"
"time"
"github.com/absmach/magistrala/bootstrap"
"github.com/absmach/magistrala/internal/postgres"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/clients"
"github.com/absmach/magistrala/pkg/errors"
"github.com/jackc/pgerrcode"
@@ -37,12 +37,12 @@ var _ bootstrap.ConfigRepository = (*configRepository)(nil)
type configRepository struct {
db postgres.Database
log mglog.Logger
log *slog.Logger
}
// NewConfigRepository instantiates a PostgreSQL implementation of config
// repository.
func NewConfigRepository(db postgres.Database, log mglog.Logger) bootstrap.ConfigRepository {
func NewConfigRepository(db postgres.Database, log *slog.Logger) bootstrap.ConfigRepository {
return &configRepository{db: db, log: log}
}
+1 -1
View File
@@ -16,7 +16,7 @@ import (
)
var (
testLog, _ = mglog.New(os.Stdout, mglog.Info.String())
testLog, _ = mglog.New(os.Stdout, "info")
db *sqlx.DB
)
+3 -3
View File
@@ -8,21 +8,21 @@ package api
import (
"context"
"fmt"
"log/slog"
"time"
"github.com/absmach/magistrala/certs"
mglog "github.com/absmach/magistrala/logger"
)
var _ certs.Service = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
svc certs.Service
}
// LoggingMiddleware adds logging facilities to the bootstrap service.
func LoggingMiddleware(svc certs.Service, logger mglog.Logger) certs.Service {
func LoggingMiddleware(svc certs.Service, logger *slog.Logger) certs.Service {
return &loggingMiddleware{logger, svc}
}
+2 -2
View File
@@ -6,12 +6,12 @@ package api
import (
"context"
"encoding/json"
"log/slog"
"net/http"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/certs"
"github.com/absmach/magistrala/internal/apiutil"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
svcerr "github.com/absmach/magistrala/pkg/errors/service"
"github.com/go-chi/chi/v5"
@@ -29,7 +29,7 @@ const (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc certs.Service, logger mglog.Logger, instanceID string) http.Handler {
func MakeHandler(svc certs.Service, logger *slog.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, encodeError)),
}
+3 -3
View File
@@ -7,11 +7,11 @@ import (
"context"
"database/sql"
"fmt"
"log/slog"
"time"
"github.com/absmach/magistrala/certs"
"github.com/absmach/magistrala/internal/postgres"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
"github.com/jackc/pgerrcode"
"github.com/jackc/pgx/v5/pgconn"
@@ -29,12 +29,12 @@ type Cert struct {
type certsRepository struct {
db postgres.Database
log mglog.Logger
log *slog.Logger
}
// NewRepository instantiates a PostgreSQL implementation of certs
// repository.
func NewRepository(db postgres.Database, log mglog.Logger) certs.Repository {
func NewRepository(db postgres.Database, log *slog.Logger) certs.Repository {
return &certsRepository{db: db, log: log}
}
+1 -1
View File
@@ -17,7 +17,7 @@ import (
)
var (
testLog, _ = mglog.New(os.Stdout, mglog.Info.String())
testLog, _ = mglog.New(os.Stdout, "info")
db *sqlx.DB
)
+5 -4
View File
@@ -7,10 +7,12 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
"time"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/auth"
api "github.com/absmach/magistrala/auth/api"
@@ -34,7 +36,6 @@ import (
"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"
"golang.org/x/sync/errgroup"
"google.golang.org/grpc"
@@ -79,7 +80,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
logger.Fatal(fmt.Sprintf("failed to init logger: %s", err.Error()))
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -95,7 +96,7 @@ func main() {
dbConfig := pgclient.Config{Name: defDB}
if err := env.ParseWithOptions(&dbConfig, env.Options{Prefix: envPrefixDB}); err != nil {
logger.Fatal(err.Error())
logger.Error(err.Error())
}
db, err := pgclient.Setup(dbConfig, *apostgres.Migration())
@@ -200,7 +201,7 @@ func initSchema(ctx context.Context, client *authzed.ClientWithExperimental, sch
return nil
}
func newService(db *sqlx.DB, tracer trace.Tracer, cfg config, dbConfig pgclient.Config, logger mglog.Logger, spicedbClient *authzed.ClientWithExperimental) auth.Service {
func newService(db *sqlx.DB, tracer trace.Tracer, cfg config, dbConfig pgclient.Config, logger *slog.Logger, spicedbClient *authzed.ClientWithExperimental) auth.Service {
database := postgres.NewDatabase(db, dbConfig, tracer)
keysRepo := apostgres.New(database)
domainsRepo := apostgres.NewDomainRepository(database)
+6 -5
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/bootstrap"
"github.com/absmach/magistrala/bootstrap/api"
@@ -31,7 +33,6 @@ import (
"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"
"golang.org/x/sync/errgroup"
)
@@ -71,7 +72,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -88,7 +89,7 @@ func main() {
// Create new postgres client
dbConfig := pgclient.Config{Name: defDB}
if err := env.ParseWithOptions(&dbConfig, env.Options{Prefix: envPrefixDB}); err != nil {
logger.Fatal(err.Error())
logger.Error(err.Error())
}
db, err := pgclient.Setup(dbConfig, *bootstrappg.Migration())
if err != nil {
@@ -167,7 +168,7 @@ func main() {
}
}
func newService(ctx context.Context, authClient magistrala.AuthServiceClient, db *sqlx.DB, tracer trace.Tracer, logger mglog.Logger, cfg config, dbConfig pgclient.Config) (bootstrap.Service, error) {
func newService(ctx context.Context, authClient magistrala.AuthServiceClient, db *sqlx.DB, tracer trace.Tracer, logger *slog.Logger, cfg config, dbConfig pgclient.Config) (bootstrap.Service, error) {
database := postgres.NewDatabase(db, dbConfig, tracer)
repoConfig := bootstrappg.NewConfigRepository(database, logger)
@@ -194,7 +195,7 @@ func newService(ctx context.Context, authClient magistrala.AuthServiceClient, db
return svc, nil
}
func subscribeToThingsES(ctx context.Context, svc bootstrap.Service, cfg config, logger mglog.Logger) error {
func subscribeToThingsES(ctx context.Context, svc bootstrap.Service, cfg config, logger *slog.Logger) error {
subscriber, err := store.NewSubscriber(ctx, cfg.ESURL, thingsStream, cfg.ESConsumerName, logger)
if err != nil {
return err
+4 -3
View File
@@ -8,8 +8,10 @@ import (
"context"
"fmt"
"log"
"log/slog"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
cassandraclient "github.com/absmach/magistrala/internal/clients/cassandra"
@@ -23,7 +25,6 @@ import (
"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"
)
@@ -54,7 +55,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -142,7 +143,7 @@ func main() {
}
}
func newService(csdSession *gocql.Session, logger mglog.Logger) readers.MessageRepository {
func newService(csdSession *gocql.Session, logger *slog.Logger) readers.MessageRepository {
repo := cassandra.New(csdSession)
repo = api.LoggingMiddleware(repo, logger)
counter, latency := internal.MakeMetrics("cassandra", "message_reader")
+4 -3
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/consumers"
consumertracing "github.com/absmach/magistrala/consumers/tracing"
@@ -27,7 +29,6 @@ import (
"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"
)
@@ -60,7 +61,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -145,7 +146,7 @@ func main() {
}
}
func newService(session *gocql.Session, logger mglog.Logger) consumers.BlockingConsumer {
func newService(session *gocql.Session, logger *slog.Logger) consumers.BlockingConsumer {
repo := cassandra.New(session)
repo = api.LoggingMiddleware(repo, logger)
counter, latency := internal.MakeMetrics("cassandra", "message_writer")
+5 -4
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/certs"
"github.com/absmach/magistrala/certs/api"
@@ -29,7 +31,6 @@ import (
"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"
"golang.org/x/sync/errgroup"
)
@@ -73,7 +74,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -102,7 +103,7 @@ func main() {
dbConfig := pgclient.Config{Name: defDB}
if err := env.ParseWithOptions(&dbConfig, env.Options{Prefix: envPrefixDB}); err != nil {
logger.Fatal(err.Error())
logger.Error(err.Error())
}
db, err := pgclient.Setup(dbConfig, *certspg.Migration())
if err != nil {
@@ -170,7 +171,7 @@ func main() {
}
}
func newService(authClient magistrala.AuthServiceClient, db *sqlx.DB, tracer trace.Tracer, logger mglog.Logger, cfg config, dbConfig pgclient.Config, pkiAgent vault.Agent) certs.Service {
func newService(authClient magistrala.AuthServiceClient, db *sqlx.DB, tracer trace.Tracer, logger *slog.Logger, cfg config, dbConfig pgclient.Config, pkiAgent vault.Agent) certs.Service {
database := postgres.NewDatabase(db, dbConfig, tracer)
certsRepo := certspg.NewRepository(database, logger)
config := mgsdk.Config{
+2 -2
View File
@@ -11,6 +11,7 @@ import (
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/coap"
"github.com/absmach/magistrala/coap/api"
@@ -26,7 +27,6 @@ import (
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"
)
@@ -59,7 +59,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
+5 -4
View File
@@ -8,10 +8,12 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/http"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
adapter "github.com/absmach/magistrala/http"
"github.com/absmach/magistrala/http/api"
@@ -29,7 +31,6 @@ import (
mproxy "github.com/absmach/mproxy/pkg/http"
"github.com/absmach/mproxy/pkg/session"
"github.com/caarlos0/env/v10"
chclient "github.com/mainflux/callhome/pkg/client"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
)
@@ -63,7 +64,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -150,7 +151,7 @@ func main() {
}
}
func newService(pub messaging.Publisher, tc magistrala.AuthzServiceClient, logger mglog.Logger, tracer trace.Tracer) session.Handler {
func newService(pub messaging.Publisher, tc magistrala.AuthzServiceClient, logger *slog.Logger, tracer trace.Tracer) session.Handler {
svc := adapter.NewHandler(pub, logger, tc)
svc = handler.NewTracing(tracer, svc)
svc = handler.LoggingMiddleware(svc, logger)
@@ -159,7 +160,7 @@ func newService(pub messaging.Publisher, tc magistrala.AuthzServiceClient, logge
return svc
}
func proxyHTTP(ctx context.Context, cfg server.Config, logger mglog.Logger, sessionHandler session.Handler) error {
func proxyHTTP(ctx context.Context, cfg server.Config, logger *slog.Logger, sessionHandler session.Handler) error {
address := fmt.Sprintf("%s:%s", "", cfg.Port)
target := fmt.Sprintf("%s:%s", targetHTTPHost, targetHTTPPort)
mp, err := mproxy.NewProxy(address, target, sessionHandler, logger)
+4 -3
View File
@@ -8,8 +8,10 @@ import (
"context"
"fmt"
"log"
"log/slog"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
influxdbclient "github.com/absmach/magistrala/internal/clients/influxdb"
@@ -23,7 +25,6 @@ import (
"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"
)
@@ -53,7 +54,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -150,7 +151,7 @@ func main() {
}
}
func newService(client influxdb2.Client, repocfg influxdb.RepoConfig, logger mglog.Logger) readers.MessageRepository {
func newService(client influxdb2.Client, repocfg influxdb.RepoConfig, logger *slog.Logger) readers.MessageRepository {
repo := influxdb.New(client, repocfg)
repo = api.LoggingMiddleware(repo, logger)
counter, latency := internal.MakeMetrics("influxdb", "message_reader")
+4 -3
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/consumers"
consumertracing "github.com/absmach/magistrala/consumers/tracing"
@@ -25,7 +27,6 @@ import (
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"
)
@@ -57,7 +58,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -125,7 +126,7 @@ func main() {
repo = consumertracing.NewAsync(tracer, repo, httpServerConfig)
// Start consuming and logging errors.
go func(log mglog.Logger) {
go func(log *slog.Logger) {
for err := range repo.Errors() {
if err != nil {
log.Error(err.Error())
+5 -3
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
"github.com/absmach/magistrala/internal/clients/jaeger"
@@ -28,7 +30,6 @@ import (
"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"
"golang.org/x/sync/errgroup"
)
@@ -63,8 +64,9 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
defer mglog.ExitWithError(&exitCode)
@@ -152,7 +154,7 @@ func main() {
}
}
func newService(db *sqlx.DB, dbConfig clientspg.Config, authClient magistrala.AuthServiceClient, tracer trace.Tracer, conf config, logger mglog.Logger) (invitations.Service, error) {
func newService(db *sqlx.DB, dbConfig clientspg.Config, authClient magistrala.AuthServiceClient, tracer trace.Tracer, conf config, logger *slog.Logger) (invitations.Service, error) {
database := postgres.NewDatabase(db, dbConfig, tracer)
repo := invitationspg.NewRepository(database)
+8 -7
View File
@@ -8,10 +8,12 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
"time"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
"github.com/absmach/magistrala/internal/clients/jaeger"
@@ -31,7 +33,6 @@ import (
"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"
"golang.org/x/sync/errgroup"
)
@@ -74,7 +75,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -166,7 +167,7 @@ func main() {
}
}
func connectToMQTTBroker(burl, user, password string, timeout time.Duration, logger mglog.Logger) (mqttpaho.Client, error) {
func connectToMQTTBroker(burl, user, password string, timeout time.Duration, logger *slog.Logger) (mqttpaho.Client, error) {
opts := mqttpaho.NewClientOptions()
opts.AddBroker(burl)
opts.SetUsername(user)
@@ -187,7 +188,7 @@ func connectToMQTTBroker(burl, user, password string, timeout time.Duration, log
return client, nil
}
func subscribeToLoRaBroker(svc lora.Service, mc mqttpaho.Client, timeout time.Duration, topic string, logger mglog.Logger) error {
func subscribeToLoRaBroker(svc lora.Service, mc mqttpaho.Client, timeout time.Duration, topic string, logger *slog.Logger) error {
mqttBroker := mqtt.NewBroker(svc, mc, timeout, logger)
logger.Info("Subscribed to Lora MQTT broker")
if err := mqttBroker.Subscribe(topic); err != nil {
@@ -196,7 +197,7 @@ func subscribeToLoRaBroker(svc lora.Service, mc mqttpaho.Client, timeout time.Du
return nil
}
func subscribeToThingsES(ctx context.Context, svc lora.Service, cfg config, logger mglog.Logger) error {
func subscribeToThingsES(ctx context.Context, svc lora.Service, cfg config, logger *slog.Logger) error {
subscriber, err := store.NewSubscriber(ctx, cfg.ESURL, thingsStream, cfg.ESConsumerName, logger)
if err != nil {
return err
@@ -209,12 +210,12 @@ func subscribeToThingsES(ctx context.Context, svc lora.Service, cfg config, logg
return subscriber.Subscribe(ctx, handler)
}
func newRouteMapRepository(client *redis.Client, prefix string, logger mglog.Logger) lora.RouteMapRepository {
func newRouteMapRepository(client *redis.Client, prefix string, logger *slog.Logger) lora.RouteMapRepository {
logger.Info(fmt.Sprintf("Connected to %s Redis Route-map", prefix))
return events.NewRouteMapRepository(client, prefix)
}
func newService(pub messaging.Publisher, rmConn *redis.Client, thingsRMPrefix, channelsRMPrefix, connsRMPrefix string, logger mglog.Logger) lora.Service {
func newService(pub messaging.Publisher, rmConn *redis.Client, thingsRMPrefix, channelsRMPrefix, connsRMPrefix string, logger *slog.Logger) lora.Service {
thingsRM := newRouteMapRepository(rmConn, thingsRMPrefix, logger)
chansRM := newRouteMapRepository(rmConn, channelsRMPrefix, logger)
connsRM := newRouteMapRepository(rmConn, connsRMPrefix, logger)
+5 -4
View File
@@ -8,8 +8,10 @@ import (
"context"
"fmt"
"log"
"log/slog"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
mongoclient "github.com/absmach/magistrala/internal/clients/mongo"
@@ -22,7 +24,6 @@ import (
"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"
)
@@ -53,7 +54,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -85,7 +86,7 @@ func main() {
ac, acHandler, err := auth.Setup(authConfig)
if err != nil {
logger.Fatal(err.Error())
logger.Error(err.Error())
exitCode = 1
return
}
@@ -136,7 +137,7 @@ func main() {
}
}
func newService(db *mongo.Database, logger mglog.Logger) readers.MessageRepository {
func newService(db *mongo.Database, logger *slog.Logger) readers.MessageRepository {
repo := mongodb.New(db)
repo = api.LoggingMiddleware(repo, logger)
counter, latency := internal.MakeMetrics("mongodb", "message_reader")
+4 -3
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/consumers"
consumertracing "github.com/absmach/magistrala/consumers/tracing"
@@ -26,7 +28,6 @@ import (
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"
)
@@ -59,7 +60,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -138,7 +139,7 @@ func main() {
}
}
func newService(db *mongo.Database, logger mglog.Logger) consumers.BlockingConsumer {
func newService(db *mongo.Database, logger *slog.Logger) consumers.BlockingConsumer {
repo := mongodb.New(db)
repo = api.LoggingMiddleware(repo, logger)
counter, latency := internal.MakeMetrics("mongodb", "message_writer")
+11 -9
View File
@@ -9,6 +9,7 @@ import (
"fmt"
"io"
"log"
"log/slog"
"net/http"
"net/url"
"os"
@@ -16,6 +17,7 @@ import (
"syscall"
"time"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
"github.com/absmach/magistrala/internal/server"
@@ -35,7 +37,6 @@ import (
"github.com/absmach/mproxy/pkg/session"
"github.com/caarlos0/env/v10"
"github.com/cenkalti/backoff/v4"
chclient "github.com/mainflux/callhome/pkg/client"
"golang.org/x/sync/errgroup"
)
@@ -76,7 +77,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -187,14 +188,15 @@ func main() {
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)
return proxyMQTT(ctx, cfg, 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)
return proxyWS(ctx, cfg, logger, h, interceptor)
})
g.Go(func() error {
@@ -206,10 +208,10 @@ func main() {
}
}
func proxyMQTT(ctx context.Context, cfg config, logger mglog.Logger, sessionHandler session.Handler) error {
func proxyMQTT(ctx context.Context, cfg config, logger *slog.Logger, sessionHandler session.Handler, interceptor session.Interceptor) error {
address := fmt.Sprintf(":%s", cfg.MQTTPort)
target := fmt.Sprintf("%s:%s", cfg.MQTTTargetHost, cfg.MQTTTargetPort)
mproxy := mp.New(address, target, sessionHandler, logger)
mproxy := mp.New(address, target, sessionHandler, interceptor, logger)
errCh := make(chan error)
go func() {
@@ -225,9 +227,9 @@ func proxyMQTT(ctx context.Context, cfg config, logger mglog.Logger, sessionHand
}
}
func proxyWS(ctx context.Context, cfg config, logger mglog.Logger, sessionHandler session.Handler) error {
func proxyWS(ctx context.Context, cfg config, logger *slog.Logger, sessionHandler session.Handler, interceptor session.Interceptor) error {
target := fmt.Sprintf("%s:%s", cfg.HTTPTargetHost, cfg.HTTPTargetPort)
wp := websocket.New(target, cfg.HTTPTargetPath, "ws", sessionHandler, logger)
wp := websocket.New(target, cfg.HTTPTargetPath, "ws", sessionHandler, interceptor, logger)
http.Handle("/mqtt", wp.Handler())
errCh := make(chan error)
@@ -263,7 +265,7 @@ func healthcheck(cfg config) func() error {
}
}
func stopSignalHandler(ctx context.Context, cancel context.CancelFunc, logger mglog.Logger) error {
func stopSignalHandler(ctx context.Context, cancel context.CancelFunc, logger *slog.Logger) error {
c := make(chan os.Signal, 2)
signal.Notify(c, syscall.SIGINT, syscall.SIGABRT)
select {
+7 -6
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
@@ -29,7 +31,6 @@ import (
"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"
)
@@ -73,7 +74,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -161,7 +162,7 @@ func main() {
}
}
func subscribeToStoredSubs(ctx context.Context, sub opcua.Subscriber, cfg opcua.Config, logger mglog.Logger) {
func subscribeToStoredSubs(ctx context.Context, sub opcua.Subscriber, cfg opcua.Config, logger *slog.Logger) {
// Get all stored subscriptions
nodes, err := db.ReadAll()
if err != nil {
@@ -179,7 +180,7 @@ func subscribeToStoredSubs(ctx context.Context, sub opcua.Subscriber, cfg opcua.
}
}
func subscribeToThingsES(ctx context.Context, svc opcua.Service, cfg config, logger mglog.Logger) error {
func subscribeToThingsES(ctx context.Context, svc opcua.Service, cfg config, logger *slog.Logger) error {
subscriber, err := store.NewSubscriber(ctx, cfg.ESURL, thingsStream, cfg.ESConsumerName, logger)
if err != nil {
return err
@@ -192,12 +193,12 @@ func subscribeToThingsES(ctx context.Context, svc opcua.Service, cfg config, log
return subscriber.Subscribe(ctx, handler)
}
func newRouteMapRepositoy(client *redis.Client, prefix string, logger mglog.Logger) opcua.RouteMapRepository {
func newRouteMapRepositoy(client *redis.Client, prefix string, logger *slog.Logger) opcua.RouteMapRepository {
logger.Info(fmt.Sprintf("Connected to %s Redis Route-map", prefix))
return events.NewRouteMapRepository(client, prefix)
}
func newService(sub opcua.Subscriber, browser opcua.Browser, thingRM, chanRM, connRM opcua.RouteMapRepository, opcuaConfig opcua.Config, logger mglog.Logger) opcua.Service {
func newService(sub opcua.Subscriber, browser opcua.Browser, thingRM, chanRM, connRM opcua.RouteMapRepository, opcuaConfig opcua.Config, logger *slog.Logger) opcua.Service {
svc := opcua.New(sub, browser, thingRM, chanRM, connRM, opcuaConfig, logger)
svc = api.LoggingMiddleware(svc, logger)
counter, latency := internal.MakeMetrics("opc_ua_adapter", "api")
+4 -3
View File
@@ -8,8 +8,10 @@ import (
"context"
"fmt"
"log"
"log/slog"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
@@ -23,7 +25,6 @@ import (
"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"
)
@@ -54,7 +55,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -144,7 +145,7 @@ func main() {
}
}
func newService(db *sqlx.DB, logger mglog.Logger) readers.MessageRepository {
func newService(db *sqlx.DB, logger *slog.Logger) readers.MessageRepository {
svc := postgres.New(db)
svc = api.LoggingMiddleware(svc, logger)
counter, latency := internal.MakeMetrics("postgres", "message_reader")
+5 -4
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/consumers"
consumertracing "github.com/absmach/magistrala/consumers/tracing"
@@ -27,7 +29,6 @@ import (
"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"
)
@@ -60,7 +61,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -89,7 +90,7 @@ func main() {
}
db, err := pgclient.Setup(dbConfig, *writerpg.Migration())
if err != nil {
logger.Fatal(err.Error())
logger.Error(err.Error())
}
defer db.Close()
@@ -144,7 +145,7 @@ func main() {
}
}
func newService(db *sqlx.DB, logger mglog.Logger) consumers.BlockingConsumer {
func newService(db *sqlx.DB, logger *slog.Logger) consumers.BlockingConsumer {
svc := writerpg.New(db)
svc = api.LoggingMiddleware(svc, logger)
counter, latency := internal.MakeMetrics("postgres", "message_writer")
+2 -2
View File
@@ -12,6 +12,7 @@ import (
"os"
"reflect"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal/server"
httpserver "github.com/absmach/magistrala/internal/server/http"
@@ -24,7 +25,6 @@ import (
"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"
)
@@ -50,7 +50,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.Server.LogLevel)
if err != nil {
log.Fatalf(err.Error())
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
+5 -4
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/consumers"
"github.com/absmach/magistrala/consumers/notifiers"
@@ -31,7 +33,6 @@ import (
"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"
"golang.org/x/sync/errgroup"
)
@@ -67,7 +68,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -89,7 +90,7 @@ func main() {
}
db, err := pgclient.Setup(dbConfig, *notifierpg.Migration())
if err != nil {
logger.Fatal(err.Error())
logger.Error(err.Error())
}
defer db.Close()
@@ -172,7 +173,7 @@ func main() {
}
}
func newService(db *sqlx.DB, tracer trace.Tracer, authClient magistrala.AuthServiceClient, c config, sc mgsmpp.Config, logger mglog.Logger) notifiers.Service {
func newService(db *sqlx.DB, tracer trace.Tracer, authClient magistrala.AuthServiceClient, c config, sc mgsmpp.Config, logger *slog.Logger) notifiers.Service {
database := notifierpg.NewDatabase(db, tracer)
repo := tracing.New(tracer, notifierpg.New(database))
idp := ulid.New()
+5 -4
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/consumers"
"github.com/absmach/magistrala/consumers/notifiers"
@@ -32,7 +34,6 @@ import (
"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"
"golang.org/x/sync/errgroup"
)
@@ -68,7 +69,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -90,7 +91,7 @@ func main() {
}
db, err := pgclient.Setup(dbConfig, *notifierpg.Migration())
if err != nil {
logger.Fatal(err.Error())
logger.Error(err.Error())
exitCode = 1
return
}
@@ -182,7 +183,7 @@ func main() {
}
}
func newService(db *sqlx.DB, tracer trace.Tracer, authClient magistrala.AuthServiceClient, c config, ec email.Config, logger mglog.Logger) (notifiers.Service, error) {
func newService(db *sqlx.DB, tracer trace.Tracer, authClient magistrala.AuthServiceClient, c config, ec email.Config, logger *slog.Logger) (notifiers.Service, error) {
database := notifierpg.NewDatabase(db, tracer)
repo := tracing.New(tracer, notifierpg.New(database))
idp := ulid.New()
+5 -3
View File
@@ -8,10 +8,12 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
"time"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
@@ -43,7 +45,6 @@ import (
"github.com/go-chi/chi/v5"
"github.com/go-redis/redis/v8"
"github.com/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
"google.golang.org/grpc"
@@ -86,9 +87,10 @@ func main() {
log.Fatalf("failed to load %s configuration : %s", svcName, err)
}
var logger *slog.Logger
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -218,7 +220,7 @@ func main() {
}
}
func newService(ctx context.Context, db *sqlx.DB, dbConfig pgclient.Config, authClient magistrala.AuthServiceClient, cacheClient *redis.Client, keyDuration time.Duration, esURL string, tracer trace.Tracer, logger mglog.Logger) (things.Service, groups.Service, error) {
func newService(ctx context.Context, db *sqlx.DB, dbConfig pgclient.Config, authClient magistrala.AuthServiceClient, cacheClient *redis.Client, keyDuration time.Duration, esURL string, tracer trace.Tracer, logger *slog.Logger) (things.Service, groups.Service, error) {
database := postgres.NewDatabase(db, dbConfig, tracer)
cRepo := thingspg.NewRepository(database)
gRepo := gpostgres.New(database)
+4 -3
View File
@@ -8,8 +8,10 @@ import (
"context"
"fmt"
"log"
"log/slog"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
pgclient "github.com/absmach/magistrala/internal/clients/postgres"
@@ -23,7 +25,6 @@ import (
"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"
)
@@ -54,7 +55,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -142,7 +143,7 @@ func main() {
}
}
func newService(db *sqlx.DB, logger mglog.Logger) readers.MessageRepository {
func newService(db *sqlx.DB, logger *slog.Logger) readers.MessageRepository {
svc := timescale.New(db)
svc = api.LoggingMiddleware(svc, logger)
counter, latency := internal.MakeMetrics("timescale", "message_reader")
+4 -3
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/consumers"
consumertracing "github.com/absmach/magistrala/consumers/tracing"
@@ -27,7 +29,6 @@ import (
"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"
)
@@ -60,7 +61,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatal(err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -146,7 +147,7 @@ func main() {
}
}
func newService(db *sqlx.DB, logger mglog.Logger) consumers.BlockingConsumer {
func newService(db *sqlx.DB, logger *slog.Logger) consumers.BlockingConsumer {
svc := timescale.New(db)
svc = api.LoggingMiddleware(svc, logger)
counter, latency := internal.MakeMetrics("timescale", "message_writer")
+6 -5
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
@@ -33,7 +35,6 @@ import (
"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"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
@@ -72,7 +73,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -180,7 +181,7 @@ func main() {
}
}
func newService(ctx context.Context, id string, ps messaging.PubSub, cfg config, users magistrala.AuthServiceClient, tracer trace.Tracer, db *mongo.Database, cacheclient *redis.Client, logger mglog.Logger) (twins.Service, error) {
func newService(ctx context.Context, id string, ps messaging.PubSub, cfg config, users magistrala.AuthServiceClient, tracer trace.Tracer, db *mongo.Database, cacheclient *redis.Client, logger *slog.Logger) (twins.Service, error) {
twinRepo := twmongodb.NewTwinRepository(db)
twinRepo = tracing.TwinRepositoryMiddleware(tracer, twinRepo)
@@ -209,13 +210,13 @@ func newService(ctx context.Context, id string, ps messaging.PubSub, cfg config,
Handler: handle(ctx, logger, cfg.ChannelID, svc),
}
if err = ps.Subscribe(ctx, subCfg); err != nil {
logger.Fatal(err.Error())
logger.Error(err.Error())
}
return svc, nil
}
func handle(ctx context.Context, logger mglog.Logger, chanID string, svc twins.Service) handlerFunc {
func handle(ctx context.Context, logger *slog.Logger, chanID string, svc twins.Service) handlerFunc {
return func(msg *messaging.Message) error {
if msg.GetChannel() == chanID {
return nil
+4 -3
View File
@@ -8,11 +8,13 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
"regexp"
"time"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
authSvc "github.com/absmach/magistrala/auth"
"github.com/absmach/magistrala/internal"
@@ -43,7 +45,6 @@ import (
"github.com/caarlos0/env/v10"
"github.com/go-chi/chi/v5"
"github.com/jmoiron/sqlx"
chclient "github.com/mainflux/callhome/pkg/client"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
)
@@ -90,7 +91,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
logger.Fatal(fmt.Sprintf("failed to init logger: %s", err.Error()))
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -192,7 +193,7 @@ func main() {
}
}
func newService(ctx context.Context, authClient magistrala.AuthServiceClient, db *sqlx.DB, dbConfig pgclient.Config, tracer trace.Tracer, c config, ec email.Config, logger mglog.Logger) (users.Service, groups.Service, error) {
func newService(ctx context.Context, authClient magistrala.AuthServiceClient, db *sqlx.DB, dbConfig pgclient.Config, tracer trace.Tracer, c config, ec email.Config, logger *slog.Logger) (users.Service, groups.Service, error) {
database := postgres.NewDatabase(db, dbConfig, tracer)
cRepo := clientspg.NewRepository(database)
gRepo := gpostgres.New(database)
+5 -4
View File
@@ -8,9 +8,11 @@ import (
"context"
"fmt"
"log"
"log/slog"
"net/url"
"os"
chclient "github.com/absmach/callhome/pkg/client"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal"
jaegerclient "github.com/absmach/magistrala/internal/clients/jaeger"
@@ -28,7 +30,6 @@ import (
"github.com/absmach/mproxy/pkg/session"
"github.com/absmach/mproxy/pkg/websockets"
"github.com/caarlos0/env/v10"
chclient "github.com/mainflux/callhome/pkg/client"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sync/errgroup"
)
@@ -62,7 +63,7 @@ func main() {
logger, err := mglog.New(os.Stdout, cfg.LogLevel)
if err != nil {
log.Fatalf("failed to init logger: %s", err)
log.Fatalf("failed to init logger: %s", err.Error())
}
var exitCode int
@@ -153,7 +154,7 @@ func main() {
}
}
func newService(tc magistrala.AuthzServiceClient, nps messaging.PubSub, logger mglog.Logger, tracer trace.Tracer) ws.Service {
func newService(tc magistrala.AuthzServiceClient, nps messaging.PubSub, logger *slog.Logger, tracer trace.Tracer) ws.Service {
svc := ws.New(tc, nps)
svc = tracing.New(tracer, svc)
svc = api.LoggingMiddleware(svc, logger)
@@ -162,7 +163,7 @@ func newService(tc magistrala.AuthzServiceClient, nps messaging.PubSub, logger m
return svc
}
func proxyWS(ctx context.Context, hostConfig, targetConfig server.Config, logger mglog.Logger, handler session.Handler) error {
func proxyWS(ctx context.Context, hostConfig, targetConfig server.Config, logger *slog.Logger, handler session.Handler) error {
target := fmt.Sprintf("ws://%s:%s", targetConfig.Host, targetConfig.Port)
address := fmt.Sprintf("%s:%s", hostConfig.Host, hostConfig.Port)
wp, err := websockets.NewProxy(address, target, logger, handler)
+3 -3
View File
@@ -8,22 +8,22 @@ package api
import (
"context"
"fmt"
"log/slog"
"time"
"github.com/absmach/magistrala/coap"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/messaging"
)
var _ coap.Service = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
svc coap.Service
}
// LoggingMiddleware adds logging facilities to the adapter.
func LoggingMiddleware(svc coap.Service, logger mglog.Logger) coap.Service {
func LoggingMiddleware(svc coap.Service, logger *slog.Logger) coap.Service {
return &loggingMiddleware{logger, svc}
}
+3 -3
View File
@@ -7,6 +7,7 @@ import (
"context"
"fmt"
"io"
"log/slog"
"net/http"
"net/url"
"regexp"
@@ -15,7 +16,6 @@ import (
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/coap"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
"github.com/absmach/magistrala/pkg/messaging"
"github.com/go-chi/chi/v5"
@@ -44,7 +44,7 @@ var (
)
var (
logger mglog.Logger
logger *slog.Logger
service coap.Service
)
@@ -58,7 +58,7 @@ func MakeHandler(instanceID string) http.Handler {
}
// MakeCoAPHandler creates handler for CoAP messages.
func MakeCoAPHandler(svc coap.Service, l mglog.Logger) mux.HandlerFunc {
func MakeCoAPHandler(svc coap.Service, l *slog.Logger) mux.HandlerFunc {
logger = l
service = svc
+3 -3
View File
@@ -7,9 +7,9 @@ import (
"bytes"
"context"
"fmt"
"log/slog"
"sync/atomic"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
"github.com/absmach/magistrala/pkg/messaging"
"github.com/plgd-dev/go-coap/v2/message"
@@ -39,11 +39,11 @@ type client struct {
client mux.Client
token message.Token
observe uint32
logger mglog.Logger
logger *slog.Logger
}
// NewClient instantiates a new Observer.
func NewClient(c mux.Client, tkn message.Token, l mglog.Logger) Client {
func NewClient(c mux.Client, tkn message.Token, l *slog.Logger) Client {
return &client{
client: c,
token: tkn,
+3 -3
View File
@@ -6,11 +6,11 @@ package consumers
import (
"context"
"fmt"
"log/slog"
"os"
"strings"
"github.com/absmach/magistrala/internal/apiutil"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
"github.com/absmach/magistrala/pkg/messaging"
"github.com/absmach/magistrala/pkg/messaging/brokers"
@@ -33,7 +33,7 @@ var (
// Start method starts consuming messages received from Message broker.
// This method transforms messages to SenML format before
// using MessageRepository to store them.
func Start(ctx context.Context, id string, sub messaging.Subscriber, consumer interface{}, configPath string, logger mglog.Logger) error {
func Start(ctx context.Context, id string, sub messaging.Subscriber, consumer interface{}, configPath string, logger *slog.Logger) error {
cfg, err := loadConfig(configPath)
if err != nil {
logger.Warn(fmt.Sprintf("Failed to load consumer config: %s", err))
@@ -143,7 +143,7 @@ func loadConfig(configPath string) (config, error) {
return cfg, nil
}
func makeTransformer(cfg transformerConfig, logger mglog.Logger) transformers.Transformer {
func makeTransformer(cfg transformerConfig, logger *slog.Logger) transformers.Transformer {
switch strings.ToUpper(cfg.Format) {
case "SENML":
logger.Info("Using SenML transformer")
+3 -3
View File
@@ -8,21 +8,21 @@ package api
import (
"context"
"fmt"
"log/slog"
"time"
"github.com/absmach/magistrala/consumers/notifiers"
mglog "github.com/absmach/magistrala/logger"
)
var _ notifiers.Service = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
svc notifiers.Service
}
// LoggingMiddleware adds logging facilities to the core service.
func LoggingMiddleware(svc notifiers.Service, logger mglog.Logger) notifiers.Service {
func LoggingMiddleware(svc notifiers.Service, logger *slog.Logger) notifiers.Service {
return &loggingMiddleware{logger, svc}
}
+2 -2
View File
@@ -6,13 +6,13 @@ package api
import (
"context"
"encoding/json"
"log/slog"
"net/http"
"strings"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/consumers/notifiers"
"github.com/absmach/magistrala/internal/apiutil"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
svcerr "github.com/absmach/magistrala/pkg/errors/service"
"github.com/go-chi/chi/v5"
@@ -32,7 +32,7 @@ const (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc notifiers.Service, logger mglog.Logger, instanceID string) http.Handler {
func MakeHandler(svc notifiers.Service, logger *slog.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, encodeError)),
}
+3 -3
View File
@@ -8,21 +8,21 @@ package api
import (
"context"
"fmt"
"log/slog"
"time"
"github.com/absmach/magistrala/consumers"
mglog "github.com/absmach/magistrala/logger"
)
var _ consumers.BlockingConsumer = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
consumer consumers.BlockingConsumer
}
// LoggingMiddleware adds logging facilities to the adapter.
func LoggingMiddleware(consumer consumers.BlockingConsumer, logger mglog.Logger) consumers.BlockingConsumer {
func LoggingMiddleware(consumer consumers.BlockingConsumer, logger *slog.Logger) consumers.BlockingConsumer {
return &loggingMiddleware{
logger: logger,
consumer: consumer,
+2 -2
View File
@@ -14,7 +14,7 @@ import (
"github.com/ory/dockertest/v3"
)
var logger, _ = mglog.New(os.Stdout, mglog.Info.String())
var logger, _ = mglog.New(os.Stdout, "info")
func TestMain(m *testing.M) {
pool, err := dockertest.NewPool("")
@@ -46,7 +46,7 @@ func TestMain(m *testing.M) {
return nil
}); err != nil {
logger.Fatal(fmt.Sprintf("Could not connect to docker: %s", err))
logger.Error(fmt.Sprintf("Could not connect to docker: %s", err))
}
code := m.Run()
+1 -1
View File
@@ -23,7 +23,7 @@ import (
const valueFields = 5
var (
testLog, _ = mglog.New(os.Stdout, mglog.Info.String())
testLog, _ = mglog.New(os.Stdout, "info")
streamsSize = 250
rowCountSenml = fmt.Sprintf(`from(bucket: "%s")
|> range(start: -1h, stop: 1h)
+1 -1
View File
@@ -25,7 +25,7 @@ import (
var (
port string
addr string
testLog, _ = mglog.New(os.Stdout, mglog.Info.String())
testLog, _ = mglog.New(os.Stdout, "info")
testDB = "test"
collection = "messages"
msgsNum = 100
+11 -10
View File
@@ -4,7 +4,8 @@ go 1.21
require (
github.com/0x6flab/namegenerator v1.1.0
github.com/absmach/mproxy v0.3.1-0.20231221215510-0ffbc4fc2337
github.com/absmach/callhome v0.0.0-20240117170159-c5f5cccd21fd
github.com/absmach/mproxy v0.4.2
github.com/absmach/senml v1.0.5
github.com/authzed/authzed-go v0.10.1
github.com/authzed/grpcutil v0.0.0-20230908193239-4286bb1d6403
@@ -16,13 +17,12 @@ require (
github.com/fiorix/go-smpp v0.0.0-20210403173735-2894b96e70ba
github.com/go-chi/chi/v5 v5.0.10
github.com/go-kit/kit v0.13.0
github.com/go-kit/log v0.2.1
github.com/go-redis/redis/v8 v8.11.5
github.com/gocql/gocql v1.6.0
github.com/gofrs/uuid v4.4.0+incompatible
github.com/gookit/color v1.5.4
github.com/gopcua/opcua v0.1.6
github.com/gorilla/websocket v1.5.0
github.com/gorilla/websocket v1.5.1
github.com/hashicorp/vault/api v1.10.0
github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f
github.com/influxdata/influxdb-client-go/v2 v2.12.3
@@ -32,7 +32,6 @@ require (
github.com/jackc/pgx/v5 v5.4.3
github.com/jmoiron/sqlx v1.3.5
github.com/lestrrat-go/jwx/v2 v2.0.16
github.com/mainflux/callhome v0.0.0-20230920140432-33c5663382ce
github.com/mitchellh/mapstructure v1.5.0
github.com/nats-io/nats.go v1.31.0
github.com/oklog/ulid/v2 v2.1.0
@@ -53,9 +52,9 @@ require (
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0
go.opentelemetry.io/otel/sdk v1.20.0
go.opentelemetry.io/otel/trace v1.20.0
golang.org/x/crypto v0.17.0
golang.org/x/net v0.17.0
golang.org/x/sync v0.4.0
golang.org/x/crypto v0.18.0
golang.org/x/net v0.20.0
golang.org/x/sync v0.6.0
gonum.org/v1/gonum v0.14.0
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405
google.golang.org/grpc v1.59.0
@@ -76,6 +75,7 @@ require (
github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
github.com/aymerick/douceur v0.2.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bitly/go-hostpool v0.1.0 // indirect
github.com/bytedance/sonic v1.10.2 // indirect
github.com/cenkalti/backoff/v3 v3.2.2 // indirect
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d // indirect
@@ -102,6 +102,7 @@ require (
github.com/gin-gonic/gin v1.9.1 // indirect
github.com/go-gorp/gorp/v3 v3.1.0 // indirect
github.com/go-jose/go-jose/v3 v3.0.1 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/go-logr/logr v1.3.0 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
@@ -114,7 +115,7 @@ require (
github.com/golang/snappy v0.0.4 // indirect
github.com/gomarkdown/markdown v0.0.0-20230922112808-5421fefb8386 // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
github.com/google/uuid v1.4.0 // indirect
github.com/google/uuid v1.5.0 // indirect
github.com/gorilla/css v1.0.0 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect
@@ -154,10 +155,10 @@ require (
github.com/lestrrat-go/httprc v1.0.4 // indirect
github.com/lestrrat-go/iter v1.0.2 // indirect
github.com/lestrrat-go/option v1.0.1 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mailgun/raymond/v2 v2.0.48 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mainflux/mainflux v0.12.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
@@ -220,7 +221,7 @@ require (
golang.org/x/arch v0.5.0 // indirect
golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
golang.org/x/mod v0.13.0 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/sys v0.16.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.3.0 // indirect
golang.org/x/tools v0.14.0 // indirect
+20 -598
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -6,6 +6,7 @@ package http
import (
"context"
"fmt"
"log/slog"
"net/url"
"regexp"
"strings"
@@ -14,7 +15,6 @@ import (
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/auth"
"github.com/absmach/magistrala/internal/apiutil"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
"github.com/absmach/magistrala/pkg/messaging"
"github.com/absmach/mproxy/pkg/session"
@@ -52,11 +52,11 @@ var channelRegExp = regexp.MustCompile(`^\/?channels\/([\w\-]+)\/messages(\/[^?]
type handler struct {
publisher messaging.Publisher
auth magistrala.AuthzServiceClient
logger mglog.Logger
logger *slog.Logger
}
// NewHandler creates new Handler entity.
func NewHandler(publisher messaging.Publisher, logger mglog.Logger, authClient magistrala.AuthzServiceClient) session.Handler {
func NewHandler(publisher messaging.Publisher, logger *slog.Logger, authClient magistrala.AuthzServiceClient) session.Handler {
return &handler{
logger: logger,
publisher: publisher,
+2 -2
View File
@@ -6,16 +6,16 @@ package apiutil
import (
"context"
"encoding/json"
"log/slog"
"net/http"
"strconv"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
kithttp "github.com/go-kit/kit/transport/http"
)
// LoggingErrorEncoder is a go-kit error encoder logging decorator.
func LoggingErrorEncoder(logger mglog.Logger, enc kithttp.ErrorEncoder) kithttp.ErrorEncoder {
func LoggingErrorEncoder(logger *slog.Logger, enc kithttp.ErrorEncoder) kithttp.ErrorEncoder {
return func(ctx context.Context, err error, w http.ResponseWriter) {
if errors.Contains(err, ErrValidation) {
logger.Error(err.Error())
+1 -3
View File
@@ -333,8 +333,6 @@ func TestReadNumQuery(t *testing.T) {
}
func TestLoggingErrorEncoder(t *testing.T) {
logger := mglog.NewMock()
cases := []struct {
desc string
err error
@@ -356,7 +354,7 @@ func TestLoggingErrorEncoder(t *testing.T) {
encCalled = true
}
errorEncoder := apiutil.LoggingErrorEncoder(logger, encFunc)
errorEncoder := apiutil.LoggingErrorEncoder(mglog.NewMock(), encFunc)
errorEncoder(context.Background(), c.err, httptest.NewRecorder())
assert.True(t, encCalled)
+3 -3
View File
@@ -6,21 +6,21 @@ package api
import (
"context"
"fmt"
"log/slog"
"time"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/groups"
)
var _ groups.Service = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
svc groups.Service
}
// LoggingMiddleware adds logging facilities to the groups service.
func LoggingMiddleware(svc groups.Service, logger mglog.Logger) groups.Service {
func LoggingMiddleware(svc groups.Service, logger *slog.Logger) groups.Service {
return &loggingMiddleware{logger, svc}
}
+2 -2
View File
@@ -7,10 +7,10 @@ import (
"context"
"crypto/tls"
"fmt"
"log/slog"
"time"
"github.com/absmach/magistrala/internal/server"
mglog "github.com/absmach/magistrala/logger"
gocoap "github.com/plgd-dev/go-coap/v2"
"github.com/plgd-dev/go-coap/v2/mux"
)
@@ -26,7 +26,7 @@ type Server struct {
var _ server.Server = (*Server)(nil)
func New(ctx context.Context, cancel context.CancelFunc, name string, config server.Config, handler mux.HandlerFunc, logger mglog.Logger) server.Server {
func New(ctx context.Context, cancel context.CancelFunc, name string, config server.Config, handler mux.HandlerFunc, logger *slog.Logger) server.Server {
listenFullAddress := fmt.Sprintf("%s:%s", config.Host, config.Port)
return &Server{
BaseServer: server.BaseServer{
+2 -2
View File
@@ -8,12 +8,12 @@ import (
"crypto/tls"
"crypto/x509"
"fmt"
"log/slog"
"net"
"os"
"time"
"github.com/absmach/magistrala/internal/server"
mglog "github.com/absmach/magistrala/logger"
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
@@ -34,7 +34,7 @@ type serviceRegister func(srv *grpc.Server)
var _ server.Server = (*Server)(nil)
func New(ctx context.Context, cancel context.CancelFunc, name string, config server.Config, registerService serviceRegister, logger mglog.Logger) server.Server {
func New(ctx context.Context, cancel context.CancelFunc, name string, config server.Config, registerService serviceRegister, logger *slog.Logger) server.Server {
listenFullAddress := fmt.Sprintf("%s:%s", config.Host, config.Port)
return &Server{
BaseServer: server.BaseServer{
+2 -2
View File
@@ -6,11 +6,11 @@ package http
import (
"context"
"fmt"
"log/slog"
"net/http"
"time"
"github.com/absmach/magistrala/internal/server"
mglog "github.com/absmach/magistrala/logger"
)
const (
@@ -26,7 +26,7 @@ type Server struct {
var _ server.Server = (*Server)(nil)
func New(ctx context.Context, cancel context.CancelFunc, name string, config server.Config, handler http.Handler, logger mglog.Logger) server.Server {
func New(ctx context.Context, cancel context.CancelFunc, name string, config server.Config, handler http.Handler, logger *slog.Logger) server.Server {
listenFullAddress := fmt.Sprintf("%s:%s", config.Host, config.Port)
httpServer := &http.Server{Addr: listenFullAddress, Handler: handler}
return &Server{
+3 -4
View File
@@ -5,11 +5,10 @@ package server
import (
"context"
"fmt"
"log/slog"
"os"
"os/signal"
"syscall"
mglog "github.com/absmach/magistrala/logger"
)
type Server interface {
@@ -32,7 +31,7 @@ type BaseServer struct {
Name string
Address string
Config Config
Logger mglog.Logger
Logger *slog.Logger
Protocol string
}
@@ -51,7 +50,7 @@ func stopAllServer(servers ...Server) error {
return err
}
func StopSignalHandler(ctx context.Context, cancel context.CancelFunc, logger mglog.Logger, svcName string, servers ...Server) error {
func StopSignalHandler(ctx context.Context, cancel context.CancelFunc, logger *slog.Logger, svcName string, servers ...Server) error {
var err error
c := make(chan os.Signal, 2)
signal.Notify(c, syscall.SIGINT, syscall.SIGABRT)
+1 -1
View File
@@ -56,8 +56,8 @@ func (tr testRequest) make() (*http.Response, error) {
func newIvitationsServer() (*httptest.Server, *mocks.Service) {
svc := new(mocks.Service)
logger := mglog.NewMock()
mux := api.MakeHandler(svc, logger, "test")
return httptest.NewServer(mux), svc
}
+2 -2
View File
@@ -6,6 +6,7 @@ package api
import (
"context"
"encoding/json"
"log/slog"
"net/http"
"strings"
@@ -13,7 +14,6 @@ import (
"github.com/absmach/magistrala/internal/api"
"github.com/absmach/magistrala/internal/apiutil"
"github.com/absmach/magistrala/invitations"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
"github.com/go-chi/chi/v5"
kithttp "github.com/go-kit/kit/transport/http"
@@ -29,7 +29,7 @@ const (
stateKey = "state"
)
func MakeHandler(svc invitations.Service, logger mglog.Logger, instanceID string) http.Handler {
func MakeHandler(svc invitations.Service, logger *slog.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, api.EncodeError)),
}
+3 -3
View File
@@ -6,20 +6,20 @@ package middleware
import (
"context"
"fmt"
"log/slog"
"time"
"github.com/absmach/magistrala/invitations"
mglog "github.com/absmach/magistrala/logger"
)
var _ invitations.Service = (*logging)(nil)
type logging struct {
logger mglog.Logger
logger *slog.Logger
svc invitations.Service
}
func Logging(logger mglog.Logger, svc invitations.Service) invitations.Service {
func Logging(logger *slog.Logger, svc invitations.Service) invitations.Service {
return &logging{logger, svc}
}
-58
View File
@@ -1,58 +0,0 @@
// Copyright (c) Abstract Machines
// SPDX-License-Identifier: Apache-2.0
package logger
import (
"errors"
"strings"
)
const (
// Error level is used when logging errors.
Error Level = iota + 1
// Warn level is used when logging warnings.
Warn
// Info level is used when logging info data.
Info
// Debug level is used when logging debugging info.
Debug
)
// ErrInvalidLogLevel indicates an unrecognized log level.
var ErrInvalidLogLevel = errors.New("unrecognized log level")
// Level represents severity level while logging.
type Level int
var levels = map[Level]string{
Error: "error",
Warn: "warn",
Info: "info",
Debug: "debug",
}
func (lvl Level) String() string {
return levels[lvl]
}
func (lvl Level) isAllowed(logLevel Level) bool {
return lvl <= logLevel
}
// UnmarshalText returns log Level for the given string representation.
func (lvl *Level) UnmarshalText(text string) error {
switch strings.ToLower(text) {
case "debug":
*lvl = Debug
case "info":
*lvl = Info
case "warn":
*lvl = Warn
case "error":
*lvl = Error
default:
return ErrInvalidLogLevel
}
return nil
}
-182
View File
@@ -1,182 +0,0 @@
// Copyright (c) Abstract Machines
// SPDX-License-Identifier: Apache-2.0
package logger
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
func TestUnmarshalText(t *testing.T) {
cases := []struct {
desc string
input string
output Level
err error
}{
{
desc: "select log level Not_A_Level",
input: "Not_A_Level",
output: 0,
err: ErrInvalidLogLevel,
},
{
desc: "select log level Bad_Input",
input: "Bad_Input",
output: 0,
err: ErrInvalidLogLevel,
},
{
desc: "select log level debug",
input: "debug",
output: Debug,
err: nil,
},
{
desc: "select log level DEBUG",
input: "DEBUG",
output: Debug,
err: nil,
},
{
desc: "select log level info",
input: "info",
output: Info,
err: nil,
},
{
desc: "select log level INFO",
input: "INFO",
output: Info,
err: nil,
},
{
desc: "select log level warn",
input: "warn",
output: Warn,
err: nil,
},
{
desc: "select log level WARN",
input: "WARN",
output: Warn,
err: nil,
},
{
desc: "select log level Error",
input: "Error",
output: Error,
err: nil,
},
{
desc: "select log level ERROR",
input: "ERROR",
output: Error,
err: nil,
},
}
for _, tc := range cases {
var logLevel Level
err := logLevel.UnmarshalText(tc.input)
assert.Equal(t, tc.output, logLevel, fmt.Sprintf("%s: expected %s got %d", tc.desc, tc.output, logLevel))
assert.Equal(t, tc.err, err, fmt.Sprintf("%s: expected %s got %d", tc.desc, tc.err, err))
}
}
func TestLevelIsAllowed(t *testing.T) {
cases := []struct {
desc string
requestedLevel Level
allowedLevel Level
output bool
}{
{
desc: "log debug when level debug",
requestedLevel: Debug,
allowedLevel: Debug,
output: true,
},
{
desc: "log info when level debug",
requestedLevel: Info,
allowedLevel: Debug,
output: true,
},
{
desc: "log warn when level debug",
requestedLevel: Warn,
allowedLevel: Debug,
output: true,
},
{
desc: "log error when level debug",
requestedLevel: Error,
allowedLevel: Debug,
output: true,
},
{
desc: "log warn when level info",
requestedLevel: Warn,
allowedLevel: Info,
output: true,
},
{
desc: "log error when level warn",
requestedLevel: Error,
allowedLevel: Warn,
output: true,
},
{
desc: "log error when level error",
requestedLevel: Error,
allowedLevel: Error,
output: true,
},
{
desc: "log debug when level error",
requestedLevel: Debug,
allowedLevel: Error,
output: false,
},
{
desc: "log info when level error",
requestedLevel: Info,
allowedLevel: Error,
output: false,
},
{
desc: "log warn when level error",
requestedLevel: Warn,
allowedLevel: Error,
output: false,
},
{
desc: "log debug when level warn",
requestedLevel: Debug,
allowedLevel: Warn,
output: false,
},
{
desc: "log info when level warn",
requestedLevel: Info,
allowedLevel: Warn,
output: false,
},
{
desc: "log debug when level info",
requestedLevel: Debug,
allowedLevel: Info,
output: false,
},
}
for _, tc := range cases {
result := tc.requestedLevel.isAllowed(tc.allowedLevel)
assert.Equal(t, tc.output, result, fmt.Sprintf("%s: expected %t got %t", tc.desc, tc.output, result))
}
}
+10 -60
View File
@@ -6,70 +6,20 @@ package logger
import (
"fmt"
"io"
"os"
"log/slog"
"time"
"github.com/go-kit/log"
)
// Logger specifies logging API.
type Logger interface {
// Debug logs any object in JSON format on debug level.
Debug(string)
// Info logs any object in JSON format on info level.
Info(string)
// Warn logs any object in JSON format on warning level.
Warn(string)
// Error logs any object in JSON format on error level.
Error(string)
// Fatal logs any object in JSON format on any level and calls os.Exit(1).
Fatal(string)
}
var _ Logger = (*logger)(nil)
type logger struct {
kitLogger log.Logger
level Level
}
// New returns wrapped go kit logger.
func New(out io.Writer, levelText string) (Logger, error) {
var level Level
err := level.UnmarshalText(levelText)
if err != nil {
return nil, fmt.Errorf(`{"level":"error","message":"%s: %s","ts":"%s"}`, err, levelText, time.RFC3339Nano)
// New returns wrapped slog logger.
func New(w io.Writer, levelText string) (*slog.Logger, error) {
var level slog.Level
if err := level.UnmarshalText([]byte(levelText)); err != nil {
return &slog.Logger{}, fmt.Errorf(`{"level":"error","message":"%s: %s","ts":"%s"}`, err, levelText, time.RFC3339Nano)
}
l := log.NewJSONLogger(log.NewSyncWriter(out))
l = log.With(l, "ts", log.DefaultTimestampUTC)
return &logger{l, level}, err
}
func (l logger) Debug(msg string) {
if Debug.isAllowed(l.level) {
_ = l.kitLogger.Log("level", Debug.String(), "message", msg)
}
}
logHandler := slog.NewJSONHandler(w, &slog.HandlerOptions{
Level: level,
})
func (l logger) Info(msg string) {
if Info.isAllowed(l.level) {
_ = l.kitLogger.Log("level", Info.String(), "message", msg)
}
}
func (l logger) Warn(msg string) {
if Warn.isAllowed(l.level) {
_ = l.kitLogger.Log("level", Warn.String(), "message", msg)
}
}
func (l logger) Error(msg string) {
if Error.isAllowed(l.level) {
_ = l.kitLogger.Log("level", Error.String(), "message", msg)
}
}
func (l logger) Fatal(msg string) {
_ = l.kitLogger.Log("fatal", msg)
os.Exit(1)
return slog.New(logHandler), nil
}
+27 -223
View File
@@ -4,30 +4,11 @@
package logger_test
import (
"encoding/json"
"fmt"
"io"
"os"
"os/exec"
"log/slog"
"testing"
mglog "github.com/absmach/magistrala/logger"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
// Env vars needed for testing Fatal in subprocess.
const (
testMsg = "TEST_MSG"
testFlag = "TEST_FLAG"
testFlagVal = "assert_test"
)
var (
_ io.Writer = (*mockWriter)(nil)
logger mglog.Logger
err error
output logMsg
)
type mockWriter struct {
@@ -39,221 +20,44 @@ func (writer *mockWriter) Write(p []byte) (int, error) {
return len(p), nil
}
func (writer *mockWriter) Read() (logMsg, error) {
var output logMsg
err := json.Unmarshal(writer.value, &output)
return output, err
}
type logMsg struct {
Level string `json:"level"`
Message string `json:"message"`
Fatal string `json:"fatal,omitempty"` // needed for Fatal messages
}
func TestDebug(t *testing.T) {
func TestLoggerInitialization(t *testing.T) {
cases := []struct {
desc string
input string
level string
output logMsg
desc string
level string
}{
{
desc: "debug log ordinary string",
input: "input_string",
level: mglog.Debug.String(),
output: logMsg{mglog.Debug.String(), "input_string", ""},
desc: "debug level",
level: slog.LevelDebug.String(),
},
{
desc: "debug log empty string",
input: "",
level: mglog.Debug.String(),
output: logMsg{mglog.Debug.String(), "", ""},
desc: "info level",
level: slog.LevelInfo.String(),
},
{
desc: "debug ordinary string lvl not allowed",
input: "input_string",
level: mglog.Info.String(),
output: logMsg{"", "", ""},
desc: "warn level",
level: slog.LevelWarn.String(),
},
{
desc: "debug empty string lvl not allowed",
input: "",
level: mglog.Info.String(),
output: logMsg{"", "", ""},
desc: "error level",
level: slog.LevelError.String(),
},
{
desc: "invalid level",
level: "invalid",
},
}
for _, tc := range cases {
writer := mockWriter{}
logger, err = mglog.New(&writer, tc.level)
assert.Nil(t, err, fmt.Sprintf("%s: unexpected error %s", tc.desc, err))
logger.Debug(tc.input)
output, err = writer.Read()
assert.Equal(t, tc.output, output, fmt.Sprintf("%s: expected %s got %s", tc.desc, tc.output, output))
}
}
func TestInfo(t *testing.T) {
cases := []struct {
desc string
input string
level string
output logMsg
}{
{
desc: "info log ordinary string",
input: "input_string",
level: mglog.Info.String(),
output: logMsg{mglog.Info.String(), "input_string", ""},
},
{
desc: "info log empty string",
input: "",
level: mglog.Info.String(),
output: logMsg{mglog.Info.String(), "", ""},
},
{
desc: "info ordinary string lvl not allowed",
input: "input_string",
level: mglog.Warn.String(),
output: logMsg{"", "", ""},
},
{
desc: "info empty string lvl not allowed",
input: "",
level: mglog.Warn.String(),
output: logMsg{"", "", ""},
},
}
for _, tc := range cases {
writer := mockWriter{}
logger, err = mglog.New(&writer, tc.level)
assert.Nil(t, err, fmt.Sprintf("%s: unexpected error %s", tc.desc, err))
logger.Info(tc.input)
output, err = writer.Read()
assert.Equal(t, tc.output, output, fmt.Sprintf("%s: expected %s got %s", tc.desc, tc.output, output))
}
}
func TestWarn(t *testing.T) {
cases := []struct {
desc string
input string
level string
output logMsg
}{
{
desc: "warn log ordinary string",
input: "input_string",
level: mglog.Warn.String(),
output: logMsg{mglog.Warn.String(), "input_string", ""},
},
{
desc: "warn log empty string",
input: "",
level: mglog.Warn.String(),
output: logMsg{mglog.Warn.String(), "", ""},
},
{
desc: "warn ordinary string lvl not allowed",
input: "input_string",
level: mglog.Error.String(),
output: logMsg{"", "", ""},
},
{
desc: "warn empty string lvl not allowed",
input: "",
level: mglog.Error.String(),
output: logMsg{"", "", ""},
},
}
for _, tc := range cases {
writer := mockWriter{}
logger, err = mglog.New(&writer, tc.level)
require.Nil(t, err, fmt.Sprintf("%s: unexpected error %s", tc.desc, err))
logger.Warn(tc.input)
output, err = writer.Read()
assert.Equal(t, tc.output, output, fmt.Sprintf("%s: expected %s got %s", tc.desc, tc.output, output))
}
}
func TestError(t *testing.T) {
cases := []struct {
desc string
input string
output logMsg
}{
{
desc: "error log ordinary string",
input: "input_string",
output: logMsg{mglog.Error.String(), "input_string", ""},
},
{
desc: "error log empty string",
input: "",
output: logMsg{mglog.Error.String(), "", ""},
},
}
writer := mockWriter{}
logger, err := mglog.New(&writer, mglog.Error.String())
require.Nil(t, err)
for _, tc := range cases {
logger.Error(tc.input)
output, err := writer.Read()
assert.Nil(t, err, fmt.Sprintf("%s: unexpected error %s", tc.desc, err))
assert.Equal(t, tc.output, output, fmt.Sprintf("%s: expected %s got %s", tc.desc, tc.output, output))
}
}
func TestFatal(t *testing.T) {
// This is the actually Fatal call we test that will
// be executed in the subprocess spawned by the test.
if os.Getenv(testFlag) == testFlagVal {
logger, err := mglog.New(os.Stderr, mglog.Error.String())
require.Nil(t, err)
msg := os.Getenv(testMsg)
logger.Fatal(msg)
return
}
cases := []struct {
desc string
input string
output logMsg
}{
{
desc: "error log ordinary string",
input: "input_string",
output: logMsg{"", "", "input_string"},
},
{
desc: "error log empty string",
input: "",
output: logMsg{"", "", ""},
},
}
writer := mockWriter{}
for _, tc := range cases {
// This command will run this same test as a separate subprocess.
// It needs to be executed as a subprocess because we need to test os.Exit(1) call.
cmd := exec.Command(os.Args[0], "-test.run=TestFatal")
// This flag is used to prevent an infinite loop of spawning this test and never
// actually running the necessary Fatal call.
cmd.Env = append(os.Environ(), fmt.Sprintf("%s=%s", testFlag, testFlagVal))
cmd.Stderr = &writer
cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", testMsg, tc.input))
err := cmd.Run()
if e, ok := err.(*exec.ExitError); ok && !e.Success() {
res, err := writer.Read()
require.Nil(t, err, "required successful buffer read")
assert.Equal(t, 1, e.ExitCode(), fmt.Sprintf("%s: expected exit code %d, got %d", tc.desc, 1, e.ExitCode()))
assert.Equal(t, tc.output, res, fmt.Sprintf("%s: expected output %s got %s", tc.desc, tc.output, res))
continue
}
t.Fatal("subprocess ran successfully, want non-zero exit status")
t.Run(tc.desc, func(t *testing.T) {
writer := &mockWriter{}
logger, err := mglog.New(writer, tc.level)
if tc.level == "invalid" {
assert.NotNil(t, err, "expected error during logger initialization")
assert.NotNil(t, logger, "logger should not be nil when an error occurs")
} else {
assert.Nil(t, err, "unexpected error during logger initialization")
assert.NotNil(t, logger, "logger should not be nil")
}
})
}
}
+8 -20
View File
@@ -3,26 +3,14 @@
package logger
var _ Logger = (*loggerMock)(nil)
import (
"bytes"
"log/slog"
)
type loggerMock struct{}
// NewMock returns wrapped slog logger mock.
func NewMock() *slog.Logger {
buf := &bytes.Buffer{}
// NewMock returns wrapped go kit logger mock.
func NewMock() Logger {
return &loggerMock{}
}
func (l loggerMock) Debug(msg string) {
}
func (l loggerMock) Info(msg string) {
}
func (l loggerMock) Warn(msg string) {
}
func (l loggerMock) Error(msg string) {
}
func (l loggerMock) Fatal(msg string) {
return slog.New(slog.NewJSONHandler(buf, nil))
}
+3 -3
View File
@@ -8,21 +8,21 @@ package api
import (
"context"
"fmt"
"log/slog"
"time"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/lora"
)
var _ lora.Service = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
svc lora.Service
}
// LoggingMiddleware adds logging facilities to the core service.
func LoggingMiddleware(svc lora.Service, logger mglog.Logger) lora.Service {
func LoggingMiddleware(svc lora.Service, logger *slog.Logger) lora.Service {
return &loggingMiddleware{
logger: logger,
svc: svc,
+3 -3
View File
@@ -8,9 +8,9 @@ import (
"context"
"encoding/json"
"fmt"
"log/slog"
"time"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/lora"
mqtt "github.com/eclipse/paho.mqtt.golang"
)
@@ -24,12 +24,12 @@ type Subscriber interface {
type broker struct {
svc lora.Service
client mqtt.Client
logger mglog.Logger
logger *slog.Logger
timeout time.Duration
}
// NewBroker returns new MQTT broker instance.
func NewBroker(svc lora.Service, client mqtt.Client, t time.Duration, log mglog.Logger) Subscriber {
func NewBroker(svc lora.Service, client mqtt.Client, t time.Duration, log *slog.Logger) Subscriber {
return broker{
svc: svc,
client: client,
+4 -4
View File
@@ -6,9 +6,9 @@ package mqtt
import (
"context"
"fmt"
"log/slog"
"strings"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/messaging"
)
@@ -21,11 +21,11 @@ type Forwarder interface {
type forwarder struct {
topic string
logger mglog.Logger
logger *slog.Logger
}
// NewForwarder returns new Forwarder implementation.
func NewForwarder(topic string, logger mglog.Logger) Forwarder {
func NewForwarder(topic string, logger *slog.Logger) Forwarder {
return forwarder{
topic: topic,
logger: logger,
@@ -42,7 +42,7 @@ func (f forwarder) Forward(ctx context.Context, id string, sub messaging.Subscri
return sub.Subscribe(ctx, subCfg)
}
func handle(ctx context.Context, pub messaging.Publisher, logger mglog.Logger) handleFunc {
func handle(ctx context.Context, pub messaging.Publisher, logger *slog.Logger) handleFunc {
return func(msg *messaging.Message) error {
if msg.GetProtocol() == protocol {
return nil
+3 -3
View File
@@ -6,6 +6,7 @@ package mqtt
import (
"context"
"fmt"
"log/slog"
"net/url"
"regexp"
"strings"
@@ -13,7 +14,6 @@ import (
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/auth"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/mqtt/events"
"github.com/absmach/magistrala/pkg/errors"
"github.com/absmach/magistrala/pkg/messaging"
@@ -58,12 +58,12 @@ var channelRegExp = regexp.MustCompile(`^\/?channels\/([\w\-]+)\/messages(\/[^?]
type handler struct {
publisher messaging.Publisher
auth magistrala.AuthzServiceClient
logger mglog.Logger
logger *slog.Logger
es events.EventStore
}
// NewHandler creates new Handler entity.
func NewHandler(publisher messaging.Publisher, es events.EventStore, logger mglog.Logger, authClient magistrala.AuthzServiceClient) session.Handler {
func NewHandler(publisher messaging.Publisher, es events.EventStore, logger *slog.Logger, authClient magistrala.AuthzServiceClient) session.Handler {
return &handler{
es: es,
logger: logger,
+3 -3
View File
@@ -6,8 +6,8 @@ package opcua
import (
"context"
"fmt"
"log/slog"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/opcua/db"
)
@@ -62,11 +62,11 @@ type adapterService struct {
channelsRM RouteMapRepository
connectRM RouteMapRepository
cfg Config
logger mglog.Logger
logger *slog.Logger
}
// New instantiates the OPC-UA adapter implementation.
func New(sub Subscriber, brow Browser, thingsRM, channelsRM, connectRM RouteMapRepository, cfg Config, log mglog.Logger) Service {
func New(sub Subscriber, brow Browser, thingsRM, channelsRM, connectRM RouteMapRepository, cfg Config, log *slog.Logger) Service {
return &adapterService{
subscriber: sub,
browser: brow,
+3 -3
View File
@@ -8,21 +8,21 @@ package api
import (
"context"
"fmt"
"log/slog"
"time"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/opcua"
)
var _ opcua.Service = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
svc opcua.Service
}
// LoggingMiddleware adds logging facilities to the core service.
func LoggingMiddleware(svc opcua.Service, logger mglog.Logger) opcua.Service {
func LoggingMiddleware(svc opcua.Service, logger *slog.Logger) opcua.Service {
return &loggingMiddleware{
logger: logger,
svc: svc,
+2 -2
View File
@@ -6,11 +6,11 @@ package api
import (
"context"
"encoding/json"
"log/slog"
"net/http"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal/apiutil"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/opcua"
"github.com/absmach/magistrala/pkg/errors"
"github.com/go-chi/chi/v5"
@@ -28,7 +28,7 @@ const (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc opcua.Service, logger mglog.Logger, instanceID string) http.Handler {
func MakeHandler(svc opcua.Service, logger *slog.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, encodeError)),
}
+3 -3
View File
@@ -5,8 +5,8 @@ package gopcua
import (
"context"
"log/slog"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/opcua"
"github.com/absmach/magistrala/pkg/errors"
opcuagocpua "github.com/gopcua/opcua"
@@ -36,11 +36,11 @@ var _ opcua.Browser = (*browser)(nil)
type browser struct {
ctx context.Context
logger mglog.Logger
logger *slog.Logger
}
// NewBrowser returns new OPC-UA browser instance.
func NewBrowser(ctx context.Context, log mglog.Logger) opcua.Browser {
func NewBrowser(ctx context.Context, log *slog.Logger) opcua.Browser {
return browser{
ctx: ctx,
logger: log,
+3 -3
View File
@@ -6,10 +6,10 @@ package gopcua
import (
"context"
"fmt"
"log/slog"
"strconv"
"time"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/opcua"
"github.com/absmach/magistrala/pkg/errors"
"github.com/absmach/magistrala/pkg/messaging"
@@ -45,7 +45,7 @@ type client struct {
thingsRM opcua.RouteMapRepository
channelsRM opcua.RouteMapRepository
connectRM opcua.RouteMapRepository
logger mglog.Logger
logger *slog.Logger
}
type message struct {
@@ -58,7 +58,7 @@ type message struct {
}
// NewSubscriber returns new OPC-UA client instance.
func NewSubscriber(ctx context.Context, publisher messaging.Publisher, thingsRM, channelsRM, connectRM opcua.RouteMapRepository, log mglog.Logger) opcua.Subscriber {
func NewSubscriber(ctx context.Context, publisher messaging.Publisher, thingsRM, channelsRM, connectRM opcua.RouteMapRepository, log *slog.Logger) opcua.Subscriber {
return client{
ctx: ctx,
publisher: publisher,
+4 -4
View File
@@ -8,9 +8,9 @@ import (
"encoding/json"
"errors"
"fmt"
"log/slog"
"time"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/events"
"github.com/absmach/magistrala/pkg/messaging"
broker "github.com/absmach/magistrala/pkg/messaging/nats"
@@ -51,10 +51,10 @@ type subEventStore struct {
pubsub messaging.PubSub
stream string
consumer string
logger mglog.Logger
logger *slog.Logger
}
func NewSubscriber(ctx context.Context, url, stream, consumer string, logger mglog.Logger) (events.Subscriber, error) {
func NewSubscriber(ctx context.Context, url, stream, consumer string, logger *slog.Logger) (events.Subscriber, error) {
if stream == "" {
return nil, ErrEmptyStream
}
@@ -121,7 +121,7 @@ func (re event) Encode() (map[string]interface{}, error) {
type eventHandler struct {
handler events.EventHandler
ctx context.Context
logger mglog.Logger
logger *slog.Logger
}
func (eh *eventHandler) Handle(msg *messaging.Message) error {
+4 -4
View File
@@ -8,8 +8,8 @@ import (
"encoding/json"
"errors"
"fmt"
"log/slog"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/events"
"github.com/absmach/magistrala/pkg/messaging"
broker "github.com/absmach/magistrala/pkg/messaging/rabbitmq"
@@ -34,10 +34,10 @@ type subEventStore struct {
pubsub messaging.PubSub
stream string
consumer string
logger mglog.Logger
logger *slog.Logger
}
func NewSubscriber(url, stream, consumer string, logger mglog.Logger) (events.Subscriber, error) {
func NewSubscriber(url, stream, consumer string, logger *slog.Logger) (events.Subscriber, error) {
if stream == "" {
return nil, ErrEmptyStream
}
@@ -103,7 +103,7 @@ func (re event) Encode() (map[string]interface{}, error) {
type eventHandler struct {
handler events.EventHandler
ctx context.Context
logger mglog.Logger
logger *slog.Logger
}
func (eh *eventHandler) Handle(msg *messaging.Message) error {
+3 -3
View File
@@ -10,8 +10,8 @@ import (
"context"
"errors"
"fmt"
"log/slog"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/events"
"github.com/go-redis/redis/v8"
)
@@ -36,10 +36,10 @@ type subEventStore struct {
client *redis.Client
stream string
consumer string
logger mglog.Logger
logger *slog.Logger
}
func NewSubscriber(url, stream, consumer string, logger mglog.Logger) (events.Subscriber, error) {
func NewSubscriber(url, stream, consumer string, logger *slog.Logger) (events.Subscriber, error) {
if stream == "" {
return nil, ErrEmptyStream
}
+2 -2
View File
@@ -9,8 +9,8 @@ package store
import (
"context"
"log"
"log/slog"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/events"
"github.com/absmach/magistrala/pkg/events/nats"
)
@@ -28,7 +28,7 @@ func NewPublisher(ctx context.Context, url, stream string) (events.Publisher, er
return pb, nil
}
func NewSubscriber(ctx context.Context, url, stream, consumer string, logger mglog.Logger) (events.Subscriber, error) {
func NewSubscriber(ctx context.Context, url, stream, consumer string, logger *slog.Logger) (events.Subscriber, error) {
pb, err := nats.NewSubscriber(ctx, url, stream, consumer, logger)
if err != nil {
return nil, err
+2 -2
View File
@@ -9,8 +9,8 @@ package store
import (
"context"
"log"
"log/slog"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/events"
"github.com/absmach/magistrala/pkg/events/rabbitmq"
)
@@ -28,7 +28,7 @@ func NewPublisher(ctx context.Context, url, stream string) (events.Publisher, er
return pb, nil
}
func NewSubscriber(_ context.Context, url, stream, consumer string, logger mglog.Logger) (events.Subscriber, error) {
func NewSubscriber(_ context.Context, url, stream, consumer string, logger *slog.Logger) (events.Subscriber, error) {
pb, err := rabbitmq.NewSubscriber(url, stream, consumer, logger)
if err != nil {
return nil, err
+2 -2
View File
@@ -9,8 +9,8 @@ package store
import (
"context"
"log"
"log/slog"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/events"
"github.com/absmach/magistrala/pkg/events/redis"
)
@@ -28,7 +28,7 @@ func NewPublisher(ctx context.Context, url, stream string) (events.Publisher, er
return pb, nil
}
func NewSubscriber(_ context.Context, url, stream, consumer string, logger mglog.Logger) (events.Subscriber, error) {
func NewSubscriber(_ context.Context, url, stream, consumer string, logger *slog.Logger) (events.Subscriber, error) {
pb, err := redis.NewSubscriber(url, stream, consumer, logger)
if err != nil {
return nil, err
+2 -2
View File
@@ -9,8 +9,8 @@ package brokers
import (
"context"
"log"
"log/slog"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/messaging"
"github.com/absmach/magistrala/pkg/messaging/nats"
)
@@ -31,7 +31,7 @@ func NewPublisher(ctx context.Context, url string, opts ...messaging.Option) (me
return pb, nil
}
func NewPubSub(ctx context.Context, url string, logger mglog.Logger, opts ...messaging.Option) (messaging.PubSub, error) {
func NewPubSub(ctx context.Context, url string, logger *slog.Logger, opts ...messaging.Option) (messaging.PubSub, error) {
pb, err := nats.NewPubSub(ctx, url, logger, opts...)
if err != nil {
return nil, err
+2 -2
View File
@@ -9,8 +9,8 @@ package brokers
import (
"context"
"log"
"log/slog"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/messaging"
"github.com/absmach/magistrala/pkg/messaging/rabbitmq"
)
@@ -31,7 +31,7 @@ func NewPublisher(_ context.Context, url string, opts ...messaging.Option) (mess
return pb, nil
}
func NewPubSub(_ context.Context, url string, logger mglog.Logger, opts ...messaging.Option) (messaging.PubSub, error) {
func NewPubSub(_ context.Context, url string, logger *slog.Logger, opts ...messaging.Option) (messaging.PubSub, error) {
pb, err := rabbitmq.NewPubSub(url, logger, opts...)
if err != nil {
return nil, err
+3 -3
View File
@@ -8,16 +8,16 @@ package handler
import (
"context"
"fmt"
"log/slog"
"time"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/mproxy/pkg/session"
)
var _ session.Handler = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
svc session.Handler
}
@@ -135,6 +135,6 @@ func (lm *loggingMiddleware) Unsubscribe(ctx context.Context, topics *[]string)
}
// LoggingMiddleware adds logging facilities to the adapter.
func LoggingMiddleware(svc session.Handler, logger mglog.Logger) session.Handler {
func LoggingMiddleware(svc session.Handler, logger *slog.Logger) session.Handler {
return &loggingMiddleware{logger, svc}
}
+3 -3
View File
@@ -7,10 +7,10 @@ import (
"context"
"errors"
"fmt"
"log/slog"
"sync"
"time"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/messaging"
mqtt "github.com/eclipse/paho.mqtt.golang"
"google.golang.org/protobuf/proto"
@@ -51,7 +51,7 @@ type subscription struct {
type pubsub struct {
publisher
logger mglog.Logger
logger *slog.Logger
mu sync.RWMutex
address string
timeout time.Duration
@@ -59,7 +59,7 @@ type pubsub struct {
}
// NewPubSub returns MQTT message publisher/subscriber.
func NewPubSub(url string, qos uint8, timeout time.Duration, logger mglog.Logger) (messaging.PubSub, error) {
func NewPubSub(url string, qos uint8, timeout time.Duration, logger *slog.Logger) (messaging.PubSub, error) {
client, err := newClient(url, "mqtt-publisher", timeout)
if err != nil {
return nil, err
+3 -2
View File
@@ -6,6 +6,7 @@ package mqtt_test
import (
"fmt"
"log"
"log/slog"
"os"
"os/signal"
"syscall"
@@ -21,7 +22,7 @@ import (
var (
pubsub messaging.PubSub
logger mglog.Logger
logger *slog.Logger
address string
)
@@ -51,7 +52,7 @@ func TestMain(m *testing.M) {
address = fmt.Sprintf("%s:%s", "localhost", container.GetPort(port))
pool.MaxWait = poolMaxWait
logger, err = mglog.New(os.Stdout, mglog.Debug.String())
logger, err = mglog.New(os.Stdout, "debug")
if err != nil {
log.Fatalf(err.Error())
}
+3 -3
View File
@@ -7,10 +7,10 @@ import (
"context"
"errors"
"fmt"
"log/slog"
"strings"
"time"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/messaging"
broker "github.com/nats-io/nats.go"
"github.com/nats-io/nats.go/jetstream"
@@ -42,7 +42,7 @@ var _ messaging.PubSub = (*pubsub)(nil)
type pubsub struct {
publisher
logger mglog.Logger
logger *slog.Logger
stream jetstream.Stream
}
@@ -53,7 +53,7 @@ type pubsub struct {
// from ordinary subscribe. For more information, please take a look
// here: https://docs.nats.io/developing-with-nats/receiving/queues.
// If the queue is empty, Subscribe will be used.
func NewPubSub(ctx context.Context, url string, logger mglog.Logger, opts ...messaging.Option) (messaging.PubSub, error) {
func NewPubSub(ctx context.Context, url string, logger *slog.Logger, opts ...messaging.Option) (messaging.PubSub, error) {
conn, err := broker.Connect(url, broker.MaxReconnects(maxReconnects))
if err != nil {
return nil, err
+3 -3
View File
@@ -7,9 +7,9 @@ import (
"context"
"errors"
"fmt"
"log/slog"
"sync"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/messaging"
amqp "github.com/rabbitmq/amqp091-go"
"google.golang.org/protobuf/proto"
@@ -40,13 +40,13 @@ type subscription struct {
}
type pubsub struct {
publisher
logger mglog.Logger
logger *slog.Logger
subscriptions map[string]map[string]subscription
mu sync.Mutex
}
// NewPubSub returns RabbitMQ message publisher/subscriber.
func NewPubSub(url string, logger mglog.Logger, opts ...messaging.Option) (messaging.PubSub, error) {
func NewPubSub(url string, logger *slog.Logger, opts ...messaging.Option) (messaging.PubSub, error) {
conn, err := amqp.Dial(url)
if err != nil {
return nil, err
+3 -2
View File
@@ -6,6 +6,7 @@ package rabbitmq_test
import (
"fmt"
"log"
"log/slog"
"os"
"os/signal"
"syscall"
@@ -29,7 +30,7 @@ const (
var (
publisher messaging.Publisher
pubsub messaging.PubSub
logger mglog.Logger
logger *slog.Logger
address string
)
@@ -53,7 +54,7 @@ func TestMain(m *testing.M) {
log.Fatalf("Could not connect to docker: %s", err)
}
logger, err = mglog.New(os.Stdout, mglog.Debug.String())
logger, err = mglog.New(os.Stdout, "debug")
if err != nil {
log.Fatalf(err.Error())
}
+3 -3
View File
@@ -7,21 +7,21 @@ package api
import (
"fmt"
"log/slog"
"time"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/provision"
)
var _ provision.Service = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
svc provision.Service
}
// NewLoggingMiddleware adds logging facilities to the core service.
func NewLoggingMiddleware(svc provision.Service, logger mglog.Logger) provision.Service {
func NewLoggingMiddleware(svc provision.Service, logger *slog.Logger) provision.Service {
return &loggingMiddleware{logger, svc}
}
+2 -2
View File
@@ -6,12 +6,12 @@ package api
import (
"context"
"encoding/json"
"log/slog"
"net/http"
"github.com/absmach/magistrala"
"github.com/absmach/magistrala/internal/api"
"github.com/absmach/magistrala/internal/apiutil"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
"github.com/absmach/magistrala/provision"
"github.com/go-chi/chi/v5"
@@ -24,7 +24,7 @@ const (
)
// MakeHandler returns a HTTP handler for API endpoints.
func MakeHandler(svc provision.Service, logger mglog.Logger, instanceID string) http.Handler {
func MakeHandler(svc provision.Service, logger *slog.Logger, instanceID string) http.Handler {
opts := []kithttp.ServerOption{
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, api.EncodeError)),
}
+3 -3
View File
@@ -6,8 +6,8 @@ package provision
import (
"encoding/json"
"fmt"
"log/slog"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/pkg/errors"
sdk "github.com/absmach/magistrala/pkg/sdk/go"
)
@@ -70,7 +70,7 @@ type Service interface {
}
type provisionService struct {
logger mglog.Logger
logger *slog.Logger
sdk sdk.SDK
conf Config
}
@@ -87,7 +87,7 @@ type Result struct {
}
// New returns new provision service.
func New(cfg Config, mgsdk sdk.SDK, logger mglog.Logger) Service {
func New(cfg Config, mgsdk sdk.SDK, logger *slog.Logger) Service {
return &provisionService{
logger: logger,
conf: cfg,
+3 -3
View File
@@ -7,21 +7,21 @@ package api
import (
"fmt"
"log/slog"
"time"
mglog "github.com/absmach/magistrala/logger"
"github.com/absmach/magistrala/readers"
)
var _ readers.MessageRepository = (*loggingMiddleware)(nil)
type loggingMiddleware struct {
logger mglog.Logger
logger *slog.Logger
svc readers.MessageRepository
}
// LoggingMiddleware adds logging facilities to the core service.
func LoggingMiddleware(svc readers.MessageRepository, logger mglog.Logger) readers.MessageRepository {
func LoggingMiddleware(svc readers.MessageRepository, logger *slog.Logger) readers.MessageRepository {
return &loggingMiddleware{
logger: logger,
svc: svc,
+2 -2
View File
@@ -14,7 +14,7 @@ import (
"github.com/ory/dockertest/v3"
)
var logger, _ = mglog.New(os.Stdout, mglog.Info.String())
var logger, _ = mglog.New(os.Stdout, "info")
func TestMain(m *testing.M) {
pool, err := dockertest.NewPool("")
@@ -46,7 +46,7 @@ func TestMain(m *testing.M) {
return nil
}); err != nil {
logger.Fatal(fmt.Sprintf("Could not connect to docker: %s", err))
logger.Error(fmt.Sprintf("Could not connect to docker: %s", err))
}
code := m.Run()
+1 -1
View File
@@ -19,7 +19,7 @@ import (
)
var (
testLog, _ = mglog.New(os.Stdout, mglog.Info.String())
testLog, _ = mglog.New(os.Stdout, "info")
address string
)
+1 -1
View File
@@ -15,7 +15,7 @@ import (
"go.mongodb.org/mongo-driver/mongo/options"
)
var testLog, _ = mglog.New(os.Stdout, mglog.Info.String())
var testLog, _ = mglog.New(os.Stdout, "info")
func TestMain(m *testing.M) {
pool, err := dockertest.NewPool("")

Some files were not shown because too many files have changed in this diff Show More