| | | 1 | | using Prometheus; |
| | | 2 | | using Services.SearchServices.OrderSearch; |
| | | 3 | | |
| | | 4 | | namespace OzonOrdersWeb.WebServices.OrderSearch; |
| | | 5 | | |
| | | 6 | | /// <summary>Метрики расхождения ES ↔ MySQL на <c>/metrics</c> (Prometheus).</summary> |
| | | 7 | | public sealed class OrderSearchDriftPrometheusReporter : IOrderSearchDriftMetricsReporter |
| | | 8 | | { |
| | 0 | 9 | | private static readonly Gauge IndexCount = Metrics.CreateGauge( |
| | 0 | 10 | | "studio2_order_search_index_count", |
| | 0 | 11 | | "Число документов в индексе Elasticsearch orders"); |
| | | 12 | | |
| | 0 | 13 | | private static readonly Gauge DbOrderCount = Metrics.CreateGauge( |
| | 0 | 14 | | "studio2_order_search_db_order_count", |
| | 0 | 15 | | "Число строк в таблице Orders (MySQL)"); |
| | | 16 | | |
| | 0 | 17 | | private static readonly Gauge CountDrift = Metrics.CreateGauge( |
| | 0 | 18 | | "studio2_order_search_count_drift", |
| | 0 | 19 | | "Абсолютное расхождение |index_count - db_order_count|"); |
| | | 20 | | |
| | 0 | 21 | | private static readonly Gauge DriftAlert = Metrics.CreateGauge( |
| | 0 | 22 | | "studio2_order_search_drift_alert", |
| | 0 | 23 | | "1 если |index_count - db_order_count| превышает порог CountDriftAlertThreshold, иначе 0"); |
| | | 24 | | |
| | | 25 | | public void Report(long indexCount, long dbOrderCount, long absoluteDrift, bool isAlert) |
| | | 26 | | { |
| | 0 | 27 | | IndexCount.Set(indexCount); |
| | 0 | 28 | | DbOrderCount.Set(dbOrderCount); |
| | 0 | 29 | | CountDrift.Set(absoluteDrift); |
| | 0 | 30 | | DriftAlert.Set(isAlert ? 1 : 0); |
| | 0 | 31 | | } |
| | | 32 | | } |