package com.common.service; import org.springframework.stereotype.Component; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.LongAdder; /** 积压采样热路径指标;表审计失败时仍可从接口和日志发现。 */ @Component public class BacklogSamplingMetrics { private final LongAdder degradedMessages = new LongAdder(); private final LongAdder alarmRowsSaved = new LongAdder(); private final LongAdder normalRowsSaved = new LongAdder(); private final LongAdder normalRowsDropped = new LongAdder(); private final LongAdder nonNormalRowsSaved = new LongAdder(); private final LongAdder nonNormalRowsDropped = new LongAdder(); private final LongAdder rawSaved = new LongAdder(); private final LongAdder rawDropped = new LongAdder(); private final LongAdder auditWriteFailures = new LongAdder(); private final LongAdder auditFallbackMessages = new LongAdder(); public void record(List deltas) { for (BacklogRetentionDelta delta : deltas) { degradedMessages.add(delta.getMessageTotal()); alarmRowsSaved.add(delta.getAlarmRowsSaved()); normalRowsSaved.add(delta.getNormalRowsSaved()); normalRowsDropped.add(delta.getNormalRowsDropped()); nonNormalRowsSaved.add(delta.getNonNormalRowsSaved()); nonNormalRowsDropped.add(delta.getNonNormalRowsDropped()); rawSaved.add(delta.getRawSaved()); rawDropped.add(delta.getRawDropped()); } } public void auditFailure(long affectedMessages) { auditWriteFailures.increment(); auditFallbackMessages.add(Math.max(0L, affectedMessages)); } public Map snapshot() { Map values = new LinkedHashMap<>(); values.put("degraded_messages_total", degradedMessages.sum()); values.put("alarm_rows_saved_total", alarmRowsSaved.sum()); values.put("normal_rows_saved_total", normalRowsSaved.sum()); values.put("normal_rows_dropped_total", normalRowsDropped.sum()); values.put("non_normal_rows_saved_total", nonNormalRowsSaved.sum()); values.put("non_normal_rows_dropped_total", nonNormalRowsDropped.sum()); values.put("raw_saved_total", rawSaved.sum()); values.put("raw_dropped_total", rawDropped.sum()); values.put("audit_write_failures_total", auditWriteFailures.sum()); values.put("audit_fallback_messages_total", auditFallbackMessages.sum()); return values; } }