Changeset 16208 for trunk/HeuristicLab.Clients.Hive/3.3
- Timestamp:
- 10/03/18 07:18:26 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/HeuristicLab.Clients.Hive/3.3/HiveAdminClient.cs
r16202 r16208 71 71 } 72 72 73 private Dictionary<Guid, HiveItemCollection< Job>> jobs;74 public Dictionary<Guid, HiveItemCollection< Job>> Jobs {73 private Dictionary<Guid, HiveItemCollection<RefreshableJob>> jobs; 74 public Dictionary<Guid, HiveItemCollection<RefreshableJob>> Jobs { 75 75 get { return jobs; } 76 76 set { … … 144 144 projects = new ItemList<Project>(); 145 145 projectResourceAssignments = new ItemList<AssignedProjectResource>(); 146 jobs = new Dictionary<Guid, HiveItemCollection< Job>>();146 jobs = new Dictionary<Guid, HiveItemCollection<RefreshableJob>>(); 147 147 projectNames = new Dictionary<Guid, string>(); 148 148 resourceNames = new Dictionary<Guid, string>(); … … 161 161 service.GetAssignedResourcesForProjectsAdministration(projectIds) 162 162 .ForEach(a => projectResourceAssignments.Add(a)); 163 projectIds.ForEach(p => jobs.Add(p, new HiveItemCollection< Job>()));163 projectIds.ForEach(p => jobs.Add(p, new HiveItemCollection<RefreshableJob>())); 164 164 var unsortedJobs = service.GetJobsByProjectIds(projectIds) 165 165 .OrderBy(x => x.DateCreated).ToList(); 166 166 167 unsortedJobs.Where(j => j.State == JobState.DeletionPending).ToList().ForEach(j => jobs[j.ProjectId].Add(j)); 168 unsortedJobs.Where(j => j.State == JobState.StatisticsPending).ToList().ForEach(j => jobs[j.ProjectId].Add(j)); 169 unsortedJobs.Where(j => j.State == JobState.Online).ToList().ForEach(j => jobs[j.ProjectId].Add(j)); 167 unsortedJobs.Where(j => j.State == JobState.DeletionPending).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j))); 168 unsortedJobs.Where(j => j.State == JobState.StatisticsPending).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j))); 169 unsortedJobs.Where(j => j.State == JobState.Online).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j))); 170 171 foreach (var job in jobs.SelectMany(x => x.Value)) 172 LoadLightweightJob(job); 170 173 171 174 projectNames = service.GetProjectNames(); … … 307 310 public void RefreshJobs() { 308 311 var projectIds = new List<Guid>(); 309 jobs = new Dictionary<Guid, HiveItemCollection< Job>>();312 jobs = new Dictionary<Guid, HiveItemCollection<RefreshableJob>>(); 310 313 311 314 HiveServiceLocator.Instance.CallHiveService(service => { 312 315 service.GetProjectsForAdministration().ForEach(p => projectIds.Add(p.Id)); 313 316 if(projectIds.Any()) { 314 projectIds.ForEach(p => jobs.Add(p, new HiveItemCollection< Job>()));317 projectIds.ForEach(p => jobs.Add(p, new HiveItemCollection<RefreshableJob>())); 315 318 var unsortedJobs = service.GetJobsByProjectIds(projectIds) 316 319 .OrderBy(x => x.DateCreated).ToList(); 317 unsortedJobs.Where(j => j.State == JobState.DeletionPending).ToList().ForEach(j => jobs[j.ProjectId].Add(j)); 318 unsortedJobs.Where(j => j.State == JobState.StatisticsPending).ToList().ForEach(j => jobs[j.ProjectId].Add(j)); 319 unsortedJobs.Where(j => j.State == JobState.Online).ToList().ForEach(j => jobs[j.ProjectId].Add(j)); 320 321 unsortedJobs.Where(j => j.State == JobState.DeletionPending).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j))); 322 unsortedJobs.Where(j => j.State == JobState.StatisticsPending).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j))); 323 unsortedJobs.Where(j => j.State == JobState.Online).ToList().ForEach(j => jobs[j.ProjectId].Add(new RefreshableJob(j))); 324 325 foreach(var job in jobs.SelectMany(x => x.Value)) 326 LoadLightweightJob(job); 320 327 } 321 328 }); 329 } 330 331 public static void LoadLightweightJob(RefreshableJob refreshableJob) { 332 var job = refreshableJob.Job; 333 var tasks = HiveServiceLocator.Instance.CallHiveService(s => s.GetLightweightJobTasksWithoutStateLog(job.Id)); 334 if (tasks != null && tasks.Count > 0 && tasks.All(x => x.Id != Guid.Empty)) { 335 if (tasks.All(x => 336 x.State == TaskState.Finished 337 || x.State == TaskState.Aborted 338 || x.State == TaskState.Failed)) { 339 refreshableJob.ExecutionState = ExecutionState.Stopped; 340 refreshableJob.RefreshAutomatically = false; 341 } else if ( 342 tasks 343 .Where(x => x.ParentTaskId != null) 344 .All(x => 345 x.State != TaskState.Waiting 346 || x.State != TaskState.Transferring 347 || x.State != TaskState.Calculating) 348 && tasks 349 .Where(x => x.ParentTaskId != null) 350 .Any(x => x.State == TaskState.Paused)) { 351 refreshableJob.ExecutionState = ExecutionState.Paused; 352 refreshableJob.RefreshAutomatically = false; 353 } else if (tasks.Any(x => x.State == TaskState.Calculating 354 || x.State == TaskState.Transferring 355 || x.State == TaskState.Waiting)) { 356 refreshableJob.ExecutionState = ExecutionState.Started; 357 } 358 } 322 359 } 323 360 … … 327 364 var unsortedJobs = jobs.Values.ElementAt(i); 328 365 329 var sortedJobs = new HiveItemCollection< Job>();330 sortedJobs.AddRange(unsortedJobs.Where(j => j. State == JobState.DeletionPending));331 sortedJobs.AddRange(unsortedJobs.Where(j => j. State == JobState.StatisticsPending));332 sortedJobs.AddRange(unsortedJobs.Where(j => j. State == JobState.Online));366 var sortedJobs = new HiveItemCollection<RefreshableJob>(); 367 sortedJobs.AddRange(unsortedJobs.Where(j => j.Job.State == JobState.DeletionPending)); 368 sortedJobs.AddRange(unsortedJobs.Where(j => j.Job.State == JobState.StatisticsPending)); 369 sortedJobs.AddRange(unsortedJobs.Where(j => j.Job.State == JobState.Online)); 333 370 334 371 jobs[projectId] = sortedJobs; … … 405 442 } 406 443 407 public static void DeleteJobs(List<Guid> jobIds) { 408 444 public static void RemoveJobs(List<Guid> jobIds) { 409 445 HiveServiceLocator.Instance.CallHiveService((s) => s.UpdateJobStates(jobIds, JobState.StatisticsPending)); 446 } 447 #endregion 448 449 #region Job Handling 450 451 public static void ResumeJob(RefreshableJob refreshableJob) { 452 HiveServiceLocator.Instance.CallHiveService(service => { 453 foreach (HiveTask task in refreshableJob.GetAllHiveTasks()) { 454 if (task.Task.State == TaskState.Paused) { 455 service.RestartTask(task.Task.Id); 456 } 457 } 458 }); 459 refreshableJob.ExecutionState = ExecutionState.Started; 460 } 461 462 public static void PauseJob(RefreshableJob refreshableJob) { 463 HiveServiceLocator.Instance.CallHiveService(service => { 464 foreach (HiveTask task in refreshableJob.GetAllHiveTasks()) { 465 if (task.Task.State != TaskState.Finished && task.Task.State != TaskState.Aborted && task.Task.State != TaskState.Failed) 466 service.PauseTask(task.Task.Id); 467 } 468 }); 469 refreshableJob.ExecutionState = ExecutionState.Paused; 470 } 471 472 public static void StopJob(RefreshableJob refreshableJob) { 473 HiveServiceLocator.Instance.CallHiveService(service => { 474 foreach (HiveTask task in refreshableJob.GetAllHiveTasks()) { 475 if (task.Task.State != TaskState.Finished && task.Task.State != TaskState.Aborted && task.Task.State != TaskState.Failed) 476 service.StopTask(task.Task.Id); 477 } 478 }); 479 refreshableJob.ExecutionState = ExecutionState.Stopped; 480 } 481 482 public static void RemoveJob(RefreshableJob refreshableJob) { 483 HiveServiceLocator.Instance.CallHiveService((s) => { 484 s.UpdateJobState(refreshableJob.Id, JobState.StatisticsPending); 485 }); 410 486 } 411 487 #endregion
Note: See TracChangeset
for help on using the changeset viewer.