Skip to content

Improve statuspage readability #167

Merged
merged 2 commits into from
Apr 25, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
78 changes: 40 additions & 38 deletions web/pages/mxq/mxq.in
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@ our %DAEMON_STATUS_NAME;
our $dbh;
our $hostconfig;
our $q;
our $NL="\n";

our $LIMIT=100000; # max rows

sub STYLE {
return <<'EOF';
<style>
body { background:#ddd; }
body { background:#E0E0E0; }


div.dumper {border: 2px solid black; border-radius: 5px; margin: 10px 0; padding: 0 10px;background: #faa; }
Expand All @@ -30,14 +31,14 @@ table.server, table.server th,table.server td {font-family:monospace; border: 1p
td.number { text-align: right; }

tr.bg0 { background: #F0F0F0; }
tr.bg1 { background: #E0E0E0; }
tr.bg1 { background: #E4E4E4; }

</style>
EOF
}

sub HEAD {
return "<!DOCTYPE html><html>\n<head>\n".STYLE()."</head>\n";
return "<!DOCTYPE html><html>\n<head>\n".STYLE()."</head>\n"."<body>";
}

sub selfurl {
Expand Down Expand Up @@ -200,10 +201,10 @@ sub colorize {

sub colorize_status {
my ($status)=@_;
return colorize("green", $status) if $status =~ m/FINISHED/;
return colorize("orange",$status) if $status =~ m/RUNNING/;
return colorize("blue", $status) if $status =~ m/INQ/;
return colorize("red", $status) if $status =~ m/KILL|FAIL/;
return colorize("green", $status) if $status =~ m/FINISHED/;
return colorize("chocolate",$status) if $status =~ m/RUNNING/;
return colorize("blue", $status) if $status =~ m/INQ/;
return colorize("red", $status) if $status =~ m/KILL|FAIL/;
return $status;
}

Expand All @@ -224,23 +225,23 @@ sub job_table_pending {
my $sth=$dbh->prepare('SELECT '.join(',',@cols).' FROM mxq_job,mxq_group WHERE mxq_job.group_id=mxq_group.group_id AND job_status=0 ORDER BY job_status,date_submit');
$sth->execute(@bind_args);

$out.='<table class="jobs">';
$out.=$NL.'<table class="jobs">';

$out.=$q->Tr($q->th(\@cols));
$out.=$NL.$q->Tr($q->th(\@cols));

my $cnt=0;
while (my $row=$sth->fetchrow_arrayref()) {
my ($job_id,$user_name,$date_submit,$job_threads)=@$row;

$out.=$q->Tr(
$out.=$NL.$q->Tr(
$q->td({class=>'number'},$q->a({href=>selfurl("/job/$job_id")},$job_id)),
$q->td($user_name),
$q->td($date_submit),
$q->td({class=>'number'},$job_threads),
);
++$cnt == $LIMIT and last;
}
$out.='</table>';
$out.=$NL.'</table>'.$NL;
if ($cnt==$LIMIT) {
$out.=$q->p($q->em("(truncated after $LIMIT rows)"));
}
Expand All @@ -258,14 +259,14 @@ sub job_table_running {
my $sth=$dbh->prepare('SELECT '.join(',',@cols).' FROM mxq_job,mxq_group WHERE mxq_job.group_id=mxq_group.group_id AND job_status=200 ORDER BY job_status,date_start');
$sth->execute(@bind_args);

$out.='<table class="jobs">';
$out.=$NL.'<table class="jobs">';

$out.=$q->Tr($q->th(\@cols));
$out.=$NL.$q->Tr($q->th(\@cols));

while (my $row=$sth->fetchrow_arrayref()) {
my ($job_id,$user_name,$date_start,$host_hostname,$host_pid,$host_slots)=@$row;

$out.=$q->Tr(
$out.=$NL.$q->Tr(
$q->td({class=>'number'},$q->a({href=>selfurl("/job/$job_id")},$job_id)),
$q->td($user_name),
$q->td($date_start),
Expand All @@ -274,7 +275,7 @@ sub job_table_running {
$q->td({class=>'number'},$host_slots),
);
}
$out.='</table>';
$out.=$NL.'</table>'.$NL;
}

sub job_table_of_group {
Expand Down Expand Up @@ -308,9 +309,9 @@ sub job_table_of_group {
__EOF__
$sth->execute($group_id);

$out.='<table class="jobs">';
$out.=$NL.'<table class="jobs">';

$out.=$q->Tr($q->th(\@scols));
$out.=$NL.$q->Tr($q->th(\@scols));

my $lds;
my $col=1;
Expand All @@ -334,11 +335,11 @@ __EOF__

if (defined $lds && abs($lds-$ds)>10) {
$col = 1-$col;
$out.=$q->Tr($q->td('&nbsp;'));
$out.=$NL.$q->Tr($q->td('&nbsp;'));
}
$lds=$ds;

$out.=$q->Tr(
$out.=$NL.$q->Tr(
{class=>'bg'.$col},
$q->td({class=>'number'},$q->a({href=>selfurl("/job/$job_id")},$job_id)),
$q->td(colorize_status(job_status($job_status))),
Expand All @@ -349,7 +350,7 @@ __EOF__
);
++$cnt == $LIMIT and last;
}
$out.='</table>';
$out.=$NL.'</table>'.$NL;
if ($cnt==$LIMIT) {
$out.=$q->p($q->em("(truncated after $LIMIT rows)"));
}
Expand Down Expand Up @@ -684,16 +685,16 @@ sub group_table {
my $sth=$dbh->prepare('SELECT '.join(',',@cols).' FROM mxq_group WHERE '.$sql_clause.' AND (group_jobs_running>0 OR group_jobs_inq>0) ORDER BY group_id DESC');
$sth->execute(@$sql_binds);

$out.='<table class="groups">';
$out.=$q->Tr($q->th(\@head));
$out.=$NL.'<table class="groups">';
$out.=$NL.$q->Tr($q->th(\@head));
while (my $row=$sth->fetchrow_arrayref()) {
my ($group_id,$group_name,$job_threads,
$job_memory,$job_time,$job_tmpdir_size,$job_gpu,
$user_name,$group_status,
$group_jobs,$group_jobs_inq,$group_jobs_running,$group_jobs_finished,$group_jobs_failed,$group_jobs_cancelled,$group_jobs_unknown
)=@$row;

$out.=$q->Tr(
$out.=$NL.$q->Tr(
$q->td({class=>'number'},$q->a({href=>selfurl("/group/$group_id")},$group_id)),
$q->td($group_name),
$q->td({class=>'number'},$job_threads),
Expand All @@ -705,14 +706,14 @@ sub group_table {
$q->td(group_status($group_status)),
$q->td({class=>'number'},$group_jobs),
$q->td({class=>'number'},colorize("blue",$group_jobs_inq)),
$q->td({class=>'number'},colorize("orange",$group_jobs_running)),
$q->td({class=>'number'},colorize("chocolate",$group_jobs_running)),
$q->td({class=>'number'},colorize("green",$group_jobs_finished)),
$q->td({class=>'number'},colorize("red",$group_jobs_failed)),
$q->td({class=>'number'},colorize("red",$group_jobs_cancelled)),
$q->td({class=>'number'},colorize("red",$group_jobs_unknown))
);
}
$out.='</table>';
$out.=$NL.'</table>'.$NL;

$out .= "<h2>Finished Groups (last $days days) </h2>";

Expand Down Expand Up @@ -749,8 +750,8 @@ sub group_table {
$sth=$dbh->prepare('SELECT '.join(',',@cols).' FROM mxq_group WHERE '.$sql_clause.' AND (group_jobs_running=0 AND group_jobs_inq=0) AND group_mtime >= DATE_SUB(NOW(),INTERVAL ? DAY) ORDER BY group_id DESC');
$sth->execute(@$sql_binds,$days);

$out.='<table class="groups">';
$out.=$q->Tr($q->th(\@head));
$out.=$NL.'<table class="groups">';
$out.=$NL.$q->Tr($q->th(\@head));
while (my $row=$sth->fetchrow_arrayref()) {
my ($group_id,$group_name,$job_threads,
$job_memory,
Expand All @@ -762,7 +763,7 @@ sub group_table {
$group_jobs,$group_jobs_finished,$group_jobs_failed,$group_jobs_cancelled,$group_jobs_unknown
)=@$row;

$out.=$q->Tr(
$out.=$NL.$q->Tr(
$q->td({class=>'number'},$q->a({href=>selfurl("/group/$group_id")},$group_id)),
$q->td($group_name),
$q->td({class=>'number'},$job_threads),
Expand All @@ -779,7 +780,7 @@ sub group_table {
$q->td({class=>'number'},colorize("red",$group_jobs_unknown))
);
}
$out.='</table>';
$out.=$NL.'</table>'.$NL;

return $out;
}
Expand Down Expand Up @@ -835,9 +836,9 @@ sub server() {
my $sth=$dbh->prepare('SELECT '.join(',',@cols).' FROM mxq_daemon WHERE status<=200 ORDER BY hostname,daemon_name');
$sth->execute();

$out.='<table class="server">';
$out.=$NL.'<table class="server">';

$out.=$q->Tr($q->th([
$out.=$NL.$q->Tr($q->th([
'id',
'name',
'status',
Expand Down Expand Up @@ -887,7 +888,7 @@ sub server() {

delete($dead_hosts->{$hostname});

$out.=$q->Tr(
$out.=$NL.$q->Tr(
$q->td({class=>'number'},$q->a({href=>selfurl("/server/$daemon_id")},$daemon_id)),
$q->td($daemon_name),
$q->td(daemon_status($status)),
Expand All @@ -913,12 +914,12 @@ sub server() {
);
}
map {
$out.=$q->Tr( $q->td(0),$q->td('-'),$q->td('no mxqd'),$q->td($_),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'));
$out.=$NL.$q->Tr( $q->td(0),$q->td('-'),$q->td('no mxqd'),$q->td($_),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'),$q->td('&nbsp;'));
} keys %{$dead_hosts};

$out.=$q->Tr($q->td({colspan=>16},'&nbsp;'));
$out.=$NL.$q->Tr($q->td({colspan=>16},'&nbsp;'));
my $dist = join(', ',map {"$S{daemon_slots_dist}->{$_}x$_"} sort {$b <=> $a} keys %{$S{daemon_slots_dist}});
$out.=$q->Tr(
$out.=$NL.$q->Tr(
$q->td({class=>'center', colspan=>3},$S{servers}.' servers'),
$q->td($dist),
$q->td({class=>'center', colspan=>3},$S{daemon_slots}.' cores'),
Expand All @@ -933,16 +934,16 @@ sub server() {
$q->td({class=>'number'},$S{daemon_gpus_used_sum})
);

$out.='</table>';
$out.=$NL.'</table>'.$NL;
return $out;
}

sub top_menu {
return '<table class="menu">' . $q->Tr(
return $NL.'<table class="menu">' . $NL . $q->Tr(
$q->td(a({href=>selfurl('/groups')},'groups')),$q->td('&nbsp;'),
$q->td(a({href=>selfurl('/active_jobs')},'active_jobs')),$q->td('&nbsp;'),
$q->td(a({href=>selfurl('/server')},'server'))
).'</table>';
).$NL.'</table>'.$NL;
}

$q=new CGI;
Expand Down Expand Up @@ -975,3 +976,4 @@ if ($path_info eq '') {
} else {
print header(-status => 404).HEAD().top_menu().'<h1>not found</h1>';
}
print "</body>\n</html>\n";