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(); }
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()); }