main.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import os
  2. import uvicorn
  3. import requests
  4. from fastapi import FastAPI, HTTPException
  5. from pydantic import BaseModel
  6. from typing import Optional, List, Dict, Any
  7. from dotenv import load_dotenv
  8. env_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), ".env")
  9. if os.path.exists(env_path):
  10. load_dotenv(env_path)
  11. else:
  12. load_dotenv()
  13. app = FastAPI(title="RunComfy Check Status Proxy")
  14. class CheckStatusRequest(BaseModel):
  15. # 可以给一个可选参数,不填则查所有
  16. server_id: Optional[str] = None
  17. @app.post("/")
  18. def check_status(req: CheckStatusRequest):
  19. user_id = os.getenv("RUNCOMFY_USER_ID")
  20. api_token = os.getenv("API_TOKEN")
  21. if not user_id or not api_token:
  22. raise HTTPException(status_code=500, detail="RUNCOMFY_USER_ID and API_TOKEN must be set in .env")
  23. url = f"https://beta-api.runcomfy.net/prod/api/users/{user_id}/servers"
  24. headers = {"Authorization": f"Bearer {api_token}"}
  25. try:
  26. if req.server_id:
  27. # Check specific server
  28. check_url = f"{url}/{req.server_id}"
  29. resp = requests.get(check_url, headers=headers)
  30. resp.raise_for_status()
  31. server_data = resp.json()
  32. return {"servers": [server_data], "total": 1}
  33. else:
  34. # Check all servers
  35. resp = requests.get(url, headers=headers)
  36. resp.raise_for_status()
  37. servers = resp.json()
  38. return {"servers": servers, "total": len(servers)}
  39. except requests.exceptions.RequestException as e:
  40. error_msg = str(e)
  41. if hasattr(e, 'response') and e.response is not None:
  42. error_msg += f" - Response: {e.response.text}"
  43. raise HTTPException(status_code=500, detail=error_msg)
  44. if __name__ == "__main__":
  45. import argparse
  46. parser = argparse.ArgumentParser()
  47. parser.add_argument("--port", type=int, default=8102)
  48. args = parser.parse_args()
  49. uvicorn.run(app, host="0.0.0.0", port=args.port)