Ejemplo n.º 1
0
        public void GenerateStatistics()
        {
            using (var pm = new PersistenceManager()) {
                pm.UseTransaction(() => {
                    UpdateDimProjectTable(pm);
                    pm.SubmitChanges();
                });

                pm.UseTransaction(() => {
                    UpdateDimUserTable(pm);

                    UpdateDimJobTable(pm);
                    UpdateDimClientsTable(pm);
                    pm.SubmitChanges();
                });

                DimTime time = null;
                pm.UseTransaction(() => {
                    time = UpdateDimTimeTable(pm);
                    pm.SubmitChanges();
                });

                if (time != null)
                {
                    pm.UseTransaction(() => {
                        UpdateFactClientInfoTable(time, pm);
                        pm.SubmitChanges();
                        UpdateFactProjectInfoTable(time, pm);
                        pm.SubmitChanges();
                    });

                    pm.UseTransaction(() => {
                        try {
                            UpdateFactTaskTable(pm);
                            UpdateExistingDimJobs(pm);
                            FlagJobsForDeletion(pm);
                            pm.SubmitChanges();
                        }
                        catch (DuplicateKeyException e) {
                            var logger = LogFactory.GetLogger(typeof(HiveStatisticsGenerator).Namespace);
                            logger.Log(string.Format(
                                           @"Propable change from summertime to wintertime, resulting in overlapping times.
                          On wintertime to summertime change, slave timeouts and a fact gap will occur. 
                          Exception Details: {0}", e));
                        }
                    });
                }
            }
        }
Ejemplo n.º 2
0
        private DimTime UpdateDimTimeTable(PersistenceManager pm)
        {
            var dimTimeDao = pm.DimTimeDao;
            var now        = DateTime.Now;
            var timeEntry  = new DimTime {
                Time   = now,
                Minute = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0),
                Hour   = new DateTime(now.Year, now.Month, now.Day, now.Hour, 0, 0),
                Day    = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0),
                Month  = new DateTime(now.Year, now.Month, 1, 0, 0, 0),
                Year   = new DateTime(now.Year, 1, 1, 0, 0, 0)
            };

            return(dimTimeDao.Save(timeEntry));
        }
Ejemplo n.º 3
0
        private void UpdateFactClientInfoTable(DimTime newTime, PersistenceManager pm)
        {
            var factClientInfoDao = pm.FactClientInfoDao;
            var slaveDao          = pm.SlaveDao;
            var dimClientDao      = pm.DimClientDao;

            var newRawFactInfos =
                from s in slaveDao.GetAll()
                join c in dimClientDao.GetActiveClients() on s.ResourceId equals c.ResourceId
                join lcf in factClientInfoDao.GetLastUpdateTimestamps() on c.ResourceId equals lcf.ResourceId into joinCf
                from cf in joinCf.DefaultIfEmpty()
                select new {
                ClientId             = c.Id,
                UserId               = s.OwnerUserId ?? Guid.Empty,
                TotalCores           = s.Cores ?? 0,
                FreeCores            = s.FreeCores ?? 0,
                TotalMemory          = s.Memory ?? 0,
                FreeMemory           = s.FreeMemory ?? 0,
                CpuUtilization       = s.CpuUtilization,
                SlaveState           = s.SlaveState,
                IsAllowedToCalculate = s.IsAllowedToCalculate,
                LastFactTimestamp    = cf.Timestamp
            };

            factClientInfoDao.Save(
                from x in newRawFactInfos.ToList()
                let duration = x.LastFactTimestamp != null
                       ? (int)(newTime.Time - (DateTime)x.LastFactTimestamp).TotalSeconds
                       : (int)SmallestTimeSpan.TotalSeconds
                               select new FactClientInfo {
                ClientId             = x.ClientId,
                DimTime              = newTime,
                UserId               = x.UserId,
                NumUsedCores         = x.TotalCores - x.FreeCores,
                NumTotalCores        = x.TotalCores,
                UsedMemory           = x.TotalMemory - x.FreeMemory,
                TotalMemory          = x.TotalMemory,
                CpuUtilization       = Math.Round(x.CpuUtilization, 2),
                SlaveState           = x.SlaveState,
                IdleTime             = x.SlaveState == SlaveState.Idle && x.IsAllowedToCalculate ? duration : 0,
                UnavailableTime      = x.SlaveState == SlaveState.Idle && !x.IsAllowedToCalculate ? duration : 0,
                OfflineTime          = x.SlaveState == SlaveState.Offline ? duration : 0,
                IsAllowedToCalculate = x.IsAllowedToCalculate
            }
                );
        }
Ejemplo n.º 4
0
        private void UpdateFactProjectInfoTable(DimTime newTime, PersistenceManager pm)
        {
            var factProjectInfoDao = pm.FactProjectInfoDao;
            var dimProjectDao      = pm.DimProjectDao;
            var projectDao         = pm.ProjectDao;

            var projectAvailabilityStats = projectDao.GetAvailabilityStatsPerProject();
            var projectUsageStats        = projectDao.GetUsageStatsPerProject();
            var dimProjects = dimProjectDao.GetAllOnlineProjects().ToList();

            factProjectInfoDao.Save(
                from dimp in dimProjects
                let aStats = projectAvailabilityStats.Where(x => x.ProjectId == dimp.ProjectId).SingleOrDefault()
                             let uStats = projectUsageStats.Where(x => x.ProjectId == dimp.ProjectId).SingleOrDefault()
                                          select new FactProjectInfo {
                ProjectId     = dimp.Id,
                DimTime       = newTime,
                NumTotalCores = aStats != null ? aStats.Cores : 0,
                TotalMemory   = aStats != null ? aStats.Memory : 0,
                NumUsedCores  = uStats != null ? uStats.Cores : 0,
                UsedMemory    = uStats != null ? uStats.Memory : 0
            }
                );
        }