mirror of
https://github.com/HackPlan/NodeMonitor.git
synced 2026-01-12 15:04:53 +08:00
109 lines
3.7 KiB
CoffeeScript
Executable File
109 lines
3.7 KiB
CoffeeScript
Executable File
child_process = require("child_process")
|
|
os = require("os")
|
|
monitor = {}
|
|
|
|
monitor.osData = (cb) ->
|
|
osData = {}
|
|
mins = os.uptime() / 60
|
|
hours = mins / 60
|
|
days = Math.floor(hours / 24)
|
|
hours = Math.floor(hours - (days * 24))
|
|
min = Math.floor(mins - (days * 60 * 24) - (hours * 60))
|
|
uptimeStr = ""
|
|
uptimeStr = days + " days " if days
|
|
uptimeStr += hours + " hours " if hours
|
|
uptimeStr += min + " mins"
|
|
Today = new Date()
|
|
loadavg = os.loadavg()
|
|
loadavg_str = ""
|
|
for name, i in loadavg
|
|
loadavg_str += loadavg[i].toFixed(2) + " "
|
|
osData["os"] =
|
|
hostname: os.hostname()
|
|
type: os.type()
|
|
release: os.release()
|
|
cpus: os.cpus()[0]["model"]
|
|
servertime: Today.getFullYear() + "-" + (Today.getMonth() + 1) + "-" + Today.getDate() + " " + Today.getHours() + ":" + Today.getMinutes() + ":" + Today.getSeconds()
|
|
uptime: uptimeStr
|
|
loadavg: loadavg_str
|
|
cb osData["os"]
|
|
|
|
monitor.memData = (cb) ->
|
|
memData = {}
|
|
child_process.exec "free -m", {}, (error, stdout) ->
|
|
rePattern = /Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+.+cache:\s+(\d+)\s+(\d+)\s+Swap:\s+(\d+)\s+(\d+)\s+(\d+)/
|
|
memInfo = rePattern.exec(stdout)
|
|
realMemUsed = memInfo[2] - memInfo[4] - memInfo[5] - memInfo[6]
|
|
buffersMemPer = Math.round(memInfo[5] / memInfo[1] * 100)
|
|
realMemPer = Math.round(realMemUsed / memInfo[1] * 100)
|
|
cachedMemPer = Math.round(memInfo[6] / memInfo[1] * 100)
|
|
memData["mem"] =
|
|
totalMem: memInfo[1] + "M"
|
|
realMem: memInfo[2] + "M"
|
|
cachedMem: memInfo[6] + "M"
|
|
realMemPer: realMemPer
|
|
cachedMemPer: cachedMemPer + buffersMemPer
|
|
freeMemPer: (100 - realMemPer - cachedMemPer - buffersMemPer)
|
|
swaptotalMem: memInfo[9] + "M"
|
|
swapUsedMemPer: Math.round(memInfo[10] / memInfo[9] * 100)
|
|
swapFreeMemPer: Math.round((memInfo[9] - memInfo[10]) / memInfo[9] * 100)
|
|
swapUsedMem: memInfo[10] + "M"
|
|
cb memData["mem"]
|
|
|
|
monitor.psData = (cb) ->
|
|
psData = {}
|
|
child_process.exec "ps xufwa", {}, (error, stdout) ->
|
|
psData['ps'] =
|
|
user: {}
|
|
all: {}
|
|
|
|
psArray = stdout.split("\n")
|
|
i = 1
|
|
while i < (psArray.length - 1)
|
|
vpsArrayInfo = psArray[i]
|
|
psArray[i] = psArray[i].replace(" ", " ") while psArray[i].match(" ")
|
|
procArray = psArray[i].split(" ")
|
|
allprocArray = []
|
|
j = 0
|
|
while j < procArray.length
|
|
if j < 10
|
|
allprocArray[j] = procArray[j]
|
|
else
|
|
allprocArray[10] = vpsArrayInfo.substr(64)
|
|
allprocArray[10] = allprocArray[10].replace(" ", " ") while allprocArray[10].match(" ")
|
|
j++
|
|
psData['ps']["all"][i - 1] = allprocArray
|
|
if typeof psData['ps']["user"][procArray[0]] is "undefined"
|
|
psData['ps']["user"][procArray[0]] =
|
|
cpuPer: 0
|
|
memPer: 0
|
|
swapMem: 0
|
|
realMem: 0
|
|
procNum: 0
|
|
numbers = [
|
|
"cpuPer"
|
|
"memPer"
|
|
"swapMem"
|
|
"realMem"
|
|
]
|
|
numbers.forEach (item, index) ->
|
|
psData['ps']["user"][procArray[0]][item] += Number(procArray[index + 2])
|
|
psData['ps']["user"][procArray[0]]["procNum"] += 1
|
|
i++
|
|
cb psData['ps']
|
|
|
|
monitor.diskData = (cb) ->
|
|
diskData = {}
|
|
child_process.exec "df", {}, (error, stdout) ->
|
|
dkArray = stdout.split("\n")
|
|
dkArray[1] = dkArray[1].replace(" ", " ") while dkArray[1].match(" ")
|
|
dkArrayInfo = dkArray[1].split(" ")
|
|
|
|
diskData["disk"] =
|
|
diskUsedPer: Math.round(Number(dkArrayInfo[2]) / Number(dkArrayInfo[1]) * 100)
|
|
diskFreePer: 100 - Math.round(Number(dkArrayInfo[2]) / Number(dkArrayInfo[1]) * 100)
|
|
diskAll: Math.round(Number(dkArrayInfo[1]) / 1048576) + "G"
|
|
diskUsed: Math.round(Number(dkArrayInfo[2]) / 1048576) + "G"
|
|
cb diskData["disk"]
|
|
|
|
module.exports = monitor |