Add slog attributes at pool, worker, and connection levels.
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package logging
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
)
|
||||
|
||||
// Constants
|
||||
|
||||
const KEY_MODULE = "module"
|
||||
const KEY_COMPONENT = "component"
|
||||
const KEY_POOL_ID = "pool_id"
|
||||
const KEY_PEER_ID = "peer_id"
|
||||
|
||||
const MODULE_NAME = "honeybee"
|
||||
|
||||
const COMPONENT_OUTBOUND_POOL = "outbound_pool"
|
||||
const COMPONENT_OUTBOUND_WORKER = "outbound_worker"
|
||||
|
||||
const COMPONENT_INBOUND_POOL = "inbound_pool"
|
||||
const COMPONENT_INBOUND_WORKER = "inbound_worker"
|
||||
|
||||
const COMPONENT_CONNECTION = "connection"
|
||||
|
||||
// Outbound loggers
|
||||
|
||||
func NewOutboundPoolLogger(handler slog.Handler, poolID string) *slog.Logger {
|
||||
return newLogger(handler,
|
||||
KEY_MODULE, MODULE_NAME,
|
||||
KEY_COMPONENT, COMPONENT_OUTBOUND_POOL,
|
||||
KEY_POOL_ID, poolID,
|
||||
)
|
||||
}
|
||||
|
||||
func NewOutboundWorkerLogger(handler slog.Handler, poolID string, peerID string) *slog.Logger {
|
||||
return newLogger(handler,
|
||||
KEY_MODULE, MODULE_NAME,
|
||||
KEY_COMPONENT, COMPONENT_OUTBOUND_WORKER,
|
||||
KEY_POOL_ID, poolID,
|
||||
KEY_PEER_ID, peerID,
|
||||
)
|
||||
}
|
||||
|
||||
// Inbound loggers
|
||||
|
||||
func NewInboundPoolLogger(handler slog.Handler, poolID string) *slog.Logger {
|
||||
return newLogger(handler,
|
||||
KEY_MODULE, MODULE_NAME,
|
||||
KEY_COMPONENT, COMPONENT_INBOUND_POOL,
|
||||
KEY_POOL_ID, poolID,
|
||||
)
|
||||
}
|
||||
|
||||
func NewInboundWorkerLogger(handler slog.Handler, poolID string, peerID string) *slog.Logger {
|
||||
return newLogger(handler,
|
||||
KEY_MODULE, MODULE_NAME,
|
||||
KEY_COMPONENT, COMPONENT_INBOUND_WORKER,
|
||||
KEY_POOL_ID, poolID,
|
||||
KEY_PEER_ID, peerID,
|
||||
)
|
||||
}
|
||||
|
||||
// Connection logger
|
||||
|
||||
func NewConnectionLogger(handler slog.Handler, poolID string, peerID string) *slog.Logger {
|
||||
return newLogger(handler,
|
||||
KEY_MODULE, MODULE_NAME,
|
||||
KEY_COMPONENT, COMPONENT_CONNECTION,
|
||||
KEY_POOL_ID, poolID,
|
||||
KEY_PEER_ID, peerID,
|
||||
)
|
||||
}
|
||||
|
||||
// Helpers
|
||||
|
||||
func newLogger(handler slog.Handler, attrs ...any) *slog.Logger {
|
||||
return slog.New(handler).With(attrs...)
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package logging
|
||||
|
||||
import (
|
||||
"git.wisehodl.dev/jay/go-honeybee/honeybeetest"
|
||||
// "github.com/stretchr/testify/assert"
|
||||
"log/slog"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// Helpers
|
||||
|
||||
func log(level slog.Level, msg string, attrs map[string]any) honeybeetest.ExpectedLog {
|
||||
return honeybeetest.ExpectedLog{Level: level, Msg: msg, Attrs: attrs}
|
||||
}
|
||||
|
||||
// Tests
|
||||
|
||||
func TestOutboundLogger(t *testing.T) {
|
||||
const POOL_ID = "pool-1"
|
||||
const PEER_ID = "wss://test"
|
||||
|
||||
handler := honeybeetest.NewMockSlogHandler()
|
||||
poolLogger := NewOutboundPoolLogger(handler, POOL_ID)
|
||||
workerLogger := NewOutboundWorkerLogger(handler, POOL_ID, PEER_ID)
|
||||
connLogger := NewConnectionLogger(handler, POOL_ID, PEER_ID)
|
||||
|
||||
poolLogger.Info("test")
|
||||
workerLogger.Info("test")
|
||||
connLogger.Info("test")
|
||||
|
||||
honeybeetest.Eventually(t, func() bool {
|
||||
return len(handler.GetRecords()) == 3
|
||||
}, "expected a log record")
|
||||
|
||||
records := handler.GetRecords()
|
||||
|
||||
honeybeetest.AssertAttributePresent(t, records[0], KEY_MODULE, MODULE_NAME)
|
||||
honeybeetest.AssertAttributePresent(t, records[0], KEY_COMPONENT, COMPONENT_OUTBOUND_POOL)
|
||||
honeybeetest.AssertAttributePresent(t, records[0], KEY_POOL_ID, POOL_ID)
|
||||
|
||||
honeybeetest.AssertAttributePresent(t, records[1], KEY_MODULE, MODULE_NAME)
|
||||
honeybeetest.AssertAttributePresent(t, records[1], KEY_COMPONENT, COMPONENT_OUTBOUND_WORKER)
|
||||
honeybeetest.AssertAttributePresent(t, records[1], KEY_POOL_ID, POOL_ID)
|
||||
honeybeetest.AssertAttributePresent(t, records[1], KEY_PEER_ID, PEER_ID)
|
||||
|
||||
honeybeetest.AssertAttributePresent(t, records[2], KEY_MODULE, MODULE_NAME)
|
||||
honeybeetest.AssertAttributePresent(t, records[2], KEY_COMPONENT, COMPONENT_CONNECTION)
|
||||
honeybeetest.AssertAttributePresent(t, records[2], KEY_POOL_ID, POOL_ID)
|
||||
honeybeetest.AssertAttributePresent(t, records[2], KEY_PEER_ID, PEER_ID)
|
||||
}
|
||||
|
||||
func TestInboundLogger(t *testing.T) {
|
||||
const POOL_ID = "pool-1"
|
||||
const PEER_ID = "peer-1"
|
||||
|
||||
handler := honeybeetest.NewMockSlogHandler()
|
||||
poolLogger := NewInboundPoolLogger(handler, POOL_ID)
|
||||
workerLogger := NewInboundWorkerLogger(handler, POOL_ID, PEER_ID)
|
||||
connLogger := NewConnectionLogger(handler, POOL_ID, PEER_ID)
|
||||
|
||||
poolLogger.Info("test")
|
||||
workerLogger.Info("test")
|
||||
connLogger.Info("test")
|
||||
|
||||
honeybeetest.Eventually(t, func() bool {
|
||||
return len(handler.GetRecords()) == 3
|
||||
}, "expected a log record")
|
||||
|
||||
records := handler.GetRecords()
|
||||
|
||||
honeybeetest.AssertAttributePresent(t, records[0], KEY_MODULE, MODULE_NAME)
|
||||
honeybeetest.AssertAttributePresent(t, records[0], KEY_COMPONENT, COMPONENT_INBOUND_POOL)
|
||||
honeybeetest.AssertAttributePresent(t, records[0], KEY_POOL_ID, POOL_ID)
|
||||
|
||||
honeybeetest.AssertAttributePresent(t, records[1], KEY_MODULE, MODULE_NAME)
|
||||
honeybeetest.AssertAttributePresent(t, records[1], KEY_COMPONENT, COMPONENT_INBOUND_WORKER)
|
||||
honeybeetest.AssertAttributePresent(t, records[1], KEY_POOL_ID, POOL_ID)
|
||||
honeybeetest.AssertAttributePresent(t, records[1], KEY_PEER_ID, PEER_ID)
|
||||
|
||||
honeybeetest.AssertAttributePresent(t, records[2], KEY_MODULE, MODULE_NAME)
|
||||
honeybeetest.AssertAttributePresent(t, records[2], KEY_COMPONENT, COMPONENT_CONNECTION)
|
||||
honeybeetest.AssertAttributePresent(t, records[2], KEY_POOL_ID, POOL_ID)
|
||||
honeybeetest.AssertAttributePresent(t, records[2], KEY_PEER_ID, PEER_ID)
|
||||
}
|
||||
Reference in New Issue
Block a user