Implement LoggerService + refactoring (incomplete)

This commit is contained in:
ionutboangiu
2025-01-14 19:50:47 +02:00
committed by Dan Christian Bogos
parent e7152dacf8
commit 04f746c634
10 changed files with 170 additions and 124 deletions

View File

@@ -20,7 +20,6 @@ package engine
import (
"fmt"
"log"
"log/syslog"
"sync"
"time"
@@ -31,24 +30,12 @@ import (
"github.com/segmentio/kafka-go"
)
func NewLogger(ctx *context.Context, loggerType, tnt, nodeID string,
connMgr *ConnManager, cfg *config.CGRConfig) (utils.LoggerInterface, error) {
switch loggerType {
case utils.MetaKafkaLog:
return NewExportLogger(ctx, nodeID, tnt, cfg.LoggerCfg().Level, connMgr, cfg), nil
case utils.MetaStdLog, utils.MetaSysLog:
return utils.NewLogger(loggerType, nodeID, cfg.LoggerCfg().Level)
default:
return nil, fmt.Errorf("unsupported logger: <%+s>", loggerType)
}
}
// Logs to kafka
type ExportLogger struct {
sync.Mutex
cfg *config.CGRConfig
connMgr *ConnManager
ctx *context.Context
efsConns []string
connMgr *ConnManager
ctx *context.Context
LogLevel int
FldPostDir string
@@ -58,15 +45,15 @@ type ExportLogger struct {
}
// NewExportLogger will export loggers to kafka
func NewExportLogger(ctx *context.Context, nodeID, tenant string, level int,
connMgr *ConnManager, cfg *config.CGRConfig) (el *ExportLogger) {
el = &ExportLogger{
func NewExportLogger(ctx *context.Context, tenant string, connMgr *ConnManager,
cfg *config.CGRConfig) *ExportLogger {
return &ExportLogger{
ctx: ctx,
efsConns: cfg.LoggerCfg().EFsConns,
connMgr: connMgr,
cfg: cfg,
LogLevel: level,
LogLevel: cfg.LoggerCfg().Level,
FldPostDir: cfg.LoggerCfg().Opts.FailedPostsDir,
NodeID: nodeID,
NodeID: cfg.GeneralCfg().NodeID,
Tenant: tenant,
Writer: &kafka.Writer{
Addr: kafka.TCP(cfg.LoggerCfg().Opts.KafkaConn),
@@ -74,7 +61,6 @@ func NewExportLogger(ctx *context.Context, nodeID, tenant string, level int,
MaxAttempts: cfg.LoggerCfg().Opts.KafkaAttempts,
},
}
return
}
func (el *ExportLogger) Close() (err error) {
@@ -115,12 +101,10 @@ func (el *ExportLogger) call(m string, level int) (err error) {
APIOpts: el.GetMeta(),
}
var reply string
if err = el.connMgr.Call(el.ctx, el.cfg.LoggerCfg().EFsConns,
utils.EfSv1ProcessEvent, args, &reply); err != nil {
log.Printf("err la sefprocessEvent: %v", err)
/* utils.Logger.Warning(
fmt.Sprintf("<%s> Exporter could not writte failed event with <%s> service because err: <%s>",
utils.Logger, utils.EFs, err.Error())) */
if err = el.connMgr.Call(el.ctx, el.efsConns, utils.EfSv1ProcessEvent,
args, &reply); err != nil {
utils.Logger.Warning(fmt.Sprintf(
"<%s> failed to export log event: %v", utils.EFs, err))
}
}()
// also the content should be printed as a stdout logger type
@@ -168,7 +152,7 @@ func (el *ExportLogger) Crit(m string) (err error) {
if el.LogLevel < utils.LOGLEVEL_CRITICAL {
return nil
}
if el.call(m, utils.LOGLEVEL_CRITICAL); err != nil {
if err = el.call(m, utils.LOGLEVEL_CRITICAL); err != nil {
if err == utils.ErrLoggerChanged {
utils.NewStdLogger(el.NodeID, el.LogLevel).Crit(m)
err = nil

View File

@@ -29,34 +29,14 @@ import (
"github.com/segmentio/kafka-go"
)
func TestLoggerNewLoggerExportKafkaLog(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
cM := NewConnManager(cfg)
exp := NewExportLogger(context.Background(), "123", "cgrates.org", 6, cM, cfg)
if rcv, err := NewLogger(context.Background(), utils.MetaKafkaLog, "cgrates.org", "123", cM, cfg); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(rcv, exp) {
t.Errorf("expected: <%+v>, \nreceived: <%+v>", exp, rcv)
}
}
func TestLoggerNewLoggerDefault(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
cM := NewConnManager(cfg)
experr := `unsupported logger: <invalid>`
if _, err := NewLogger(context.Background(), "invalid", "cgrates.org", "123", cM, cfg); err == nil ||
err.Error() != experr {
t.Errorf("expected: <%s>, \nreceived: <%s>", experr, err)
}
}
func TestLoggerNewExportLogger(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
cfg.LoggerCfg().Level = 7
cfg.GeneralCfg().NodeID = "123"
cM := NewConnManager(cfg)
exp := &ExportLogger{
ctx: context.Background(),
cfg: cfg,
efsConns: []string{"*internal:*efs"},
connMgr: cM,
FldPostDir: "/var/spool/cgrates/failed_posts",
LogLevel: 7,
@@ -68,18 +48,20 @@ func TestLoggerNewExportLogger(t *testing.T) {
MaxAttempts: cfg.LoggerCfg().Opts.KafkaAttempts,
},
}
if rcv := NewExportLogger(context.Background(), "123", "cgrates.org", 7, cM, cfg); !reflect.DeepEqual(rcv, exp) {
if rcv := NewExportLogger(context.Background(), "cgrates.org", cM, cfg); !reflect.DeepEqual(rcv, exp) {
t.Errorf("expected: <%+v>, \nreceived: <%+v>", exp, rcv)
}
}
func TestCloseExportLogger(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
cfg.LoggerCfg().Level = 7
cfg.GeneralCfg().NodeID = "123"
cM := NewConnManager(cfg)
el := NewExportLogger(context.Background(), "123", "cgrates.org", 7, cM, cfg)
el := NewExportLogger(context.Background(), "cgrates.org", cM, cfg)
if el == nil {
t.Error("Export logger should'nt be empty")
t.Error("Export logger shouldn't be empty")
}
if err := el.Close(); err != nil {
@@ -88,7 +70,7 @@ func TestCloseExportLogger(t *testing.T) {
exp := &ExportLogger{
ctx: context.Background(),
connMgr: cM,
cfg: cfg,
efsConns: []string{"*internal:*efs"},
LogLevel: 7,
FldPostDir: cfg.LoggerCfg().Opts.FailedPostsDir,
NodeID: "123",
@@ -137,7 +119,7 @@ func TestExportLoggerCallErrWriter(t *testing.T) {
dm := NewDataManager(db, cfg.CacheCfg(), cM)
Cache = NewCacheS(cfg, dm, cM, nil)
el := NewExportLogger(context.Background(), "123", "cgrates.org", 7, cM, cfg)
el := NewExportLogger(context.Background(), "cgrates.org", cM, cfg)
if err := el.call("test msg", 7); err != utils.ErrLoggerChanged || err == nil {
t.Error(err)
@@ -155,7 +137,7 @@ func TestLoggerExportEmergNil(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
cM := NewConnManager(cfg)
el := NewExportLogger(context.Background(), "123", "cgrates.org", -1, cM, cfg)
el := NewExportLogger(context.Background(), "cgrates.org", cM, cfg)
if err := el.Emerg("Emergency message"); err != nil {
t.Error(err)
@@ -544,7 +526,7 @@ func TestLoggerExportDebug(t *testing.T) {
func TestLoggerSetGetLogLevel(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
cM := NewConnManager(cfg)
el := NewExportLogger(context.Background(), "123", "cgrates.org", 6, cM, cfg)
el := NewExportLogger(context.Background(), "cgrates.org", cM, cfg)
if rcv := el.GetLogLevel(); rcv != 6 {
t.Errorf("expected: <%+v>, \nreceived: <%+v>", 6, rcv)
}
@@ -557,7 +539,7 @@ func TestLoggerSetGetLogLevel(t *testing.T) {
func TestLoggerGetSyslog(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
cM := NewConnManager(cfg)
el := NewExportLogger(context.Background(), "123", "cgrates.org", 6, cM, cfg)
el := NewExportLogger(context.Background(), "cgrates.org", cM, cfg)
if el.GetSyslog() != nil {
t.Errorf("expected: <%+v>, \nreceived: <%+v>", nil, el.GetSyslog())
}