debug
This commit is contained in:
@@ -191,17 +191,44 @@ def cleanup_imported_runtime_nodes(*, region: str, role: str, keep_node_code: st
|
||||
|
||||
|
||||
def register_local_control_heartbeat() -> None:
|
||||
from app.services.detect_job_service import get_active_detect_job_summary
|
||||
from app.services.worker_control_service import detect_worker_runtime
|
||||
|
||||
worker_runtime = detect_worker_runtime()
|
||||
worker_online = bool(worker_runtime.get("running", False))
|
||||
active_job = get_active_detect_job_summary(event_limit=5) or {}
|
||||
node_stats = list(active_job.get("node_stats") or [])
|
||||
local_bucket = next(
|
||||
(item for item in node_stats if str(item.get("node_code") or "").strip() == settings.node_code),
|
||||
{},
|
||||
)
|
||||
items_total = int(local_bucket.get("items_total", 0) or 0)
|
||||
items_claimed = int(local_bucket.get("items_claimed", 0) or 0)
|
||||
items_running = int(local_bucket.get("items_running", 0) or 0)
|
||||
items_completed = int(local_bucket.get("items_completed", 0) or 0)
|
||||
current_load = max(items_running, items_claimed, 0)
|
||||
detect_participating = bool(worker_online and (items_total > 0 or current_load > 0))
|
||||
node_status = "busy" if current_load > 0 else "online"
|
||||
register_node_heartbeat(
|
||||
node_code=settings.node_code,
|
||||
region=settings.node_region,
|
||||
role=settings.node_role,
|
||||
status="online",
|
||||
current_load=0,
|
||||
status=node_status,
|
||||
current_load=current_load,
|
||||
metadata={
|
||||
"service": "domain-api",
|
||||
"api_host": settings.api_host,
|
||||
"api_port": settings.api_port,
|
||||
"worker_mode": settings.worker_mode,
|
||||
"worker_online": worker_online,
|
||||
"worker_process_count": int(worker_runtime.get("process_count", 0) or 0),
|
||||
"detect_participating": detect_participating,
|
||||
"active_job_code": str(active_job.get("job_code") or ""),
|
||||
"active_job_status": str(active_job.get("status") or ""),
|
||||
"job_items_total": items_total,
|
||||
"job_items_claimed": items_claimed,
|
||||
"job_items_running": items_running,
|
||||
"job_items_completed": items_completed,
|
||||
"updated_at": datetime.now().isoformat(timespec="seconds"),
|
||||
},
|
||||
)
|
||||
@@ -264,6 +291,7 @@ def get_cluster_snapshot() -> dict:
|
||||
stale_nodes: list[str] = []
|
||||
offline_nodes: list[str] = []
|
||||
online_worker_nodes = 0
|
||||
dedicated_online_worker_nodes = 0
|
||||
online_control_nodes = 0
|
||||
|
||||
for node in nodes:
|
||||
@@ -271,6 +299,9 @@ def get_cluster_snapshot() -> dict:
|
||||
node_role = str(node.get("role") or "unknown")
|
||||
node_region = str(node.get("region") or "unknown")
|
||||
node_code = str(node.get("node_code") or "")
|
||||
metadata = node.get("metadata") or {}
|
||||
node_current_load = int(node.get("current_load", 0) or 0)
|
||||
effective_worker = False
|
||||
|
||||
status_counts[node_status] = status_counts.get(node_status, 0) + 1
|
||||
role_counts[node_role] = role_counts.get(node_role, 0) + 1
|
||||
@@ -283,9 +314,17 @@ def get_cluster_snapshot() -> dict:
|
||||
if node_status == "offline":
|
||||
offline_nodes.append(node_code)
|
||||
if node_role == "worker" and node_status in {"online", "busy"}:
|
||||
dedicated_online_worker_nodes += 1
|
||||
effective_worker = True
|
||||
elif node_role == "control" and node_status in {"online", "busy"}:
|
||||
if bool(metadata.get("worker_online", False)) or bool(metadata.get("detect_participating", False)) or node_current_load > 0:
|
||||
effective_worker = True
|
||||
if effective_worker:
|
||||
online_worker_nodes += 1
|
||||
if node_role == "control" and node_status in {"online", "busy"}:
|
||||
online_control_nodes += 1
|
||||
node["is_effective_worker"] = effective_worker
|
||||
node["detect_participating"] = bool(metadata.get("detect_participating", False) or node_current_load > 0)
|
||||
|
||||
return {
|
||||
"nodes": nodes,
|
||||
@@ -300,6 +339,7 @@ def get_cluster_snapshot() -> dict:
|
||||
"stale_nodes": stale_nodes,
|
||||
"offline_nodes": offline_nodes,
|
||||
"online_worker_nodes": online_worker_nodes,
|
||||
"dedicated_online_worker_nodes": dedicated_online_worker_nodes,
|
||||
"online_control_nodes": online_control_nodes,
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user