'use strict'; const moment = require('moment'); const diskinfo = require('diskinfo'); const os = require('os-utils'); function getNodeResources(opts) { return async function (ctx, next) { let errMsg = { message: '获取节点资源失败' } try { //获取系统内存情况 let freeMem = os.freemem() let totalMem = os.totalmem() let memory = Math.round(((totalMem - freeMem) / totalMem) * 1000) / 10 //cpu利用率 let cpuUsage = await getCPUUsage() //硬盘占用率数据 let disk = await getDiskInfo(); ctx.status = 200; ctx.body = { disk, memory, cpu: Math.round(cpuUsage * 1000) / 10 }; } catch (error) { ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.status = 400; ctx.body = errMsg } } } /** * 获取硬盘信息 */ async function getDiskInfo() { return new Promise(function (resolve, reject) { diskinfo.getDrives((err, aDrives) => { let map = new Map() //遍历所有磁盘信息 let total = 0, used = 0; for (var i = 0; i < aDrives.length; i++) { if (!map.has(aDrives[i].mounted)) { map.set(aDrives[i].mounted, true) total += aDrives[i].blocks; //总量 used += aDrives[i].used; //已使用 } } let rate = Math.round(used / total * 1000) / 10 resolve(rate); }); }); } /** * 获取系统cpu利用率 */ async function getCPUUsage() { return new Promise((resolve, reject) => { os.cpuUsage(function (v) { resolve(v) }); }); } module.exports = { getNodeResources }