Beispiel #1
0
        public DT.Status GetStatus()
        {
            var pm                = PersistenceManager;
            var slaveDao          = pm.SlaveDao;
            var onlineSlaves      = pm.UseTransaction(() => slaveDao.GetOnlineSlaves().ToList());
            var activeSlaves      = onlineSlaves.Where(s => s.IsAllowedToCalculate).ToList();
            var calculatingSlaves = activeSlaves.Where(s => s.SlaveState == SlaveState.Calculating).ToList();
            int totalCores        = onlineSlaves.Sum(s => s.Cores ?? 0);
            int totalMemory       = onlineSlaves.Sum(s => s.Memory ?? 0);

            return(new DT.Status {
                CoreStatus = new DT.CoreStatus {
                    TotalCores = totalCores,
                    UsedCores = totalCores - onlineSlaves.Sum(s => s.FreeCores ?? 0),
                    ActiveCores = activeSlaves.Sum(s => s.Cores ?? 0),
                    CalculatingCores = calculatingSlaves.Sum(s => s.Cores ?? 0) - calculatingSlaves.Sum(s => s.FreeCores ?? 0)
                },
                CpuUtilizationStatus = new DT.CpuUtilizationStatus {
                    TotalCpuUtilization = onlineSlaves.Any()
                                ? Math.Round(onlineSlaves.Average(s => s.CpuUtilization), 2)
                                : 0.0,
                    ActiveCpuUtilization = activeSlaves.Any()
                                 ? Math.Round(activeSlaves.Average(s => s.CpuUtilization), 2)
                                 : 0.0,
                    CalculatingCpuUtilization = calculatingSlaves.Any()
                                      ? Math.Round(calculatingSlaves.Average(s => s.CpuUtilization), 2)
                                      : 0.0
                },
                MemoryStatus = new DT.MemoryStatus {
                    TotalMemory = totalMemory,
                    UsedMemory = totalMemory - onlineSlaves.Sum(s => s.FreeMemory ?? 0),
                    ActiveMemory = activeSlaves.Sum(s => s.Memory ?? 0),
                    CalculatingMemory = calculatingSlaves.Sum(s => s.Memory ?? 0) - calculatingSlaves.Sum(s => s.FreeMemory ?? 0)
                },
                TimeStatus = GetTimeStatus(pm),
                TasksStatus = GetTaskStatus(pm),
                SlavesStatus = onlineSlaves.Select(x => new DT.SlaveStatus {
                    Slave = new DT.Slave {
                        Id = x.ResourceId.ToString(),
                        Name = x.Name
                    },
                    CpuUtilization = x.CpuUtilization,
                    Cores = x.Cores ?? 0,
                    FreeCores = x.FreeCores ?? 0,
                    Memory = x.Memory ?? 0,
                    FreeMemory = x.FreeMemory ?? 0,
                    IsAllowedToCalculate = x.IsAllowedToCalculate,
                    State = x.SlaveState.ToString()
                }).OrderBy(x => x.Slave.Name),
                Timestamp = JavascriptUtils.ToTimestamp(DateTime.Now)
            });
        }
Beispiel #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());
        }