Linux mail.vriendennsm.nl 6.1.0-51-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.177-1 (2026-07-16) x86_64
Apache/2.4.68 (Debian)
Server IP : 217.154.75.17 & Your IP : 216.73.216.195
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
share /
webmin /
status /
Delete
Unzip
Name
Size
Permission
Date
Action
help
[ DIR ]
drwxr-xr-x
2026-07-25 20:55
images
[ DIR ]
drwxr-xr-x
2026-07-25 20:55
lang
[ DIR ]
drwxr-xr-x
2026-07-25 20:55
services
[ DIR ]
drwxr-xr-x
2026-07-25 20:55
CHANGELOG
6.42
KB
-rw-r--r--
2026-07-17 21:17
WEBMIN-STATUS-MIB.txt
1.52
KB
-rw-r--r--
2026-07-17 21:17
acl_security.pl
508
B
-rwxr-xr-x
2026-07-17 21:17
alive-monitor.pl
261
B
-rwxr-xr-x
2026-07-17 21:17
apache-monitor.pl
714
B
-rwxr-xr-x
2026-07-17 21:17
backup_config.pl
801
B
-rwxr-xr-x
2026-07-17 21:17
bind8-monitor.pl
710
B
-rwxr-xr-x
2026-07-17 21:17
cgi_args.pl
321
B
-rwxr-xr-x
2026-07-17 21:17
change-monitor.pl
791
B
-rwxr-xr-x
2026-07-17 21:17
config
182
B
-rw-r--r--
2026-07-17 21:17
config-ALL-linux
210
B
-rw-r--r--
2026-07-17 21:17
config-debian-linux
225
B
-rw-r--r--
2026-07-17 21:17
config-debian-linux-3.0
216
B
-rw-r--r--
2026-07-17 21:17
config-debian-linux-3.1-ALL
216
B
-rw-r--r--
2026-07-17 21:17
config-freebsd
195
B
-rw-r--r--
2026-07-17 21:17
config-hpux
182
B
-rw-r--r--
2026-07-17 21:17
config-netbsd
182
B
-rw-r--r--
2026-07-17 21:17
config-solaris
182
B
-rw-r--r--
2026-07-17 21:17
config-syno-linux
197
B
-rw-r--r--
2026-07-17 21:17
config.info
1.09
KB
-rw-r--r--
2026-07-17 21:17
config.info.ca
1.31
KB
-rw-r--r--
2026-07-17 21:17
config.info.cs
802
B
-rw-r--r--
2026-07-17 21:17
config.info.de
1.28
KB
-rw-r--r--
2026-07-17 21:17
config.info.es
659
B
-rw-r--r--
2026-07-17 21:17
config.info.fa
994
B
-rw-r--r--
2026-07-17 21:17
config.info.fr
1.42
KB
-rw-r--r--
2026-07-17 21:17
config.info.hu
0
B
-rw-r--r--
2026-07-17 21:17
config.info.it
0
B
-rw-r--r--
2026-07-17 21:17
config.info.ja
1.04
KB
-rw-r--r--
2026-07-17 21:17
config.info.ko
764
B
-rw-r--r--
2026-07-17 21:17
config.info.nl
984
B
-rw-r--r--
2026-07-17 21:17
config.info.no
962
B
-rw-r--r--
2026-07-17 21:17
config.info.pl
1021
B
-rw-r--r--
2026-07-17 21:17
config.info.ru
486
B
-rw-r--r--
2026-07-17 21:17
config.info.sv
99
B
-rw-r--r--
2026-07-17 21:17
config.info.tr
567
B
-rw-r--r--
2026-07-17 21:17
config.info.uk
479
B
-rw-r--r--
2026-07-17 21:17
config.info.zh
86
B
-rw-r--r--
2026-07-17 21:17
config.info.zh_TW
229
B
-rw-r--r--
2026-07-17 21:17
consume-monitor.pl
1.89
KB
-rwxr-xr-x
2026-07-17 21:17
defaultacl
15
B
-rw-r--r--
2026-07-17 21:17
delete_mons.cgi
1.52
KB
-rwxr-xr-x
2026-07-17 21:22
delete_tmpls.cgi
712
B
-rwxr-xr-x
2026-07-17 21:22
dhcpd-monitor.pl
616
B
-rwxr-xr-x
2026-07-17 21:17
dns-monitor.pl
1.3
KB
-rwxr-xr-x
2026-07-17 21:17
dovecot-monitor.pl
302
B
-rwxr-xr-x
2026-07-17 21:17
du-monitor.pl
790
B
-rw-r--r--
2026-07-17 21:17
edit_mon.cgi
9.75
KB
-rwxr-xr-x
2026-07-17 21:22
edit_sched.cgi
4.62
KB
-rwxr-xr-x
2026-07-17 21:22
edit_tmpl.cgi
1.81
KB
-rwxr-xr-x
2026-07-17 21:22
exec-monitor.pl
1.52
KB
-rwxr-xr-x
2026-07-17 21:17
fail2ban-monitor.pl
516
B
-rwxr-xr-x
2026-07-17 21:17
feedback_files.pl
175
B
-rwxr-xr-x
2026-07-17 21:17
file-monitor.pl
3.35
KB
-rwxr-xr-x
2026-07-17 21:17
firewalld-monitor.pl
242
B
-rw-r--r--
2026-07-17 21:17
ftp-monitor.pl
3.05
KB
-rwxr-xr-x
2026-07-17 21:17
hostsentry-monitor.pl
521
B
-rwxr-xr-x
2026-07-17 21:17
http-monitor.pl
4.24
KB
-rwxr-xr-x
2026-07-17 21:17
iface-monitor.pl
908
B
-rwxr-xr-x
2026-07-17 21:17
imap-monitor.pl
1.78
KB
-rw-r--r--
2026-07-17 21:17
index.cgi
5
KB
-rwxr-xr-x
2026-07-17 21:22
inetd-monitor.pl
399
B
-rwxr-xr-x
2026-07-17 21:17
init-monitor.pl
576
B
-rw-r--r--
2026-07-17 21:17
ldap-monitor.pl
1.51
KB
-rwxr-xr-x
2026-07-17 21:17
list_tmpls.cgi
1.07
KB
-rwxr-xr-x
2026-07-17 21:22
load-monitor.pl
1.1
KB
-rwxr-xr-x
2026-07-17 21:17
log_parser.pl
723
B
-rwxr-xr-x
2026-07-17 21:17
mailq-monitor.pl
1.3
KB
-rwxr-xr-x
2026-07-17 21:17
memory-monitor.pl
1.55
KB
-rwxr-xr-x
2026-07-17 21:17
module.info
168
B
-rw-r--r--
2026-07-17 21:17
module.info.ar
0
B
-rw-r--r--
2026-07-17 21:17
module.info.ar.auto
167
B
-rw-r--r--
2026-07-17 21:17
module.info.bg
0
B
-rw-r--r--
2026-07-17 21:17
module.info.bg.auto
247
B
-rw-r--r--
2026-07-17 21:17
module.info.ca
118
B
-rw-r--r--
2026-07-17 21:17
module.info.ca.auto
14
B
-rw-r--r--
2026-07-17 21:17
module.info.cs
33
B
-rw-r--r--
2026-07-17 21:17
module.info.cs.auto
105
B
-rw-r--r--
2026-07-17 21:17
module.info.da
0
B
-rw-r--r--
2026-07-17 21:17
module.info.da.auto
120
B
-rw-r--r--
2026-07-17 21:17
module.info.de
121
B
-rw-r--r--
2026-07-17 21:17
module.info.de.auto
15
B
-rw-r--r--
2026-07-17 21:17
module.info.el
0
B
-rw-r--r--
2026-07-17 21:17
module.info.el.auto
274
B
-rw-r--r--
2026-07-17 21:17
module.info.es
40
B
-rw-r--r--
2026-07-17 21:17
module.info.es.auto
95
B
-rw-r--r--
2026-07-17 21:17
module.info.eu
0
B
-rw-r--r--
2026-07-17 21:17
module.info.eu.auto
132
B
-rw-r--r--
2026-07-17 21:17
module.info.fa
0
B
-rw-r--r--
2026-07-17 21:17
module.info.fa.auto
185
B
-rw-r--r--
2026-07-17 21:17
module.info.fi
0
B
-rw-r--r--
2026-07-17 21:17
module.info.fi.auto
134
B
-rw-r--r--
2026-07-17 21:17
module.info.fr
42
B
-rw-r--r--
2026-07-17 21:17
module.info.fr.auto
107
B
-rw-r--r--
2026-07-17 21:17
module.info.hr
0
B
-rw-r--r--
2026-07-17 21:17
module.info.hr.auto
134
B
-rw-r--r--
2026-07-17 21:17
module.info.hu
37
B
-rw-r--r--
2026-07-17 21:17
module.info.hu.auto
99
B
-rw-r--r--
2026-07-17 21:17
module.info.it
39
B
-rw-r--r--
2026-07-17 21:17
module.info.it.auto
96
B
-rw-r--r--
2026-07-17 21:17
module.info.ja
57
B
-rw-r--r--
2026-07-17 21:17
module.info.ja.auto
130
B
-rw-r--r--
2026-07-17 21:17
module.info.ko
36
B
-rw-r--r--
2026-07-17 21:17
module.info.ko.auto
92
B
-rw-r--r--
2026-07-17 21:17
module.info.ms
119
B
-rw-r--r--
2026-07-17 21:17
module.info.ms.auto
15
B
-rw-r--r--
2026-07-17 21:17
module.info.nl
33
B
-rw-r--r--
2026-07-17 21:17
module.info.nl.auto
97
B
-rw-r--r--
2026-07-17 21:17
module.info.no
32
B
-rw-r--r--
2026-07-17 21:17
module.info.no.auto
96
B
-rw-r--r--
2026-07-17 21:17
module.info.pl
97
B
-rw-r--r--
2026-07-17 21:17
module.info.pl.auto
15
B
-rw-r--r--
2026-07-17 21:17
module.info.pt
0
B
-rw-r--r--
2026-07-17 21:17
module.info.pt.auto
133
B
-rw-r--r--
2026-07-17 21:17
module.info.pt_BR
0
B
-rw-r--r--
2026-07-17 21:17
module.info.pt_BR.auto
142
B
-rw-r--r--
2026-07-17 21:17
module.info.ru
56
B
-rw-r--r--
2026-07-17 21:17
module.info.ru.auto
165
B
-rw-r--r--
2026-07-17 21:17
module.info.sk
33
B
-rw-r--r--
2026-07-17 21:17
module.info.sk.auto
106
B
-rw-r--r--
2026-07-17 21:17
module.info.sv
33
B
-rw-r--r--
2026-07-17 21:17
module.info.sv.auto
92
B
-rw-r--r--
2026-07-17 21:17
module.info.tr
32
B
-rw-r--r--
2026-07-17 21:17
module.info.tr.auto
105
B
-rw-r--r--
2026-07-17 21:17
module.info.uk
0
B
-rw-r--r--
2026-07-17 21:17
module.info.uk.auto
208
B
-rw-r--r--
2026-07-17 21:17
module.info.zh
36
B
-rw-r--r--
2026-07-17 21:17
module.info.zh.auto
76
B
-rw-r--r--
2026-07-17 21:17
module.info.zh_TW
40
B
-rw-r--r--
2026-07-17 21:17
module.info.zh_TW.auto
82
B
-rw-r--r--
2026-07-17 21:17
mon-monitor.pl
431
B
-rwxr-xr-x
2026-07-17 21:17
monitor.pl
18.03
KB
-rwxr-xr-x
2026-07-17 21:22
mysql-monitor.pl
450
B
-rwxr-xr-x
2026-07-17 21:17
nfs-monitor.pl
410
B
-rwxr-xr-x
2026-07-17 21:17
oldfile-monitor.pl
864
B
-rwxr-xr-x
2026-07-17 21:17
phpini-monitor.pl
1.32
KB
-rw-r--r--
2026-07-17 21:17
ping-monitor.pl
6.89
KB
-rwxr-xr-x
2026-07-17 21:17
portsentry-monitor.pl
535
B
-rwxr-xr-x
2026-07-17 21:17
postfix-monitor.pl
509
B
-rwxr-xr-x
2026-07-17 21:17
postgresql-monitor.pl
480
B
-rwxr-xr-x
2026-07-17 21:17
prefs.info
58
B
-rw-r--r--
2026-07-17 21:17
proc-monitor.pl
1.7
KB
-rwxr-xr-x
2026-07-17 21:17
proftpd-monitor.pl
842
B
-rwxr-xr-x
2026-07-17 21:17
qmailadmin-monitor.pl
424
B
-rwxr-xr-x
2026-07-17 21:17
query-monitor.pl
5.08
KB
-rwxr-xr-x
2026-07-17 21:17
raid-monitor.pl
1.66
KB
-rwxr-xr-x
2026-07-17 21:17
reboot-monitor.pl
503
B
-rw-r--r--
2026-07-17 21:17
refresh.cgi
550
B
-rwxr-xr-x
2026-07-17 21:22
rssh-monitor.pl
2.63
KB
-rwxr-xr-x
2026-07-17 21:17
safeacl
15
B
-rw-r--r--
2026-07-17 21:17
samba-monitor.pl
453
B
-rwxr-xr-x
2026-07-17 21:17
save_mon.cgi
3.27
KB
-rwxr-xr-x
2026-07-17 21:22
save_sched.cgi
2.96
KB
-rwxr-xr-x
2026-07-17 21:22
save_tmpl.cgi
1.25
KB
-rwxr-xr-x
2026-07-17 21:22
sendmail-monitor.pl
682
B
-rwxr-xr-x
2026-07-17 21:17
sensors-monitor.pl
3.9
KB
-rwxr-xr-x
2026-07-17 21:17
slapd-monitor.pl
606
B
-rwxr-xr-x
2026-07-17 21:17
smtp-monitor.pl
5.22
KB
-rw-r--r--
2026-07-17 21:17
space-monitor.pl
3.09
KB
-rwxr-xr-x
2026-07-17 21:17
squid-monitor.pl
881
B
-rwxr-xr-x
2026-07-17 21:17
sshd-monitor.pl
817
B
-rwxr-xr-x
2026-07-17 21:17
sslcert-monitor.pl
4.54
KB
-rwxr-xr-x
2026-07-17 21:17
status-lib.pl
18.02
KB
-rwxr-xr-x
2026-07-17 21:17
status_monitor_api.pl
593
B
-rwxr-xr-x
2026-07-17 21:17
system_info.pl
1.49
KB
-rw-r--r--
2026-07-17 21:17
tcp-monitor.pl
1.32
KB
-rwxr-xr-x
2026-07-17 21:17
traffic-monitor.pl
2.4
KB
-rwxr-xr-x
2026-07-17 21:17
uninstall.pl
434
B
-rwxr-xr-x
2026-07-17 21:17
usermin-monitor.pl
496
B
-rwxr-xr-x
2026-07-17 21:17
webmin-monitor.pl
363
B
-rwxr-xr-x
2026-07-17 21:17
xinetd-monitor.pl
491
B
-rwxr-xr-x
2026-07-17 21:17
Save
Rename
#!/usr/bin/perl # edit_mon.cgi # Display a form for editing or creating a monitor require './status-lib.pl'; $access{'edit'} || &error($text{'mon_ecannot'}); &foreign_require("servers", "servers-lib.pl"); &ReadParse(); @handlers = &list_handlers(); &error_setup($text{'mon_err'}); if (!$in{'type'} && !$in{'id'}) { &error($text{'mon_etype2'}); } if ($in{'type'}) { # Create a new monitor $in{'type'} =~ /^[a-zA-Z0-9\_\-\.\:]+$/ || &error($text{'mon_etype'}); $type = $in{'type'}; $title = $text{'mon_create'}; if ($in{'clone'}) { # Clone of existing $serv = &get_service($in{'clone'}); } else { # Totally new $serv = { 'notify' => 'email pager snmp sms webhook', 'fails' => 1, 'nosched' => 0, 'remote' => '*' }; } } else { # Editing an existing monitor $serv = &get_service($in{'id'}); $type = $serv->{'type'}; $title = $text{'mon_edit'}; } ($han) = grep { $_->[0] eq $type } @handlers; if ($in{'type'} && !$in{'clone'}) { $serv->{'desc'} = $han->[1]; } &ui_print_header($han->[1], $title, ""); if ($serv->{'virtualmin'} && &foreign_check("virtual-server")) { # Owned by a Virtualmin domain - don't recommend editing &foreign_require("virtual-server"); $d = &virtual_server::get_domain($serv->{'virtualmin'}); if ($d) { print &ui_alert_box(&text('mon_virtualmin', &virtual_server::show_domain_name($d)), 'warn'); } } print &ui_form_start("save_mon.cgi", "post"); print &ui_hidden("type", $in{'type'}),"\n"; print &ui_hidden("id", $in{'id'}),"\n"; @tds = ( "width=30%" ); print &ui_table_start($text{'mon_header'}, "width=100%", 2, \@tds); # Check for clone modules of the monitor type ($mod = $type) =~ s/::.*$//; @minfos = &get_all_module_infos(); ($minfo) = grep { $_->{'dir'} eq $mod } @minfos; if ($minfo) { @clones = grep { $_->{'cloneof'} eq $minfo->{'dir'} } @minfos; } # Show input for description print &ui_table_row($text{'mon_desc'}, &ui_textbox("desc", $serv->{'desc'}, 50), undef, \@tds); # Show current status if (!$in{'type'}) { @stats = &service_status($serv, 1); $stable = "<table cellpadding=1 cellspacing=1>\n"; foreach $stat (@stats) { $stable .= "<tr>\n"; if (@stats > 1 || $stat->{'remote'} ne "*") { $stable .= "<td>". ($stat->{'remote'} eq "*" ? $text{'mon_local'} : $stat->{'remote'}). "</td>\n"; $stable .= "<td>:</td>\n"; } $stable .= "<td>". ($stat->{'desc'} && $stat->{'up'} == 0 ? "<font color=#ff0000>$stat->{'desc'}</font>" : $stat->{'desc'} ? $stat->{'desc'} : &status_to_string($stat->{'up'}, $serv)). "</td>\n"; $stable .= "</tr>\n"; } $stable .= "</table>\n"; print &ui_table_row($text{'mon_status'}, $stable, undef, \@tds); } # Display inputs for this monitor type if ($type =~ /^(\S+)::(\S+)$/) { # From another module ($mod, $mtype) = ($1, $2); &foreign_require($mod, "status_monitor.pl"); &foreign_call($mod, "load_theme_library"); if (&foreign_defined($mod, "status_monitor_dialog")) { print &foreign_call($mod, "status_monitor_dialog", $mtype, $serv); } } else { # From this module do "./${type}-monitor.pl"; $func = "show_${type}_dialog"; if (defined(&$func)) { &$func($serv); } } # Show servers to run on @servs = grep { $_->{'user'} } &servers::list_servers_sorted(); @servs = sort { $a->{'host'} cmp $b->{'host'} } @servs; if (@servs) { # Show list of remote servers, and maybe groups $s = &ui_select("remotes", [ split(/\s+/, $serv->{'remote'}) ], [ [ "*", "<$text{'mon_local'}>" ], map { [ $_->{'host'}, $_->{'host'} ] } @servs ], 5, 1, 1), @groups = &servers::list_all_groups(\@servs); @groups = sort { $a->{'name'} cmp $b->{'name'} } @groups; if (@groups) { $s .= &ui_select("groups", [ split(/\s+/, $serv->{'groups'}) ], [ map { [ $_->{'name'}, &group_desc($_) ] } @groups ], 5, 1, 1), } print &ui_table_row($text{'mon_remotes2'}, $s, undef, \@tds); } else { # Only local is available print &ui_hidden("remotes", "*"),"\n"; } print &ui_table_end(); print &ui_table_start($text{'mon_header5'}, "width=100%", 2, \@tds); # Show emailing schedule print &ui_table_row($text{'mon_nosched'}, &ui_select("nosched", int($serv->{'nosched'}), [ [ 1, $text{'no'} ], [ 0, $text{'mon_warndef'} ], [ 3, $text{'mon_warn1'} ], [ 2, $text{'mon_warn0'} ], [ 4, $text{'mon_warn2'} ], [ 5, $text{'mon_warn3'} ], [ 6, $text{'mon_quiet'} ] ]), undef, \@tds); # Show number of failures print &ui_table_row($text{'mon_fails'}, &ui_textbox("fails", $serv->{'fails'}, 5), undef, \@tds); # Show notification mode $notify = ""; %notify = map { $_, 1 } split(/\s+/, $serv->{'notify'}); foreach $n (&list_notification_modes()) { $notify .= &ui_checkbox("notify", $n, $text{'mon_notify'.$n}, $notify{$n})."\n"; delete($notify{$n}); } foreach $n (keys %notify) { # Don't clear set but un-usable modes print &ui_hidden("notify", $n); } print &ui_table_row(&hlink($text{'mon_notify'}, "notify"), $notify, undef, \@tds); # Show extra address to email print &ui_table_row($text{'mon_email'}, &ui_textbox("email", $serv->{'email'}, 60), undef, \@tds); # Show template to use @tmpls = &list_templates(); if (@tmpls) { if ($in{'type'}) { ($deftmpl) = grep { $_->{'desc'} eq $config{'def_tmpl'}} @tmpls; if ($deftmpl) { $tid = $deftmpl->{'id'}; } } else { $tid = $serv->{'tmpl'}; } print &ui_table_row($text{'mon_tmpl'}, &ui_select("tmpl", $tid, [ [ "", "<$text{'mon_notmpl'}>" ], map { [ $_->{'id'}, $_->{'desc'} ] } @tmpls ])); } # Which clone module to use if (@clones) { print &ui_table_row($text{'mon_clone'}, &ui_select("clone", $serv->{'clone'}, [ [ "", $minfo->{'desc'} ], map { [ $_->{'dir'}, $_->{'desc'} ] } @clones ]), undef, \@tds); } # Skip if some other monitor is down @servs = &list_services(); if (@servs) { print &ui_table_row($text{'mon_depend'}, &ui_select("depend", $serv->{'depend'}, [ [ "", " " ], map { [ $_->{'id'}, $_->{'desc'}. " (".&html_strip(&nice_remotes($_), " ").")" ] } sort { $a->{'desc'} cmp $b->{'desc'} } @servs ]), undef, \@tds); } print &ui_table_end(); print &ui_table_start($text{'mon_header2'}, "width=100%", 2, \@tds); # Show commands to run on up/down print &ui_table_row($text{'mon_ondown'}, &ui_textbox("ondown", $serv->{'ondown'}, 60), undef, \@tds); print &ui_table_row($text{'mon_onup'}, &ui_textbox("onup", $serv->{'onup'}, 60), undef, \@tds); print &ui_table_row($text{'mon_ontimeout'}, &ui_textbox("ontimeout", $serv->{'ontimeout'}, 60), undef, \@tds); # When to run commands? print &ui_table_row($text{'mon_cmdmode'}, &ui_radio("cmdmode", $serv->{'cmdmode'} || 0, [ [ 0, $text{'mon_cmdmode0'} ], [ 1, $text{'mon_cmdmode1'} ] ])); print &ui_table_row(" ", "<font size=-1>$text{'mon_oninfo'}</font>", undef, \@tds); # Radio button for where to run commands print &ui_table_row($text{'mon_runon'}, &ui_radio("runon", $serv->{'runon'} ? 1 : 0, [ [ 0, $text{'mon_runon0'} ], [ 1, $text{'mon_runon1'} ] ]), undef, \@tds); print &ui_table_end(); # Show history, in a hidden section if (!$in{'type'}) { @history = &list_history($serv, $in{'all'} ? undef : $config{'history_show'}); } if (@history) { print &ui_hidden_table_start($text{'mon_header4'}, "width=100%", 2, "history", defined($in{'all'}) || defined($in{'changes'})); # Build links to switch to changes-only mode or show all history @links = ( ); if ($in{'changes'}) { push(@links, "<a href='edit_mon.cgi?id=$in{'id'}&changes=0&". "all=$in{'all'}'>$text{'mon_changes0'}</a>"); } else { push(@links, "<a href='edit_mon.cgi?id=$in{'id'}&changes=1&". "all=$in{'all'}'>$text{'mon_changes1'}</a>"); } if (!$in{'all'}) { push(@links, "<a href='edit_mon.cgi?id=$in{'id'}&changes=". "$in{'changes'}&all=1'>$text{'mon_all'}</a>"); } if ($in{'changes'}) { @history = grep { $_->{'old'} ne $_->{'new'} } @history; } # Check if any history events have a value $anyvalue = 0; foreach $h (@history) { foreach my $hv (split(/\//, $h->{'value'})) { my ($vhost, $v) = split(/=/, $hv, 2); if ($v ne '') { $anyvalue++; last; } } } # Show history table $links = &ui_links_row(\@links); $table = &ui_columns_start([ $text{'mon_hwhen'}, $text{'mon_hold'}, $text{'mon_hnew'}, $anyvalue ? ( $text{'mon_hvalue'} ) : ( ) ]); foreach $h (reverse(@history)) { my @cols = ( &make_date($h->{'time'}) ); foreach my $s ($h->{'old'}, $h->{'new'}) { my @ups; my @statuses = split(/\s+/, $s); foreach my $rs (@statuses) { my ($host, $up) = split(/=/, $rs, 2); $img = "<img src=".&get_status_icon($up).">"; if ($host ne "*") { $img = $host.$img; } elsif (@statuses > 1) { $img = &get_display_hostname().$img; } push(@ups, $img); } push(@cols, join(" ", @ups)); } if ($anyvalue) { my @vlist; my @values = split(/\//, $h->{'value'}); my @nice_values = split(/\//, $h->{'nice_value'}); for(my $i=0; $i<@values; $i++) { my ($vhost, $v) = split(/=/, $values[$i], 2); my (undef, $nv) = split(/=/, $nice_values[$i], 2); push(@vlist, $nv || $v); } push(@cols, join(" ", @vlist)); } $table .= &ui_columns_row(\@cols); } $table .= &ui_columns_end(); if (@history) { print &ui_table_row(undef, $links.$table, 2); } else { print &ui_table_row(undef, $links. &text('mon_nochanges', $config{'history_show'}), 2); } print &ui_hidden_table_end(); } # Show create/delete buttons if ($in{'type'}) { print &ui_form_end([ [ "create", $text{'create'} ] ]); } else { print &ui_form_end([ [ "save", $text{'save'} ], [ "newclone", $text{'mon_clone2'} ], [ "delete", $text{'delete'} ] ]); } &ui_print_footer("", $text{'index_return'});