Add API to return current monitors status

https://github.com/virtualmin/authentic-theme/issues/1574#issuecomment-1003697841

Output example:

```
'bind8' => {
    'icon' => '/status/images/down.gif',
    'icon_title' => 'Local',
    'status' => 0,
    'status_text' => '<font color=#ff0000>Down</font>',
    'title' => 'BIND DNS Server'
  },
```
This commit is contained in:
Ilia Rostovtsev
2022-01-02 16:06:01 +03:00
parent d996e99c60
commit 41eeff8eca

View File

@@ -657,5 +657,39 @@ return $up == 1 ? $text{'mon_up'} :
"<font color=#ff0000>$text{'mon_down'}</font>";
}
sub get_services_current_status
{
my (@serv) = @_;
my %monitors;
foreach my $s (@serv) {
my $title = &html_escape($s->{'desc'});
my %monitor;
$monitor{'title'} = $title;
my @stats = &service_status($s, 1);
if ($s->{'depend'}) {
my $ds = &get_service($s->{'depend'});
if ($ds) {
my @dstats = &service_status($ds, 1);
if ($dstats[0]->{'up'} != 1) {
@stats = map {{ 'up' => -4 }} @stats;
}
}
}
my @ups = map {$_->{'up'}} @stats;
my @remotes = map {$_->{'remote'}} @stats;
for (my $i = 0; $i < @ups; $i++) {
my $up = $ups[$i];
my $h = $remotes[$i];
$h = $text{'index_local'} if ($h eq '*');
$monitor{'status'} = $up;
$monitor{'status_text'} = &status_to_string($h);
$monitor{'icon'} = &get_status_icon($up);
$monitor{'icon_title'} = &html_escape($h);
}
$monitors{$s->{'id'}} = \%monitor;
}
return %monitors;
}
1;