- Create internal/logger package with Logger wrapper around slog - Logger automatically adds source file, line number, and function name to all log entries - Use golang.org/x/term to properly detect if stdout is a terminal - Replace all slog.Logger usage with logger.Logger throughout the codebase - Remove verbose logging from database GetStats() method - Update all constructors and dependencies to use the new logger
61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package routewatch
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"git.eeqj.de/sneak/routewatch/internal/database"
|
|
"git.eeqj.de/sneak/routewatch/internal/logger"
|
|
"git.eeqj.de/sneak/routewatch/internal/ristypes"
|
|
)
|
|
|
|
const (
|
|
// peerHandlerQueueSize is the queue capacity for peer tracking operations
|
|
peerHandlerQueueSize = 500
|
|
)
|
|
|
|
// PeerHandler tracks BGP peers from all message types
|
|
type PeerHandler struct {
|
|
db database.Store
|
|
logger *logger.Logger
|
|
}
|
|
|
|
// NewPeerHandler creates a new peer tracking handler
|
|
func NewPeerHandler(db database.Store, logger *logger.Logger) *PeerHandler {
|
|
return &PeerHandler{
|
|
db: db,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
// WantsMessage returns true for all message types since we track peers from all messages
|
|
func (h *PeerHandler) WantsMessage(_ string) bool {
|
|
return true
|
|
}
|
|
|
|
// QueueCapacity returns the desired queue capacity for this handler
|
|
func (h *PeerHandler) QueueCapacity() int {
|
|
// Peer tracking is lightweight but involves database ops, use moderate queue
|
|
return peerHandlerQueueSize
|
|
}
|
|
|
|
// HandleMessage processes a message to track peer information
|
|
func (h *PeerHandler) HandleMessage(msg *ristypes.RISMessage) {
|
|
// Parse peer ASN from string
|
|
peerASN := 0
|
|
if msg.PeerASN != "" {
|
|
if asn, err := strconv.Atoi(msg.PeerASN); err == nil {
|
|
peerASN = asn
|
|
}
|
|
}
|
|
|
|
// Update peer in database
|
|
if err := h.db.UpdatePeer(msg.Peer, peerASN, msg.Type, msg.ParsedTimestamp); err != nil {
|
|
h.logger.Error("Failed to update peer",
|
|
"peer", msg.Peer,
|
|
"peer_asn", peerASN,
|
|
"message_type", msg.Type,
|
|
"error", err,
|
|
)
|
|
}
|
|
}
|