diff --git a/deploy/release/component-versions.json b/deploy/release/component-versions.json index cb0f31d..c789a1c 100644 --- a/deploy/release/component-versions.json +++ b/deploy/release/component-versions.json @@ -8,8 +8,8 @@ "version": "2026.09.25.24" }, "bj-lk": { - "fingerprint": "f69c9f1193814138752f1bfce6044b4cad94957c1ac64e7c0920993b91cf0f70", - "version": "2026.09.25.14" + "fingerprint": "37bf4ba7d13bc3cfb52032dfb95851b9d5d702f1a2244e185a1b6a5b87a5cfc6", + "version": "2026.09.25.31" }, "bj-npr": { "fingerprint": "5b5301b0c18bfd001bdff3f3b35a9ff6ccccb4f24eb4b88b0334d34d1b63df81", @@ -20,8 +20,8 @@ "version": "2026.09.25.14" }, "bj-server": { - "fingerprint": "36f004afd74a7f8006de52aa513ca98e60d5a94397699f4fe65fc65dbadb0a3e", - "version": "2026.09.25.29" + "fingerprint": "6ee366a451428635fe57ac84174673cf3ae4a9645cd0ef4b4cd6b7059673508a", + "version": "2026.09.25.31" }, "crypto-service.jar": { "fingerprint": "2c4fd536bc9b1c20c69a70e8dcd374a61847b263aeb2e474c45debb01fbd8233", diff --git a/internal/lkgateway/nsdhealth.go b/internal/lkgateway/nsdhealth.go index 940ab76..73d169b 100644 --- a/internal/lkgateway/nsdhealth.go +++ b/internal/lkgateway/nsdhealth.go @@ -563,6 +563,11 @@ func nsdSegTip(h NSDHealth) string { } b.WriteString("\n") } + if h.Ago != "" { + b.WriteString("Последний ответ НРД " + h.Ago + "\n") + } else { + b.WriteString("Ответа НРД ещё не было\n") + } b.WriteString("Подробно — «Статус». Обновляется каждые 30 с.") return b.String() } diff --git a/internal/lkgateway/web/templates/layout.html b/internal/lkgateway/web/templates/layout.html index fce1301..3e0f2f8 100644 --- a/internal/lkgateway/web/templates/layout.html +++ b/internal/lkgateway/web/templates/layout.html @@ -100,15 +100,11 @@ body { .theme-toggle svg { width:16px; height:16px; } .theme-toggle:hover { background:var(--border); color:var(--text); } .topbar .clock { font-size:11px; color:var(--muted); font-family:var(--mono); font-variant-numeric:tabular-nums; letter-spacing:-0.02em; } -.nsd-chain { text-decoration:none; gap:6px; } -.nsd-chain .seg { display:inline-flex; align-items:center; gap:4px; } -.nsd-chain .seg i { width:8px; height:8px; border-radius:50%; background:var(--muted); display:inline-block; } -.nsd-chain .seg.ok i { background:var(--ok); } .nsd-chain .seg.warn i { background:var(--warn); } .nsd-chain .seg.err i { background:var(--err); } -.nsd-chain .seg.err { color:var(--err); } .nsd-chain .sep { color:var(--muted); font-weight:400; } -.nsd-chain .ago { font-weight:400; color:var(--muted); } -.nsd-chain.err { background:var(--err-weak); border-color:var(--err); } +.nsd-chain { text-decoration:none; } +.nsd-chain i { width:8px; height:8px; border-radius:50%; background:var(--muted); display:inline-block; } +.nsd-chain.ok i { background:var(--ok); } .nsd-chain.warn i { background:var(--warn); } .nsd-chain.err i { background:var(--err); } +.nsd-chain.err { background:var(--err-weak); border-color:var(--err); color:var(--err); } .nsd-chain.warn { background:var(--warn-weak); } -@media (max-width:1100px){ .nsd-chain .seg > span, .nsd-chain .ago, .nsd-chain .sep { display:none } } .sys-block { display:inline-flex; flex-direction:column; align-items:center; gap:2px; line-height:1.1; } .sys-block .sys-status { padding:3px 9px 3px 7px; font-size:11.5px; } .user-dd .ddbtn.user-chip { display:inline-flex; flex-direction:column; align-items:flex-start; padding:4px 10px; border-radius:8px; margin:0; max-width:220px; } @@ -358,7 +354,7 @@ label { font-size:13px; font-weight:500; }
- {{if and .NSDLink.Configured (not .IsMockMode)}}{{range $i, $s := .NSDLink.Segs}}{{if $i}}{{end}}{{$s.Title}}{{end}}{{if .NSDLink.Ago}}ответ НРД {{.NSDLink.Ago}}{{else}}ответа НРД ещё не было{{end}}{{else}} + {{if and .NSDLink.Configured (not .IsMockMode)}}Шлюз НРД{{else}} {{if .IsMockMode}}{{if devOn}}Эмуляция{{else}}Нет связи с НРД{{end}}{{else}}НРД на связи{{end}}{{end}} {{.Now}} @@ -566,18 +562,12 @@ label { font-size:13px; font-weight:500; } (function(){ var el = document.getElementById('nsd-chain'); if (!el) return; - function esc(t){ return String(t).replace(/[&<>"]/g, function(c){ return {'&':'&','<':'<','>':'>','"':'"'}[c]; }); } function upd(){ fetch('/admin/nsd-health.json', {cache:'no-store'}).then(function(r){ return r.json(); }).then(function(h){ if (!h.configured) return; - var html = '', tip = ''; - (h.segs||[]).forEach(function(s, i){ - if (i) html += ''; - html += '' + esc(s.title) + ''; - tip += s.title + ': ' + s.text + (s.detail ? ' (' + s.detail + ')' : '') + '\n'; - }); - html += '' + (h.ago ? 'ответ НРД ' + esc(h.ago) : 'ответа НРД ещё не было') + ''; - el.innerHTML = html; + var tip = ''; + (h.segs||[]).forEach(function(s){ tip += s.title + ': ' + s.text + (s.detail ? ' (' + s.detail + ')' : '') + '\n'; }); + tip += (h.ago ? 'Последний ответ НРД ' + h.ago : 'Ответа НРД ещё не было') + '\n'; el.className = 'sys-status nsd-chain ' + h.state; el.title = tip + 'Подробно — «Статус». Обновляется каждые 30 с.'; }).catch(function(){