-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjobd.js
109 lines (85 loc) · 2.71 KB
/
jobd.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
var express = require('express');
var bodyParser = require('body-parser');
var execSync = require('child_process').execSync;
var path = require('path');
var cors = require('cors'); /* cross-origin */
var jobsldr = require('./src/jobsldr.js');
var routeHandler = require('./src/jobd-handler.js');
var expAuth = require('../auth/express-auth.js');
/* arguments parsing */
var args = process.argv;
if (4 > args.length) {
console.log('bad args.');
process.exit(1);
}
var user = args[2];
var jobsdir = args[3];
var bootstrap = args[4];
/* root/jobsdir tester */
try {
execSync('touch /root/test');
execSync('test -d ' + jobsdir);
} catch (e) {
console.log(e.message);
process.exit(2);
}
/* load jobs/configs */
var jobs = {};
try {
jobs = jobsldr.load(jobsdir);
} catch (e) {
console.log(e.message);
process.exit(3);
}
console.log('environment variables:');
console.log(jobs.env);
console.log('target overall order:');
console.log(jobs.depGraph.overallOrder());
/* starting jobd */
console.log('jobd starting ...');
process.stdin.on('error', function (e) {
console.log('main process stdin error: ' + e.message);
});
/* initialize express app */
app = express();
app.use(bodyParser.json());
app.use(express.static('./public/'));
var corsOptions = {
origin: '*',
optionsSuccessStatus: 200 // some legacy browsers choke on 204
}
app.use(cors(corsOptions));
/* setup authentication module */
expAuth.init(app, {
loginRoute: '/auth/login',
verifyUrl: 'http://127.0.0.1/auth/token_verify',
keyName: 'tk-auth'
});
/* no need for password under bootstrap mode */
var auth_middleware = expAuth.middleware;
if (bootstrap == '--bootstrap') {
auth_middleware = (req, res, next) => {return next()};
console.log('[Bootstrap mode]');
}
app.get('/', auth_middleware, function (req, res) {
res.sendFile(path.resolve('./public/query.html'));
}).get('/deps', function (req, res) {
routeHandler.handle_deps(req, res, jobs.depGraph);
}).get('/reload', auth_middleware, function (req, res) {
jobs = routeHandler.handle_reload(res, jobsldr, jobsdir, jobs);
}).post('/stdin', auth_middleware, function (req, res) {
routeHandler.handle_stdin(req, res);
}).get('/log/:jobname', function (req, res) {
routeHandler.handle_log(jobsdir, req.params.jobname, res);
}).get('/show/:jobname', function (req, res) {
routeHandler.handle_show(jobs, req.params.jobname, res);
}).get('/kill_task/:taskid', auth_middleware, function (req, res) {
let taskID = req.params.taskid;
routeHandler.handle_kill_task(taskID, res);
}).get('/list_tasks', function (req, res) {
routeHandler.handle_list_tasks(res);
}).post('/run', auth_middleware, function (req, res) {
routeHandler.handle_query(req, res, user, jobsdir, jobs);
});
console.log('listening on ' + 3001);
app.listen(3001);