You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
7.0 KiB
140 lines
7.0 KiB
3 years ago
|
extends ../layouts/main
|
||
|
block content
|
||
|
|
||
|
- var latestReport = stats[stats.length - 1];
|
||
|
|
||
|
mixin renderCpuStatsGraph (cpu)
|
||
|
- var totalTime = cpu.user + cpu.nice + cpu.sys + cpu.idle + cpu.irq
|
||
|
.no-select
|
||
|
canvas(width="320", height="100", class= {
|
||
|
'cpu-overload': ((cpu.idle / totalTime) < 0.1),
|
||
|
}).dtp-cpu-graph
|
||
|
.dtp-stats-bar
|
||
|
.dtp-cpu-stat-bar.dtp-cpu-user(style=`width: ${(cpu.user / totalTime) * 100}%;`)= numeral(cpu.user / totalTime).format('0%')
|
||
|
.dtp-cpu-stat-bar.dtp-cpu-nice(style=`width: ${(cpu.nice / totalTime) * 100}%;`)= numeral(cpu.nice / totalTime).format('0%')
|
||
|
.dtp-cpu-stat-bar.dtp-cpu-sys(style=`width: ${(cpu.sys / totalTime) * 100}%;`)= numeral(cpu.sys / totalTime).format('0%')
|
||
|
.dtp-cpu-stat-bar.dtp-cpu-irq(style=`width: ${(cpu.irq / totalTime) * 100}%;`)= numeral(cpu.irq / totalTime).format('0%')
|
||
|
.dtp-cpu-stat-bar.dtp-cpu-idle(style=`width: ${(cpu.idle / totalTime) * 100}%;`)= numeral(cpu.idle / totalTime).format('0%')
|
||
|
|
||
|
mixin renderStatCell (label, value)
|
||
|
.dtp-stat-cell.uk-width-auto
|
||
|
.uk-text-bold= value
|
||
|
.uk-text-small= label
|
||
|
|
||
|
.uk-margin
|
||
|
.uk-overflow-auto
|
||
|
table.uk-table.uk-table-small.uk-table-divider
|
||
|
thead
|
||
|
th Host
|
||
|
th Status
|
||
|
th Memory
|
||
|
th Disk
|
||
|
th Platform
|
||
|
th Arch
|
||
|
th Created
|
||
|
th Updated
|
||
|
tbody
|
||
|
tr
|
||
|
td
|
||
|
a(href=`/admin/host/${host._id}`)= host.hostname
|
||
|
td= host.status
|
||
|
td= numeral((host.totalmem - host.freemem) / host.totalmem).format('0.00%')
|
||
|
td= numeral(latestReport.disk.cache.pctUsed / 100.0).format('0.00%')
|
||
|
td= host.platform
|
||
|
td= host.arch
|
||
|
td= moment(host.created).fromNow()
|
||
|
td= host.updated ? moment(host.updated).fromNow() : 'N/A'
|
||
|
|
||
|
.dtp-dashboard-cluster.uk-margin
|
||
|
fieldset
|
||
|
legend [Processor]
|
||
|
div(uk-grid).uk-grid-small.uk-flex-between
|
||
|
each cpu in latestReport.cpus
|
||
|
div(class="uk-width-1-1 uk-width-auto@m")
|
||
|
+renderCpuStatsGraph(cpu)
|
||
|
|
||
|
.dtp-dashboard-cluster.uk-margin
|
||
|
div(uk-grid).uk-flex-between
|
||
|
div(class="uk-width-1-1 uk-width-auto@m")
|
||
|
fieldset
|
||
|
legend [Core Memory]
|
||
|
.dtp-stats-bar
|
||
|
.dtp-mem-stat-bar.dtp-mem-used(style=`width: ${(latestReport.memory.active / latestReport.memory.total) * 100}%;`)= numeral(latestReport.memory.active / latestReport.memory.total).format('0%')
|
||
|
.dtp-mem-stat-bar.dtp-mem-available(style=`width: ${(latestReport.memory.available / latestReport.memory.total) * 100}%;`)= numeral(latestReport.memory.available / latestReport.memory.total).format('0%')
|
||
|
.uk-margin-small-top
|
||
|
div(uk-grid)
|
||
|
+renderStatCell('total', numeral(latestReport.memory.total).format('0,0.0 b'))
|
||
|
+renderStatCell('avail.', numeral(latestReport.memory.available).format('0,0.0 b'))
|
||
|
+renderStatCell('active', numeral(latestReport.memory.active).format('0,0.0 b'))
|
||
|
+renderStatCell('used', numeral(latestReport.memory.used).format('0,0.0 b'))
|
||
|
+renderStatCell('free', numeral(latestReport.memory.free).format('0,0.0 b'))
|
||
|
|
||
|
div(class="uk-width-1-1 uk-width-auto@m")
|
||
|
fieldset
|
||
|
legend [Buffers]
|
||
|
.dtp-stats-bar
|
||
|
.dtp-mem-stat-bar.dtp-mem-cached(style=`width: ${(latestReport.memory.cached / latestReport.memory.buffcache) * 100}%;`)= numeral(latestReport.memory.cached / latestReport.memory.buffcache).format('0%')
|
||
|
.dtp-mem-stat-bar.dtp-mem-buffers(style=`width: ${(latestReport.memory.buffers / latestReport.memory.buffcache) * 100}%;`)= numeral(latestReport.memory.buffers / latestReport.memory.buffcache).format('0%')
|
||
|
.dtp-mem-stat-bar.dtp-mem-slab(style=`width: ${(latestReport.memory.slab / latestReport.memory.buffcache) * 100}%;`)= numeral(latestReport.memory.slab / latestReport.memory.buffcache).format('0%')
|
||
|
.uk-margin-small-top
|
||
|
div(uk-grid)
|
||
|
+renderStatCell('buffers', numeral(latestReport.memory.buffers).format('0,0.0 b'))
|
||
|
+renderStatCell('cached', numeral(latestReport.memory.cached).format('0,0.0 b'))
|
||
|
+renderStatCell('slab', numeral(latestReport.memory.slab).format('0,0.0 b'))
|
||
|
+renderStatCell('buffcache', numeral(latestReport.memory.buffcache).format('0,0.0 b'))
|
||
|
|
||
|
div(class="uk-width-1-1 uk-width-auto@m")
|
||
|
fieldset
|
||
|
legend [Swap]
|
||
|
.dtp-stats-bar
|
||
|
.dtp-mem-stat-bar.dtp-mem-used(style=`width: ${(latestReport.memory.swapused / latestReport.memory.swaptotal) * 100}%;`)= numeral(latestReport.memory.swapused / latestReport.memory.swaptotal).format('0%')
|
||
|
.dtp-mem-stat-bar.dtp-mem-available(style=`width: ${(latestReport.memory.swapfree / latestReport.memory.swaptotal) * 100}%;`)= numeral(latestReport.memory.swapfree / latestReport.memory.swaptotal).format('0%')
|
||
|
.uk-margin-small-top
|
||
|
div(uk-grid)
|
||
|
+renderStatCell('used', numeral(latestReport.memory.swapused).format('0,0.0 b'))
|
||
|
+renderStatCell('free', numeral(latestReport.memory.swapfree).format('0,0.0 b'))
|
||
|
+renderStatCell('total', numeral(latestReport.memory.swaptotal).format('0,0.0 b'))
|
||
|
div(class="uk-width-1-1 uk-width-auto@m")
|
||
|
fieldset
|
||
|
legend [Load Avg]
|
||
|
div(uk-grid)
|
||
|
+renderStatCell('1 min', latestReport.load[0])
|
||
|
+renderStatCell('5 min', latestReport.load[1])
|
||
|
+renderStatCell('15 min', latestReport.load[2])
|
||
|
|
||
|
|
||
|
.dtp-dashboard-cluster.uk-margin
|
||
|
fieldset
|
||
|
legend [Host Cache]
|
||
|
div(uk-grid).uk-flex-between
|
||
|
+renderStatCell('objects', numeral(latestReport.cache.itemCount).format('0,0'))
|
||
|
+renderStatCell('data size', numeral(latestReport.cache.dataSize).format('0,0.00b'))
|
||
|
+renderStatCell('expire count', numeral(latestReport.cache.expireCount).format('0,0'))
|
||
|
+renderStatCell('expire size', numeral(latestReport.cache.expireDataSize).format('0,0.00b'))
|
||
|
+renderStatCell('hits', numeral(latestReport.cache.hitCount).format('0,0'))
|
||
|
+renderStatCell('hit size', numeral(latestReport.cache.hitDataSize).format('0,0.00b'))
|
||
|
+renderStatCell('misses', numeral(latestReport.cache.missCount).format('0,0'))
|
||
|
+renderStatCell('miss size', numeral(latestReport.cache.missDataSize).format('0,0.00b'))
|
||
|
|
||
|
.dtp-dashboard-cluster.uk-margin
|
||
|
div(uk-grid).uk-grid-small
|
||
|
each iface in latestReport.network
|
||
|
div(class="uk-width-1-1 uk-width-auto@m")
|
||
|
fieldset
|
||
|
legend= `[${iface.iface}]`
|
||
|
canvas(data-iface= iface.iface, width="300", height="100").dtp-iface-graph
|
||
|
|
||
|
block viewjs
|
||
|
|
||
|
script(src="/chart.js/chart.min.js")
|
||
|
|
||
|
script.
|
||
|
const dtp = window.dtp = window.dtp || { };
|
||
|
|
||
|
dtp.hostStats = !{JSON.stringify(stats)};
|
||
|
|
||
|
window.addEventListener('dtp-load-admin', ( ) => {
|
||
|
dtp.adminApp.prepareGraphData();
|
||
|
dtp.adminApp.renderCpuGraphs();
|
||
|
dtp.adminApp.renderNetworkGraphs();
|
||
|
});
|