-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
96 lines (83 loc) · 2.25 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
95
96
#!/usr/bin/env node
var exec = require('child_process').exec;
var spawn = require('child_process').spawn;
var ansi = require('ansi');
var cursor = ansi(process.stdout);
function clear() {
function lf () { return '\n' }
cursor.write(Array.apply(null, Array(process.stdout.getWindowSize()[1])).map(lf).join(''))
.eraseData(2)
.goto(1, 1);
}
function word(ms) {
if (ms < 10) {
return "unbelievably good";
} else if (ms < 25) {
return "reasonably good";
} else if (ms < 40) {
return " decent";
} else if (ms < 60) {
return "somewhat lethargic";
} else if (ms < 100) {
return " unacceptable";
} else if (ms < 250) {
return " terrible";
} else {
return "fracking terrible";
}
}
function volWord(db) {
if (db < 1) {
return " silent";
} else if (db < 2) {
return " fine";
} else if (db < 3) {
return " distracting";
} else if (db < 4) {
return " too loud";
} else {
return "dubstep party";
}
}
function average(avgs) {
return avgs.reduce(function (sum, n) { return sum + n; }, 0) / avgs.length;
}
var avgs = [];
function ping() {
exec("ping -c 1 google.com", function (err, stdout, stderr) {
var match = /time=(.*?)\s/.exec(stdout);
if (!match) { return; }
var ms = +match[1];
var color = (ms < 100) ? "#00ff00" : "#ff0000";
var volume = average(volAvgs);
var volColor = (volume < 2) ? "#00ff00" : "#ff0000";
avgs.push(ms);
(avgs.length > 20 && avgs.shift());
var avg = average(avgs);
clear();
cursor.goto(0,0);
cursor.grey()
.write('\n')
.bold()
.white().write(" game ").cyan().write("{").white().write(" closure ").cyan().write("}\n")
.resetBold()
.grey().write(' ' + new Date().toLocaleString().slice(0,24) + '\n\n')
.write(" our internet is\n")
.hex(color).write(' ' + word(avg) + '\n')
.grey().write(" ping: ").hex(color).write(~~ms+'').reset().write('ms')
.grey().write('\n\n the volume is\n')
.hex(volColor)
.write(' ' + volWord(volume))
.hide();
});
}
var volAvgs = [];
var rec = spawn('rec', ['-n']);
rec.stderr.on('data', function (data) {
var match = /\[.*?\|((=|-)*)\s*\]/.exec(data);
if (match) {
volAvgs.push(match[1].length);
(volAvgs.length > 100 && volAvgs.shift());
}
});
setInterval(ping, 1000);