50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
"""Lightweight v2 outbox worker entrypoint.
|
|
|
|
Usage:
|
|
python -m memory_gateway.worker_v2 --limit 100 --worker-id local-worker --lease-seconds 300
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import asyncio
|
|
import json
|
|
from typing import Sequence
|
|
from uuid import uuid4
|
|
|
|
from .services_v2 import v2_service
|
|
|
|
|
|
def build_parser() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(description="Process Memory Gateway v2 outbox events once.")
|
|
parser.add_argument("--limit", type=int, default=100, help="Maximum pending events to claim and process.")
|
|
parser.add_argument("--worker-id", default=None, help="Stable worker id recorded in outbox lease fields.")
|
|
parser.add_argument("--lease-seconds", type=int, default=300, help="Lease duration for claimed events.")
|
|
return parser
|
|
|
|
|
|
async def run_once(limit: int, worker_id: str | None, lease_seconds: int) -> dict[str, object]:
|
|
worker_id = worker_id or f"worker_{uuid4().hex[:12]}"
|
|
response = await v2_service.process_pending_outbox_events_summary(
|
|
limit=limit,
|
|
worker_id=worker_id,
|
|
lease_seconds=lease_seconds,
|
|
)
|
|
return response.model_dump(mode="json")
|
|
|
|
|
|
def main(argv: Sequence[str] | None = None) -> int:
|
|
args = build_parser().parse_args(argv)
|
|
payload = asyncio.run(
|
|
run_once(
|
|
limit=args.limit,
|
|
worker_id=args.worker_id,
|
|
lease_seconds=args.lease_seconds,
|
|
)
|
|
)
|
|
print(json.dumps(payload, ensure_ascii=False, sort_keys=True))
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|