forked from ummon-server/ummon-web
/
index.js
94 lines (85 loc) · 3.2 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
var moment = require('moment'),
assert = require('assert'),
prettycron = require('prettycron')
// All of these routes assume (and implicitly require) that req.apiClient has already been set by either userLoginRequired or userLoginOptional
exports.status = function(req, res){
req.apiClient.get('/status', function(err, req, rez, result) {
res.render('status.html',{ data: result, json: JSON.stringify });
});
};
exports.tasks = function(req, res){
var apiCall = '/tasks';
if (typeof req.params.filter == 'string') {
apiCall += '/'+req.params.filter;
}
req.apiClient.get(apiCall, function(err, req, rez, result) {
if (err) {
res.render('error.html', { message: 'You requested tasks for an invalid collection' });
return;
}
// console.log(rez.body);
var collectionSuccessRates = new Map();
var taskSuccessRates = new Map();
result.collections.forEach(function(collection, n) {
var numTaskRunsInCollection = 0;
var numSuccessfulTaskRunsInCollection = 0;
for(var taskName in collection.tasks) {
if (collection.tasks.hasOwnProperty(taskName)) {
var task = collection.tasks[taskName];
var numTaskRuns = 0;
var numSuccessfulTaskRuns = 0;
for (i = 0; i < task.recentExitCodes.length; i++) {
numTaskRunsInCollection++;
numTaskRuns++;
if (task.recentExitCodes[i] == 0) {
numSuccessfulTaskRunsInCollection++;
numSuccessfulTaskRuns++;
}
}
if (numTaskRuns != 0) {
taskSuccessRates.set(task.id, Math.round(numSuccessfulTaskRuns / numTaskRuns * 100));
}
else {
taskSuccessRates.set(task.id, 0);
}
}
}
if (numTaskRunsInCollection != 0) {
collectionSuccessRates.set(collection.collection,
Math.round(numSuccessfulTaskRunsInCollection / numTaskRunsInCollection * 100));
}
else {
collectionSuccessRates.set(collection.collection, 0);
}
});
res.render('tasks.html',{ data: result, json: JSON.stringify, prettycron: prettycron, moment: moment,
taskSuccessRates: taskSuccessRates, collectionSuccessRates: collectionSuccessRates});
});
};
exports.runs = function(req, res){
var from = moment().subtract(1, 'day').toISOString();
req.apiClient.get('/log?filter='+req.params.filter+'&runsOnly=true&from='+from, function(err, req, rez) {
// rez.body is a newline-separated list of JSON objects, and isn't JSON-parseable directly. Let's parse them ourselves.
var runs = [];
rez.body.split('\n').forEach(function(item, n) {
// console.log("Now doing "+n);
item && runs.push(JSON.parse(item));
});
// console.log(runs);
res.render('runs.html',{ data: runs, json: JSON.stringify, moment: moment });
});
};
exports.log = function(req, res){
var from = moment().subtract(1, 'day').toISOString();
req.apiClient.get('/log?filter='+req.params.filter+'&from='+from, function(err, req, rez) {
var log_entries = [];
rez.body.split('\n').forEach(function(item, n) {
item && log_entries.push(JSON.parse(item));
});
// console.log(log_entries);
res.render('log.html',{ data: log_entries, json: JSON.stringify, moment: moment });
});
};
exports.login = function(req, res){
res.render('login.html')
}