Permalink
Browse files

machine-status: Read /etc/nix.machines instead of using the BuildMach…

…ines table
  • Loading branch information...
shlevy committed Mar 4, 2013
1 parent a77161e commit f9426f365b210655c7bf255dd0269358c2fb30ee
Showing with 47 additions and 13 deletions.
  1. +8 −6 src/lib/Hydra/Controller/Root.pm
  2. +29 −1 src/lib/Hydra/Helper/Nix.pm
  3. +10 −6 src/root/machine-status.tt
@@ -74,12 +74,14 @@ sub status :Local {
sub machines :Local Args(0) {
my ($self, $c) = @_;
- $c->stash->{machines} = [$c->model('DB::BuildMachines')->search(
- {},
- { order_by => ["enabled DESC", "hostname"]
- , '+select' => ["(select bs.stoptime from buildsteps as bs where bs.machine = (me.username || '\@' || me.hostname) and not bs.stoptime is null order by bs.stoptime desc limit 1)"]
- , '+as' => ['idle']
- })];
+ my $machines = getMachines;
+ my $idles = $c->model('DB::BuildSteps')->search(
+ { stoptime => { '!=', undef } },
+ { select => [ 'machine', { max => 'stoptime', -as => 'max_stoptime' }], group_by => "machine" });
+ while (my $idle = $idles->next) {
+ ${$machines}{$idle->machine}{'idle'} = $idle->max_stoptime;
+ }
+ $c->stash->{machines} = $machines;
$c->stash->{steps} = [ $c->model('DB::BuildSteps')->search(
{ finished => 0, 'me.busy' => 1, 'build.busy' => 1, },
{ join => [ 'build' ]
@@ -16,7 +16,7 @@ our @EXPORT = qw(
getViewResult getLatestSuccessfulViewResult
jobsetOverview removeAsciiEscapes getDrvLogPath logContents
getMainOutput
- getEvals);
+ getEvals getMachines);
sub getHydraHome {
@@ -373,5 +373,33 @@ sub getEvals {
return [@res];
}
+sub getMachines {
+ my $machinesConf = $ENV{"NIX_REMOTE_SYSTEMS"} || "/etc/nix.machines";
+
+ # Read the list of machines.
+ my %machines = ();
+ if (-e $machinesConf) {
+ open CONF, "<$machinesConf" or die;
+ while (<CONF>) {
+ chomp;
+ s/\#.*$//g;
+ next if /^\s*$/;
+ my @tokens = split /\s/, $_;
+ my @supportedFeatures = split(/,/, $tokens[5] || "");
+ my @mandatoryFeatures = split(/,/, $tokens[6] || "");
+ $machines{$tokens[0]} =
+ { systemTypes => [ split(/,/, $tokens[1]) ]
+ , sshKeys => $tokens[2]
+ , maxJobs => int($tokens[3])
+ , speedFactor => 1.0 * (defined $tokens[4] ? int($tokens[4]) : 1)
+ , supportedFeatures => [ @supportedFeatures, @mandatoryFeatures ]
+ , mandatoryFeatures => [ @mandatoryFeatures ]
+ };
+ }
+ close CONF;
+ }
+ return \%machines;
+}
+
1;
View
@@ -6,18 +6,18 @@
<thead>
<tr>
<th colspan="5">
- [% IF m.enabled == 1 %]
- <a class="btn btn-success btn-mini" href="[% c.uri_for('/admin/machine' m.hostname 'disable' ) %]">Running</a>
+ [% IF m.value.maxJobs > 0 %]
+ Running
[% ELSE %]
- <a class="btn btn-danger btn-mini" href="[% c.uri_for('/admin/machine' m.hostname 'enable' ) %]">Stopped</a>
- [% END %] <tt>[% m.hostname %]</tt> (<tt>[% comma=0; FOREACH ms IN m.buildmachinesystemtypes %][% IF comma; %], [% ELSE; comma = 1; END; ms.system; END %])</tt>
+ Stopped
+ [% END %] <tt>[% m.key %]</tt> (<tt>[% comma=0; FOREACH system IN m.value.systemTypes %][% IF comma; %], [% ELSE; comma = 1; END; system; END %])</tt>
</th>
</tr>
</thead>
<tbody>
[% idle = 1 %]
[% FOREACH step IN steps %]
- [% IF step.machine.match('@(.*)').0 == m.hostname %]
+ [% IF step.machine.match('@(.*)').0 == m.key %]
[% idle = 0 %]
<tr>
<td><tt>[% INCLUDE renderFullJobName project = step.build.project.name jobset = step.build.jobset.name job = step.build.job.name %]</tt></td>
@@ -29,7 +29,11 @@
[% END %]
[% END %]
[% IF idle == 1 %]
- <tr><td colspan="5">Idle since [% INCLUDE renderDuration duration = curTime - m.get_column('idle') %]</td></tr>
+ [% IF m.value.idle %]
+ <tr><td colspan="5">Idle since [% INCLUDE renderDuration duration = curTime - m.value.idle %]</td></tr>
+ [% ELSE %]
+ <tr><td colspan="5">Never built</td></tr>
+ [% END %]
[% END %]
</tbody>
[% END %]

0 comments on commit f9426f3

Please sign in to comment.