Shoraky commited on
Commit
e7269f1
·
1 Parent(s): ee66b74

Allow admins to monitor active analyses

Browse files
Files changed (1) hide show
  1. app.py +13 -6
app.py CHANGED
@@ -658,21 +658,22 @@ async def analyze(request: Request, playerId: str = Form(...), clientId: UUID =
658
  raise
659
 
660
 
661
- def owned_job(client_id, user_id):
662
  job = jobs.get(client_id)
663
- if not job or job["userId"] != user_id:
664
  raise HTTPException(404, "Analysis not found")
665
  return job
666
 
667
 
668
  @app.get("/api/progress/{client_id}")
669
  def progress(client_id: str, request: Request):
670
- return {key: value for key, value in owned_job(client_id, request.state.user_id).copy().items() if key not in {"userId", "cancel", "completion"}}
 
671
 
672
 
673
  @app.post("/api/retry-save/{client_id}")
674
  def retry_save(client_id: str, request: Request):
675
- job = owned_job(client_id, request.state.user_id)
676
  if job.get("completion"):
677
  backend(f'/{job["sessionId"]}', job["userId"], "PUT", job["completion"])
678
  job.pop("completion", None)
@@ -682,12 +683,18 @@ def retry_save(client_id: str, request: Request):
682
 
683
  @app.get("/api/active-analyses")
684
  def active(request: Request):
685
- return {"jobs": [progress(key, request) for key, job in list(jobs.items()) if job["userId"] == request.state.user_id and job["status"] in {"uploading", "queued", "running"}]}
 
 
 
 
 
 
686
 
687
 
688
  @app.post("/api/cancel/{client_id}")
689
  def cancel(client_id: str, request: Request):
690
- job = owned_job(client_id, request.state.user_id)
691
  if job["status"] not in {"completed", "failed", "cancelled", "sync_failed"}:
692
  job["cancel"] = True
693
  return {"status": job["status"], "clientId": client_id}
 
658
  raise
659
 
660
 
661
+ def owned_job(client_id, user_id, is_admin=False):
662
  job = jobs.get(client_id)
663
+ if not job or (job["userId"] != user_id and not is_admin):
664
  raise HTTPException(404, "Analysis not found")
665
  return job
666
 
667
 
668
  @app.get("/api/progress/{client_id}")
669
  def progress(client_id: str, request: Request):
670
+ job = owned_job(client_id, request.state.user_id, request.state.is_admin)
671
+ return {key: value for key, value in job.copy().items() if key not in {"userId", "cancel", "completion"}}
672
 
673
 
674
  @app.post("/api/retry-save/{client_id}")
675
  def retry_save(client_id: str, request: Request):
676
+ job = owned_job(client_id, request.state.user_id, request.state.is_admin)
677
  if job.get("completion"):
678
  backend(f'/{job["sessionId"]}', job["userId"], "PUT", job["completion"])
679
  job.pop("completion", None)
 
683
 
684
  @app.get("/api/active-analyses")
685
  def active(request: Request):
686
+ is_admin = request.state.is_admin
687
+ return {"jobs": [
688
+ {key: value for key, value in job.copy().items() if key not in {"userId", "cancel", "completion"}}
689
+ for job in list(jobs.values())
690
+ if (is_admin or job["userId"] == request.state.user_id)
691
+ and job["status"] in {"uploading", "queued", "running"}
692
+ ]}
693
 
694
 
695
  @app.post("/api/cancel/{client_id}")
696
  def cancel(client_id: str, request: Request):
697
+ job = owned_job(client_id, request.state.user_id, request.state.is_admin)
698
  if job["status"] not in {"completed", "failed", "cancelled", "sync_failed"}:
699
  job["cancel"] = True
700
  return {"status": job["status"], "clientId": client_id}