3 # Create, update or delete a monitor
5 require './status-lib.pl';
6 $access{'edit'} || &error($text{'mon_ecannot'});
9 $serv->{'type'} = $in{'type'};
10 $serv->{'id'} = time();
13 $serv = &get_service($in{'id'});
14 $serv->{'oldremote'} = $serv->{'remote'};
19 &delete_service($serv);
20 &webmin_log("delete", undef, $serv->{'id'}, $serv);
22 elsif ($in{'newclone'}) {
23 # Redirect to creation form, in clone mode
24 &redirect("edit_mon.cgi?type=$serv->{'type'}&clone=$in{'id'}");
28 # Parse and validate inputs
29 &error_setup($text{'mon_err'});
30 $in{'desc'} || &error($text{'mon_edesc'});
31 $serv->{'desc'} = $in{'desc'};
33 # Make sure remote monitors exist on remote systems
34 @remotes = split(/\0/, $in{'remotes'});
35 $newremote = join(" ", @remotes);
36 if ($in{'type'} || $serv->{'remote'} ne $newremote) {
37 # Only need to check for new monitors
38 foreach $r (@remotes) {
40 eval { local $main::error_must_die = 1;
41 $ch = &remote_foreign_check($r, 'status') };
42 &error(&text('mon_elogin', $r))
43 if ($@ =~ /invalid.*login/i || $@ =~ /HTTP.*401/i);
45 # If down, let it go for now as we can't really
46 # check what is installed
49 #$err =~ s/\s+at\s.*\sline\s+(\d+).*$//;
50 #&error(&text('mon_eremote2', $r, $err));
52 $ch || &error(&text('mon_estatus', $r));
53 &remote_foreign_require($r, 'status',
55 if ($in{'type'} =~ /^(\S+)::(\S+)$/) {
56 # Check if module is installed
57 $ok = &remote_foreign_call(
58 $r, 'status', "foreign_check", $1);
61 $ok = &remote_eval($r, 'status',
62 "-r \"\$root_directory/status/$serv->{'type'}-monitor.pl\"");
64 $ok || &error(&text('mon_ertype', $r));
67 $serv->{'remote'} = $newremote;
68 $serv->{'groups'} = join(" ", split(/\0/, $in{'groups'}));
69 $serv->{'remote'} || $serv->{'groups'} ||
70 &error($text{'mon_enoremote'});
72 $serv->{'nosched'} = $in{'nosched'};
73 $serv->{'notify'} = join(" ", split(/\0/, $in{'notify'}));
74 $serv->{'ondown'} = $in{'ondown'};
75 $serv->{'onup'} = $in{'onup'};
76 $serv->{'ontimeout'} = $in{'ontimeout'};
77 $serv->{'runon'} = $in{'runon'};
78 $serv->{'clone'} = $in{'clone'};
79 $in{'fails'} =~ /^\d+$/ || &error($text{'mon_efails'});
80 $serv->{'fails'} = $in{'fails'};
81 $serv->{'email'} = $in{'email'};
82 $serv->{'tmpl'} = $in{'tmpl'};
83 $type = $serv->{'type'};
84 if ($in{'depend'} && $in{'depend'} eq $serv->{'id'}) {
85 &error($text{'mon_edepend'});
87 $serv->{'depend'} = $in{'depend'};
89 # Parse inputs for this monitor type
90 if ($type =~ /^(\S+)::(\S+)$/) {
92 ($mod, $mtype) = ($1, $2);
93 &foreign_require($mod, "status_monitor.pl");
94 &foreign_call($mod, "status_monitor_parse", $mtype, $serv,\%in);
98 do "./${type}-monitor.pl";
99 $func = "parse_${type}_dialog";
100 if (defined(&$func)) {
105 # Save or create the monitor
106 &save_service($serv);
107 &webmin_log($in{'type'} ? "create" : "modify", undef,
108 $serv->{'id'}, $serv);