Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/26/18 15:12:14 (6 years ago)
Author:
jzenisek
Message:

#2839

  • added DimProject and FactProjectInfo entities to statistics generation
  • implemented tracking for projects
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HiveProjectManagement/HeuristicLab.Services.Hive/3.3/HiveStatisticsGenerator.cs

    r15641 r15659  
    3737    public void GenerateStatistics() {
    3838      using (var pm = new PersistenceManager()) {
     39
     40        pm.UseTransaction(() => {
     41          UpdateDimProjectTable(pm);
     42        });
     43
    3944        pm.UseTransaction(() => {
    4045          UpdateDimUserTable(pm);
     46         
    4147          UpdateDimJobTable(pm);
    4248          UpdateDimClientsTable(pm);
     
    5359          pm.UseTransaction(() => {
    5460            UpdateFactClientInfoTable(time, pm);
     61            UpdateFactProjectInfoTable(time, pm); // in progress
    5562            pm.SubmitChanges();
    5663          });
     
    111118    }
    112119
     120    private void UpdateDimProjectTable(PersistenceManager pm) {
     121      var projectDao = pm.ProjectDao;
     122      var dimProjectDao = pm.DimProjectDao;
     123
     124      var projects = projectDao.GetAll().ToList();
     125      var dimProjects = dimProjectDao.GetAllOnlineProjects().ToList();
     126
     127      var onlineProjects = dimProjects.Where(x => projects.Select(y => y.ProjectId).Contains(x.ProjectId));
     128      var addedProjects = projects.Where(x => !dimProjects.Select(y => y.ProjectId).Contains(x.ProjectId));
     129      var removedProjects = dimProjects.Where(x => !projects.Select(y => y.ProjectId).Contains(x.ProjectId));
     130
     131      // set expiration time of removed projects
     132      foreach (var p in removedProjects) {
     133        p.DateExpired = DateTime.Now;
     134      }
     135
     136      // add new projects
     137      dimProjectDao.Save(addedProjects.Select(x => new DimProject {
     138        ProjectId = x.ProjectId,
     139        ParentProjectId = x.ParentProjectId,
     140        Name = x.Name,
     141        Description = x.Description,
     142        OwnerUserId = x.OwnerUserId,
     143        StartDate = x.StartDate,
     144        EndDate = x.EndDate,
     145        DateCreated = x.DateCreated,
     146        DateExpired = null
     147      }));
     148
     149      // if a project's parent has changed expire entry in DimProject and create a new entry
     150      // else perform "normal" update
     151      foreach (var dimP in onlineProjects) {
     152        var p = projects.Where(x => x.ProjectId == dimP.ProjectId).SingleOrDefault();
     153        if (p != null) {
     154          if (dimP.ParentProjectId != p.ParentProjectId) {
     155            dimP.DateExpired = DateTime.Now;
     156            dimProjectDao.Save(new DimProject {
     157              ProjectId = p.ProjectId,
     158              ParentProjectId = p.ParentProjectId,
     159              Name = p.Name,
     160              Description = p.Description,
     161              OwnerUserId = p.OwnerUserId,
     162              StartDate = p.StartDate,
     163              EndDate = p.EndDate,
     164              DateCreated = p.DateCreated,
     165              DateExpired = null
     166            });
     167          } else {
     168            dimP.Name = p.Name;
     169            dimP.Description = p.Description;
     170            dimP.OwnerUserId = p.OwnerUserId;
     171            dimP.StartDate = p.StartDate;
     172            dimP.EndDate = p.EndDate;
     173          }
     174        }
     175      }
     176    }
     177
    113178    private void UpdateDimJobTable(PersistenceManager pm) {
     179      var dimProjectDao = pm.DimProjectDao;
    114180      var dimJobDao = pm.DimJobDao;
    115181      var jobDao = pm.JobDao;
     
    123189          JobName = x.Name ?? string.Empty,
    124190          DateCreated = x.DateCreated,
     191          ProjectId = dimProjectDao.GetLastValidIdByProjectId(x.ProjectId),
    125192          TotalTasks = taskDao.GetAll().Count(y => y.JobId == x.JobId)
    126193        })
     
    132199        UserName = GetUserName(x.UserId),
    133200        DateCreated = x.DateCreated,
     201        ProjectId = x.ProjectId,
    134202        TotalTasks = x.TotalTasks,
    135203        CompletedTasks = 0,
     
    139207
    140208    private void UpdateExistingDimJobs(PersistenceManager pm) {
     209      var dimProjectDao = pm.DimProjectDao;
    141210      var jobDao = pm.JobDao;
    142211      var dimJobDao = pm.DimJobDao;
     
    156225          }
    157226        }
     227        var job = jobDao.GetById(dimJob.JobId);
    158228        if (totalTasks == completedTasks) {
    159229          var completeDate = factTaskDao.GetLastCompletedTaskFromJob(dimJob.JobId);
    160230          if (completeDate == null) {
    161             if (jobDao.GetById(dimJob.JobId) == null) {
     231            if (job == null) {
    162232              completeDate = DateTime.Now;
    163233            }
     
    165235          dimJob.DateCompleted = completeDate;
    166236        }
     237        if(job != null) {
     238          dimJob.JobName = job.Name;
     239          dimJob.ProjectId = dimProjectDao.GetLastValidIdByProjectId(job.ProjectId);
     240        }
     241
    167242        dimJob.TotalTasks = totalTasks;
    168243        dimJob.CompletedTasks = completedTasks;
     
    178253    }
    179254
     255    // (1) for new slaves (not yet reported in Table DimClients) ...
     256    // and modified slaves (name or parent resource changed) a new DimClient-entry is created
     257    // (2) for already reported removed and modifid clients the expiration date is set
    180258    private void UpdateDimClientsTable(PersistenceManager pm) {
    181259      var dimClientDao = pm.DimClientDao;
     
    274352    }
    275353
     354    private void UpdateFactProjectInfoTable(DimTime newTime, PersistenceManager pm) {
     355      // TODO
     356    }
     357
    276358    private void UpdateTaskFactsTable(PersistenceManager pm) {
    277359      var factTaskDao = pm.FactTaskDao;
Note: See TracChangeset for help on using the changeset viewer.