Spaces:
Running
Running
File size: 2,048 Bytes
e0d84e6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | from __future__ import annotations
import json
import os
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
HTML = b"""<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>BLUM startup</title></head>
<body style="margin:0;background:#080b0e;color:#e8eef2;font-family:system-ui,sans-serif;display:grid;min-height:100vh;place-items:center">
<main style="max-width:620px;padding:32px"><p style="color:#72d6a3;font-weight:700">BLUM | TRADER BRAIN</p><h1>BLUM is restoring its learning memory</h1><p style="color:#9aa7b2;line-height:1.6">The service is healthy but not ready. The API starts automatically after persisted market history is restored. No learning data is being discarded.</p></main>
</body>
</html>
"""
class RestoreStatusHandler(BaseHTTPRequestHandler):
def do_GET(self) -> None: # noqa: N802 - BaseHTTPRequestHandler contract
if self.path.split("?", 1)[0] in {"/health", "/startup/status"}:
payload = json.dumps(
{
"status": "restoring",
"healthy": True,
"api_ready": False,
"ui_ready": True,
"current_stage": "database_restore",
}
).encode("utf-8")
self.send_response(200)
self.send_header("Content-Type", "application/json")
self.send_header("Content-Length", str(len(payload)))
self.end_headers()
self.wfile.write(payload)
return
self.send_response(200)
self.send_header("Content-Type", "text/html; charset=utf-8")
self.send_header("Content-Length", str(len(HTML)))
self.end_headers()
self.wfile.write(HTML)
def log_message(self, format: str, *args: object) -> None:
return
if __name__ == "__main__":
port = int(os.getenv("PORT", "7860"))
ThreadingHTTPServer(("0.0.0.0", port), RestoreStatusHandler).serve_forever()
|