diff --git a/doc/thinking/2026-04-26-namespace-manager-step47.md b/doc/thinking/2026-04-26-namespace-manager-step47.md new file mode 100644 index 00000000..afda55bc --- /dev/null +++ b/doc/thinking/2026-04-26-namespace-manager-step47.md @@ -0,0 +1,17 @@ +# 2026-04-26 — NamespaceManager rewrite, step 47 + +## Цель шага + +Сделать `NamespaceManagerSummary` информативнее для наблюдения за источниками namespace state. + +## Что меняем + +1. В summary добавляем `SourceCounts`. +2. `Summary()` считает namespace-ы по `NamespaceSource`. +3. `LogNamespaceManagerSummary()` пишет `source_counts`. +4. Обновляем unit tests. + +## Что НЕ меняем + +- не меняем watcher behavior; +- не меняем semantics state transitions. \ No newline at end of file diff --git a/pkg/utils/namespace_manager.go b/pkg/utils/namespace_manager.go index e9287eff..9b5c4a66 100644 --- a/pkg/utils/namespace_manager.go +++ b/pkg/utils/namespace_manager.go @@ -124,6 +124,7 @@ func LogNamespaceManagerSummary(logger *zap.Logger, message string, summary Name logger.Info(message, zap.Int("total_namespaces", summary.TotalNamespaces), zap.Any("phase_counts", summary.PhaseCounts), + zap.Any("source_counts", summary.SourceCounts), zap.Strings("subscribers", summary.Subscribers), ) } @@ -258,10 +259,12 @@ func (m *inMemoryNamespaceManager) Summary() NamespaceManagerSummary { summary := NamespaceManagerSummary{ TotalNamespaces: len(records), PhaseCounts: make(map[NamespacePhase]int), + SourceCounts: make(map[NamespaceSource]int), Subscribers: m.SnapshotSubscribers(), } for _, record := range records { summary.PhaseCounts[record.Phase]++ + summary.SourceCounts[record.Source]++ } return summary } diff --git a/pkg/utils/namespace_manager_model.go b/pkg/utils/namespace_manager_model.go index 4ddedc1e..21af97f3 100644 --- a/pkg/utils/namespace_manager_model.go +++ b/pkg/utils/namespace_manager_model.go @@ -76,6 +76,7 @@ type NamespaceEvent struct { type NamespaceManagerSummary struct { TotalNamespaces int PhaseCounts map[NamespacePhase]int + SourceCounts map[NamespaceSource]int Subscribers []string } diff --git a/pkg/utils/namespace_manager_test.go b/pkg/utils/namespace_manager_test.go index 0822a043..934588f2 100644 --- a/pkg/utils/namespace_manager_test.go +++ b/pkg/utils/namespace_manager_test.go @@ -63,6 +63,9 @@ func TestNamespaceManagerSnapshotAndGet(t *testing.T) { if summary.TotalNamespaces != 2 { t.Fatalf("expected summary total namespaces to be 2, got %d", summary.TotalNamespaces) } + if summary.SourceCounts[NamespaceSourceWatcher] != 2 { + t.Fatalf("expected watcher source count to be 2") + } } func TestNamespaceManagerUpsertIncrementsGeneration(t *testing.T) { @@ -473,6 +476,9 @@ func TestNamespaceManagerSummary(t *testing.T) { if !reflect.DeepEqual([]string{"router"}, summary.Subscribers) { t.Fatalf("expected router subscriber in summary") } + if summary.SourceCounts[NamespaceSourceWatcher] != 2 { + t.Fatalf("expected two watcher-sourced namespaces") + } } func TestLogNamespaceManagerSummaryWithNilLogger(t *testing.T) {