yao/monitor/types.go
Max b39397ded0 feat(monitor): integrate monitor service start and stop in load and unload processes
- Added functionality to start the monitor service during the loading process, ensuring that watchers are registered.
- Implemented the stopping of the monitor service before unloading other services to allow for event handling.
- Updated middleware to utilize access logging for improved request tracking.

Made-with: Cursor
2026-03-15 10:18:55 +08:00

55 lines
1.5 KiB
Go

package monitor
import (
"context"
"time"
)
// Level represents alert severity.
type Level int
const (
Trace Level = iota // Heartbeat, periodic status sync — not logged
Info // Notable events: state changes, registrations
Warn // Needs attention: idle timeout, degraded state
Error // Needs immediate action: crash, unreachable
)
func (l Level) String() string {
switch l {
case Trace:
return "trace"
case Info:
return "info"
case Warn:
return "warn"
case Error:
return "error"
default:
return "unknown"
}
}
// Alert represents a single finding from a watcher check.
type Alert struct {
Watcher string // Source watcher name (set by monitor)
Level Level // Severity
Target string // Target identifier, e.g. "box:abc123", "robot:member-456"
Message string // Human-readable description
Action func(ctx context.Context) // Business-layer action; nil means notification only
}
// Watcher is the interface that business modules implement and register
// with the monitor service.
type Watcher interface {
// Name returns a globally unique watcher name, used for logging and dedup.
Name() string
// Interval returns the check frequency.
Interval() time.Duration
// Check performs a single inspection and returns any alerts found.
// An empty slice means everything is normal.
// ctx is cancelled when the monitor stops.
Check(ctx context.Context) []Alert
}