machine-status: Make new runner status prettier
- Remove bottom margin - Properly format memory in human format - Calculate free memory - Format the load with 2 digits after comma - Lpad pressure percentages - Use a macro to render pressure - Score -> Scheduling Score - More spacing in the load - Add IRQ pressure
This commit is contained in:
@@ -110,6 +110,7 @@ let
|
||||
NetAmazonS3
|
||||
NetPrometheus
|
||||
NetStatsd
|
||||
NumberBytesHuman
|
||||
PadWalker
|
||||
ParallelForkManager
|
||||
PerlCriticCommunity
|
||||
|
@@ -9,6 +9,7 @@ use Hydra::Helper::CatalystUtils;
|
||||
use Hydra::View::TT;
|
||||
use Nix::Store;
|
||||
use Nix::Config;
|
||||
use Number::Bytes::Human qw(format_bytes);
|
||||
use Encode;
|
||||
use File::Basename;
|
||||
use JSON::MaybeXS;
|
||||
@@ -215,6 +216,19 @@ sub machines :Local Args(0) {
|
||||
"where busy != 0 order by machine, stepnr",
|
||||
{ Slice => {} });
|
||||
$c->stash->{template} = 'machine-status.tt';
|
||||
$c->stash->{human_bytes} = sub {
|
||||
my ($bytes) = @_;
|
||||
return format_bytes($bytes, si => 1);
|
||||
};
|
||||
$c->stash->{pretty_load} = sub {
|
||||
my ($load) = @_;
|
||||
return sprintf('%.2f', $load);
|
||||
};
|
||||
$c->stash->{pretty_percent} = sub {
|
||||
my ($percent) = @_;
|
||||
my $ret = sprintf('%.2f', $percent);
|
||||
return (' ' x (6 - length($ret))) . $ret;
|
||||
};
|
||||
$self->status_ok($c, entity => $c->stash->{machines});
|
||||
}
|
||||
|
||||
|
@@ -25,36 +25,29 @@
|
||||
</span>
|
||||
|
||||
[% WRAPPER makePopover title="Details" classes="btn-secondary btn-sm" %]
|
||||
<ul class="list-unstyled">
|
||||
<ul class="list-unstyled mb-0">
|
||||
<li><b>System types: </b>[% comma=0; FOREACH system IN m.value.systemTypes %][% IF comma; %], [% ELSE; comma = 1; END %]<tt>[% system %]</tt>[% END %]</li>
|
||||
<li><b>Supported Features: </b>[% comma=0; FOREACH feat IN m.value.supportedFeatures %][% IF comma; %], [% ELSE; comma = 1; END %]<tt>[% feat %]</tt>[% END %]</li>
|
||||
<li><b>Mandatory Features: </b>[% comma=0; FOREACH feat IN m.value.mandatoryFeatures %][% IF comma; %], [% ELSE; comma = 1; END %]<tt>[% feat %]</tt>[% END %]</li>
|
||||
<li><b>Capacity: </b>[% INCLUDE renderYesNo value=m.value.hasCapacity %] <b>Static: </b>[% INCLUDE renderYesNo value=m.value.hasStaticCapacity %] <b>Dynamic: </b>[% INCLUDE renderYesNo value=m.value.hasDynamicCapacity %]</li>
|
||||
<li><b>Score: </b>[% m.value.score %]</li>
|
||||
<li><b>Load: </b><tt>[% m.value.stats.load1 %]</tt> <tt>[% m.value.stats.load5 %]</tt> <tt>[% m.value.stats.load15 %]</tt></li>
|
||||
<li><b>Memory: </b><tt>[% mibs(m.value.stats.memUsage / (1024 * 1024)) %] MiB</tt> bytes of <tt>[% mibs(m.value.memTotal / (1024 * 1024)) %] MiB</tt> bytes used</li>
|
||||
<li><b>Scheduling Score: </b>[% m.value.score %]</li>
|
||||
<li><b>Load: </b><tt>[% pretty_load(m.value.stats.load1) %]</tt> <tt>[% pretty_load(m.value.stats.load5) %]</tt> <tt>[% pretty_load(m.value.stats.load15) %]</tt></li>
|
||||
<li><b>Memory: </b><tt>[% human_bytes(m.value.stats.memUsage) %]</tt> of <tt>[% human_bytes(m.value.memTotal) %]</tt> used (<tt>[% human_bytes(m.value.memTotal - m.value.stats.memUsage) %]</tt> free)</li>
|
||||
[% pressure = m.value.stats.pressure %]
|
||||
[% MACRO render_pressure(title, pressure) BLOCK %]
|
||||
[% IF pressure %]
|
||||
<tr><td><b>[% title %]:</b></td><td><tt>[% pretty_percent(pressure.avg10) %]%</tt></td><td><td><tt>[% pretty_percent(pressure.avg60) %]%</tt></td><td><td><tt>[% pretty_percent(pressure.avg300) %]%</tt></td><td>
|
||||
[% END %]
|
||||
[% END %]
|
||||
[% IF pressure %]
|
||||
<li><b>Pressure: </b>
|
||||
<table class="pressureTable">
|
||||
[% IF pressure.cpuSome %]
|
||||
<tr><td><b>Some CPU:</b></td><td><tt>[% pressure.cpuSome.avg10 %]%</tt></td><td><td><tt>[% pressure.cpuSome.avg60 %]%</tt></td><td><td><tt>[% pressure.cpuSome.avg300 %]%</tt></td><td>
|
||||
[% END %]
|
||||
[% IF pressure.ioSome %]
|
||||
<tr><td><b>Some IO:</b></td><td><tt>[% pressure.ioSome.avg10 %]%</tt></td><td><td><tt>[% pressure.ioSome.avg60 %]%</tt></td><td><td><tt>[% pressure.ioSome.avg300 %]%</tt></td><td>
|
||||
[% END %]
|
||||
[% IF pressure.ioFull %]
|
||||
<tr><td><b>Full IO:</b></td><td><tt>[% pressure.ioFull.avg10 %]%</tt></td><td><td><tt>[% pressure.ioFull.avg60 %]%</tt></td><td><td><tt>[% pressure.ioFull.avg300 %]%</tt></td><td>
|
||||
[% END %]
|
||||
[% IF pressure.irqFull %]
|
||||
<tr><td><b>Full IRQ:</b></td><td><tt>[% pressure.irqFull.avg10 %]%</tt></td><td><td><tt>[% pressure.irqFull.avg60 %]%</tt></td><td><td><tt>[% pressure.irqFull.avg300 %]%</tt></td><td>
|
||||
[% END %]
|
||||
[% IF pressure.memSome %]
|
||||
<tr><td><b>Some Memory:</b></td><td><tt>[% pressure.memSome.avg10 %]%</tt></td><td><td><tt>[% pressure.memSome.avg60 %]%</tt></td><td><td><tt>[% pressure.memSome.avg300 %]%</tt></td><td>
|
||||
[% END %]
|
||||
[% IF pressure.memFull %]
|
||||
<tr><td><b>Full Memory:</b></td><td><tt>[% pressure.memFull.avg10 %]%</tt></td><td><td><tt>[% pressure.memFull.avg60 %]%</tt></td><td><td><tt>[% pressure.memFull.avg300 %]%</tt></td><td>
|
||||
[% END %]
|
||||
[% render_pressure('Some CPU', pressure.cpuSome) %]
|
||||
[% render_pressure('Some IO', pressure.ioSome) %]
|
||||
[% render_pressure('Full IO', pressure.ioFull) %]
|
||||
[% render_pressure('Full IRQ', pressure.irqFull) %]
|
||||
[% render_pressure('Some Memory', pressure.memSome) %]
|
||||
[% render_pressure('Full Memory', pressure.memFull) %]
|
||||
</table>
|
||||
</li>
|
||||
[% END %]
|
||||
|
Reference in New Issue
Block a user