Save error snapshot - enhanced version with extra context support Args: error_name: Error name used for filename generation extra_context: Extra context info to be saved as JSON file
(
error_name: str = "error", extra_context: Optional[Dict[str, Any]] = None
)
| 565 | |
| 566 | |
| 567 | async def save_error_snapshot( |
| 568 | error_name: str = "error", extra_context: Optional[Dict[str, Any]] = None |
| 569 | ): |
| 570 | """Save error snapshot - enhanced version with extra context support |
| 571 | |
| 572 | Args: |
| 573 | error_name: Error name used for filename generation |
| 574 | extra_context: Extra context info to be saved as JSON file |
| 575 | """ |
| 576 | from api_utils.server_state import state |
| 577 | |
| 578 | name_parts = error_name.split("_") |
| 579 | req_id = ( |
| 580 | name_parts[-1] if len(name_parts) > 1 and len(name_parts[-1]) == 7 else None |
| 581 | ) |
| 582 | base_error_name = error_name if not req_id else "_".join(name_parts[:-1]) |
| 583 | log_prefix = f"[{req_id}]" if req_id else "[No ReqID]" |
| 584 | page_to_snapshot = state.page_instance |
| 585 | |
| 586 | if ( |
| 587 | not state.browser_instance |
| 588 | or not state.browser_instance.is_connected() |
| 589 | or not page_to_snapshot |
| 590 | or page_to_snapshot.is_closed() |
| 591 | ): |
| 592 | logger.warning( |
| 593 | f"{log_prefix} Cannot save snapshot ({base_error_name}), browser/page unavailable." |
| 594 | ) |
| 595 | return |
| 596 | |
| 597 | logger.info( |
| 598 | f"{log_prefix} Attempting to save error snapshot ({base_error_name})..." |
| 599 | ) |
| 600 | timestamp = int(time.time() * 1000) |
| 601 | error_dir = os.path.join(os.path.dirname(__file__), "..", "errors_py") |
| 602 | |
| 603 | try: |
| 604 | os.makedirs(error_dir, exist_ok=True) |
| 605 | filename_suffix = f"{req_id}_{timestamp}" if req_id else f"{timestamp}" |
| 606 | filename_base = f"{base_error_name}_{filename_suffix}" |
| 607 | screenshot_path = os.path.join(error_dir, f"{filename_base}.png") |
| 608 | html_path = os.path.join(error_dir, f"{filename_base}.html") |
| 609 | context_path = os.path.join(error_dir, f"{filename_base}_context.json") |
| 610 | |
| 611 | # Save screenshot |
| 612 | try: |
| 613 | await page_to_snapshot.screenshot( |
| 614 | path=screenshot_path, full_page=True, timeout=15000 |
| 615 | ) |
| 616 | logger.info(f"{log_prefix} Snapshot saved to: {screenshot_path}") |
| 617 | except Exception as ss_err: |
| 618 | logger.error( |
| 619 | f"{log_prefix} Failed to save screenshot ({base_error_name}): {ss_err}" |
| 620 | ) |
| 621 | |
| 622 | # Save HTML content |
| 623 | try: |
| 624 | content = await page_to_snapshot.content() |
no test coverage detected