You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
from datetime import datetime
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from gimme_job.constants import FailureClassification, RunStatus
|
|
|
|
|
|
class SiteRunResult(BaseModel):
|
|
site_id: str
|
|
status: RunStatus = RunStatus.SUCCESS
|
|
items_found: int = 0
|
|
new_items: int = 0
|
|
error_summary: Optional[str] = None
|
|
failure_classification: Optional[FailureClassification] = None
|
|
trace_path: Optional[Path] = None
|
|
screenshot_path: Optional[Path] = None
|
|
dom_snapshot_path: Optional[Path] = None
|
|
started_at: datetime = Field(default_factory=datetime.utcnow)
|
|
ended_at: Optional[datetime] = None
|
|
|
|
def mark_done(self) -> None:
|
|
self.ended_at = datetime.utcnow()
|
|
|
|
|
|
class RunSummary(BaseModel):
|
|
run_date: datetime = Field(default_factory=datetime.utcnow)
|
|
site_results: list[SiteRunResult] = Field(default_factory=list)
|
|
total_new: int = 0
|
|
total_found: int = 0
|
|
summary_text: Optional[str] = None
|
|
|
|
def add_result(self, result: SiteRunResult) -> None:
|
|
self.site_results.append(result)
|
|
self.total_found += result.items_found
|
|
self.total_new += result.new_items
|
|
|
|
|
|
class ClaudeRunResult(BaseModel):
|
|
success: bool
|
|
session_id: Optional[str] = None
|
|
output: str = ""
|
|
cost_usd: Optional[float] = None
|
|
duration_ms: Optional[int] = None
|
|
error: Optional[str] = None
|