Create a new session
(request: Request, supabase: AsyncSupabaseClient)
| 26 | |
| 27 | @router.post("/sessions") |
| 28 | async def create_session(request: Request, supabase: AsyncSupabaseClient): |
| 29 | """Create a new session""" |
| 30 | try: |
| 31 | api_key = request.headers.get("X-Agentops-Api-Key") |
| 32 | parent_key = request.headers.get("X-Agentops-Parent-Key") |
| 33 | |
| 34 | validate_uuid(api_key) |
| 35 | tasks = [ |
| 36 | supabase.table("projects").select("*").eq("api_key", api_key).limit(1).single().execute(), |
| 37 | request.json(), |
| 38 | ] |
| 39 | |
| 40 | if parent_key: |
| 41 | tasks.append( |
| 42 | supabase.table("projects").select("*").eq("api_key", parent_key).limit(1).single().execute() |
| 43 | ) |
| 44 | project, data, project_secondary = await asyncio.gather(*tasks) |
| 45 | else: |
| 46 | project, data = await asyncio.gather(*tasks) |
| 47 | project_secondary = None |
| 48 | |
| 49 | logger.debug(data) |
| 50 | |
| 51 | if project is None: |
| 52 | raise RuntimeError("Invalid API Key") |
| 53 | |
| 54 | session = { |
| 55 | "id": data["session"]["session_id"], |
| 56 | "project_id": project["id"], |
| 57 | "init_timestamp": data["session"]["init_timestamp"], |
| 58 | "end_timestamp": data["session"].get("end_timestamp", None), |
| 59 | "tags": data["session"].get("tags", None), |
| 60 | "end_state": data["session"].get("end_state", None), |
| 61 | "end_state_reason": data["session"].get("end_state_reason", None), |
| 62 | "video": data["session"].get("video", None), |
| 63 | "host_env": data["session"].get("host_env", None), |
| 64 | } |
| 65 | |
| 66 | if project_secondary: |
| 67 | session["project_id_secondary"] = project_secondary["id"] |
| 68 | |
| 69 | await supabase.table("sessions").insert(session).execute() |
| 70 | await supabase.table("stats").insert({"session_id": session["id"]}).execute() |
| 71 | await export.create_session(session) |
| 72 | |
| 73 | token = generate_jwt(session["id"], jwt_secret) |
| 74 | logger.info(colored(f"Completed request for {session['id']}", "yellow")) |
| 75 | return JSONResponse( |
| 76 | { |
| 77 | "status": "Success", |
| 78 | "jwt": token, |
| 79 | "session_url": f'{app_url}/drilldown?session_id={data["session"]["session_id"]}', |
| 80 | }, |
| 81 | status_code=200, |
| 82 | ) |
| 83 | except ExpiredJWTError: |
| 84 | logger.warning("Expired JWT") |
| 85 | return JSONResponse({"path": request.url.path, "message": "Expired Token"}, status_code=401) |
nothing calls this directly
no test coverage detected
searching dependent graphs…