Spaces:
Running
Running
File size: 6,546 Bytes
815b2e9 | 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | """
oracle_endpoints.py β Endpoint API per Gestione Nodo E (Oracle Cloud)
Endpoint:
GET /api/oracle/health β Health check Nodo E
GET /api/oracle/metrics β Metriche Nodo E
POST /api/oracle/sync β Sincronizzazione cluster
POST /api/oracle/restart β Riavvio servizi
GET /api/oracle/logs β Log backend remoto
"""
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from typing import Optional
import logging
# Import oracle manager
try:
from backend.api.oracle_node_manager import (
initialize_oracle_node,
get_oracle_health,
sync_oracle_cluster,
get_oracle_metrics,
restart_oracle_services,
ORACLE_NODE_E_ENABLED,
ORACLE_NODE_E_IP,
)
except ImportError:
from oracle_node_manager import (
initialize_oracle_node,
get_oracle_health,
sync_oracle_cluster,
get_oracle_metrics,
restart_oracle_services,
ORACLE_NODE_E_ENABLED,
ORACLE_NODE_E_IP,
)
_logger = logging.getLogger("oracle_endpoints")
router = APIRouter(prefix="/api/oracle", tags=["oracle"])
# ββ Modelli Pydantic ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
class OracleHealthResponse(BaseModel):
ok: bool
status: str
metrics: Optional[dict] = None
error: Optional[str] = None
class OracleSyncResponse(BaseModel):
ok: bool
message: Optional[str] = None
error: Optional[str] = None
# ββ Endpoint: Health Check ββββββββββββββββββββββββββββββββββββββββββββββββ
@router.get("/health", response_model=OracleHealthResponse)
async def oracle_health():
"""Ritorna lo stato di salute del Nodo E."""
if not ORACLE_NODE_E_ENABLED:
return OracleHealthResponse(
ok=False,
status="disabled",
error="Oracle Node E Γ¨ disabilitato",
)
try:
health = await get_oracle_health()
return OracleHealthResponse(**health)
except Exception as exc:
_logger.error(f"Error getting oracle health: {exc}")
raise HTTPException(500, "Error getting oracle health")
# ββ Endpoint: Metriche ββββββββββββββββββββββββββββββββββββββββββββββββββββ
@router.get("/metrics")
async def oracle_metrics():
"""Ritorna le metriche del Nodo E."""
if not ORACLE_NODE_E_ENABLED:
return {
"ok": False,
"error": "Oracle Node E Γ¨ disabilitato",
}
try:
metrics = await get_oracle_metrics()
return {
"ok": True,
"data": metrics,
}
except Exception as exc:
_logger.error(f"Error getting oracle metrics: {exc}")
raise HTTPException(500, "Error getting oracle metrics")
# ββ Endpoint: Sincronizzazione βββββββββββββββββββββββββββββββββββββββββββ
@router.post("/sync", response_model=OracleSyncResponse)
async def oracle_sync():
"""Sincronizza il Nodo E con il cluster principale."""
if not ORACLE_NODE_E_ENABLED:
return OracleSyncResponse(
ok=False,
error="Oracle Node E Γ¨ disabilitato",
)
try:
result = await sync_oracle_cluster()
return OracleSyncResponse(
ok=result.get("ok", False),
message=result.get("message", result.get("output", "")),
error=result.get("error"),
)
except Exception as exc:
_logger.error(f"Error syncing oracle cluster: {exc}")
raise HTTPException(500, "Error syncing oracle cluster")
# ββ Endpoint: Riavvio Servizi ββββββββββββββββββββββββββββββββββββββββββββ
@router.post("/restart")
async def oracle_restart():
"""Riavvia i servizi sul Nodo E."""
if not ORACLE_NODE_E_ENABLED:
return {
"ok": False,
"error": "Oracle Node E Γ¨ disabilitato",
}
try:
result = await restart_oracle_services()
return {
"ok": result.get("ok", False),
"message": result.get("message"),
"health": result.get("health"),
"error": result.get("error"),
}
except Exception as exc:
_logger.error(f"Error restarting oracle services: {exc}")
raise HTTPException(500, "Error restarting oracle services")
# ββ Endpoint: Log ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
@router.get("/logs")
async def oracle_logs(lines: int = 100):
"""Ritorna i log del backend remoto."""
if not ORACLE_NODE_E_ENABLED:
return {
"ok": False,
"error": "Oracle Node E Γ¨ disabilitato",
}
try:
from backend.api.oracle_node_manager import _oracle_manager
logs = await _oracle_manager.get_logs(lines)
return {
"ok": True,
"logs": logs,
"lines": lines,
}
except Exception as exc:
_logger.error(f"Error getting oracle logs: {exc}")
raise HTTPException(500, "Error getting oracle logs")
# ββ Endpoint: Info ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
@router.get("/info")
async def oracle_info():
"""Ritorna informazioni sul Nodo E."""
try:
from backend.api.oracle_node_manager import (
ORACLE_NODE_E_ROLE,
ORACLE_NODE_E_REGION,
ORACLE_NODE_E_PORT,
)
return {
"enabled": ORACLE_NODE_E_ENABLED,
"ip": ORACLE_NODE_E_IP,
"role": ORACLE_NODE_E_ROLE,
"region": ORACLE_NODE_E_REGION,
"port": ORACLE_NODE_E_PORT,
"node_id": "E",
"type": "Oracle Cloud (OCI)",
}
except Exception as exc:
_logger.error(f"Error getting oracle info: {exc}")
raise HTTPException(500, "Error getting oracle info")
|