Skip to main content
Version: Next

Operasyon Merkezi (SOC/NOC Dashboard)

AnchorNAC paketi ile gelen tek ekran SOC/NOC kontrol merkezi: 13 canlı KPI tile + 8 widget (incidents, sessions, ports, sites, topology, approvals, audit, fail-reasons) + Cytoscape ağ görselleştirmesi + SSE invalidate-only real-time push.

Hedef kullanıcı: SOC analist / NOC operatör / IT yöneticisi
Erişim: AnchorNAC veya On-Prem paketi
URL: / (default AnchorNAC shell home)

1. Üst Strip — Canlı KPI Bandı (DashboardKpiBand)​

Sunucu KPI'ları 10 saniyede bir hesaplayıp SSE ile iter; yeni değer geldiğinde bant güncellenir. 5 tile:

TileMetricAnlam
Aktif oturumactive_sessionsNOW() < grant_until grant sayısı
Karar (son 1 dk)decisions_1mPolicy-engine real-time karar tempo
Switch onlineswitches_onlinelast_seen_at < 5dk
Açık incidentincidents_openstate ∈ pending/triaging/acknowledged
Posture fail (24sa)posture_fail_24hverdict ∈ fail/drift

Canlı sinyal: LiveDot green/red + lastEventAt rölle gösterimi.

2. EnterpriseDashboardDemo — 8 Widget + 8 KPI Tile​

AnchorNAC ana dashboard inline metric grid:

8 KPI Tile (üst sıra)​

Her kutu değerini yalnız kendi kaynağından alır. Kaynak okunamazsa değer “—” olur, kutuda VERİ YOK rozeti çıkar ve alt satır nedeni söyler; yerine örnek sayı konmaz.

TileBackendGüncellemeNot
Aktif sessiondashboard/overview.active_guest_countSayfa yüklenirken
Auth success (24s)dashboard/overview: login / (login + login_fail)Sayfa yüklenirkenSon 24 saatte giriş denemesi yoksa “ölçülmedi”
Auth fail (24s)dashboard/overview.login_fail_count_24hSayfa yüklenirken
Hata oranıdashboard/overview.error_rate_pctSayfa yüklenirkenSon 24 saatte giriş denemesi yoksa “ölçülmedi”
Open incidentsincidents (çözülmemiş olanlar)SSE /stream/incidents
Edge healthdashboard/kpis-extra.edge_health_pctPolling 60sKayıtlı (devre dışı olmayan) cihaz yoksa “ölçülmedi”
Posturedashboard/kpis-extra.posture_compliance_pctPolling 60sSon 24 saatte posture olayı yoksa “ölçülmedi”
Audit / TSAdashboard/kpis-extra.audit_anchor_lag_minPolling 60sHiç TSA anchor'ı yoksa “—” (“0 dk” değil)

“Ölçülmedi” ve “—” notları ölçülecek bir şey olmadığı anlamına gelir; API bu alanlarda null döner, %100 ya da 0 uydurulmaz.

8 Widget (alt grid)​

WidgetEndpointGüncelleme
Incidents queueGET /incidentsSSE /stream/incidents
Audit timelineGET /audit/entriesSSE /stream/audit
Live sessionsGET /sessions/activeSSE /stream/live-sessions
Switch port mapGET /switches + GET /switches/{id}/ports (ilk 5 switch)Açılışta + Yenile
Site healthGET /sites + GET /sites/metrics (W4)SSE /stream/dashboard
Topology (Cytoscape)GET /topologySSE /stream/fingerprints
Fail reasonsGET /decisions (son 500 karar) aggregateAçılışta + Yenile
JIT approvalsGET /jit-approvalsSSE /stream/jit-approvals

Başlıktaki Yenile düğmesi widget uçlarını ve kpis-extra'yı yeniden çağırır; dashboard/overview kutuları sayfa yeniden yüklenince tazelenir.

Boş ve okunamayan veri​

Panel gerçek bir tenant'ta örnek (demo) veri göstermez:

  • Boş yanıt gerçek boş durumu çizer: “Açık risk yok”, “Aktif oturum yok”, “JIT beklemiyor”, “Kayıtlı switch yok” gibi.
  • Okunamayan uç (403 / 5xx / ağ hatası) widget'ta “Veri alınamadı” başlığını ve nedenini gösterir: modül paketinizde ya da lisansınızda açık değil, bu veriyi görme yetkiniz yok, sunucu hatası (HTTP 5xx) ya da sunucuya ulaşılamadı. Elde gerçek veri varken başarısız bir yenileme o veriyi silmez.
  • Karar trendi grafiğinin henüz canlı bir veri kaynağı yok; grafik yerine bunu söyleyen bir not görünür.

Switch port map ve Topology: kurulum sınırı​

Bu iki widget önce GET /api/v1/tenants/me/capabilities ile switch_management yeteneğinin kararını okur:

  • Bulut (SaaS) AnchorNAC: sunucu yeteneği bu kurulumda kullanılamaz olarak bildirir. İki widget “Bu kurulumda kullanılamaz” başlığı altında sunucunun gerekçesini gösterir (buluttan müşteri LAN'ındaki switch'e SSH/SNMP yolu yok; topoloji toplayıcı SaaS'a kurulmuyor) ve switch / topoloji uçları hiç çağrılmaz.
  • Paket yeteneği içermiyorsa: aynı yerde “Paketinizde yok” yazar.
  • Yerinde kurulum (on-prem): widget'lar gerçek switch ve topoloji verisini gösterir; veri yoksa boş durum çizilir.

Karar okunamazsa sınır varsayılmaz; widget'lar kendi uçlarını dener.

Aksiyonlar​

Karantina, MAC güveni, JIT onay/ret ve incident çözme bu panelde yoktur; bu işlemler kendi sayfalarında yapılır.

Demo verisi yalnız bileşenin açıkça demo modunda çalıştırılmasıyla görünür ve bu modu açan bir sayfa yoktur. /demo adresi AnchorSpot demo girişidir; oradaki paylaşımlı demo tenant sunucu tarafında gerçek kayıtlarla doldurulur.

3. SSE Invalidate-Only Pattern​

Tasarım kararı (ADR-0024 addendum): SSE event'leri payload data taşımıyor; sadece cache invalidation sinyali ({kind, ts, site_id?}). Frontend queryClient.invalidateQueries({queryKey: qk.X.all()}) ile detay re-fetch eder.

Avantajlar:

  • Bandwidth düşük (event ~50 byte)
  • Multi-tenant izolasyon kolay (event'te data yok; refetch normal yetkilendirme path'inden geçer)
  • Cache tutarlılığı garantili (event payload ile cache state ikiz tutmaya gerek yok)

Reconnect coverage: Browser EventSource native auto-reconnect; lost event penceresinde useStreamRefetch onConnect callback'i full refetch tetikler.

Polling fallback: SSE down ise 60s polling devam eder (per-widget refetchInterval).

4. Cytoscape Topoloji Görselleştirmesi​

AnchorNAC shell'de inline embed:

  • Layout: ELK hierarchical (default) — cose-bilkent / fcose / circle alternatif
  • Bundle: ~150KB gzipped, next/dynamic ssr:false lazy load
  • Etkileşim: zoom/pan + click handler + node detail drawer
  • Footer link: "Tam görüntüle → /topology" — advanced features için full sayfa route

5. Mobile Responsive​

isCompact (≤768px) breakpoint'te:

  • DataTable → MobileCardList auto-swap (ResponsiveDataTable HOC)
  • Drawer → BottomSheet (incident detail panel)
  • KPI grid 4-col → 1-col stack (ResponsiveGrid {base:1, sm:2, lg:4})
  • ActivityFeed → BottomSheet (FAB tetikli)
  • Cytoscape topology mobile touch (zoom/pan)

Playwright mobile CI (Pixel 5 + iPhone 12 profiles) regression gate.

6. SLO targets​

MetricTarget
Dashboard /overview p95 latency< 200ms
SSE /stream/* reconnect rate< 0.1/s
KPI tile refresh interval10s (SSE)
Widget polling interval60s

Backend cloud_console_http_request_duration_seconds histogram + cloud_console_nats_*_publish_duration_seconds (4 publisher, ADR-0031).

7. İlgili sayfalar​

8. Mimari kararlar (ADR'ler)​

  • ADR-0024 — TanStack Query domain hooks + useStreamRefetch SSE invalidate pattern (+ reconnect refetch addendum 2026-05-20)
  • ADR-0028 — Critical Event Contract (NATS event envelope)
  • ADR-0029 — Mobile Responsive Standards
  • ADR-0031 — NATS Publish Observability Standard