updates :)

This commit is contained in:
2026-06-20 17:07:48 +03:30
parent 24155ad6bf
commit 64886b2b10
17 changed files with 896 additions and 262 deletions
+22 -13
View File
@@ -16,10 +16,15 @@ from logger import get_logger
log = get_logger(__name__)
def _load_active_flow() -> dict[str, object]:
cfg = asyncio.run(flow_config_repo.get_active())
if cfg is None:
log.warning("No active flow config — running without dynamic flow steps.")
def _load_flow(cfg_id: int | None = None) -> dict[str, object]:
if cfg_id is not None:
cfg = asyncio.run(flow_config_repo.get(cfg_id))
if cfg is None:
log.error("Flow config %d not found.", cfg_id)
else:
cfg = asyncio.run(flow_config_repo.get_first())
if cfg is None:
log.warning("No flow configs found — running without dynamic flow steps.")
return cfg or {}
@@ -56,7 +61,7 @@ def _record(
log.info("%s OK (no flow config) — %d ms", identifier, total_ms)
def run_otp(phone: str) -> None:
def run_otp(phone: str, cfg_id: int | None = None) -> None:
from crawler.driver import driver_session
from crawler.dynamic_flow import DynamicFlow
from crawler.scenarios.otp_login import OTPLoginScenario
@@ -64,7 +69,7 @@ def run_otp(phone: str) -> None:
def otp_resolver(p: str) -> str:
raise NotImplementedError("Implement otp_resolver to fetch OTP from your SMS gateway")
flow_cfg = _load_active_flow()
flow_cfg = _load_flow(cfg_id)
target_url: str = flow_cfg.get("target_url") or "" if flow_cfg else ""
t0 = time.monotonic()
try:
@@ -77,12 +82,12 @@ def run_otp(phone: str) -> None:
_record("otp", phone, result, None, t0)
def run_fresh() -> None:
def run_fresh(cfg_id: int | None = None) -> None:
from crawler.driver import driver_session
from crawler.dynamic_flow import DynamicFlow
from crawler.scenarios.fresh_session import FreshSessionScenario
flow_cfg = _load_active_flow()
flow_cfg = _load_flow(cfg_id)
target_url: str = flow_cfg.get("target_url") or "" if flow_cfg else ""
t0 = time.monotonic()
try:
@@ -95,10 +100,10 @@ def run_fresh() -> None:
_record("fresh", "fresh", result, None, t0)
def run_batch(workers: int, total_runs: int, stagger_ms: int, headless: bool) -> None:
def run_batch(workers: int, total_runs: int, stagger_ms: int, headless: bool, cfg_id: int | None = None) -> None:
from crawler.batch import run_batch as _run_batch
flow_cfg = _load_active_flow()
flow_cfg = _load_flow(cfg_id)
if not flow_cfg:
log.error("No active flow config — activate one in the admin panel first.")
sys.exit(1)
@@ -137,10 +142,13 @@ def main() -> None:
otp_p = sub.add_parser("otp", help="Run Scenario 1 (SMS-OTP login)")
otp_p.add_argument("--phone", help="Single phone number (default: all from config)")
otp_p.add_argument("--config-id", type=int, default=None, help="Flow config ID (default: first config)")
sub.add_parser("fresh", help="Run Scenario 2 (fresh session)")
fresh_p = sub.add_parser("fresh", help="Run Scenario 2 (fresh session)")
fresh_p.add_argument("--config-id", type=int, default=None, help="Flow config ID (default: first config)")
batch_p = sub.add_parser("batch", help="Run many parallel fresh-session runners")
batch_p.add_argument("--config-id", type=int, default=None, help="Flow config ID (default: first config)")
batch_p.add_argument("--workers", type=int, default=3, help="Parallel Chrome instances (default: 3)")
batch_p.add_argument("--runs", type=int, default=10, help="Total runs to complete (default: 10)")
batch_p.add_argument("--stagger", type=int, default=500, help="Ms delay between worker launches (default: 500)")
@@ -156,15 +164,16 @@ def main() -> None:
log.error("No phone numbers configured. Set PHONE_NUMBERS in .env or pass --phone")
sys.exit(1)
for phone in phones:
run_otp(phone)
run_otp(phone, cfg_id=args.config_id)
elif args.cmd == "fresh":
run_fresh()
run_fresh(cfg_id=args.config_id)
elif args.cmd == "batch":
run_batch(
workers=args.workers,
total_runs=args.runs,
stagger_ms=args.stagger,
headless=args.headless,
cfg_id=args.config_id,
)