forked from coolaj86/node-df-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
90 lines (74 loc) · 1.77 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
#!/usr/bin/env node
(function () {
"use strict";
// map auto_home 0 0 0 100% /home
var exec = require('child_process').exec
, os = require('os')
, reCaptureCells = /^([^\s]+\s?[^\s]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)%\s+[^/]*(.*?)\s*$/
, cmdMap = {
"Darwin": "df -b"
, "Linux": "df -B 512"
}
, reMap = {
"Darwin": reCaptureCells
, "Linux": reCaptureCells
}
, 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
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]
});
}
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('df', 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;
}());