File: //usr/share/webmin/gray-theme/right.cgi
#!/usr/bin/perl
# Show server or domain information
use strict;
use warnings;
require 'gray-theme/gray-theme-lib.pl';
&ReadParse();
&load_theme_library();
our ($current_theme, %gconfig);
our %text = &load_language($current_theme);
my $bar_width = 300;
# Get system info to show
my @info = &list_combined_system_info();
my ($redir) = grep { $_->{'type'} eq 'redirect' } @info;
if ($redir) {
&redirect($redir->{'url'});
return;
}
my $prehead = defined(&WebminCore::theme_prehead) ?
&capture_function_output(\&WebminCore::theme_prehead) : "";
&popup_header(undef, $prehead);
print "<center>\n";
# Links appear at the top of the page
my @links = grep { $_->{'type'} eq 'link' } @info;
@info = grep { $_->{'type'} ne 'link' } @info;
if (@links) {
my @linkshtml = map {
my $lnk = $_->{'link'};
$lnk = &get_webprefix().$lnk if ($lnk =~ /^\//);
&ui_link($lnk, $_->{'desc'}, undef,
!$_->{'target'} ? '' :
$_->{'target'} eq 'new' ? 'target=_blank' :
$_->{'target'} eq 'window' ? 'target=_top' : '')
} @links;
print "<div align=right>\n";
print &ui_links_row(\@linkshtml);
print "</div>\n";
}
# Webmin logo
if (&get_product_name() eq 'webmin') {
print "<a href=http://www.webmin.com/ target=_new><img src=images/webmin-blue.png border=0></a><p>\n";
}
# Show notifications first
@info = sort { ($b->{'type'} eq 'warning') <=> ($a->{'type'} eq 'warning') }
@info;
foreach my $info (@info) {
if ($info->{'type'} eq 'warning') {
# An alert message
my $w = &ui_alert_box($info->{'warning'},
$info->{'level'} || 'warn');
if ($info->{'desc'}) {
print &ui_table_start($info->{'desc'}, "width=100%");
print &ui_table_row(undef, $w, 4);
print &ui_table_end();
}
else {
print $w;
}
}
else {
my $open = defined($info->{'open'}) ? $info->{'open'} : 1;
print &ui_hidden_table_start(
$info->{'desc'}, "width=600", 2,
$info->{'module'}.($info->{'id'} || ""), $open);
if ($info->{'type'} eq 'table') {
# A table of various labels and values
if ($info->{'header'}) {
print &ui_table_row(
undef, $info->{'header'}, 4);
}
foreach my $t (@{$info->{'table'}}) {
my $chart = "";
if ($t->{'chart'}) {
$chart = &make_bar_chart(
$t->{'chart'});
$chart = "<br>".$chart;
}
print &ui_table_row($t->{'desc'},
$t->{'value'}.$chart);
}
}
elsif ($info->{'type'} eq 'chart') {
# A table of graphs
my $ctable;
if ($info->{'header'}) {
$ctable .= $info->{'header'}."<br>\n";
}
$ctable .= &ui_columns_start($info->{'titles'});
foreach my $t (@{$info->{'chart'}}) {
$ctable .= &ui_columns_row([
$t->{'desc'},
&make_bar_chart($t->{'chart'}),
$t->{'value'},
]);
}
$ctable .= &ui_columns_end();
print &ui_table_row(undef, $ctable, 2);
}
elsif ($info->{'type'} eq 'html') {
# A chunk of HTML
print &ui_table_row(undef, $info->{'html'}, 2);
}
print &ui_hidden_table_end();
print "<p>\n";
}
}
print "</center>\n";
&popup_footer();
# bar_chart_three(total, used1, used2, used3)
# Returns HTML for a bar chart of three values, stacked
sub bar_chart_three
{
my ($total, $used1, $used2, $used3) = @_;
return "" if (!$total);
my $rv;
my $w1 = int($bar_width*$used1/$total)+1;
my $w2 = int($bar_width*$used2/$total);
my $w3 = int($bar_width*$used3/$total);
$rv .= sprintf "<img src=images/red.gif width=%s height=10>", $w1;
$rv .= sprintf "<img src=images/purple.gif width=%s height=10>", $w2;
$rv .= sprintf "<img src=images/blue.gif width=%s height=10>", $w3;
$rv .= sprintf "<img src=images/grey.gif width=%s height=10>",
$bar_width - $w1 - $w2 - $w3;
return $rv;
}
sub make_bar_chart
{
my ($c) = @_;
my @c = @$c;
if (@c == 2) {
return &bar_chart_three(
$c[0], $c[1], 0, $c[0]-$c[1]);
}
else {
return &bar_chart_three(
$c[0], $c[1], $c[2],
$c[0]-$c[1]-$c[2]);
}
}