v1.0.49: in-memory tracker (no file IO); traceback on tracker error; refreshInstances adds new items; no selectService on OK

This commit is contained in:
2026-07-27 09:26:39 +04:00
parent 1d306bf263
commit 7f6284bb46
5 changed files with 538 additions and 34 deletions
+21 -4
View File
@@ -249,8 +249,7 @@ async function executeOp(params){
btn.disabled=false;
btn.textContent='Готово';
if(sd.status==='OK'){
if(selectedOp.opName==='create'){await selectService(SVC_ID);}
else{await refreshInstances();}
await refreshInstances();
}
}
},2000);
@@ -278,8 +277,11 @@ function stopPoll(){
async function refreshInstances(){
const r=await fetch('/api/operations/'+SVC_ID);
const d=await r.json();
svcInstances=d.instances||[];
// обновить только бейджи статусов
const newInsts=d.instances||[];
const oldUids=new Set(svcInstances.map(i=>i.instanceUid));
const added=newInsts.filter(i=>!oldUids.has(i.instanceUid));
svcInstances=newInsts;
// обновить бейджи существующих
svcInstances.forEach(i=>{
const el=document.querySelector(`[data-iuid="${i.instanceUid}"] .badge`);
if(el){
@@ -287,6 +289,21 @@ async function refreshInstances(){
el.className='badge '+(i.explainedStatus==='running'?'badge-success':'');
}
});
// добавить новые инстансы в список (перед кнопкой "+ Создать")
if(added.length){
const list=document.getElementById('inst-list');
const addBtn=list.querySelector('[onclick="startCreate()"]');
let html='';
added.forEach(i=>{
const sc=i.explainedStatus==='running'?'badge-success':'';
html+=`<div class="inst-item" onclick="toggleInstance('${i.instanceUid}')" data-iuid="${i.instanceUid}">
<span style="flex:1;">${i.displayName}</span>
<span class="badge ${sc}" style="font-size:9px;">${i.explainedStatus||'?'}</span>
</div>`;
html+=`<div class="inst-ops" id="ops-${i.instanceUid}"></div>`;
});
if(addBtn){addBtn.insertAdjacentHTML('beforebegin',html);}
}
}
</script>
</body>