mirror of
https://github.com/redis/go-redis.git
synced 2025-10-18 22:08:50 +03:00
* e2e wip * cleanup * remove unused fault injector mock * errChan in test * remove log messages tests * cleanup log messages * s/hitless/maintnotifications/ * fix moving when none * better logs * test with second client after action has started * Fixes Signed-off-by: Elena Kolevska <elena@kolevska.com> * Test fix Signed-off-by: Elena Kolevska <elena@kolevska.com> * feat(e2e-test): Extended e2e tests * imroved e2e test resiliency --------- Signed-off-by: Elena Kolevska <elena@kolevska.com> Co-authored-by: Elena Kolevska <elena@kolevska.com> Co-authored-by: Elena Kolevska <elena-kolevska@users.noreply.github.com> Co-authored-by: Hristo Temelski <hristo.temelski@redis.com>
61 lines
2.1 KiB
Go
61 lines
2.1 KiB
Go
package maintnotifications
|
|
|
|
import (
|
|
"context"
|
|
"slices"
|
|
|
|
"github.com/redis/go-redis/v9/internal"
|
|
"github.com/redis/go-redis/v9/internal/maintnotifications/logs"
|
|
"github.com/redis/go-redis/v9/internal/pool"
|
|
"github.com/redis/go-redis/v9/push"
|
|
)
|
|
|
|
// LoggingHook is an example hook implementation that logs all notifications.
|
|
type LoggingHook struct {
|
|
LogLevel int // 0=Error, 1=Warn, 2=Info, 3=Debug
|
|
}
|
|
|
|
// PreHook logs the notification before processing and allows modification.
|
|
func (lh *LoggingHook) PreHook(ctx context.Context, notificationCtx push.NotificationHandlerContext, notificationType string, notification []interface{}) ([]interface{}, bool) {
|
|
if lh.LogLevel >= 2 { // Info level
|
|
// Log the notification type and content
|
|
connID := uint64(0)
|
|
if conn, ok := notificationCtx.Conn.(*pool.Conn); ok {
|
|
connID = conn.GetID()
|
|
}
|
|
seqID := int64(0)
|
|
if slices.Contains(maintenanceNotificationTypes, notificationType) {
|
|
// seqID is the second element in the notification array
|
|
if len(notification) > 1 {
|
|
if parsedSeqID, ok := notification[1].(int64); !ok {
|
|
seqID = 0
|
|
} else {
|
|
seqID = parsedSeqID
|
|
}
|
|
}
|
|
|
|
}
|
|
internal.Logger.Printf(ctx, logs.ProcessingNotification(connID, seqID, notificationType, notification))
|
|
}
|
|
return notification, true // Continue processing with unmodified notification
|
|
}
|
|
|
|
// PostHook logs the result after processing.
|
|
func (lh *LoggingHook) PostHook(ctx context.Context, notificationCtx push.NotificationHandlerContext, notificationType string, notification []interface{}, result error) {
|
|
connID := uint64(0)
|
|
if conn, ok := notificationCtx.Conn.(*pool.Conn); ok {
|
|
connID = conn.GetID()
|
|
}
|
|
if result != nil && lh.LogLevel >= 1 { // Warning level
|
|
internal.Logger.Printf(ctx, logs.ProcessingNotificationFailed(connID, notificationType, result, notification))
|
|
} else if lh.LogLevel >= 3 { // Debug level
|
|
internal.Logger.Printf(ctx, logs.ProcessingNotificationSucceeded(connID, notificationType))
|
|
}
|
|
}
|
|
|
|
// NewLoggingHook creates a new logging hook with the specified log level.
|
|
// Log levels: 0=Error, 1=Warn, 2=Info, 3=Debug
|
|
func NewLoggingHook(logLevel int) *LoggingHook {
|
|
return &LoggingHook{LogLevel: logLevel}
|
|
}
|