feat(watchdog): 主机侧巡检定时器按异常邮件通知平台所有者,operator 增加 phase 与 build_info 指标、卡死存活探针与告警规则

This commit is contained in:
Lemon-miaow committed 2026-09-24 18:06:19 +08:00
1 parent d50492b86f
commit d17524cd67
26 files changed
+2686 -34

No files matched your search

+27
View File
@@ -48,3 +48,30 @@ func TestGaugeSyncerPublishesFleetStateFromCluster(t *testing.T) {
t.Errorf("servers_total{state=Stopped} = %v, want 2", got)
}
}
// TestGaugeSyncerPublishesServerPhases: every server gets one felis_server_phase
// series carrying its system role, observed phase (Unknown before the first
// report) and desired state.
func TestGaugeSyncerPublishesServerPhases(t *testing.T) {
login := gaugeServer("login", v1alpha1.DesiredRunning)
login.Labels = map[string]string{v1alpha1.LabelSystemRole: "login"}
login.Status.Phase = v1alpha1.PhaseFailed
fresh := gaugeServer("fresh", "")
c := fake.NewClientBuilder().WithScheme(newScheme(t)).WithObjects(login, fresh).Build()
if err := (&operator.GaugeSyncer{Client: c}).SyncOnce(context.Background()); err != nil {
t.Fatalf("SyncOnce: %v", err)
}
defer metrics.ServerPhase.Reset()
if n := testutil.CollectAndCount(metrics.ServerPhase); n != 2 {
t.Fatalf("felis_server_phase series = %d, want 2", n)
}
for _, labels := range [][]string{
{"login", "login", "Failed", "Running"},
{"fresh", "", "Unknown", "Stopped"},
} {
if got := testutil.ToFloat64(metrics.ServerPhase.WithLabelValues(labels...)); got != 1 {
t.Errorf("felis_server_phase%v = %v, want 1", labels, got)
}
}
}