import Link from "next/link" import { TriangleAlertIcon } from "lucide-react" import type { AlertTargetIssue } from "@mmapp/contracts/alerts" import { Alert, AlertTitle, AlertDescription } from "@/components/reui/alert" const kinds = { server: "Доступность сервера", traffic: "Трафик", probe: "Ping-проба" } const reasons = { ambiguous: "Несколько включённых объектов имеют эту подпись. События не подтверждаются.", "disabled-object": "Объект или его сервер выключен. Опрос не выполняется.", "disabled-source": "Сбор данных этого типа выключен.", } export function AlertsTargetIssues({ issues }: { issues: AlertTargetIssue[] | undefined }) { if (!issues?.length) return null const grouped = new Map() for (const issue of issues) { const key = `${issue.reason}\0${issue.target}` const group = grouped.get(key) ?? { target: issue.target, reason: issue.reason, kinds: [] } if (!group.kinds.includes(kinds[issue.kind])) group.kinds.push(kinds[issue.kind]) grouped.set(key, group) } return Некоторые цели оповещений требуют проверки
Проверить цели: {grouped.size}
    {[...grouped].map(([key, group]) =>
  • {group.target} · {group.kinds.join(" / ")} — {reasons[group.reason]}
  • )}
{issues.some(i => i.reason === "ambiguous") &&

Задайте разные имена объектов, затем обновите цели существующих правил.

}

Проверить серверы {issues.some(i => i.kind === "probe") && Проверить пробы} {issues.some(i => i.reason === "disabled-source") && Проверить сбор данных}

}