This repository was archived by the owner on Jul 24, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathservice.js
More file actions
64 lines (59 loc) · 2.01 KB
/
service.js
File metadata and controls
64 lines (59 loc) · 2.01 KB
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
var exec = require('child_process').exec;
var fs = require('fs');
var path = require('path');
exports.service = function (response, serviceName, serviceRequest) {
switch(serviceRequest) {
case 'start':
case 'stop':
case 'restart':
case 'status':
result = { };
// Determine if upstart or assume SysV
if (path.existsSync('/etc/init/'+serviceName+'.conf')) {
var command = 'initctl '+serviceRequest+' '+serviceName;
} else {
var command = 'service '+serviceName+' '+serviceRequest;
}
exec(command, function(error, stdout, stderr) {
result.success = !error;
if (serviceRequest === 'status') {
result.success = true; // Status returns FALSE if SysV is not started
result.running = /(start\/running|is\ running)/.test(stdout);
}
result.output = result.success ? stdout : stderr;
response.writeHead(200, {"Content-Type": "application/json"});
response.write(JSON.stringify(result));
response.end();
});
break;
default:
response.writeHead(501, {"Content-Type": "text/plain"});
response.write('Not Implemented: '+serviceRequest);
response.end();
break;
}
}
// Returns a list of possible SysV and upstart services
// For SysV, returns contents of /etc/init.d . TODO Should verify that file is executable.
// For Upstart, returns contents of /etc/init where file name ends in '.conf'
exports.serviceList = function (response) {
var services = fs.readdirSync('/etc/init.d');
var upstart = fs.readdirSync('/etc/init');
for(var i=0; i<upstart.length; i++) {
var t = /^(.*)\.conf$/.exec(upstart[i]);
if(t[1]) {
var duplicate=false;
for(var j=0; j<services.length; j++) {
if (services[j] === t[1]) {
duplicate = true;
}
}
if (!duplicate) {
services.push(t[1]);
}
}
}
response.writeHead(200, {"Content-Type": "application/json"});
response.write(JSON.stringify(services));
response.end();
}