Skip to content

Commit 1170cbf

Browse files
committed
daemonizable, removed deps
1 parent 22c702d commit 1170cbf

File tree

3 files changed

+56
-15
lines changed

3 files changed

+56
-15
lines changed

Diff for: README.md

+19-1
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,36 @@ npm install -g sleep-server
2323
-p, --port <port> Port to run server on (default: 57339)
2424
-H, --host <host> Interface to run server on (default: 0.0.0.0)
2525
-u, --url <url> URL to trigger sleep (default: sleep)
26-
-d, --delay <ms> Delay in milliseconds (default: 1000)
26+
-w, --wait <ms> Wait in milliseconds before sleeping (default: 3000)
27+
-d, --daemonize Daemonize the sleep server and send output to a file (default: log.txt)
2728
```
2829

2930
### Example
3031

32+
Host A
3133
```sh
3234
$ sleep-server
3335
Listening for sleep requests at http://0.0.0.0:57339/sleep
36+
```
37+
38+
Host B
39+
```sh
40+
$ curl http://host-a:57339/sleep...
41+
ok
42+
```
43+
44+
Host A
45+
```
3446
#1:
3547
Sleeping in 1000ms
3648
Time: Fri Jun 13 2014 22:32:47 GMT+1000 (EST)
3749
IP address: 10.0.0.1
50+
```
51+
52+
Then when you wake the Host A...
53+
54+
Host A
55+
```
3856
#2:
3957
Woke
4058
Time: Fri Jun 13 2014 22:36:15 GMT+1000 (EST)

Diff for: package.json

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
{
22
"name": "sleep-server",
3-
"version": "0.2.1",
3+
"version": "0.3.2",
44
"main": "./server",
55
"bin": {
66
"sleep-server": "bin/sleep-server"
77
},
88
"dependencies": {
9-
"commander": "^2.2.0",
10-
"wake-event": "0.0.1"
9+
"commander": "^2.2.0"
1110
}
1211
}

Diff for: server.js

+35-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11

22
var exec = require('child_process').exec;
3-
var wake = require('wake-event');
43
var os = require('os');
54
var http = require('http');
65

@@ -26,31 +25,56 @@ program
2625
.option('-p, --port <port>', 'Port to run server on (default: 57339)', 57339)
2726
.option('-H, --host <host>', 'Interface to run server on (default: 0.0.0.0)', '0.0.0.0')
2827
.option('-u, --url <url>', 'URL to trigger sleep (default: sleep)', 'sleep')
29-
.option('-d, --delay <ms>', 'Delay in milliseconds (default: 1000)', 1000)
28+
.option('-w, --wait <ms>', 'Wait in milliseconds before sleeping (default: 3000)', 3000)
29+
.option('-d, --daemonize', 'Daemonize the sleep server and send output to a file (default: log.txt)', 'log.txt')
3030
.parse(process.argv);
3131

32+
//daemonize?
33+
if(program.daemonize && program.args.indexOf('is-daemon') === -1) {
34+
var path = program.daemonize;
35+
var fs = require('fs');
36+
var spawn = require('child_process').spawn;
37+
var log = fs.openSync(path, 'a');
38+
39+
var prog = process.argv[1];
40+
var args = process.argv.slice(2);
41+
args.push('is-daemon');
42+
43+
var child = spawn(prog, args, {
44+
detached: true,
45+
stdio: [ 'ignore', log, log ]
46+
});
47+
child.unref();
48+
process.exit(1);
49+
return;
50+
}
51+
3252
//add a slash
3353
if(program.url.charAt(0) !== '/')
3454
program.url = '/'+program.url;
3555

3656
var msgId = 1;
37-
3857
http.createServer(function (request,response) {
3958
if(request.url.indexOf(program.url) !== 0)
40-
return response.end();
41-
59+
return response.end('not-ok');
4260
console.log("#%s:\n Sleeping in %sms\n Time: %s\n IP address: %s",
43-
msgId++, program.delay, new Date(), request.connection.remoteAddress);
44-
61+
msgId++, program.wait, new Date(), request.connection.remoteAddress);
4562
setTimeout(function() {
4663
exec(command);
47-
}, program.delay);
64+
}, program.wait);
4865
response.end('ok');
4966
}).listen(program.port, function() {
5067
console.log('Listening for sleep requests at http://%s:%s%s', program.host, program.port, program.url);
5168
});
5269

53-
wake(function() {
54-
console.log("#%s:\n Woke\n Time: %s", msgId++, new Date());
55-
});
70+
//if interval is late by more than 2secs, assume has just awoken
71+
var checkInterval = 5000;
72+
var threshold = 2000;
73+
var lastTime = Date.now();
74+
setInterval(function() {
75+
var currentTime = Date.now();
76+
if (currentTime > (lastTime + checkInterval + threshold))
77+
console.log("#%s:\n Woke\n Time: %s", msgId++, new Date());
78+
lastTime = currentTime;
79+
}, checkInterval);
5680

0 commit comments

Comments
 (0)