-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
103 lines (87 loc) · 2.33 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
97
98
99
100
101
102
103
#!/usr/bin/env node
(function () {
"use strict";
// map auto_home 0 0 0 100% /home
var exec = require('child_process').exec
, os = require('os')
, reCaptureCellsDarwin = /^([^\s]+\s?[^\s]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)%\s+[^/]*(.*?)\s*$/
, reCaptureCellsLinux = /^([^\s]+\s?[^\s]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)%\s+[^/]*(.*?)\s+(.*?)\s*$/
, cmdMap = {
"Darwin": "df -b"
, "Linux": "df -B 512 --output=source,size,used,avail,pcent,target,fstype"
}
, reMap = {
"Darwin": reCaptureCellsDarwin
, "Linux": reCaptureCellsLinux
}
, cmdDf = cmdMap[os.type()]
, reDf = reMap[os.type()]
;
function init() {
// TODO test default block size
}
function df(cb) {
function formatDf(err, stdout, stderr) {
var table
, infos = []
;
function parseRow(row) {
var cells = row.match(reDf)
;
if (!cells) {
return;
}
// FYI
// It seems that RegExp Match isn't a true array
// popping it deos weird things
if(os.type() == "Darwin") {
infos.push({
filesystem: cells[1]
, blocks: parseInt(cells[2], 10)
, used: parseInt(cells[3], 10)
, available: parseInt(cells[4], 10)
, percent: parseInt(cells[5], 10)
, mountpoint: cells[6]
});
} else {
infos.push({
filesystem: cells[1]
, blocks: parseInt(cells[2], 10)
, used: parseInt(cells[3], 10)
, available: parseInt(cells[4], 10)
, percent: parseInt(cells[5], 10)
, mountpoint: cells[6]
, type: cells[7]
});
}
}
if (err) {
cb(err);
return;
}
if (stderr) {
cb(new Error(stderr));
return;
}
table = stdout.split(/\n/g);
// get rid of header
table.pop();
table.forEach(parseRow);
cb(null, infos);
}
exec(cmdDf, formatDf);
}
function main () {
df(function (err, table) {
if (err) {
console.error(err.stack);
return;
}
console.log(JSON.stringify(table, null, ' '));
})
}
if (require.main === module) {
main();
}
module.exports = df;
}());