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, string limit, DateTime? start = null, DateTime? end = null, string jobId = null, string taskState = null) {
|
---|
12 | using (var db = new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString)) {
|
---|
13 | TaskState state = GetTaskState(taskState);
|
---|
14 | var data =
|
---|
15 | (from errors in db.StateLogs
|
---|
16 | join tasks in db.FactTasks
|
---|
17 | on errors.TaskId equals tasks.TaskId
|
---|
18 | join jobs in db.DimJobs
|
---|
19 | on tasks.JobId equals jobs.JobId
|
---|
20 | where jobs.UserName == userName &&
|
---|
21 | errors.Exception != null &&
|
---|
22 | !errors.Exception.Equals(string.Empty) &&
|
---|
23 | (!start.HasValue || tasks.StartTime >= start) &&
|
---|
24 | (!end.HasValue || tasks.EndTime < end) &&
|
---|
25 | (string.IsNullOrEmpty(jobId) || tasks.JobId.ToString() == jobId) &&
|
---|
26 | (string.IsNullOrEmpty(taskState) || tasks.TaskState == state)
|
---|
27 | select new
|
---|
28 | {
|
---|
29 | TaskID = errors.TaskId,
|
---|
30 | ErrorMessage = errors.Exception,
|
---|
31 | StartDate = tasks.StartTime
|
---|
32 | }).OrderByDescending(s => s.StartDate).Take(Convert.ToInt32(limit)).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 | private static TaskState GetTaskState(string taskState) {
|
---|
44 | TaskState state = TaskState.Finished;
|
---|
45 | switch (taskState) {
|
---|
46 | case "Aborted":
|
---|
47 | state = TaskState.Aborted;
|
---|
48 | break;
|
---|
49 | case "Calculating":
|
---|
50 | state = TaskState.Calculating;
|
---|
51 | break;
|
---|
52 | case "Failed":
|
---|
53 | state = TaskState.Failed;
|
---|
54 | break;
|
---|
55 | case "Finished":
|
---|
56 | state = TaskState.Finished;
|
---|
57 | break;
|
---|
58 | case "Offline":
|
---|
59 | state = TaskState.Offline;
|
---|
60 | break;
|
---|
61 | case "Paused":
|
---|
62 | state = TaskState.Paused;
|
---|
63 | break;
|
---|
64 | case "Transferring":
|
---|
65 | state = TaskState.Transferring;
|
---|
66 | break;
|
---|
67 | case "Waiting":
|
---|
68 | state = TaskState.Waiting;
|
---|
69 | break;
|
---|
70 | }
|
---|
71 | return state;
|
---|
72 | }
|
---|
73 | }
|
---|
74 | }
|
---|