v0.24.0 — Pre-testing observability: debug logging, diagnostic dump, startup self-test
- Add [DEBUG] logging across all modules (backup, storage, sync, selfupdate, monitor, notify, report, assets, setup) gated behind logging.level: "debug" - Add /api/debug/dump endpoint returning full controller state JSON (debug only) - Add startup self-test validating 9 subsystems (Docker, dirs, storage, hub, restic repos, metrics DB) with pass/warn/fail summary - New packages: internal/selftest, internal/util - Constructor/signature changes: debug bool params, logger params on RunHealthCheck and BuildReport, smart watchdog probe logging Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,7 @@ type Notifier struct {
|
||||
httpClient *http.Client
|
||||
logger *log.Logger
|
||||
enabled bool
|
||||
debug bool
|
||||
settings *settings.Settings
|
||||
|
||||
mu sync.Mutex
|
||||
@@ -30,7 +31,7 @@ type Notifier struct {
|
||||
}
|
||||
|
||||
// New creates a new Notifier. Returns a no-op notifier if hub is not enabled.
|
||||
func New(hubURL, apiKey, customerID string, sett *settings.Settings, logger *log.Logger) *Notifier {
|
||||
func New(hubURL, apiKey, customerID string, sett *settings.Settings, logger *log.Logger, debug bool) *Notifier {
|
||||
enabled := hubURL != "" && apiKey != ""
|
||||
if enabled {
|
||||
logger.Printf("[INFO] Notifier enabled (hub: %s)", hubURL)
|
||||
@@ -45,6 +46,7 @@ func New(hubURL, apiKey, customerID string, sett *settings.Settings, logger *log
|
||||
httpClient: &http.Client{Timeout: 10 * time.Second},
|
||||
logger: logger,
|
||||
enabled: enabled,
|
||||
debug: debug,
|
||||
settings: sett,
|
||||
}
|
||||
}
|
||||
@@ -162,6 +164,9 @@ func (n *Notifier) PushEvent(eventType, severity, message string, details interf
|
||||
|
||||
go func() {
|
||||
url := n.hubURL + "/api/v1/event"
|
||||
if n.debug {
|
||||
n.logger.Printf("[DEBUG] PushEvent: type=%s severity=%s url=%s", eventType, severity, url)
|
||||
}
|
||||
var lastErr error
|
||||
for attempt := 0; attempt < 3; attempt++ {
|
||||
if attempt > 0 {
|
||||
@@ -185,6 +190,9 @@ func (n *Notifier) PushEvent(eventType, severity, message string, details interf
|
||||
resp.Body.Close()
|
||||
|
||||
if resp.StatusCode >= 200 && resp.StatusCode < 300 {
|
||||
if n.debug {
|
||||
n.logger.Printf("[DEBUG] PushEvent: %s pushed OK (HTTP %d)", eventType, resp.StatusCode)
|
||||
}
|
||||
n.logger.Printf("[INFO] Event pushed: %s (%s) — %s", eventType, severity, message)
|
||||
return
|
||||
}
|
||||
@@ -284,9 +292,10 @@ func (n *Notifier) NotifyControllerUpdated(fromVer, toVer string, success bool)
|
||||
}
|
||||
|
||||
// NotifyControllerStarted sends a controller startup event.
|
||||
func (n *Notifier) NotifyControllerStarted(version string) {
|
||||
// details may include self-test summary (e.g., {"selftest_pass": 8, "selftest_warn": 1, "selftest_fail": 0}).
|
||||
func (n *Notifier) NotifyControllerStarted(version string, details map[string]interface{}) {
|
||||
n.PushEvent("controller_started", "info",
|
||||
fmt.Sprintf("Controller elindult (%s)", version), nil)
|
||||
fmt.Sprintf("Controller elindult (%s)", version), details)
|
||||
}
|
||||
|
||||
// NotifyStorageDisconnected sends a drive disconnection event.
|
||||
@@ -375,6 +384,10 @@ func (n *Notifier) SyncPreferences(email string, enabledEvents []string, cooldow
|
||||
}
|
||||
|
||||
url := n.hubURL + "/api/v1/preferences"
|
||||
if n.debug {
|
||||
n.logger.Printf("[DEBUG] SyncPreferences: url=%s email=%s events=%v cooldown=%dh",
|
||||
url, email, enabledEvents, cooldownHours)
|
||||
}
|
||||
req, err := http.NewRequest("POST", url, bytes.NewReader(jsonData))
|
||||
if err != nil {
|
||||
return fmt.Errorf("request: %w", err)
|
||||
@@ -393,6 +406,9 @@ func (n *Notifier) SyncPreferences(email string, enabledEvents []string, cooldow
|
||||
return fmt.Errorf("hub hiba (%d): %s", resp.StatusCode, string(body))
|
||||
}
|
||||
|
||||
if n.debug {
|
||||
n.logger.Printf("[DEBUG] SyncPreferences: response HTTP %d", resp.StatusCode)
|
||||
}
|
||||
n.logger.Printf("[INFO] Notification preferences synced to hub: email=%s, events=%v, cooldown=%dh", email, enabledEvents, cooldownHours)
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user