Repository navigation
Expand file tree
/
Copy pathmodels.py
More file actions
83 lines (69 loc) · 2.2 KB
/
Copy pathmodels.py
File metadata and controls
83 lines (69 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
from __future__ import annotations
from dataclasses import dataclass, field
from datetime import datetime
from enum import Enum
from typing import Dict, List, Optional, Tuple
class JobStatus(str, Enum):
PENDING = "pending"
RUNNING = "running"
PAUSED = "paused"
COMPLETED = "completed"
FAILED = "failed"
CANCELLED = "cancelled"
@dataclass
class CrawlStats:
processed_urls: int = 0
discovered_urls: int = 0
duplicate_urls: int = 0
failed_urls: int = 0
queued_urls: int = 0
queue_max: int = 0
active_workers: int = 0
backpressure_state: str = "idle"
@dataclass
class CrawlJob:
id: str
origin_url: str
max_depth: int
created_at: datetime
max_urls_to_visit: int | None = None
rate_limit_per_sec: float = 1.0
status: JobStatus = JobStatus.PENDING
error_message: Optional[str] = None
updated_at: datetime = field(default_factory=datetime.utcnow)
stats: CrawlStats = field(default_factory=CrawlStats)
@dataclass
class EmbeddingJobRecord:
id: str
created_at: datetime
updated_at: datetime
status: JobStatus
model_name: str
rate_limit_per_sec: float = 1.0
max_pages: int | None = None
total_pages: int = 0
embedded_pages: int = 0
failed_pages: int = 0
error_message: Optional[str] = None
pending_urls_json: str = "[]"
PageRecord = Tuple[str, str, int]
IndexEntry = Tuple[str, str, int, float]
def summarize_jobs(jobs: Dict[str, CrawlJob]) -> List[Dict[str, object]]:
summary: List[Dict[str, object]] = []
for job in jobs.values():
summary.append(
{
"id": job.id,
"origin_url": job.origin_url,
"max_depth": job.max_depth,
"max_urls_to_visit": job.max_urls_to_visit,
"created_at": job.created_at.isoformat(),
"updated_at": job.updated_at.isoformat(),
"status": job.status.value,
"processed_urls": job.stats.processed_urls,
"queued_urls": job.stats.queued_urls,
"backpressure_state": job.stats.backpressure_state,
"rate_limit_per_sec": job.rate_limit_per_sec,
}
)
return summary