mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-04-24 03:35:59 +08:00
在面板上显示资源限制
This commit is contained in:
@@ -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 = {}
|
||||
|
||||
|
||||
@@ -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) ->
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user