Добавлен сбор телеметрии на ВМ2

This commit is contained in:
mi
2026-08-26 15:12:51 +03:00
parent 728b9826a3
commit f989097484
32 changed files with 2029 additions and 134 deletions
@@ -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: