Free cookie consent management tool by TermsFeed Policy Generator

source: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/wwwroot/js/Scripts/Graphs/GraphDataCollector.js @ 13733

Last change on this file since 13733 was 13733, checked in by jlodewyc, 8 years ago

#2582 Last fixes Job Manager

File size: 8.0 KB
Line 
1var dataCollection = [];
2var taskStatus = {
3    "Offline": "bar-off",
4    "Waiting": "bar-wait",
5    "Transferring": "bar-trans",
6    "Calculating": "bar-calc",
7    "Paused": "bar-paus",
8    "Finished": "bar-fin",
9    "Aborted": "bar-abo",
10    "Failed": "bar-fail"
11}
12
13function initSaveData(id, coll, name) {//initial data save
14    var temp = dataConversion(coll, name);
15    temp.unshift(id); //add ID in front of array
16    dataCollection.push(temp);// [id,timearr, piearr]
17    // console.log("#CREATION: " + id);
18}
19function saveData(id, coll, name) {
20    var temp = dataConversion(coll, name);
21    for (var i = 0; i < dataCollection.length; i++) {
22        if (dataCollection[i][0] == id) {
23            dataCollection[i][1] = temp[0]; // [data,layout]
24            dataCollection[i][2] = temp[1]; // data
25            dataCollection[i][3] = temp[2]; // [tasks, name]
26        }
27    }
28    //console.log("#SAVEDATA: " + id);
29    redrawGraph(id);
30}
31function getData(id) {
32    for (var i = 0; i < dataCollection.length; i++) {
33        if (dataCollection[i][0] == id) {
34            return dataCollection[i][1];
35        }
36    }
37}
38function getDataPie(id) {
39    for (var i = 0; i < dataCollection.length; i++) {
40        if (dataCollection[i][0] == id) {
41            return dataCollection[i][2];
42        }
43    }
44}
45function getDataGantt(id) {
46    for (var i = 0; i < dataCollection.length; i++) {
47        if (dataCollection[i][0] == id) {
48            return dataCollection[i][3];
49        }
50    }
51}
52function dataConversion(coll, name) {
53    var line = dataConversionLine(coll, name);
54    var pie = dataConversionPie(coll);
55    var gantt = dataConversionGantt(coll, name);
56    return [line, pie, gantt];
57}
58function dataConversionGantt(coll, nam) {
59    var tasks = [];
60    for (var v = 0; v < coll.length; v++) {
61
62        var temp = {};
63        temp.startDate = Date.parse(coll[v].DateTime);
64        if (v < coll.length - 1)
65            temp.endDate = Date.parse(coll[v + 1].DateTime);
66        else {
67
68            var dat = Date.parse(coll[v].DateTime);
69            //console.log(dat);
70            temp.endDate = dat + 600000;
71            temp.last = true;
72        }
73        temp.taskName = nam;
74
75        if (coll[v].State == 0)
76            temp.status = "Offline";
77        else if (coll[v].State == 1)
78            temp.status = "Waiting";
79        else if (coll[v].State == 2)
80            temp.status = "Transferring";
81        else if (coll[v].State == 3)
82            temp.status = "Calculating";
83        else if (coll[v].State == 4)
84            temp.status = "Paused";
85        else if (coll[v].State == 5)
86            temp.status = "Finished";
87        else if (coll[v].State == 6)
88            temp.status = "Aborted";
89        else if (coll[v].State == 7)
90            temp.status = "Failed";
91        tasks.push(temp);
92    }
93    return [tasks, nam];
94}
95function dataConversionLine(coll, nam) {
96    var xarr = [];
97    var yarr = [];
98
99    for (var v = 0; v < coll.length; v++) {
100
101        xarr.push(Date.parse(coll[v].DateTime));
102        // console.log(xarr[v]);
103        // xarr[v] = xarr[v] - 3600000;
104        if (coll[v].State == 1)
105            yarr.push("Waiting");
106        else if (coll[v].State == 2)
107            yarr.push("Transferring");
108        else if (coll[v].State == 3)
109            yarr.push("Calculating");
110        else if (coll[v].State == 5)
111            yarr.push("Finished");
112        else if (coll[v].State == 7)
113            yarr.push("Failed");
114    }
115
116
117    var data = [{//Time graph
118        x: xarr,
119        y: yarr,
120        type: 'scatter',
121        mode: 'lines',
122        name: nam,
123        connectgaps: true,
124        line: { shape: 'hvh' }
125    }];
126    layout = {
127        "showlegend": true,
128        "width": "100%",
129        "xaxis": {
130            "autorange": true,
131            "range": [
132                Date.parse(coll[0].DateTime),
133                Date.parse(coll[coll.length - 1].DateTime)
134            ],
135            "title": "Time",
136            "type": "date"
137        }
138
139    }
140
141    return [data, layout];
142}
143
144function dataConversionPie(coll) {
145    var waiting = 0;
146    var transfer = 0;
147    var calc = 0;
148    for (var v = 0; v < coll.length - 1; v++) {
149        if (coll[v].State == 1)
150            waiting += Date.parse(coll[v + 1].DateTime) - Date.parse(coll[v].DateTime);
151        else if (coll[v].State == 2)
152            transfer += Date.parse(coll[v + 1].DateTime) - Date.parse(coll[v].DateTime);
153        else if (coll[v].State == 3)
154            calc += Date.parse(coll[v + 1].DateTime) - Date.parse(coll[v].DateTime);
155    }
156    var datap = [{//Pie graph
157        values: [
158            Math.round(waiting / 1000 / 60),
159            Math.round(transfer / 1000 / 60),
160            Math.round(calc / 1000 / 60)],
161        labels: [
162            'Minutes waiting',
163            'Minutes transferring',
164            'Minutes calculating'],
165        type: 'pie'
166    }];
167    return datap;
168}
169
170function redrawGraph(val) {
171    document.getElementById("graph" + val).style.width = "100%";
172    document.getElementById("graph" + val).style.height = "400px";
173    document.getElementById("graph" + val).innerHTML = "";
174    document.getElementById("graph" + val).style.marginLeft = "0px";
175    if (document.getElementById("graphtoggle" + val).checked) {
176        setTimeout(function () {
177
178            var temp = getDataGantt(val);
179            var w = $("#graph" + val).parent().width() - 30;
180            document.getElementById("graph" + val).style.height = "200px";
181            var gantt = d3.gantt().selector('#graph' + val).height('200').width(w).margin({
182                top: 20,
183                right: 40,
184                bottom: 20,
185                left: 20
186            }).drawytitles(false).taskTypes([temp[1]]).taskStatus(taskStatus);
187            //    document.getElementById("graph" + val).style.marginLeft = "-40px";
188            gantt(temp[0]);
189        }, 100);
190
191
192        /* setTimeout(function () {
193            Plotly.newPlot('graph' + val, getData(val)[0], getData(val)[1]);
194        }, 100);*/
195        // console.log("#REDRAWN LINE: " + val);
196    } else {
197        setTimeout(function () {
198            Plotly.newPlot('graph' + val, getDataPie(val));
199        }, 100);
200        //console.log("#REDRAWN PIE: " + val);
201    }
202
203
204}
205function redrawMain() {
206    document.getElementById("graphMain").innerHTML = "";
207
208    var tempdata = [];
209    var tempnames = [];
210    for (var i = 0; i < dataCollection.length; i++) {
211        var t = dataCollection[i][3][0].slice();
212        var name =  t[0].taskName.substring(0, 5) + " | " + i + ":";
213
214        for (var v = 0; v < t.length; v++) {
215            t[v].taskName = name;
216        }
217        tempdata = tempdata.concat(t);
218        tempnames = tempnames.concat(name)
219    }
220    var h = (tempnames.length * 20) + 100;
221    document.getElementById("graphMain").style.height = h + "px";
222
223    var w = $("#graphMain").parent().width() - 100;
224
225    var gantt = d3.gantt().selector("#graphMain").height(h - 50).width(w).taskTypes(tempnames).taskStatus(taskStatus);
226    document.getElementById("graphMain").style.marginLeft = "20px";
227    gantt(tempdata);
228    /* LINE VERSION
229    var temp = [];
230    var min = dataCollection[0][1][0][0].x[0];
231    var max = min;
232    for (var i = 0; i < dataCollection.length; i++) {
233        temp.push(dataCollection[i][1][0][0]);
234        if (dataCollection[i][1][0][0].x[dataCollection[i][1][0][0].x.length - 1] > max)
235            max = dataCollection[i][1][0][0].x[dataCollection[i][1][0][0].x.length - 1];
236        if (dataCollection[i][1][0][0].x[0] < min)
237            min = dataCollection[i][1][0][0].x[0];
238    }
239    layout = {
240        "showlegend": true,
241        "title": new Date(min).toUTCString() + " to " + new Date(max).toUTCString(),
242        "xaxis": {
243            "autorange": true,
244            "range": [
245                min,
246                max
247            ],
248            "title": "Time",
249            "type": "date"
250        }
251
252    }
253     Plotly.newPlot('graphMain', temp, layout);
254     */
255
256}
Note: See TracBrowser for help on using the repository browser.