Files
cloud-ip-validator/internal/dashboard/templates/ip_detail.html
T

73 lines
2.9 KiB
HTML
Raw Normal View History

2026-08-23 20:39:22 +03:00
{{define "ip_detail_page"}}
<!doctype html>
<html lang="ru">
<head>{{template "html_head" .}}</head>
<body>
2026-08-26 22:19:42 +03:00
<div class="bg-grid"></div>
2026-08-23 21:58:19 +03:00
<input type="checkbox" id="nav-toggle" class="nav-toggle">
<div class="shell">
{{template "sidebar_nav" .}}
<div>
{{template "topbar_mobile" .}}
<main class="main">
2026-08-23 20:39:22 +03:00
<div id="error-banner">{{template "banner_inner" .Banner}}</div>
{{template "ip_detail_content" .}}
</main>
2026-08-23 21:58:19 +03:00
</div>
</div>
2026-08-23 20:39:22 +03:00
</body>
</html>
{{end}}
{{define "ip_detail_content"}}
<p><a href="/ips">&larr; К очереди</a></p>
2026-08-24 10:29:08 +03:00
{{$b := ipBadge .Detail.IP.State .Detail.IP.OverallResult .Detail.IP.FIPAssociatedAt 0}}
2026-08-23 21:58:19 +03:00
<div class="topbar">
<h1 class="mono" style="display:flex;align-items:center;gap:10px">{{.Detail.IP.IPAddress}} <span class="pill {{$b.Class}}">{{$b.Label}}</span></h1>
</div>
<p class="muted"><a href="/registry/{{.Detail.IP.IPAddress}}">Полная история проверок этого адреса за всё время &rarr;</a></p>
2026-08-23 21:58:19 +03:00
<p class="muted">
2026-08-23 21:15:31 +03:00
попытка {{.Detail.IP.AttemptNumber}} (повторов: {{.Detail.IP.RetryCount}})
2026-08-23 20:39:22 +03:00
· валидатор {{deref .Detail.IP.OwnerValidatorID}}
</p>
<p class="muted">
создан: {{fmtTime .Detail.IP.CreatedAt}} · назначен: {{fmtTime .Detail.IP.AssignedAt}} ·
агрегирован: {{fmtTime .Detail.IP.AggregatedAt}} · FIP освобождён: {{fmtTime .Detail.IP.FIPReleasedAt}}
</p>
2026-08-23 21:58:19 +03:00
<h2 class="section-title">Проверки (попытка {{.Detail.IP.AttemptNumber}})</h2>
2026-08-23 20:39:22 +03:00
{{if .Detail.Checks}}
2026-08-23 21:58:19 +03:00
<div class="panel">
<div class="table-scroll">
<table>
2026-08-23 20:39:22 +03:00
<thead><tr><th>Источник</th><th>Тип</th><th>Цель</th><th>Успех</th><th>Задержка, мс</th><th>Время</th><th>Детали</th></tr></thead>
<tbody>
{{range .Detail.Checks}}
<tr>
2026-08-23 21:58:19 +03:00
<td data-label="Источник">{{.Source}}</td><td data-label="Тип">{{.CheckType}}</td><td class="addr" data-label="Цель">{{.Target}}</td>
<td data-label="Успех">{{if .Success}}<span class="pill pill-success">ok</span>{{else}}<span class="pill pill-danger">fail</span>{{end}}</td>
<td class="num" data-label="Задержка, мс">{{.LatencyMS}}</td><td class="num" data-label="Время">{{fmtTime .CheckedAt}}</td><td data-label="Детали">{{.Detail}}</td>
2026-08-23 20:39:22 +03:00
</tr>
{{end}}
</tbody>
</table>
2026-08-23 21:15:31 +03:00
</div>
2026-08-23 21:58:19 +03:00
</div>
2026-08-23 20:39:22 +03:00
{{else}}<p class="muted">Проверок пока нет.</p>{{end}}
2026-08-23 21:58:19 +03:00
<h2 class="section-title">События</h2>
2026-08-23 20:39:22 +03:00
{{if .Detail.Events}}
2026-08-23 21:58:19 +03:00
<div class="panel">
<div class="table-scroll">
<table>
2026-08-23 20:39:22 +03:00
<thead><tr><th>Время</th><th>Тип</th><th>Источник</th><th>Данные</th></tr></thead>
<tbody>
{{range .Detail.Events}}
2026-08-23 21:58:19 +03:00
<tr><td class="num" data-label="Время">{{fmtTime .OccurredAt}}</td><td data-label="Тип">{{.EventType}}</td><td data-label="Источник">{{.SourceType}} {{.SourceID}}</td><td data-label="Данные">{{.Payload}}</td></tr>
2026-08-23 20:39:22 +03:00
{{end}}
</tbody>
</table>
2026-08-23 21:15:31 +03:00
</div>
2026-08-23 21:58:19 +03:00
</div>
2026-08-23 20:39:22 +03:00
{{else}}<p class="muted">Событий нет.</p>{{end}}
{{end}}