5527a464ca
Модуль вынесен в modules/npr + cmd/bj-npr (127.0.0.1:8083), обновляется независимо от ядра. Служба читает подключение из setup.json и принимает запросы только со служебным ключом модулей (/var/lib/bj/.bj/module.key, создаёт bj-server). Полные страницы отдаются фрагментом (X-BJ-Layout: page). bj-server хранит настройки и проверку подключения, проксирует /admin/npr после входа, прав и лицензии и встраивает страницы модуля в общий макет (admin.modulePage); если служба не отвечает — понятная страница. Unit bj-npr.service встроен в установщик, установщик включает службы установленных модулей; build-release.sh собирает bj-npr. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
15 lines
3.8 KiB
HTML
15 lines
3.8 KiB
HTML
{{define "npr_css"}}
|
|
<style>
|
|
.ntabs{display:flex;gap:4px;margin:0 0 10px;border-bottom:2px solid var(--border)}.ntabs a{padding:8px 14px;text-decoration:none;color:var(--text-2);border-bottom:2px solid transparent;margin-bottom:-2px;display:inline-flex;align-items:center;gap:6px;font-size:14px}.ntabs a.active{border-bottom-color:var(--accent);color:var(--accent-strong);font-weight:600}.ntabs .count{background:var(--card-2);color:var(--text-2);font-size:11px;padding:1px 7px;border-radius:10px;font-weight:600}
|
|
.tab-desc{font-size:13px;color:var(--muted);margin:0 0 10px}.nhelp{background:var(--card-2);padding:10px 14px;border-radius:6px;margin-bottom:12px;font-size:13px}.nhelp .legend{display:inline-flex;gap:12px;flex-wrap:wrap;margin-top:6px}.legend-item{display:inline-flex;align-items:center;gap:5px}.legend-box{display:inline-block;width:14px;height:14px;border-radius:3px;border:1px solid #999}
|
|
.nsummary{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:10px}.nsummary article{margin:0;padding:8px 10px;text-align:center;border:1px solid var(--border);border-radius:8px;background:var(--card)}.nsummary header{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}.nsummary strong{font-size:24px;display:block;line-height:1.1}.tile-call strong{color:#b91c1c}.tile-warn strong{color:#b45309}.tile-ok strong{color:#047857}.tile-call{border-color:#fecaca!important;background:color-mix(in srgb,#fee2e2 50%,var(--card))!important}.tile-warn{border-color:#fde68a!important;background:color-mix(in srgb,#fef3c7 50%,var(--card))!important}.tile-ok{border-color:#d1fae5!important;background:color-mix(in srgb,#d1fae5 50%,var(--card))!important}
|
|
.nfresh{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding:7px 12px;background:var(--card-2);border-radius:6px;font-size:13px;flex-wrap:wrap}
|
|
.nfilters{display:grid;grid-template-columns:2fr 1fr 1fr 1fr auto 1fr;gap:8px;align-items:end;padding:10px;background:var(--card-2);border-radius:8px;margin-bottom:12px}.nfilters label{font-size:12px;color:var(--muted);margin:0}.nfilters input,.nfilters select{margin:0;padding:5px 8px;font-size:13px;width:100%}
|
|
.ntable{width:100%;border-collapse:collapse;font-size:13px}.ntable th,.ntable td{padding:5px 8px;border-bottom:1px solid var(--border);vertical-align:middle}.ntable thead th{background:var(--card-2);font-size:11px;text-transform:uppercase;letter-spacing:.03em;text-align:left}.ntable tbody tr:hover{background:var(--card-2)}.ntable td a{text-decoration:none;font-weight:600;color:var(--accent-strong)}.num{text-align:right;font-variant-numeric:tabular-nums}
|
|
.row-call{background:color-mix(in srgb,#fee2e2 70%,var(--card))!important}.row-call td{color:#7f1d1d}.row-warn{background:color-mix(in srgb,#fef3c7 70%,var(--card))!important}.row-inf{background:color-mix(in srgb,#d1fae5 60%,var(--card))!important}
|
|
.badge{display:inline-block;padding:1px 8px;border-radius:3px;font-size:11px;font-weight:600}.badge-call{background:#dc2626;color:#fff}.badge-warn{background:#f59e0b;color:#fff}.badge-inf{background:#10b981;color:#fff}.badge-ok{background:var(--card-2);color:var(--text-2)}
|
|
.nmetrics{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin:12px 0 0}.nmetrics article{margin:0;padding:12px;text-align:center;border:1px solid var(--border);border-radius:8px}.nmetrics header{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;margin-bottom:5px}.nmetrics strong{font-size:26px;display:block;font-variant-numeric:tabular-nums}.m-call strong{color:#b91c1c}.m-ok strong{color:#047857}.nmini{padding:10px;border:1px solid var(--border);border-radius:8px}.nmini header{font-size:11px;color:var(--muted);text-transform:uppercase}
|
|
@media (max-width:900px){.nsummary,.nmetrics{grid-template-columns:repeat(2,1fr)}.nfilters{grid-template-columns:1fr 1fr}}
|
|
</style>
|
|
{{end}}
|