(request: Request, supabase: AsyncSupabaseClient)
| 192 | |
| 193 | @router.post("/create_session") |
| 194 | async def v2_create_session(request: Request, supabase: AsyncSupabaseClient): |
| 195 | try: |
| 196 | api_key = request.headers.get("X-Agentops-Api-Key") |
| 197 | parent_key = request.headers.get("X-Agentops-Parent-Key") |
| 198 | |
| 199 | validate_uuid(api_key) |
| 200 | |
| 201 | tasks = [ |
| 202 | supabase.table("projects").select("id").eq("api_key", api_key).execute(), |
| 203 | request.json(), |
| 204 | ] |
| 205 | |
| 206 | if parent_key: |
| 207 | tasks.append(supabase.table("projects").select("id").eq("api_key", parent_key).execute()) |
| 208 | project_response, data, project_secondary_response = await asyncio.gather(*tasks) |
| 209 | project_secondary = ( |
| 210 | project_secondary_response.data[0] if project_secondary_response.data else None |
| 211 | ) |
| 212 | else: |
| 213 | project_response, data = await asyncio.gather(*tasks) |
| 214 | project_secondary = None |
| 215 | |
| 216 | project = project_response.data[0] if project_response.data else None |
| 217 | |
| 218 | logger.debug(data) |
| 219 | |
| 220 | if project is None: |
| 221 | raise RuntimeError("Invalid API Key") |
| 222 | |
| 223 | session = { |
| 224 | "id": data["session"]["session_id"], |
| 225 | "project_id": project["id"], |
| 226 | "init_timestamp": data["session"].get("init_timestamp", None) |
| 227 | or datetime.now(timezone.utc).isoformat(), |
| 228 | "end_timestamp": data["session"].get("end_timestamp", None), |
| 229 | "tags": data["session"].get("tags", None), |
| 230 | "end_state": data["session"].get("end_state", None), |
| 231 | "end_state_reason": data["session"].get("end_state_reason", None), |
| 232 | "video": data["session"].get("video", None), |
| 233 | "host_env": data["session"].get("host_env", None), |
| 234 | } |
| 235 | |
| 236 | if project_secondary: |
| 237 | session["project_id_secondary"] = project_secondary["id"] |
| 238 | |
| 239 | await supabase.table("sessions").insert(session).execute() |
| 240 | await supabase.table("stats").insert({"session_id": session["id"]}).execute() |
| 241 | await export.create_session(session) |
| 242 | |
| 243 | token = generate_jwt(session["id"], jwt_secret) |
| 244 | logger.info(colored(f"Completed request for {session['id']}", "yellow")) |
| 245 | return JSONResponse( |
| 246 | { |
| 247 | "status": "Success", |
| 248 | "jwt": token, |
| 249 | "session_url": f'{app_url}/drilldown?session_id={data["session"]["session_id"]}', |
| 250 | } |
| 251 | ) |
nothing calls this directly
no test coverage detected
searching dependent graphs…