ИШ: страница блокируется на время обновления, автооткат при сбое, честные статусы
- Обновление ИШ из обновления bj: страница «Шлюз НРД» (мастер и «Настройка → НРД») перекрывается окном с ходом установки; успех — перезагрузка страницы, ошибка — текст и журнал. Статус ИШ отдаёт upgrade_to (получена версия, обновится сам) и installing (идёт установка) — вместо «ИШ не работает» и кнопки переустановки. - Сбой после полного бэкапа (dpkg, запуск, движок не в Running) — bj-igate-admin сам откатывает ИШ к прежней версии (этап rollback); итог — ошибка «обновление до X не прошло: …, ИШ автоматически откатан к Y и работает». Проверено на 28 искусственным сбоем после установки пакета. - Откат не опускает счётчики id в базе ИШ: иначе новые пакеты получали бы уже виденные bj номера и поллер их пропускал. - Автообновление ИШ после перезапуска ядра — через 20 с (было 2 мин), с повторами через 2 и 10 мин, если дистрибутив дописан позже. В итоге обновления bj — пояснение, что сам шлюз обновится через несколько минут. - Строка версий над разделом НРД обновляется сразу при смене версии ИШ. - Сводка «НРД → Организация» и раскрытие «Перенастроить» смотрят организацию так же, как bj (orgEff: введённое или из справочника по коду) — не «не задана», когда ИНН взят из справочника. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -52,6 +52,14 @@
|
||||
<div id="ig-head" class="muted">Проверяю…</div>
|
||||
<p class="muted" style="font-size:12px;margin:4px 0 0">Версию ИШ проверяет ZETIT; новые приходят с обновлением bj.</p>
|
||||
<div id="ig-reinst" style="display:none;margin-top:10px"><button type="button" class="btn" id="ig-bnd">Установить ИШ</button> <span class="muted" id="ig-bnd-v" style="font-size:12.5px"></span></div>
|
||||
<div id="ig-ov" style="display:none;position:fixed;inset:0;z-index:9999;background:rgba(20,24,35,.55);align-items:center;justify-content:center">
|
||||
<div class="card" style="max-width:600px;width:92%;margin:0;box-shadow:0 10px 40px rgba(0,0,0,.25)">
|
||||
<h3 id="ig-ov-h" style="margin:0 0 8px">Обновление шлюза НРД</h3>
|
||||
<p id="ig-ov-m" class="muted" style="margin:0 0 8px;font-size:13.5px"></p>
|
||||
<pre id="ig-ov-log" style="display:none;max-height:220px;overflow:auto;font-size:11.5px;white-space:pre-wrap;background:var(--card-2);padding:8px;border-radius:8px;margin:0"></pre>
|
||||
<div id="ig-ov-btns" style="display:none;margin-top:12px"><button type="button" class="btn" id="ig-ov-close">Закрыть</button></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="ig-rb" style="display:none;margin-top:8px"><button type="button" class="btn" id="ig-rb-btn" style="background:var(--card);color:var(--text);border:1px solid var(--border-strong,#c9cdd8)">Откатить ИШ к <span id="ig-rb-v"></span></button> <span class="muted" style="font-size:12.5px">вернуть версию, которая стояла до последнего обновления (программа, данные, база ИШ)</span></div>
|
||||
<ol class="ig-steps" id="ig-steps" hidden></ol>
|
||||
<div id="ig-out" style="margin-top:8px;font-size:13px"></div>
|
||||
@@ -258,6 +266,12 @@
|
||||
if(!running && d.keymedia==='missing'){ head.innerHTML='<span style="color:var(--warn)">⚠ ИШ '+esc(d.version)+' ждёт флешку с ключом подписи — её нет в сервере. Вставьте флешку: bj перезапустит шлюз сам. Переустанавливать ИШ не нужно.</span>'; }
|
||||
// не стоит или не работает — одна кнопка: поставить заново проверенную версию с сервера (систему переставлять не нужно)
|
||||
ri.style.display=(running||d.keymedia==='missing')?'none':'block'; // без флешки переустановка не поможет
|
||||
if(d.installing){ // bj сам ставит/обновляет ИШ: остановка шлюза — штатная, переустанавливать не нужно
|
||||
head.innerHTML='<span style="color:var(--accent)">⟳ Идёт установка ИШ'+(d.upgrade_to?' '+esc(d.upgrade_to):'')+' — '+esc(d.installing)+'. Шлюз недоступен 1–3 минуты; настройки и каналы сохраняются.</span>'; ri.style.display='none';
|
||||
} else if(d.upgrade_to){
|
||||
head.innerHTML+='<div class="muted" style="font-size:13px;margin-top:4px">⟳ Получена версия ИШ '+esc(d.upgrade_to)+' (проверена ZETIT) — bj обновит шлюз сам в ближайшие минуты; настройки и каналы сохранятся.</div>';
|
||||
}
|
||||
if(d.installing||d.upgrade_to) ovStart(); // обновление идёт или вот-вот начнётся — страница перекрыта ходом
|
||||
if(!running){
|
||||
if(d.bundled){ bb.style.display=''; bb.textContent=d.installed?'Установить ИШ заново':'Установить ИШ'; bv.textContent='версия '+d.bundled+' — проверена ZETIT, дистрибутив на сервере'; }
|
||||
else { bb.style.display='none'; bv.textContent='Дистрибутива ИШ на сервере нет — он приходит с обновлением bj («Настройка → Обновления»).'; }
|
||||
@@ -334,7 +348,28 @@
|
||||
note='<small'+(slow?' class="slow"':'')+'>идёт '+mmss(el)+' · обычно до '+mmss(x[2])+(slow?' — дольше обычного; установка работает, пока счётчик идёт; зависшая снимается сама через 40 минут':'')+'</small>'; }
|
||||
return '<li class="'+cls+'"><span class="ig-ic"></span><span class="ig-t">'+esc(x[1])+note+'</span></li>'; }).join('');
|
||||
}
|
||||
function poll(){ var t0=Date.now(), btn=document.getElementById('ig-bnd');
|
||||
// окно поверх страницы на время установки/обновления/отката ИШ
|
||||
var ov={on:false,seen:false,t0:0,iv:null};
|
||||
function ovSet(h,m,log,fin){ var o=document.getElementById('ig-ov'); o.style.display='flex';
|
||||
document.getElementById('ig-ov-h').innerHTML=h; document.getElementById('ig-ov-m').textContent=m||'';
|
||||
var l=document.getElementById('ig-ov-log'); if(log){ l.style.display='block'; l.textContent=log; l.scrollTop=l.scrollHeight; } else l.style.display='none';
|
||||
document.getElementById('ig-ov-btns').style.display=fin?'block':'none'; }
|
||||
function ovStart(){ if(ov.on) return; ov.on=true; ov.t0=Date.now(); ovTick(); ov.iv=setInterval(ovTick,3000); }
|
||||
function ovTick(){
|
||||
fetch('/admin/setup/igate/install-status',{cache:'no-store'}).then(function(r){return r.json()}).then(function(s){
|
||||
var run=s.stage&&s.stage!=='done'&&s.stage!=='error';
|
||||
if(run){ ov.seen=true; ovSet(s.stage==='rollback'?'<span style="color:var(--warn)">⟲ Обновление не прошло — возвращаю прежнюю версию ИШ</span>':'⟳ Идёт установка шлюза НРД',
|
||||
(s.msg||s.stage)+' · '+(s.elapsed||0)+' с на этапе. Не закрывайте страницу: обмен с НРД на 1–3 минуты приостановлен, настройки и каналы сохраняются.', s.log, false); return; }
|
||||
if(!ov.seen){
|
||||
if(Date.now()-ov.t0>15*60000){ clearInterval(ov.iv); ov.on=false; document.getElementById('ig-ov').style.display='none'; return; }
|
||||
ovSet('⟳ Получено обновление шлюза НРД','bj начнёт обновление автоматически в течение минуты. Не закрывайте страницу.','',false); return; }
|
||||
clearInterval(ov.iv);
|
||||
if(s.stage==='done'){ ovSet('<span style="color:var(--ok)">✓ '+esc(s.msg)+'</span>','Страница обновится…','',false); setTimeout(function(){ location.reload(); },2500); }
|
||||
else ovSet('<span style="color:var(--err)">✗ Установка шлюза не прошла</span>', s.msg, s.log, true);
|
||||
}).catch(function(){});
|
||||
}
|
||||
document.getElementById('ig-ov-close').onclick=function(){ location.reload(); };
|
||||
function poll(){ ovStart(); var t0=Date.now(), btn=document.getElementById('ig-bnd');
|
||||
btn.disabled=true; // пока идёт установка — второй раз не нажать
|
||||
clearInterval(tick); tick=setInterval(draw,1000);
|
||||
var iv=setInterval(function(){
|
||||
|
||||
Reference in New Issue
Block a user