console: admin ON/OFF cards (Paperclip, Prefect worker, Photo Pipeline — admin-only toggle strips) + failed-state dozzle log link on media cards; per-user toggle gating verified (finn: media only, 403 on admin)
This commit is contained in:
@@ -38,10 +38,12 @@
|
||||
{% if tool.togglable and tool.service_id %}
|
||||
<div class="svc-strip" data-svc="{{ tool.service_id }}"
|
||||
data-ram="{{ tool.ram_mb or '' }}" data-name="{{ tool.name }}"
|
||||
data-logs="{{ tool.logs_url or '' }}"
|
||||
onclick="event.preventDefault();event.stopPropagation();">
|
||||
<span class="svc-state" data-svc-state>
|
||||
<span class="svc-dot" data-svc-dot></span><span data-svc-label>…</span>
|
||||
</span>
|
||||
<a class="svc-logs" data-svc-logs style="display:none" target="_blank" rel="noopener">logs</a>
|
||||
<span class="svc-ram" data-svc-ram></span>
|
||||
<button type="button" class="button button-utility button-sm" data-svc-btn disabled>…</button>
|
||||
</div>
|
||||
@@ -126,6 +128,16 @@
|
||||
if (ram && svcState[id] && svcState[id].ram_mb) ram.textContent = "~" + svcState[id].ram_mb + "MB";
|
||||
dot.className = "svc-dot svc-" + (st === "running" ? "on" : st === "stopped" ? "off" : st === "failed" ? "fail" : "trans");
|
||||
if (lab) lab.textContent = st === "running" ? "Running" : st === "stopped" ? "Stopped" : st === "failed" ? (svcState[id].error || "Failed") : (st[0].toUpperCase() + st.slice(1));
|
||||
// failed -> offer the logs deep link (dozzle)
|
||||
var logs = strip.querySelector("[data-svc-logs]");
|
||||
if (logs) {
|
||||
var lu = strip.getAttribute("data-logs") || "";
|
||||
if (st === "failed" && lu) {
|
||||
logs.style.display = ""; logs.href = lu; logs.title = "View logs";
|
||||
} else {
|
||||
logs.style.display = "none"; logs.href = "#";
|
||||
}
|
||||
}
|
||||
if (btn) {
|
||||
btn.disabled = !can || transitional;
|
||||
if (transitional) btn.textContent = st === "starting" ? "Starting…" : "Stopping…";
|
||||
|
||||
Reference in New Issue
Block a user