mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-03-30 06:54:42 +08:00
80 lines
2.3 KiB
CoffeeScript
80 lines
2.3 KiB
CoffeeScript
child_process = require 'child_process'
|
|
os = require 'os'
|
|
fs = require 'fs'
|
|
|
|
monitor = require './monitor'
|
|
{renderAccount, requireAuthenticate} = require './middleware'
|
|
|
|
module.exports = exports = express.Router()
|
|
|
|
app.get '/public/monitor', renderAccount, requireAuthenticate, (req, res) ->
|
|
async.parallel
|
|
resources_usage: (callback) ->
|
|
monitor.monitoringStorage ->
|
|
resources_usage = []
|
|
|
|
for username, usage of monitor.resources_usage
|
|
resources_usage.push
|
|
username: username
|
|
cpu: usage.cpu
|
|
memory: usage.memory
|
|
storage: parseInt monitor.storage_usage[username]?.size_used ? 0
|
|
process: _.filter(monitor.last_plist, (i) -> i.user == username).length
|
|
|
|
callback null, resources_usage
|
|
|
|
system: (callback) ->
|
|
async.parallel
|
|
system: (callback) ->
|
|
fs.readFile '/etc/issue', (err, content) ->
|
|
callback err, content.toString().replace(/\\\w/g, '').trim()
|
|
|
|
, (err, result) ->
|
|
callback null, _.extend result,
|
|
hostname: os.hostname()
|
|
cpu: os.cpus()[0]['model']
|
|
uptime: os.uptime()
|
|
loadavg: _.map(os.loadavg(), (i) -> i.toFixed(2)).join(', ')
|
|
address: os.networkInterfaces()['eth0'][0].address
|
|
time: new Date()
|
|
|
|
storage: (callback) ->
|
|
child_process.exec "df -h", (err, stdout) ->
|
|
disks = {}
|
|
|
|
for line in stdout.split('\n')
|
|
[dev, size, used, available, used_per, mounted] = _.compact(line.split(' '))
|
|
|
|
disks[mounted] =
|
|
dev: dev
|
|
size: parseInt size?.match(/\d+/)
|
|
used: parseInt used?.match(/\d+/)
|
|
available: available
|
|
used_per: used_per
|
|
|
|
root_disk = disks['/']
|
|
|
|
used = root_disk.used
|
|
total = root_disk.size
|
|
free = total - used
|
|
|
|
used_per = (used / total * 100).toFixed()
|
|
free_per = 100 - used_per
|
|
|
|
callback null,
|
|
used: used
|
|
free: free
|
|
total: total
|
|
|
|
used_per: used_per
|
|
free_per: free_per
|
|
|
|
memory: monitor.loadMemoryInfo
|
|
|
|
, (err, result) ->
|
|
jade.renderFile path.join(__dirname, 'view/monitor.jade'), _.extend result,
|
|
last_plist: monitor.last_plist
|
|
_: _
|
|
, (err, html) ->
|
|
res.send html
|