aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/frontend/html
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2026-03-23 14:09:46 +0100
committerGitHub Enterprise <[email protected]>2026-03-23 14:09:46 +0100
commitd336e5937019dbab1924419624faa6ffc776cd7f (patch)
treecee312dc86f8404bbd4f987cbcf2f4d96124fc19 /src/zenserver/frontend/html
parentUnique session/client tracking using HyperLogLog (#884) (diff)
downloadzen-d336e5937019dbab1924419624faa6ffc776cd7f.tar.xz
zen-d336e5937019dbab1924419624faa6ffc776cd7f.zip
add hub instance crash recovery (#885)
* add hub instance crash recovery
Diffstat (limited to 'src/zenserver/frontend/html')
-rw-r--r--src/zenserver/frontend/html/pages/hub.js2
-rw-r--r--src/zenserver/frontend/html/zen.css7
2 files changed, 8 insertions, 1 deletions
diff --git a/src/zenserver/frontend/html/pages/hub.js b/src/zenserver/frontend/html/pages/hub.js
index 3a5b67483..149a5c79c 100644
--- a/src/zenserver/frontend/html/pages/hub.js
+++ b/src/zenserver/frontend/html/pages/hub.js
@@ -8,7 +8,7 @@ import { Friendly } from "../util/friendly.js"
import { Modal } from "../util/modal.js"
////////////////////////////////////////////////////////////////////////////////
-const STABLE_STATES = new Set(["provisioned", "hibernated"]);
+const STABLE_STATES = new Set(["provisioned", "hibernated", "crashed"]);
function _is_actionable(state)
{
diff --git a/src/zenserver/frontend/html/zen.css b/src/zenserver/frontend/html/zen.css
index 5ce60d2d2..49a1e6d21 100644
--- a/src/zenserver/frontend/html/zen.css
+++ b/src/zenserver/frontend/html/zen.css
@@ -1099,6 +1099,12 @@ tr:last-child td {
.module-state-dot[data-state="provisioned"] { background: var(--theme_ok); }
.module-state-dot[data-state="hibernated"] { background: var(--theme_warn); }
.module-state-dot[data-state="unprovisioned"] { background: var(--theme_g1); }
+.module-state-dot[data-state="crashed"] { background: var(--theme_fail); }
+
+@keyframes module-dot-recovering {
+ 0%, 59.9% { background: var(--theme_fail); }
+ 60%, 100% { background: var(--theme_ok); }
+}
@keyframes module-dot-hibernating {
0%, 59.9% { background: var(--theme_warn); }
@@ -1124,6 +1130,7 @@ tr:last-child td {
.module-state-dot[data-state="hibernating"] { animation: module-dot-hibernating 1s steps(1, end) infinite; }
.module-state-dot[data-state="waking"] { animation: module-dot-waking 1s steps(1, end) infinite; }
.module-state-dot[data-state="provisioning"] { animation: module-dot-provisioning 1s steps(1, end) infinite; }
+.module-state-dot[data-state="recovering"] { animation: module-dot-recovering 1s steps(1, end) infinite; }
.module-state-dot[data-state="deprovisioning"][data-prev-state="provisioned"] {
animation: module-dot-deprovisioning-from-provisioned 1s steps(1, end) infinite;
}