繁体   English   中英

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

[英]Formatting /proc/meminfo as JSON using Node.js

我正在使用Node.js为我的家庭服务器La NagiosMunin制作监视API。 通过这样做,我发现我想要比os.freemem()所能提供的更多的详细内存信息。

我真正想做的是将cat /proc/meminfo转换为JSON。

的/ proc / meminfo中

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

从这个角度来看,我所拥有的是:

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

我可以想象一个双重嵌套的循环遍历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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM