[英]Formatting /proc/meminfo as JSON using Node.js
我正在使用Node.js为我的家庭服务器La Nagios和Munin制作监视API。 通过这样做,我发现我想要比os.freemem()所能提供的更多的详细内存信息。
我真正想做的是将cat /proc/meminfo
转换为JSON。
MemTotal: 1017948 kB
MemFree: 122180 kB
Buffers: 151336 kB
Cached: 546844 kB
SwapCached: 0 kB
Active: 583256 kB
Inactive: 215544 kB
Active(anon): 100784 kB
Inactive(anon): 276 kB
Active(file): 482472 kB
Inactive(file): 215268 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 100620 kB
Mapped: 13452 kB
Shmem: 440 kB
Slab: 81232 kB
SReclaimable: 72388 kB
SUnreclaim: 8844 kB
KernelStack: 664 kB
PageTables: 4244 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 508972 kB
Committed_AS: 148780 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 4136 kB
VmallocChunk: 34359725048 kB
HardwareCorrupted: 0 kB
AnonHugePages: 45056 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 30708 kB
DirectMap2M: 1017856 kB
从这个角度来看,我所拥有的是:
var fs = require('fs');
function info() {
var data = fs.readFileSync('/proc/meminfo').toString();
var lines = data.split(/\n/g).map(function(line){
return line.split(':');
});
return lines;
}
console.log(info());
这将产生一个二维数组,如下所示:
[ [ 'MemTotal', ' 1017948 kB' ],
[ 'MemFree', ' 120612 kB' ],
[ 'Buffers', ' 151492 kB' ],
[ 'Cached', ' 547424 kB' ],
[ 'SwapCached', ' 0 kB' ],
[ 'Active', ' 585824 kB' ],
[ 'Inactive', ' 215456 kB' ],
[ 'Active(anon)', ' 102528 kB' ],
[ 'Inactive(anon)', ' 268 kB' ],
[ 'Active(file)', ' 483296 kB' ],
[ 'Inactive(file)', ' 215188 kB' ],
[ 'Unevictable', ' 0 kB' ],
[ 'Mlocked', ' 0 kB' ],
[ 'SwapTotal', ' 0 kB' ],
[ 'SwapFree', ' 0 kB' ],
[ 'Dirty', ' 88 kB' ],
[ 'Writeback', ' 0 kB' ],
[ 'AnonPages', ' 102412 kB' ],
[ 'Mapped', ' 13416 kB' ],
[ 'Shmem', ' 432 kB' ],
[ 'Slab', ' 81224 kB' ],
[ 'SReclaimable', ' 72408 kB' ],
[ 'SUnreclaim', ' 8816 kB' ],
[ 'KernelStack', ' 648 kB' ],
[ 'PageTables', ' 3632 kB' ],
[ 'NFS_Unstable', ' 0 kB' ],
[ 'Bounce', ' 0 kB' ],
[ 'WritebackTmp', ' 0 kB' ],
[ 'CommitLimit', ' 508972 kB' ],
[ 'Committed_AS', ' 141360 kB' ],
[ 'VmallocTotal', ' 34359738367 kB' ],
[ 'VmallocUsed', ' 4136 kB' ],
[ 'VmallocChunk', ' 34359725048 kB' ],
[ 'HardwareCorrupted', ' 0 kB' ],
[ 'AnonHugePages', ' 45056 kB' ],
[ 'HugePages_Total', ' 0' ],
[ 'HugePages_Free', ' 0' ],
[ 'HugePages_Rsvd', ' 0' ],
[ 'HugePages_Surp', ' 0' ],
[ 'Hugepagesize', ' 2048 kB' ],
[ 'DirectMap4k', ' 30708 kB' ],
[ 'DirectMap2M', ' 1017856 kB' ],
[ '' ] ]
我可以想象一个双重嵌套的循环遍历info()
的返回,并将元素分配给新对象,但这看起来并不雅致。
将/proc/meminfo
的内容转换为JSON的更好方法是什么?
我对您的代码做了一些修改,以返回没有填充的普通对象。 此功能未经测试(我在Windows机器上!),但类似的方法可以工作:
function info() {
var info = {};
var data = fs.readFileSync('/proc/meminfo').toString();
data.split(/\n/g).forEach(function(line){
line = line.split(':');
// Ignore invalid lines, if any
if (line.length < 2) {
return;
}
// Remove parseInt call to make all values strings
info[line[0]] = parseInt(line[1].trim(), 10);
});
return info;
}
预期结果如下:
{
'MemTotal': 1017948,
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.