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

75 lines
3.7 KiB
HTML
Raw Normal View History

2026-10-04 10:26:37 +03:00
{{define "analytics_compare_page"}}
<!doctype html>
<html lang="ru">
<head>{{template "html_head" .}}
<link rel="stylesheet" href="/static/analytics.css">
</head>
<body>
<div class="bg-grid"></div>
<input type="checkbox" id="nav-toggle" class="nav-toggle">
<div class="shell">
{{template "sidebar_nav" .}}
<div>
{{template "topbar_mobile" .}}
<main class="main">
<div id="error-banner">{{template "banner_inner" .Banner}}</div>
{{template "analytics_compare_content" .}}
</main>
</div>
</div>
{{if .HasReport}}
<script type="application/json" id="analytics-data">{{.DataJSON}}</script>
<script src="/static/analytics-dialog.js"></script>
<script src="/static/analytics-compare.js"></script>
{{end}}
</body>
</html>
{{end}}
{{define "analytics_compare_content"}}
<div class="an">
<div class="an-head">
<h1 class="an-title">Сравнение запусков</h1>
<p class="an-sub">Динамика между двумя завершёнными запусками. <a href="/analytics">К аналитике одного запуска</a>.</p>
</div>
{{if .RunsA}}
<section class="an-panel" aria-label="Выбор запусков">
<form class="an-runbar" method="get" action="/analytics/compare">
<label for="an-base">Запуск A (старый)</label>
<select id="an-base" name="base">
{{range .RunsA}}<option value="{{.ID}}"{{if .Selected}} selected{{end}}>{{.Label}}</option>
{{end}}
</select>
<button class="an-btn" type="button" id="an-swap" onclick="var a = document.getElementById('an-base'), b = document.getElementById('an-target'), v = a.value; a.value = b.value; b.value = v; this.form.submit()">Поменять местами</button>
<label for="an-target">Запуск B (новый)</label>
<select id="an-target" name="target">
{{range .RunsB}}<option value="{{.ID}}"{{if .Selected}} selected{{end}}>{{.Label}}</option>
{{end}}
</select>
<button class="an-btn an-primary" type="submit">Сравнить</button>
</form>
{{if .HasReport}}<div class="an-note" id="an-cmp-note"></div>{{end}}
<p class="an-note">«Новые» — адреса, которые есть в B и которых не было в A; «выбывшие» — были в A, в B их нет. Адрес изменился, если его принадлежность к индикаторам в A и B разная. Если запуски разного состава (например, перепроверка части адресов), новых и выбывших будет много: это состав запусков, а не динамика.</p>
</section>
{{end}}
{{if .HasReport}}
<div class="an-kpis" id="an-cmp-kpis"></div>
<section class="an-panel" aria-labelledby="an-h-ind">
<h2 id="an-h-ind">Динамика по индикаторам</h2>
<div class="an-scroll"><table id="an-cmp-ind"></table></div>
<p class="an-note">Δ = B − A = новые − выбывшие + вошли − вышли. Зелёным выделен рост pass и падение остальных индикаторов, красным обратное. Числа в последних четырёх столбцах открывают список адресов.</p>
</section>
<section class="an-panel" aria-labelledby="an-h-tr">
<h2 id="an-h-tr">Переходы вердикта</h2>
<div class="an-scroll"><table id="an-cmp-tr"></table></div>
<p class="an-note">Вердикт адресов, которые есть в обоих запусках: по строкам вердикт в A, по столбцам в B. Строка «нет в A» — новые адреса по вердикту в B, столбец «нет в B» — выбывшие по вердикту в A.</p>
</section>
{{template "analytics_dialog"}}
{{end}}
</div>
{{end}}