Files
RootPanel/plugin/linux/action.coffee
2014-08-18 12:01:29 +08:00

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