|
import os |
|
import shutil |
|
from fastapi import FastAPI |
|
from typing import Dict, Any |
|
|
|
app = FastAPI(title="Hugging Face Space Monitor", version="1.0.0") |
|
|
|
@app.get("/") |
|
def greet_json(): |
|
return {"Hello": "World!"} |
|
|
|
@app.get("/storage") |
|
def get_storage_info() -> Dict[str, Any]: |
|
"""取得目前 Space 的存儲使用情況""" |
|
try: |
|
|
|
total, used, free = shutil.disk_usage("/") |
|
|
|
|
|
app_size = get_directory_size("/app") |
|
|
|
|
|
tmp_size = get_directory_size("/tmp") |
|
|
|
return { |
|
"disk_usage": { |
|
"total_bytes": total, |
|
"used_bytes": used, |
|
"free_bytes": free, |
|
"total_gb": round(total / (1024**3), 2), |
|
"used_gb": round(used / (1024**3), 2), |
|
"free_gb": round(free / (1024**3), 2), |
|
"usage_percentage": round((used / total) * 100, 2) |
|
}, |
|
"application": { |
|
"app_size_bytes": app_size, |
|
"app_size_mb": round(app_size / (1024**2), 2), |
|
"tmp_size_bytes": tmp_size, |
|
"tmp_size_mb": round(tmp_size / (1024**2), 2) |
|
}, |
|
"environment": { |
|
"current_dir": os.getcwd(), |
|
"space_id": os.getenv("SPACE_ID", "unknown"), |
|
"space_author": os.getenv("SPACE_AUTHOR_NAME", "unknown") |
|
} |
|
} |
|
except Exception as e: |
|
return {"error": str(e)} |
|
|
|
def get_directory_size(path: str) -> int: |
|
"""計算目錄大小""" |
|
total_size = 0 |
|
try: |
|
for dirpath, dirnames, filenames in os.walk(path): |
|
for filename in filenames: |
|
filepath = os.path.join(dirpath, filename) |
|
try: |
|
total_size += os.path.getsize(filepath) |
|
except (OSError, FileNotFoundError): |
|
continue |
|
except (OSError, FileNotFoundError): |
|
pass |
|
return total_size |
|
|
|
@app.get("/health") |
|
def health_check(): |
|
"""健康檢查端點""" |
|
return { |
|
"status": "healthy", |
|
"message": "Space is running normally" |
|
} |
|
|