From 848f5d7596ddd23afe4ac3bc48d46d87b3b11e9c Mon Sep 17 00:00:00 2001 From: orion Date: Sat, 4 Apr 2026 08:05:48 +0000 Subject: [PATCH] refactor: replace monitor heartbeat-v2 with heartbeat --- app/api/routers/monitor.py | 44 +++----------------------------------- 1 file changed, 3 insertions(+), 41 deletions(-) diff --git a/app/api/routers/monitor.py b/app/api/routers/monitor.py index 88ca447..f731bb0 100644 --- a/app/api/routers/monitor.py +++ b/app/api/routers/monitor.py @@ -175,43 +175,6 @@ def revoke_api_key(server_id: int, db: Session = Depends(get_db), _: models.User return None -class ServerHeartbeat(BaseModel): - identifier: str - openclaw_version: str | None = None - plugin_version: str | None = None - agents: List[dict] = [] - nginx_installed: bool | None = None - nginx_sites: List[str] = [] - cpu_pct: float | None = None - mem_pct: float | None = None - disk_pct: float | None = None - swap_pct: float | None = None - - -@router.post('/server/heartbeat') -def server_heartbeat(payload: ServerHeartbeat, db: Session = Depends(get_db)): - server = db.query(MonitoredServer).filter(MonitoredServer.identifier == payload.identifier, MonitoredServer.is_enabled == True).first() - if not server: - raise HTTPException(status_code=404, detail='unknown server identifier') - st = db.query(ServerState).filter(ServerState.server_id == server.id).first() - if not st: - st = ServerState(server_id=server.id) - db.add(st) - st.openclaw_version = payload.openclaw_version - st.plugin_version = payload.plugin_version - st.agents_json = json.dumps(payload.agents, ensure_ascii=False) - st.nginx_installed = payload.nginx_installed - st.nginx_sites_json = json.dumps(payload.nginx_sites, ensure_ascii=False) - st.cpu_pct = payload.cpu_pct - st.mem_pct = payload.mem_pct - st.disk_pct = payload.disk_pct - st.swap_pct = payload.swap_pct - st.last_seen_at = datetime.now(timezone.utc) - db.commit() - return {'ok': True, 'server_id': server.id, 'last_seen_at': st.last_seen_at} - - -# Heartbeat v2 with API Key authentication class TelemetryPayload(BaseModel): identifier: str openclaw_version: str | None = None @@ -227,13 +190,13 @@ class TelemetryPayload(BaseModel): uptime_seconds: int | None = None -@router.post('/server/heartbeat-v2') -def server_heartbeat_v2( +@router.post('/server/heartbeat') +def server_heartbeat( payload: TelemetryPayload, x_api_key: str = Header(..., alias='X-API-Key', description='API Key from /admin/servers/{id}/api-key'), db: Session = Depends(get_db) ): - """Server heartbeat using API Key authentication (no challenge_uuid required)""" + """Server heartbeat using API Key authentication.""" server = db.query(MonitoredServer).filter( MonitoredServer.api_key == x_api_key, MonitoredServer.is_enabled == True @@ -256,4 +219,3 @@ def server_heartbeat_v2( st.last_seen_at = datetime.now(timezone.utc) db.commit() return {'ok': True, 'server_id': server.id, 'identifier': server.identifier, 'last_seen_at': st.last_seen_at} -