在面板上显示资源限制

This commit is contained in:
jysperm
2014-07-29 03:40:23 +08:00
parent e043187faf
commit 02c7fc72ac
5 changed files with 68 additions and 15 deletions

View File

@@ -131,6 +131,36 @@ exports.monitoring = ->
app.redis.set REDIS_KEY, JSON.stringify(resources_usage_list), ->
last_plist = plist
exports.monitoringStorage = (callback) ->
app.redis.get 'rp:storage_usage', (err, result) ->
if result
callback JSON.parse result
else
child_process.exec "sudo repquota -a", (err, stdout, stderr) ->
lines = stdout.split('\n')[5...-1]
lines = _.filter lines, (i) -> i
lines = _.map lines, (line) ->
fields = _.filter line.split(' '), (i) -> i and i != ' '
[username, __, size_used, size_soft, size_hard, inode_used, inode_soft, inode_hard, inode_grace] = fields
if /days/.test inode_used
[size_grace, inode_used, inode_soft, inode_hard, inode_grace] = [inode_used, inode_soft, inode_hard, inode_grace]
return {
username: username
size_used: size_used
inode_used: inode_used
}
exports.resources_usage.storage = {}
for item in lines
exports.resources_usage.storage[item.username] = item
app.redis.setex 'rp:storage_usage', 3, JSON.stringify(exports.resources_usage.storage), ->
callback()
exports.monitoringCpu = (plist, callback) ->
total_time = {}

View File

@@ -10,12 +10,35 @@ module.exports =
callback()
widget: (account, callback) ->
jade.renderFile path.join(__dirname, 'view/widget.jade'),
account: account
resources_usage: monitor.resources_usage[account.username] ? {cpu: 0, memory: 0}
, (err, html) ->
throw err if err
callback html
monitor.monitoringStorage ->
jade.renderFile path.join(__dirname, 'view/widget.jade'),
account: account
resources_usage: do ->
usage = monitor.resources_usage[account.username] ? {cpu: 0, memory: 0}
return {
cpu:
now_per: (usage.cpu / account.attribute.resources_limit.cpu * 100).toFixed()
now: usage.cpu.toFixed(1)
limit: account.attribute.resources_limit.cpu
memory:
now_per: (usage.memory / account.attribute.resources_limit.memory * 100).toFixed()
now: usage.memory.toFixed(1)
limit: account.attribute.resources_limit.memory
}
storage_usage: do ->
usage = monitor.resources_usage['storage'][account.username]
now_per = (usage.size_used / 1000 / account.attribute.resources_limit.storage * 100).toFixed()
return {
now_per: now_per
now: (usage.size_used / 1000).toFixed(1)
limit: account.attribute.resources_limit.storage
color: if now_per < 90 then 'success' else 'danger'
}
, (err, html) ->
throw err if err
callback html
preview: (callback) ->
jade.renderFile path.join(__dirname, 'view/preview.jade'), {}, (err, html) ->

View File

@@ -5,20 +5,20 @@ table.table.table-hover
td(style='width: 200px;') 一小时 CPU 时间
td
.progress
.progress-bar.progress-bar-success(role='progressbar', aria-valuenow='#{(resources_usage.cpu / account.attribute.resources_limit.cpu * 100).toFixed()}', aria-valuemin='0', aria-valuemax='100', style='width: #{(resources_usage.cpu / account.attribute.resources_limit.cpu * 100).toFixed()}%;')
span #{resources_usage.cpu.toFixed(1)} / #{account.attribute.resources_limit.cpu} s
.progress-bar.progress-bar-success(role='progressbar', aria-valuenow='#{resources_usage.cpu.now_per}', aria-valuemin='0', aria-valuemax='100', style='width: #{resources_usage.cpu.now_per}%;')
span #{resources_usage.cpu.now} / #{resources_usage.cpu.limit} s
tr
td 一小时内存占用
td
.progress
.progress-bar.progress-bar-success(role='progressbar', aria-valuenow='#{(resources_usage.memory / account.attribute.resources_limit.memory * 100).toFixed()}', aria-valuemin='0', aria-valuemax='100', style='min-width: 30px; width: #{(resources_usage.memory / account.attribute.resources_limit.memory * 100).toFixed()}%;')
span #{resources_usage.memory.toFixed(1)} / #{account.attribute.resources_limit.memory} M
.progress-bar.progress-bar-success(role='progressbar', aria-valuenow='#{(resources_usage.memory.now_per}', aria-valuemin='0', aria-valuemax='100', style='width: #{resources_usage.memory.now_per}%;')
span #{resources_usage.memory.now} / #{resources_usage.memory.limit} M
tr
td 储存空间
td
.progress
.progress-bar.progress-bar-success(role='progressbar', aria-valuenow='0', aria-valuemin='0', aria-valuemax='100', style='width: 0%;')
span 0 / #{account.attribute.resources_limit.storage} M
.progress-bar(class='progress-bar-#{storage_usage.color}',role='progressbar', aria-valuenow='#{storage_usage.now_per}', aria-valuemin='0', aria-valuemax='100', style='width: #{storage_usage.now_per}%;')
span #{storage_usage.now} / #{storage_usage.limit} M
tr
td 月流量
td