mirror of
https://github.com/hanzokv/go.git
synced 2026-09-24 00:31:51 +00:00
KV lives in its own org now, like hanzokms / hanzos3 / hanzo-ds. The repo moved hanzoai/kv-go -> hanzokv/go, so the module path follows: a Go module path must match where the repo actually is, or the proxy cannot resolve it. The name is `go`, not `kv-go`, following the hanzo-ds convention — that org holds go, mock, native, sqlbuilder, sqlparser, each named for its language or concern with the ORG supplying the product noun. Repeating "kv" inside a repo that already lives under hanzokv is the compound-word habit we are dropping. 349 occurrences across 188 files: the root module, all four extra/* modules, every example module, imports throughout the tree, and the docs. Builds clean. The package is still `package redis` and the extra dirs are still named redis*. That rename is deliberately NOT bundled here: it is 5,771 occurrences, it breaks all 11 consumers at once, and a large share are WIRE CONTRACTS rather than branding — the redis:// scheme parser, the "redis: nil" error string, RESP command names. Renaming those breaks protocol compatibility with the Valkey server. It needs the same our-vocabulary-vs-the-wire split the argo sweep used, as its own change. GitHub keeps the old path redirecting, and versions already published under github.com/hanzoai/kv-go/v9 stay resolvable, so nothing breaks the moment this lands. Consumers move on their own schedule.
61 lines
2.1 KiB
Go
61 lines
2.1 KiB
Go
package maintnotifications
|
|
|
|
import (
|
|
"context"
|
|
"slices"
|
|
|
|
"github.com/hanzokv/go/v9/internal"
|
|
"github.com/hanzokv/go/v9/internal/maintnotifications/logs"
|
|
"github.com/hanzokv/go/v9/internal/pool"
|
|
"github.com/hanzokv/go/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}
|
|
}
|