public void Add(LoadMetrics metrics) { ICollection<LoadMetrics> serverMetrics; cacheLock.EnterWriteLock(); try { if (metricsCache.ContainsKey(metrics.ServerName)) serverMetrics = metricsCache[metrics.ServerName]; else { serverMetrics = new List<LoadMetrics>(metricsCapacity); metricsCache.Add(metrics.ServerName, serverMetrics); } // TODO: revisit if we should sort items by creation date serverMetrics.Add(metrics); // this would be the area where we could evict metrics older than 24 hours to relieve memory pressure. // we could also create a design that uses a timer to enable background eviction. } finally { cacheLock.ExitWriteLock(); } }
public IHttpActionResult PostLoadMetrics(string serverName, LoadMetrics metrics) { if (metrics == null || string.IsNullOrWhiteSpace(serverName)) return BadRequest(); metricsCache.Add(metrics); return Created($"metrics/{serverName}/load/", metrics); }
public LoadMetricsTests() { validMetrics = new LoadMetrics("server-1", 20.2, 54.8); }