|
#!/usr/bin/env python3
|
|
import argparse
|
|
import importlib
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
SERVICES_DIR = ROOT / "devplacepy_services"
|
|
|
|
SERVICES = [
|
|
"web",
|
|
"database",
|
|
"pubsub",
|
|
"gateway",
|
|
"jobs",
|
|
"devii",
|
|
"bot",
|
|
"backup",
|
|
"containers",
|
|
"telegram",
|
|
"email",
|
|
"news",
|
|
"gitea",
|
|
"audit",
|
|
"xmlrpc",
|
|
]
|
|
|
|
|
|
def list_services() -> int:
|
|
for name in SERVICES:
|
|
main_py = SERVICES_DIR / name / "main.py"
|
|
status = "ok" if main_py.exists() else "missing"
|
|
print(f"{name:12} {status}")
|
|
return 0
|
|
|
|
|
|
def verify_stubs() -> int:
|
|
sys.path.insert(0, str(ROOT))
|
|
errors: list[str] = []
|
|
for name in SERVICES:
|
|
main_py = SERVICES_DIR / name / "main.py"
|
|
if not main_py.exists():
|
|
errors.append(f"{name}: missing main.py")
|
|
continue
|
|
module_name = f"devplacepy_services.{name}.main"
|
|
try:
|
|
module = importlib.import_module(module_name)
|
|
except Exception as exc:
|
|
errors.append(f"{name}: import failed ({exc})")
|
|
continue
|
|
app = getattr(module, "app", None)
|
|
if app is None:
|
|
errors.append(f"{name}: no app export")
|
|
continue
|
|
try:
|
|
from fastapi.testclient import TestClient
|
|
|
|
client = TestClient(app)
|
|
resp = client.get("/health")
|
|
if resp.status_code != 200:
|
|
errors.append(f"{name}: /health returned {resp.status_code}")
|
|
continue
|
|
data = resp.json()
|
|
for key in ("service", "status", "uptime_s", "version", "deps", "stats"):
|
|
if key not in data:
|
|
errors.append(f"{name}: health missing key {key}")
|
|
except Exception as exc:
|
|
errors.append(f"{name}: health check failed ({exc})")
|
|
if errors:
|
|
print("verify: failed")
|
|
for err in errors:
|
|
print(f" {err}")
|
|
return 1
|
|
print("verify: ok")
|
|
return 0
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(prog="refactor_to_microservices.py")
|
|
parser.add_argument("--list", action="store_true")
|
|
parser.add_argument("--verify", action="store_true")
|
|
args = parser.parse_args()
|
|
if args.list:
|
|
return list_services()
|
|
if args.verify:
|
|
return verify_stubs()
|
|
parser.print_help()
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main()) |