| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import os
- import uvicorn
- import requests
- from fastapi import FastAPI, HTTPException
- from pydantic import BaseModel
- from typing import Optional, List, Dict, Any
- from dotenv import load_dotenv
- env_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), ".env")
- if os.path.exists(env_path):
- load_dotenv(env_path)
- else:
- load_dotenv()
- app = FastAPI(title="RunComfy Check Status Proxy")
- class CheckStatusRequest(BaseModel):
- # 可以给一个可选参数,不填则查所有
- server_id: Optional[str] = None
- @app.post("/")
- def check_status(req: CheckStatusRequest):
- user_id = os.getenv("RUNCOMFY_USER_ID")
- api_token = os.getenv("API_TOKEN")
-
- if not user_id or not api_token:
- raise HTTPException(status_code=500, detail="RUNCOMFY_USER_ID and API_TOKEN must be set in .env")
-
- url = f"https://beta-api.runcomfy.net/prod/api/users/{user_id}/servers"
- headers = {"Authorization": f"Bearer {api_token}"}
-
- try:
- if req.server_id:
- # Check specific server
- check_url = f"{url}/{req.server_id}"
- resp = requests.get(check_url, headers=headers)
- resp.raise_for_status()
- server_data = resp.json()
- return {"servers": [server_data], "total": 1}
- else:
- # Check all servers
- resp = requests.get(url, headers=headers)
- resp.raise_for_status()
- servers = resp.json()
- return {"servers": servers, "total": len(servers)}
-
- except requests.exceptions.RequestException as e:
- error_msg = str(e)
- if hasattr(e, 'response') and e.response is not None:
- error_msg += f" - Response: {e.response.text}"
- raise HTTPException(status_code=500, detail=error_msg)
- if __name__ == "__main__":
- import argparse
- parser = argparse.ArgumentParser()
- parser.add_argument("--port", type=int, default=8102)
- args = parser.parse_args()
- uvicorn.run(app, host="0.0.0.0", port=args.port)
|