Javascript 使用Node.js将/proc/meminfo格式化为JSON
我正在使用它为我的家庭服务器a和a制作一个监控API。在这样做的过程中,我发现我希望得到比我所能得到的更详细的内存信息 我真正想做的是将类似于Javascript 使用Node.js将/proc/meminfo格式化为JSON,javascript,json,node.js,monitoring,Javascript,Json,Node.js,Monitoring,我正在使用它为我的家庭服务器a和a制作一个监控API。在这样做的过程中,我发现我希望得到比我所能得到的更详细的内存信息 我真正想做的是将类似于cat/proc/meminfo的东西转换成JSON /proc/meminfo 在这方面,我得到的是: mem.js 这将生成一个二维数组,如下所示: [ [ 'MemTotal', ' 1017948 kB' ], [ 'MemFree', ' 120612 kB' ], [ 'Buffers', '
cat/proc/meminfo
的东西转换成JSON
/proc/meminfo
在这方面,我得到的是:
mem.js
这将生成一个二维数组,如下所示:
[ [ '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' ],
[ '' ] ]
我可以想象一个双重嵌套的for循环遍历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;
}
我对您的代码做了一些修改,以返回一个没有填充的普通对象。此功能未经测试(我在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;
}
谢谢,这几乎正是我想要的。现在我只需要将此部分转换为活动和非活动对象。{…Active:575416,Inactive:213648,‘Active(anon)’:81568,‘Inactive(anon)’:260,‘Active(file)’:493848,‘Inactive(file)’:213388,…}作为旁白,我不认为
行[1].trim()是必要的,因为它已经忽略了前导空格。谢谢,这几乎正是我想要的。现在我只需要将此部分转换为活动和非活动对象。{…Active:575416,Inactive:213648,‘Active(anon)’:81568,‘Inactive(anon)’:260,‘Active(file)’:493848,‘Inactive(file)’:213388,…}作为旁白,我不认为行[1].trim()是必要的,因为它已经忽略了前导空格。
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,
...
}