mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-22 15:48:44 +05:00
Implement LoggerService + refactoring (incomplete)
This commit is contained in:
committed by
Dan Christian Bogos
parent
e7152dacf8
commit
04f746c634
@@ -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
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user