Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/11/12 15:07:54 (12 years ago)
Author:
ascheibe
Message:

#1994 added a dao method which loads lightweight tasks instead of tasks. Therefore the task datas are not loaded which reduces memory consumption and improves performance when

  • downloading tasks
  • refresh automatically is checked in the Hive Job Manager
  • loading the Hive Status page.

The Hive Status page now shows which users are currently calculating how many tasks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs

    r7916 r9022  
    4949    }
    5050
     51    public IEnumerable<DT.LightweightTask> GetLightweightTasksForJob(Guid jobId) {
     52      List<DT.LightweightTask> tasks = new List<DT.LightweightTask>();
     53
     54      using (var db = CreateContext()) {
     55        var tasksQuery = from task in db.Tasks
     56                         where task.JobId == jobId
     57                         select new { task.TaskId, task.ExecutionTimeMs, task.ParentTaskId, task.StateLogs, task.State, task.Command };
     58
     59        var taskDatasQuery = from task in db.Tasks
     60                             where task.JobId == jobId && task.JobData != null
     61                             select new { task.TaskId, task.JobData.LastUpdate };
     62
     63        foreach (var task in tasksQuery) {
     64          DT.LightweightTask t = new DT.LightweightTask();
     65          t.Id = task.TaskId;
     66          t.ExecutionTime = TimeSpan.FromMilliseconds(task.ExecutionTimeMs);
     67          t.ParentTaskId = task.ParentTaskId;
     68          t.StateLog = task.StateLogs == null ? new List<DT.StateLog>() : task.StateLogs.Select(x => DataTransfer.Convert.ToDto(x)).OrderBy(x => x.DateTime).ToList();
     69          t.State = DataTransfer.Convert.ToDto(task.State);
     70          t.Command = DataTransfer.Convert.ToDto(task.Command);
     71          t.LastTaskDataUpdate = taskDatasQuery.Where(x => x.TaskId == task.TaskId).Count() > 0 ? taskDatasQuery.Select(x => x.LastUpdate).First() : DateTime.MinValue;
     72          tasks.Add(t);
     73        }
     74      }
     75      return tasks;
     76    }
     77
     78    public IEnumerable<DT.LightweightTask> GetLightweightTasks(Expression<Func<Task, bool>> predicate) {
     79      List<DT.LightweightTask> tasks = new List<DT.LightweightTask>();
     80
     81      using (var db = CreateContext()) {
     82        var tasksQuery = db.Tasks.Where(predicate).Select(task => new { task.TaskId, task.ExecutionTimeMs, task.ParentTaskId, task.StateLogs, task.State, task.Command });
     83        var taskDatasQuery = db.Tasks.Where(predicate).Where(task => task.JobData != null).Select(task => new { task.TaskId, task.JobData.LastUpdate });
     84
     85        foreach (var task in tasksQuery) {
     86          DT.LightweightTask t = new DT.LightweightTask();
     87          t.Id = task.TaskId;
     88          t.ExecutionTime = TimeSpan.FromMilliseconds(task.ExecutionTimeMs);
     89          t.ParentTaskId = task.ParentTaskId;
     90          t.StateLog = task.StateLogs == null ? new List<DT.StateLog>() : task.StateLogs.Select(x => DataTransfer.Convert.ToDto(x)).OrderBy(x => x.DateTime).ToList();
     91          t.State = DataTransfer.Convert.ToDto(task.State);
     92          t.Command = DataTransfer.Convert.ToDto(task.Command);
     93          t.LastTaskDataUpdate = taskDatasQuery.Where(x => x.TaskId == task.TaskId).Count() > 0 ? taskDatasQuery.Select(x => x.LastUpdate).First() : DateTime.MinValue;
     94          tasks.Add(t);
     95        }
     96      }
     97      return tasks;
     98    }
     99
    51100    public Guid AddTask(DT.Task dto) {
    52101      using (var db = CreateContext()) {
     
    780829    }
    781830
     831    public Dictionary<Guid, int> GetWaitingTasksByUser() {
     832      using (var db = CreateContext()) {
     833        var waitingTasksByUser = from task in db.Tasks
     834                                 where task.State == TaskState.Waiting
     835                                 group task by task.Job.OwnerUserId into g
     836                                 select new { UserId = g.Key, UsedCores = g.Count() };
     837        return waitingTasksByUser.ToDictionary(x => x.UserId, x => x.UsedCores);
     838      }
     839    }
     840
     841    public Dictionary<Guid, int> GetCalculatingTasksByUser() {
     842      using (var db = CreateContext()) {
     843        var calculatingTasksByUser = from task in db.Tasks
     844                              where task.State == TaskState.Calculating
     845                              group task by task.Job.OwnerUserId into g
     846                              select new { UserId = g.Key, UsedCores = g.Count() };
     847        return calculatingTasksByUser.ToDictionary(x => x.UserId, x => x.UsedCores);
     848      }
     849    }
     850
    782851    public List<DT.UserStatistics> GetUserStatistics() {
    783852      using (var db = CreateContext()) {
Note: See TracChangeset for help on using the changeset viewer.