Добавлен сбор телеметрии на ВМ2
This commit is contained in:
@@ -2,6 +2,7 @@ from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from datetime import UTC, datetime, timedelta
|
||||
from time import monotonic
|
||||
from typing import Any
|
||||
|
||||
from sqlalchemy import text
|
||||
@@ -9,6 +10,13 @@ from sqlalchemy import text
|
||||
from app.config import load_settings
|
||||
from app.crm import CrmClient, CrmOutcome
|
||||
from app.repository import Repository
|
||||
from app.telemetry import (
|
||||
init_telemetry,
|
||||
log_event,
|
||||
record_reconciliation,
|
||||
safe_span,
|
||||
shutdown_telemetry,
|
||||
)
|
||||
|
||||
|
||||
class IncrementalReconciler:
|
||||
@@ -127,25 +135,44 @@ class IncrementalReconciler:
|
||||
|
||||
|
||||
async def reconciliation_main() -> None:
|
||||
settings = load_settings()
|
||||
if not settings.enabled:
|
||||
return
|
||||
assert settings.database_url and settings.crm_rest_webhook_url and settings.portal_host
|
||||
assert settings.contact_registered_field
|
||||
repository = Repository(settings.database_url.get_secret_value(), settings.db_pool_size)
|
||||
crm = CrmClient(
|
||||
settings.crm_rest_webhook_url.get_secret_value(),
|
||||
settings.portal_host,
|
||||
settings.http_timeout_sec,
|
||||
)
|
||||
reconciler = IncrementalReconciler(
|
||||
repository, crm, settings.rest_field_name(settings.contact_registered_field)
|
||||
)
|
||||
init_telemetry("bitrix-sync-reconciliation")
|
||||
repository: Repository | None = None
|
||||
crm: CrmClient | None = None
|
||||
started = monotonic()
|
||||
outcome = "error"
|
||||
count = 0
|
||||
try:
|
||||
await reconciler.run_once(settings.reconciliation_overlap_seconds)
|
||||
settings = load_settings()
|
||||
if not settings.enabled:
|
||||
outcome = "skipped"
|
||||
log_event("reconciliation.disabled", "Bitrix sync reconciliation is disabled")
|
||||
return
|
||||
assert settings.database_url and settings.crm_rest_webhook_url and settings.portal_host
|
||||
assert settings.contact_registered_field
|
||||
repository = Repository(settings.database_url.get_secret_value(), settings.db_pool_size)
|
||||
crm = CrmClient(
|
||||
settings.crm_rest_webhook_url.get_secret_value(),
|
||||
settings.portal_host,
|
||||
settings.http_timeout_sec,
|
||||
)
|
||||
reconciler = IncrementalReconciler(
|
||||
repository, crm, settings.rest_field_name(settings.contact_registered_field)
|
||||
)
|
||||
with safe_span("bitrix_sync.reconciliation.run"):
|
||||
count = await reconciler.run_once(settings.reconciliation_overlap_seconds)
|
||||
outcome = "success"
|
||||
log_event(
|
||||
"reconciliation.completed",
|
||||
"Bitrix sync reconciliation completed",
|
||||
attributes={"scanned_count": count},
|
||||
)
|
||||
finally:
|
||||
await crm.close()
|
||||
await repository.close()
|
||||
record_reconciliation(outcome, count, started)
|
||||
if crm is not None:
|
||||
await crm.close()
|
||||
if repository is not None:
|
||||
await repository.close()
|
||||
shutdown_telemetry()
|
||||
|
||||
|
||||
def run() -> None:
|
||||
|
||||
Reference in New Issue
Block a user