- gRPC client-server metrics collection - PeriodicTimer-based 5-second sampling - Delta encoding with configurable thresholds - Queue/retry mechanism for resilience - ProcessId tracking for duplicate detection - Server-side state reconstruction - Native AOT compilation support - Docker/Podman containerization - PostgreSQL + TimescaleDB persistence layer
33 lines
779 B
C#
33 lines
779 B
C#
using System.Collections.Concurrent;
|
|
|
|
namespace JMonAgent;
|
|
|
|
public class MetricsQueue
|
|
{
|
|
private readonly ConcurrentQueue<JMon.Protos.DeltaMetrics> _queue = new();
|
|
private readonly ILogger<MetricsQueue> _logger;
|
|
|
|
public MetricsQueue(ILogger<MetricsQueue> logger)
|
|
{
|
|
_logger = logger;
|
|
}
|
|
|
|
public void Enqueue(JMon.Protos.DeltaMetrics metrics)
|
|
{
|
|
_queue.Enqueue(metrics);
|
|
_logger.LogWarning("Metrics queued (total: {count})", _queue.Count);
|
|
}
|
|
|
|
public List<JMon.Protos.DeltaMetrics> DequeueAll()
|
|
{
|
|
var items = new List<JMon.Protos.DeltaMetrics>();
|
|
while (_queue.TryDequeue(out var item))
|
|
{
|
|
items.Add(item);
|
|
}
|
|
return items;
|
|
}
|
|
|
|
public int Count => _queue.Count;
|
|
}
|