Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/25/15 18:34:40 (9 years ago)
Author:
dglaser
Message:

#2388:

HeuristicLab.Services.Hive.DataAccess-3.3:

  • updated daos
  • changed statistics database schema
  • updated HiveStatisticsGenerator

HeuristicLab.Services.WebApp.Statistics-3.3:

  • added jobs, client and user page
Location:
branches/HiveStatistics/sources
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/HiveStatistics/sources

  • branches/HiveStatistics/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs

    r12469 r12516  
    317317      exp.JobCount = jobs.Count();
    318318      exp.CalculatingCount = jobs.Count(j => j.State == TaskState.Calculating);
    319       exp.FinishedCount = jobs.Count(j => j.State == TaskState.Finished);
     319      exp.FinishedCount = jobs.Count(j => j.State == TaskState.Finished || j.State == TaskState.Aborted || j.State == TaskState.Failed);
    320320      return exp;
    321321    }
  • branches/HiveStatistics/sources/HeuristicLab.Services.Hive/3.3/HiveStatisticsGenerator.cs

    r12484 r12516  
    3232    private const string UnknownUserName = "Unknown";
    3333    private static readonly TimeSpan SmallestTimeSpan = new TimeSpan(0, 5, 0);
     34    private static readonly TaskState[] CompletedStates = { TaskState.Finished, TaskState.Aborted, TaskState.Failed };
    3435
    3536    public void GenerateStatistics() {
     
    4243        });
    4344
     45        DimTime time = null;
    4446        pm.UseTransaction(() => {
    45           var newTime = UpdateDimTimeTable(pm);
    46           if (newTime != null) {
     47          time = UpdateDimTimeTable(pm);
     48          pm.SubmitChanges();
     49        });
     50
     51        if (time != null) {
     52          pm.UseTransaction(() => {
     53            UpdateFactClientInfoTable(time, pm);
    4754            pm.SubmitChanges();
    48             UpdateFactClientInfoTable(newTime, pm);
    49             UpdateTaskFactsTable(newTime, pm);
     55          });
     56
     57          pm.UseTransaction(() => {
     58            UpdateTaskFactsTable(time, pm);
    5059            try {
     60              pm.SubmitChanges();
     61              UpdateExistingDimJobs(pm);
    5162              pm.SubmitChanges();
    5263            }
     
    5869                          Exception Details: {0}", e));
    5970            }
    60           }
    61         });
     71          });
     72        }
    6273      }
    6374    }
     
    97108      var dimJobDao = pm.DimJobDao;
    98109      var jobDao = pm.JobDao;
     110      var taskDao = pm.TaskDao;
    99111      var dimJobIds = dimJobDao.GetAll().Select(x => x.JobId);
    100112      var newJobs = jobDao.GetAll()
     
    104116          UserId = x.OwnerUserId,
    105117          JobName = x.Name ?? string.Empty,
    106           DateCreated = x.DateCreated
     118          DateCreated = x.DateCreated,
     119          TotalTasks = taskDao.GetAll().Count(y => y.JobId == x.JobId)
    107120        })
    108121        .ToList();
     
    112125        UserId = x.UserId,
    113126        UserName = GetUserName(x.UserId),
    114         DateCreated = x.DateCreated
     127        DateCreated = x.DateCreated,
     128        TotalTasks = x.TotalTasks,
     129        CompletedTasks = 0,
     130        DateCompleted = null
    115131      }));
     132    }
     133
     134    private void UpdateExistingDimJobs(PersistenceManager pm) {
     135      var dimJobDao = pm.DimJobDao;
     136      var factTaskDao = pm.FactTaskDao;
     137      foreach (var dimJob in dimJobDao.GetNotCompletedJobs()) {
     138        var taskStates = factTaskDao.GetByJobId(dimJob.JobId)
     139            .GroupBy(x => x.TaskState)
     140            .Select(x => new {
     141              State = x.Key,
     142              Count = x.Count()
     143            }).ToList();
     144        int totalTasks = 0, completedTasks = 0;
     145        foreach (var state in taskStates) {
     146          totalTasks += state.Count;
     147          if (CompletedStates.Contains(state.State)) {
     148            completedTasks += state.Count;
     149          }
     150        }
     151        if (totalTasks == completedTasks) {
     152          dimJob.DateCompleted = factTaskDao.GetLastCompletedTaskFromJob(dimJob.JobId);
     153        }
     154        dimJob.TotalTasks = totalTasks;
     155        dimJob.CompletedTasks = completedTasks;
     156      }
    116157    }
    117158
     
    120161      var slaveDao = pm.SlaveDao;
    121162      var slaves = slaveDao.GetAll();
    122       var recentlyAddedClients = dimClientDao.GetRecentlyAddedClients();
     163      var recentlyAddedClients = dimClientDao.GetActiveClients();
    123164      var slaveIds = slaves.Select(x => x.ResourceId);
    124165
     
    136177          ClientId = client.Id
    137178        };
    138       var clientIds = dimClientDao.GetAll().Select(x => x.ResourceId);
     179      var clientIds = dimClientDao.GetActiveClients().Select(x => x.ResourceId);
    139180      var modifiedClientIds = modifiedClients.Select(x => x.SlaveId);
    140181      var newClients = slaves
     
    145186          x.Name,
    146187          ResourceGroupId = x.ParentResourceId,
    147           ResourceGroup2Id = x.ParentResource.ParentResourceId
     188          GroupName = x.ParentResource.Name,
     189          ResourceGroup2Id = x.ParentResource.ParentResourceId,
     190          GroupName2 = x.ParentResource.ParentResource.Name
    148191        })
    149192        .ToList();
     
    156199        ExpirationTime = null,
    157200        ResourceGroupId = x.ResourceGroupId,
    158         ResourceGroup2Id = x.ResourceGroup2Id
     201        GroupName = x.GroupName,
     202        ResourceGroup2Id = x.ResourceGroup2Id,
     203        GroupName2 = x.GroupName2
    159204      }));
    160205    }
     
    167212      var newRawFactInfos =
    168213        from s in slaveDao.GetAll()
    169         join c in dimClientDao.GetRecentlyAddedClients() on s.ResourceId equals c.ResourceId
     214        join c in dimClientDao.GetActiveClients() on s.ResourceId equals c.ResourceId
    170215        join lcf in factClientInfoDao.GetLastUpdateTimestamps() on c.ResourceId equals lcf.ResourceId into joinCf
    171216        from cf in joinCf.DefaultIfEmpty()
     
    186231        from x in newRawFactInfos.ToList()
    187232        let duration = x.LastFactTimestamp != null
    188                        ? (newTime.Time - (DateTime)x.LastFactTimestamp).TotalMinutes
    189                        : SmallestTimeSpan.TotalMinutes
     233                       ? (int)(newTime.Time - (DateTime)x.LastFactTimestamp).TotalSeconds
     234                       : (int)SmallestTimeSpan.TotalSeconds
    190235        select new FactClientInfo {
    191236          ClientId = x.ClientId,
     
    193238          UserId = x.UserId,
    194239          NumUsedCores = x.TotalCores - x.FreeCores,
    195           NumTotalCores = x.TotalMemory,
     240          NumTotalCores = x.TotalCores,
    196241          UsedMemory = x.TotalMemory - x.FreeMemory,
    197242          TotalMemory = x.TotalMemory,
     
    199244          SlaveState = x.SlaveState,
    200245          TotalTimeIdle = x.SlaveState == SlaveState.Idle && x.IsAllowedToCalculate ? duration : 0.0,
    201           TotalTimeCalculating = x.SlaveState == SlaveState.Calculating ? duration : 0.0,
    202246          TotalTimeUnavailable = x.SlaveState == SlaveState.Idle && !x.IsAllowedToCalculate ? duration : 0.0,
    203247          TotalTimeOffline = x.SlaveState == SlaveState.Offline ? duration : 0.0
     
    226270        join lastFactTask in notFinishedFactTasks on task.TaskId equals lastFactTask.TaskId into lastFactPerTask
    227271        from lastFact in lastFactPerTask.DefaultIfEmpty()
    228         join client in dimClientDao.GetRecentlyAddedClients() on lastSlaveId equals client.ResourceId into clientsPerSlaveId
     272        join client in dimClientDao.GetActiveClients() on lastSlaveId equals client.ResourceId into clientsPerSlaveId
    229273        from client in clientsPerSlaveId.DefaultIfEmpty()
    230274        select new {
Note: See TracChangeset for help on using the changeset viewer.