57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
import os
|
|
import shutil
|
|
import psutil
|
|
import platform
|
|
import time
|
|
import httpx
|
|
from fastapi import APIRouter
|
|
from config import TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("/notify")
|
|
async def send_notification(body: dict):
|
|
"""Send a Telegram notification. Body: {"message": "text"}"""
|
|
msg = body.get("message", "")
|
|
if not msg or not TELEGRAM_BOT_TOKEN or not TELEGRAM_CHAT_ID:
|
|
return {"ok": False, "error": "missing message or Telegram config"}
|
|
proxy_url = os.environ.get("TELEGRAM_PROXY")
|
|
async with httpx.AsyncClient(proxy=proxy_url) as client:
|
|
r = await client.post(
|
|
f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage",
|
|
data={"chat_id": TELEGRAM_CHAT_ID, "text": msg, "parse_mode": "Markdown"},
|
|
)
|
|
return {"ok": r.status_code == 200}
|
|
|
|
|
|
@router.get("/stats")
|
|
def system_stats():
|
|
disk = shutil.disk_usage("/volume1")
|
|
mem = psutil.virtual_memory()
|
|
cpu_pct = psutil.cpu_percent(interval=0.5)
|
|
load_1, load_5, load_15 = psutil.getloadavg()
|
|
uptime_s = time.time() - psutil.boot_time()
|
|
|
|
days = int(uptime_s // 86400)
|
|
hours = int((uptime_s % 86400) // 3600)
|
|
|
|
return {
|
|
"cpu_percent": cpu_pct,
|
|
"cpu_count": psutil.cpu_count(),
|
|
"load_avg": [round(load_1, 2), round(load_5, 2), round(load_15, 2)],
|
|
"memory": {
|
|
"total": mem.total,
|
|
"used": mem.used,
|
|
"percent": mem.percent,
|
|
},
|
|
"disk": {
|
|
"total": disk.total,
|
|
"used": disk.used,
|
|
"free": disk.free,
|
|
"percent": round(disk.used / disk.total * 100, 1),
|
|
},
|
|
"uptime": f"{days}d {hours}h",
|
|
"platform": platform.platform(),
|
|
}
|