mirror of
https://github.com/Such-Software/xmrcheckout.git
synced 2026-10-17 05:51:34 +02:00
Harden reconciler status heartbeat startup
This commit is contained in:
+23
-3
@@ -6,6 +6,7 @@ from datetime import datetime, timedelta, timezone
|
|||||||
from decimal import Decimal, ROUND_DOWN
|
from decimal import Decimal, ROUND_DOWN
|
||||||
|
|
||||||
from sqlalchemy import and_, or_
|
from sqlalchemy import and_, or_
|
||||||
|
from sqlalchemy.exc import SQLAlchemyError
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from .btcpay_webhooks import dispatch_btcpay_webhooks
|
from .btcpay_webhooks import dispatch_btcpay_webhooks
|
||||||
@@ -31,14 +32,14 @@ def main() -> None:
|
|||||||
status_db: Session | None = None
|
status_db: Session | None = None
|
||||||
try:
|
try:
|
||||||
status_db = SessionLocal()
|
status_db = SessionLocal()
|
||||||
_update_reconciler_status(
|
_safe_update_reconciler_status(
|
||||||
status_db,
|
status_db,
|
||||||
started_at=datetime.now(timezone.utc),
|
started_at=datetime.now(timezone.utc),
|
||||||
completed_at=None,
|
completed_at=None,
|
||||||
error_message=None,
|
error_message=None,
|
||||||
)
|
)
|
||||||
_reconcile_invoices(service)
|
_reconcile_invoices(service)
|
||||||
_update_reconciler_status(
|
_safe_update_reconciler_status(
|
||||||
status_db,
|
status_db,
|
||||||
completed_at=datetime.now(timezone.utc),
|
completed_at=datetime.now(timezone.utc),
|
||||||
error_message=None,
|
error_message=None,
|
||||||
@@ -47,7 +48,7 @@ def main() -> None:
|
|||||||
logger.exception("Invoice reconcile failed: %s", exc)
|
logger.exception("Invoice reconcile failed: %s", exc)
|
||||||
if status_db is None:
|
if status_db is None:
|
||||||
status_db = SessionLocal()
|
status_db = SessionLocal()
|
||||||
_update_reconciler_status(
|
_safe_update_reconciler_status(
|
||||||
status_db,
|
status_db,
|
||||||
error_message=str(exc),
|
error_message=str(exc),
|
||||||
)
|
)
|
||||||
@@ -293,6 +294,25 @@ def _update_reconciler_status(
|
|||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
|
|
||||||
|
def _safe_update_reconciler_status(
|
||||||
|
db: Session,
|
||||||
|
*,
|
||||||
|
started_at: datetime | None = None,
|
||||||
|
completed_at: datetime | None = None,
|
||||||
|
error_message: str | None = None,
|
||||||
|
) -> None:
|
||||||
|
try:
|
||||||
|
_update_reconciler_status(
|
||||||
|
db,
|
||||||
|
started_at=started_at,
|
||||||
|
completed_at=completed_at,
|
||||||
|
error_message=error_message,
|
||||||
|
)
|
||||||
|
except SQLAlchemyError:
|
||||||
|
db.rollback()
|
||||||
|
logger.warning("Unable to persist reconciler status heartbeat", exc_info=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def _xmr_to_atomic(amount: Decimal) -> int:
|
def _xmr_to_atomic(amount: Decimal) -> int:
|
||||||
|
|||||||
Reference in New Issue
Block a user