diff --git a/k8s/deployment.yaml b/k8s/deployment.yaml index bd677c7..b29d621 100644 --- a/k8s/deployment.yaml +++ b/k8s/deployment.yaml @@ -15,7 +15,7 @@ spec: spec: containers: - name: cloud-dashboard - image: naeel/cloud-dashboard:v9.20 + image: naeel/cloud-dashboard:v9.21 imagePullPolicy: Always ports: - containerPort: 8080 diff --git a/static/index.html b/static/index.html index ec83a2b..de3659d 100644 --- a/static/index.html +++ b/static/index.html @@ -294,6 +294,46 @@ function statusColor(s){ return m[s] || "#8b949e"; } +function humanAge(dtStr){ + if(!dtStr) return ""; + var d; + try { d = new Date(dtStr); } catch(e){ return ""; } + if(isNaN(d.getTime())) return ""; + var diff = Date.now() - d.getTime(); + if(diff < 0) return ""; + var mins = Math.floor(diff / 60000); + var hrs = Math.floor(mins / 60); + var days = Math.floor(hrs / 24); + if(days >= 1){ + var d10 = days % 10, d100 = days % 100; + var w = (d100 >= 11 && d100 <= 19) ? "дней" : d10 === 1 ? "день" : (d10 >= 2 && d10 <= 4) ? "дня" : "дней"; + return days + " " + w; + } + if(hrs >= 1) return hrs + " ч"; + return mins + " мин"; +} + +function depUid(dep){ + return (dep && (dep.uid || dep.instanceUid || dep.dependencyUid || dep.relatedUid)) || ""; +} + +function visibleUidSet(){ + var s = new Set(); + var checked = Array.from(document.querySelectorAll("#filters input[value]:checked")).map(function(i){ return i.value; }); + var auxEl = document.getElementById("chk-auxiliary"); + var showAux = auxEl ? auxEl.checked : true; + allInstances.forEach(function(i){ + if(!i || !i.instanceUid) return; + if(checked.length && checked.indexOf(i.explainedStatus) < 0) return; + if(!showAux){ + var det = rawDetail[i.instanceUid]; + if(det && det.isAuxiliary) return; + } + s.add(i.instanceUid); + }); + return s; +} + // ─── GRAPH: SVG + panzoom ─────────────────────────────────────────────────