@page @model IndexModel @using SharedKernel.Extensions @{ ViewData["Title"] = "상황판"; var h = Model.MailHealth; // 상태 단계 결정 (가장 심각한 시그널 기준) string mailLevel = "ok"; string mailMessage = "정상"; if (h.ProcessingStuckCount > 0) { mailLevel = "danger"; mailMessage = $"Processing 갇힘 {h.ProcessingStuckCount}건 — 워커 다운/락 의심"; } else if (h.StalePendingCount > 0) { mailLevel = "danger"; mailMessage = $"24시간 이상 미처리 Pending {h.StalePendingCount}건 — Janitor 또는 SMTP 점검"; } else if (h.PendingCount >= 1000) { mailLevel = "danger"; mailMessage = $"큐 적체 {h.PendingCount:N0}건 — 큰 폭 처리 지연"; } else if (h.PendingCount >= 100) { mailLevel = "warning"; mailMessage = $"큐 적체 {h.PendingCount:N0}건 — 처리 지연 주의"; } else if (h.OldestPendingAt.HasValue && (DateTime.UtcNow - h.OldestPendingAt.Value).TotalHours >= 1) { mailLevel = "warning"; mailMessage = $"가장 오래된 Pending이 1시간 이상 — 폴링 점검"; } string mailBadgeClass = mailLevel switch { "danger" => "bg-danger", "warning" => "bg-warning text-dark", _ => "bg-success" }; string mailBadgeLabel = mailLevel switch { "danger" => "위험", "warning" => "주의", _ => "정상" }; string oldestPendingDisplay = h.OldestPendingAt.HasValue ? $"{h.OldestPendingAt.Value.GetDateAt()} ({(int)(DateTime.UtcNow - h.OldestPendingAt.Value).TotalMinutes}분 전)" : "-"; }
@mailMessage
| 가장 오래된 Pending | @oldestPendingDisplay |
|---|