using System.Diagnostics.Metrics; namespace StellaOps.Scanner.Queue; internal static class QueueMetrics { private const string TransportTagName = "transport"; private static readonly Meter Meter = new("StellaOps.Scanner.Queue"); private static readonly Counter EnqueuedCounter = Meter.CreateCounter("scanner_queue_enqueued_total"); private static readonly Counter DeduplicatedCounter = Meter.CreateCounter("scanner_queue_deduplicated_total"); private static readonly Counter AckCounter = Meter.CreateCounter("scanner_queue_ack_total"); private static readonly Counter RetryCounter = Meter.CreateCounter("scanner_queue_retry_total"); private static readonly Counter DeadLetterCounter = Meter.CreateCounter("scanner_queue_deadletter_total"); public static void RecordEnqueued(string transport) => EnqueuedCounter.Add(1, BuildTags(transport)); public static void RecordDeduplicated(string transport) => DeduplicatedCounter.Add(1, BuildTags(transport)); public static void RecordAck(string transport) => AckCounter.Add(1, BuildTags(transport)); public static void RecordRetry(string transport) => RetryCounter.Add(1, BuildTags(transport)); public static void RecordDeadLetter(string transport) => DeadLetterCounter.Add(1, BuildTags(transport)); private static KeyValuePair[] BuildTags(string transport) => new[] { new KeyValuePair(TransportTagName, transport) }; }