Chore: Remove prometheus replace directive (#98966)

* remove replace directive

* have an adapter

* go mod tidy

* make update-workspace

* make update-workspace
This commit is contained in:
ismail simsek
2025-01-15 14:04:14 +01:00
committed by GitHub
parent ea6cb8f139
commit 79fc26ea87
11 changed files with 131 additions and 17 deletions
+3 -1
View File
@@ -114,7 +114,9 @@ func NewExternalAlertmanagerSender(l log.Logger, reg prometheus.Registerer, opts
s.logger.Error("failed to register service discovery metrics", "error", err)
return nil, err
}
s.sdManager = discovery.NewManager(sdCtx, s.logger, prometheus.NewRegistry(), sdMetrics)
// Convert s.Logger to slog.Logger using the adapter
slogLogger := toSlogLogger(s.logger)
s.sdManager = discovery.NewManager(sdCtx, slogLogger, prometheus.NewRegistry(), sdMetrics)
if s.sdManager == nil {
return nil, errors.New("failed to create new discovery manager")
@@ -0,0 +1,82 @@
package sender
import (
"context"
"log/slog"
"github.com/grafana/grafana/pkg/infra/log"
)
// InfraLoggerHandler adapts infra's log.Logger to an slog.Handler
type InfraLoggerHandler struct {
infraLogger log.Logger
}
type SlogAdapter struct {
logger *slog.Logger
}
// Log implements the Log method to satisfy the log.Logger interface.
func (s *SlogAdapter) Log(keyvals ...interface{}) error {
msg := ""
args := []interface{}{}
// Extract message and attributes (customize as needed).
if len(keyvals) > 0 {
msg, _ = keyvals[0].(string)
if len(keyvals) > 1 {
args = keyvals[1:]
}
}
// Delegate to slog.Logger
s.logger.Info(msg, args...)
return nil
}
// Enabled determines if the log level is enabled
func (h *InfraLoggerHandler) Enabled(_ context.Context, level slog.Level) bool {
// Assume all levels are enabled; customize this based on infra's log.Logger
return true
}
// Handle processes a log record and routes it to infra's log.Logger
func (h *InfraLoggerHandler) Handle(_ context.Context, record slog.Record) error {
// Build the log message
msg := record.Message
args := []interface{}{}
record.Attrs(func(a slog.Attr) bool {
args = append(args, a.Key, a.Value.Any())
return true
})
// Route the log message to Infra's logger
switch record.Level {
case slog.LevelDebug:
h.infraLogger.Debug(msg, args...)
case slog.LevelInfo:
h.infraLogger.Info(msg, args...)
case slog.LevelWarn:
h.infraLogger.Warn(msg, args...)
case slog.LevelError:
h.infraLogger.Error(msg, args...)
}
return nil
}
// WithAttrs adds attributes to the logger context
func (h *InfraLoggerHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
return h // Context attributes are ignored; implement if needed
}
// WithGroup groups log records; not used here
func (h *InfraLoggerHandler) WithGroup(name string) slog.Handler {
return h // Grouping is ignored; implement if needed
}
// toSlogLogger is a function to create *slog.Logger from Infra's log.Logger
func toSlogLogger(infraLogger log.Logger) *slog.Logger {
handler := &InfraLoggerHandler{infraLogger: infraLogger}
return slog.New(handler)
}