first commit

This commit is contained in:
debu-2 2026-09-30 15:48:03 +05:30
commit dc1245f164
22 changed files with 1666 additions and 0 deletions

97
monitor/models.py Normal file
View file

@ -0,0 +1,97 @@
"""Data models for the browser monitoring application."""
from __future__ import annotations
from dataclasses import dataclass, field
from datetime import datetime
from typing import Any, Optional
@dataclass
class PageSnapshot:
"""Structured representation of a captured page state."""
website_id: str
website_name: str
requested_url: str
final_url: str
timestamp: datetime
title: str
visible_text: str
html: str
screenshot_path: Optional[str]
load_duration: float
success: bool
error: Optional[str] = None
@dataclass
class ProcessingResult:
"""Result from OpenAI processing (or stub)."""
success: bool
value: Optional[Any] = None
condition_met: bool = False
message: str = ""
email_subject: str = ""
email_body: str = ""
reason: str = ""
@dataclass
class WebsiteConfig:
"""Configuration for a single monitored website."""
id: str
name: str
url: str
enabled: bool = True
extra: dict[str, Any] = field(default_factory=dict)
@dataclass
class BrowserConfig:
"""Browser automation settings."""
type: str = "chrome"
executable_path: Optional[str] = None
headless: bool = False
profile_directory: str = "./profiles/default"
@dataclass
class MonitorConfig:
"""Monitoring loop settings."""
round_robin_delay_seconds: float = 5.0
page_load_timeout_seconds: float = 30.0
render_wait_seconds: float = 3.0
snapshot_directory: str = "./snapshots"
snapshot_retention_count: int = 50
browser_restart_max_retries: int = 3
browser_restart_backoff_seconds: float = 5.0
@dataclass
class NotificationChannelConfig:
"""Per-channel notification settings."""
enabled: bool = False
@dataclass
class NotificationsConfig:
"""Notification settings."""
sms: NotificationChannelConfig = field(default_factory=NotificationChannelConfig)
email: NotificationChannelConfig = field(default_factory=NotificationChannelConfig)
@dataclass
class AppConfig:
"""Root application configuration."""
browser: BrowserConfig = field(default_factory=BrowserConfig)
monitor: MonitorConfig = field(default_factory=MonitorConfig)
websites: list[WebsiteConfig] = field(default_factory=list)
notifications: NotificationsConfig = field(default_factory=NotificationsConfig)