gpt4 book ai didi

javascript - 使用 Node.js 将/proc/meminfo 格式化为 JSON

转载 作者:搜寻专家 更新时间:2023-11-01 00:32:40 28 4
gpt4 key购买 nike

我正在使用 Node.js 为我的家庭服务器 à la NagiosMunin 创建一个监控 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

在这种情况下,我得到的是:

内存.js

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' ],
[ '' ] ]

我可以想象一个双重嵌套的 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;
}

预期结果如下:

{
'MemTotal': 1017948,
...
}

关于javascript - 使用 Node.js 将/proc/meminfo 格式化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23588672/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com