1 | using System;
|
---|
2 | using System.Collections.Generic;
|
---|
3 | using System.Linq;
|
---|
4 | using System.Web;
|
---|
5 | using System.Web.Mvc;
|
---|
6 | using HeuristicLab.Services.Hive.DataAccess;
|
---|
7 |
|
---|
8 | namespace HeuristicLab.Services.Hive.Statistics.Controllers {
|
---|
9 | public class ExceptionDataController : Controller {
|
---|
10 |
|
---|
11 | public JsonResult TaskExceptions(string userName, DateTime? start = null, DateTime? end = null, string jobId = null, string taskState = null, string slaveId = null)
|
---|
12 | {
|
---|
13 | using (var db = new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString)) {
|
---|
14 | TaskState? state = GetTaskState(taskState);
|
---|
15 | var data =
|
---|
16 | (from tasks in db.FactTasks
|
---|
17 | join jobs in db.DimJobs
|
---|
18 | on tasks.JobId equals jobs.JobId
|
---|
19 | where tasks.Exception != null &&
|
---|
20 | !tasks.Exception.Equals(string.Empty) &&
|
---|
21 | (string.IsNullOrEmpty(userName) || jobs.UserName == userName) &&
|
---|
22 | (!start.HasValue || tasks.StartTime >= start) &&
|
---|
23 | (!end.HasValue || tasks.EndTime < end) &&
|
---|
24 | (string.IsNullOrEmpty(jobId) || tasks.JobId.ToString() == jobId) &&
|
---|
25 | (string.IsNullOrEmpty(taskState) || tasks.TaskState == state) &&
|
---|
26 | (string.IsNullOrEmpty(slaveId) || tasks.LastClientId.ToString() == slaveId)
|
---|
27 | select new
|
---|
28 | {
|
---|
29 | TaskID = tasks.TaskId,
|
---|
30 | ErrorMessage = tasks.Exception,
|
---|
31 | StartDate = tasks.StartTime
|
---|
32 | }).OrderByDescending(s => s.StartDate).ToList();
|
---|
33 |
|
---|
34 | List<string> Task = new List<string>();
|
---|
35 | List<string> Error = new List<string>();
|
---|
36 | data.ForEach(t => Task.Add(t.TaskID.ToString()));
|
---|
37 | data.ForEach(e => Error.Add(e.ErrorMessage));
|
---|
38 |
|
---|
39 | return Json(new KeyValuePair<List<string>, List<string>>(Task, Error), JsonRequestBehavior.AllowGet);
|
---|
40 | }
|
---|
41 | }
|
---|
42 |
|
---|
43 | public JsonResult SlaveExceptions(string limit, DateTime? start = null, DateTime? end = null, string clientId = null) {
|
---|
44 | using (var db = new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString)) {
|
---|
45 | var data =
|
---|
46 | (from tasks in db.FactTasks
|
---|
47 | join jobs in db.DimJobs
|
---|
48 | on tasks.JobId equals jobs.JobId
|
---|
49 | join clients in db.DimClients
|
---|
50 | on tasks.LastClientId equals clients.Id
|
---|
51 | where tasks.Exception != null &&
|
---|
52 | !tasks.Exception.Equals(string.Empty) &&
|
---|
53 | (!start.HasValue || tasks.StartTime >= start) &&
|
---|
54 | (!end.HasValue || tasks.EndTime < end) &&
|
---|
55 | (string.IsNullOrEmpty(clientId) || tasks.LastClientId.ToString() == clientId)
|
---|
56 | select new {
|
---|
57 | TaskID = tasks.TaskId,
|
---|
58 | ErrorMessage = tasks.Exception,
|
---|
59 | ClientID = tasks.LastClientId,
|
---|
60 | ClientName = clients.Name,
|
---|
61 | UserName = jobs.UserName,
|
---|
62 | JobName = jobs.JobName,
|
---|
63 | StartDate = tasks.StartTime
|
---|
64 | }).OrderByDescending(s => s.StartDate).ToList();
|
---|
65 |
|
---|
66 | List<List<string>> results = new List<List<string>>();
|
---|
67 |
|
---|
68 | for (int i = 0; i < data.Count; i++) {
|
---|
69 | results.Add(
|
---|
70 | new List<string> { data[i].TaskID.ToString(), data[i].ErrorMessage, data[i].ClientID.ToString(), data[i].ClientName,
|
---|
71 | data[i].UserName, data[i].JobName, data[i].StartDate.ToString("dd/MM/yyyy HH:mm")
|
---|
72 | }
|
---|
73 | );
|
---|
74 | }
|
---|
75 | return Json(results, JsonRequestBehavior.AllowGet);
|
---|
76 | }
|
---|
77 | }
|
---|
78 |
|
---|
79 | private static TaskState? GetTaskState(string taskState) {
|
---|
80 | TaskState? state;
|
---|
81 | switch (taskState) {
|
---|
82 | case "Aborted":
|
---|
83 | state = TaskState.Aborted;
|
---|
84 | break;
|
---|
85 | case "Calculating":
|
---|
86 | state = TaskState.Calculating;
|
---|
87 | break;
|
---|
88 | case "Failed":
|
---|
89 | state = TaskState.Failed;
|
---|
90 | break;
|
---|
91 | case "Finished":
|
---|
92 | state = TaskState.Finished;
|
---|
93 | break;
|
---|
94 | case "Offline":
|
---|
95 | state = TaskState.Offline;
|
---|
96 | break;
|
---|
97 | case "Paused":
|
---|
98 | state = TaskState.Paused;
|
---|
99 | break;
|
---|
100 | case "Transferring":
|
---|
101 | state = TaskState.Transferring;
|
---|
102 | break;
|
---|
103 | case "Waiting":
|
---|
104 | state = TaskState.Waiting;
|
---|
105 | break;
|
---|
106 | default :
|
---|
107 | state = null;
|
---|
108 | break;
|
---|
109 | }
|
---|
110 | return state;
|
---|
111 | }
|
---|
112 | }
|
---|
113 | }
|
---|