Esempio n. 1
0
 public IEnumerable<DT.Status> GetStatusHistory(DateTime start, DateTime end) {
   TimeSpan ts = end - start;
   int increment = 1;
   double totalMinutes = ts.TotalMinutes;
   while (totalMinutes > 5761) {
     totalMinutes -= 5761;
     increment += 5;
   }
   var pm = PersistenceManager;
   var factClientInfoDao = pm.FactClientInfoDao;
   var clientInfos = pm.UseTransaction(() => {
     return factClientInfoDao.GetAll()
       .Where(s => s.Time >= start
                   && s.Time <= end
                   && s.SlaveState != SlaveState.Offline)
       .GroupBy(s => s.Time)
       .Select(x => new {
         Timestamp = x.Key,
         TotalCores = x.Sum(y => y.NumTotalCores),
         UsedCores = x.Sum(y => y.NumUsedCores),
         TotalMemory = x.Sum(y => y.TotalMemory),
         UsedMemory = x.Sum(y => y.UsedMemory),
         CpuUtilization = x.Where(y => y.IsAllowedToCalculate).Average(y => y.CpuUtilization)
       })
       .ToList();
   });
   var statusList = new List<DT.Status>();
   var e = clientInfos.GetEnumerator();
   do {
     var status = new DT.Status {
       CoreStatus = new DT.CoreStatus(),
       CpuUtilizationStatus = new DT.CpuUtilizationStatus(),
       MemoryStatus = new DT.MemoryStatus()
     };
     int i = 0;
     DateTime lastTimestamp = DateTime.Now;
     while (e.MoveNext()) {
       var clientInfo = e.Current;
       status.CoreStatus.TotalCores += clientInfo.TotalCores;
       status.CoreStatus.UsedCores += clientInfo.UsedCores;
       status.MemoryStatus.TotalMemory += clientInfo.TotalMemory;
       status.MemoryStatus.UsedMemory += clientInfo.UsedMemory;
       status.CpuUtilizationStatus.TotalCpuUtilization += clientInfo.CpuUtilization;
       lastTimestamp = clientInfo.Timestamp;
       i++;
       if (i >= increment)
         break;
     }
     if (i <= 0) continue;
     status.Timestamp = JavascriptUtils.ToTimestamp(lastTimestamp);
     status.CoreStatus.TotalCores /= i;
     status.CoreStatus.UsedCores /= i;
     status.MemoryStatus.TotalMemory /= i;
     status.MemoryStatus.UsedMemory /= i;
     status.CpuUtilizationStatus.TotalCpuUtilization /= i;
     statusList.Add(status);
   } while (e.Current != null);
   return statusList.OrderBy(x => x.Timestamp).ToList();
 }
Esempio n. 2
0
        public IEnumerable <DT.Status> GetStatusHistory(DateTime start, DateTime end)
        {
            TimeSpan ts           = end - start;
            int      increment    = 1;
            double   totalMinutes = ts.TotalMinutes;

            while (totalMinutes > 5761)
            {
                totalMinutes -= 5761;
                increment    += 5;
            }
            var pm = PersistenceManager;
            var factClientInfoDao = pm.FactClientInfoDao;
            var clientInfos       = pm.UseTransaction(() => {
                return(factClientInfoDao.GetAll()
                       .Where(s => s.Time >= start &&
                              s.Time <= end &&
                              s.SlaveState != SlaveState.Offline)
                       .GroupBy(s => s.Time)
                       .Select(x => new {
                    Timestamp = x.Key,
                    TotalCores = x.Sum(y => y.NumTotalCores),
                    UsedCores = x.Sum(y => y.NumUsedCores),
                    TotalMemory = x.Sum(y => y.TotalMemory),
                    UsedMemory = x.Sum(y => y.UsedMemory),
                    CpuUtilization = x.Where(y => y.IsAllowedToCalculate).Average(y => y.CpuUtilization)
                })
                       .ToList());
            });
            var statusList = new List <DT.Status>();
            var e          = clientInfos.GetEnumerator();

            do
            {
                var status = new DT.Status {
                    CoreStatus           = new DT.CoreStatus(),
                    CpuUtilizationStatus = new DT.CpuUtilizationStatus(),
                    MemoryStatus         = new DT.MemoryStatus()
                };
                int      i             = 0;
                DateTime lastTimestamp = DateTime.Now;
                while (e.MoveNext())
                {
                    var clientInfo = e.Current;
                    status.CoreStatus.TotalCores    += clientInfo.TotalCores;
                    status.CoreStatus.UsedCores     += clientInfo.UsedCores;
                    status.MemoryStatus.TotalMemory += clientInfo.TotalMemory;
                    status.MemoryStatus.UsedMemory  += clientInfo.UsedMemory;
                    status.CpuUtilizationStatus.TotalCpuUtilization += clientInfo.CpuUtilization;
                    lastTimestamp = clientInfo.Timestamp;
                    i++;
                    if (i >= increment)
                    {
                        break;
                    }
                }
                if (i <= 0)
                {
                    continue;
                }
                status.Timestamp                 = JavascriptUtils.ToTimestamp(lastTimestamp);
                status.CoreStatus.TotalCores    /= i;
                status.CoreStatus.UsedCores     /= i;
                status.MemoryStatus.TotalMemory /= i;
                status.MemoryStatus.UsedMemory  /= i;
                status.CpuUtilizationStatus.TotalCpuUtilization /= i;
                statusList.Add(status);
            } while (e.Current != null);
            return(statusList.OrderBy(x => x.Timestamp).ToList());
        }