feat: add checking state for domain reachability on service tiles
Agent-Logs-Url: https://github.com/naturallaw777/staging_alpha/sessions/3208f380-e8fe-4f12-b83c-723ecee6cd4c Co-authored-by: naturallaw777 <99053422+naturallaw777@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
337f858a7a
commit
9c34eb0694
@@ -2400,6 +2400,7 @@ async def api_services():
|
|||||||
has_port_issues = True
|
has_port_issues = True
|
||||||
break
|
break
|
||||||
has_domain_issues = False
|
has_domain_issues = False
|
||||||
|
cached_reachable: bool | None = None
|
||||||
if needs_domain:
|
if needs_domain:
|
||||||
has_domain_issues = await loop.run_in_executor(
|
has_domain_issues = await loop.run_in_executor(
|
||||||
None,
|
None,
|
||||||
@@ -2411,7 +2412,15 @@ async def api_services():
|
|||||||
cached_reachable = _is_domain_reachable_cached(domain)
|
cached_reachable = _is_domain_reachable_cached(domain)
|
||||||
if cached_reachable is False:
|
if cached_reachable is False:
|
||||||
has_domain_issues = True
|
has_domain_issues = True
|
||||||
health = "needs_attention" if (has_port_issues or has_domain_issues) else "healthy"
|
if has_port_issues or has_domain_issues:
|
||||||
|
health = "needs_attention"
|
||||||
|
else:
|
||||||
|
if needs_domain and domain:
|
||||||
|
if cached_reachable is None:
|
||||||
|
cached_reachable = _is_domain_reachable_cached(domain)
|
||||||
|
health = "checking_reachability" if cached_reachable is None else "healthy"
|
||||||
|
else:
|
||||||
|
health = "healthy"
|
||||||
# Check Bitcoin IBD state
|
# Check Bitcoin IBD state
|
||||||
if unit == "bitcoind.service" and enabled:
|
if unit == "bitcoind.service" and enabled:
|
||||||
sync = await loop.run_in_executor(None, _get_bitcoin_sync_info)
|
sync = await loop.run_in_executor(None, _get_bitcoin_sync_info)
|
||||||
@@ -2426,6 +2435,7 @@ async def api_services():
|
|||||||
# still check domain/port health so status remains consistent with
|
# still check domain/port health so status remains consistent with
|
||||||
# other domain services when there are actionable issues.
|
# other domain services when there are actionable issues.
|
||||||
has_domain_issues = False
|
has_domain_issues = False
|
||||||
|
cached_reachable: bool | None = None
|
||||||
if needs_domain:
|
if needs_domain:
|
||||||
has_domain_issues = await loop.run_in_executor(
|
has_domain_issues = await loop.run_in_executor(
|
||||||
None,
|
None,
|
||||||
@@ -2451,6 +2461,10 @@ async def api_services():
|
|||||||
break
|
break
|
||||||
if has_domain_issues or has_port_issues:
|
if has_domain_issues or has_port_issues:
|
||||||
health = "needs_attention"
|
health = "needs_attention"
|
||||||
|
elif needs_domain and domain:
|
||||||
|
if cached_reachable is None:
|
||||||
|
cached_reachable = _is_domain_reachable_cached(domain)
|
||||||
|
health = "checking_reachability" if cached_reachable is None else "inactive"
|
||||||
else:
|
else:
|
||||||
health = "inactive"
|
health = "inactive"
|
||||||
elif status == "failed":
|
elif status == "failed":
|
||||||
@@ -2458,6 +2472,16 @@ async def api_services():
|
|||||||
else:
|
else:
|
||||||
health = status # loading states, etc.
|
health = status # loading states, etc.
|
||||||
|
|
||||||
|
domain_reachability = None
|
||||||
|
if needs_domain and domain and enabled:
|
||||||
|
cached = _is_domain_reachable_cached(domain)
|
||||||
|
if cached is None:
|
||||||
|
domain_reachability = "checking"
|
||||||
|
elif cached:
|
||||||
|
domain_reachability = "reachable"
|
||||||
|
else:
|
||||||
|
domain_reachability = "unreachable"
|
||||||
|
|
||||||
service_data: dict = {
|
service_data: dict = {
|
||||||
"name": entry.get("name", ""),
|
"name": entry.get("name", ""),
|
||||||
"unit": unit,
|
"unit": unit,
|
||||||
@@ -2471,6 +2495,7 @@ async def api_services():
|
|||||||
"port_requirements": port_requirements,
|
"port_requirements": port_requirements,
|
||||||
"needs_domain": needs_domain,
|
"needs_domain": needs_domain,
|
||||||
"domain": domain,
|
"domain": domain,
|
||||||
|
"domain_reachability": domain_reachability,
|
||||||
}
|
}
|
||||||
if sync_ibd is not None:
|
if sync_ibd is not None:
|
||||||
service_data["sync_ibd"] = sync_ibd
|
service_data["sync_ibd"] = sync_ibd
|
||||||
|
|||||||
@@ -95,6 +95,7 @@
|
|||||||
.status-dot.disabled { background-color: var(--grey); }
|
.status-dot.disabled { background-color: var(--grey); }
|
||||||
.status-dot.needs-attention { background-color: var(--yellow); }
|
.status-dot.needs-attention { background-color: var(--yellow); }
|
||||||
.status-dot.syncing { background-color: #f5a623; animation: pulse-badge 1.5s infinite; }
|
.status-dot.syncing { background-color: #f5a623; animation: pulse-badge 1.5s infinite; }
|
||||||
|
.status-dot.checking-reachability { background-color: var(--accent-color); animation: pulse-badge 1s infinite; }
|
||||||
|
|
||||||
/* ── Bitcoin IBD sync progress bar ──────────────────────────────── */
|
/* ── Bitcoin IBD sync progress bar ──────────────────────────────── */
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ function statusClass(health) {
|
|||||||
if (health === "disabled") return "disabled";
|
if (health === "disabled") return "disabled";
|
||||||
if (health === "syncing") return "syncing";
|
if (health === "syncing") return "syncing";
|
||||||
if (STATUS_LOADING_STATES.has(health)) return "loading";
|
if (STATUS_LOADING_STATES.has(health)) return "loading";
|
||||||
|
if (health === "checking_reachability") return "checking-reachability";
|
||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,6 +28,7 @@ function statusText(health, enabled) {
|
|||||||
if (health === "syncing") return "Syncing\u2026";
|
if (health === "syncing") return "Syncing\u2026";
|
||||||
if (!health || health === "unknown") return "Unknown";
|
if (!health || health === "unknown") return "Unknown";
|
||||||
if (STATUS_LOADING_STATES.has(health)) return health;
|
if (STATUS_LOADING_STATES.has(health)) return health;
|
||||||
|
if (health === "checking_reachability") return "Checking\u2026";
|
||||||
return health;
|
return health;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user