예제 #1
0
        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();
            }
        }
예제 #2
0
        public IHttpActionResult PostLoadMetrics(string serverName, LoadMetrics metrics)
        {
            if (metrics == null || string.IsNullOrWhiteSpace(serverName))
                return BadRequest();

            metricsCache.Add(metrics);

            return Created($"metrics/{serverName}/load/", metrics);
        }
예제 #3
0
 public LoadMetricsTests()
 {
     validMetrics = new LoadMetrics("server-1", 20.2, 54.8);
 }