Sorry forgot about that, it's been so long since I touched any of this :)
955c955
< return (1, $l);
---
> return (0, $l);
957c957,960
< return (0, $1);
---
> return (1, $1);
> } elsif ($l =~ /alerts held by (\S*) from (\d+) to (\d+) comment
(.*)$/) {
> my $comment = _un_esc_str ($4);
> return (2, $2, $1, $comment, $3);
1342a1346,1371
> return $r;
> }
>
> sub hold {
> my $self = shift;
> my ($time, $comment) = @_;
>
> undef $self->{"ERROR"};
>
> if (!$self->{"CONNECTED"}) {
> $self->{"ERROR"} = "not connected";
> return undef;
> }
>
> $comment = _esc_str ($comment, 1);
>
> my ($r, $l) = _do_cmd ($self->{"HANDLE"}, "hold $time $comment");
>
> if (!defined $r) {
> $self->{"ERROR"} = $l;
> return undef;
> } elsif ($r !~ /^220/) {
> $self->{"ERROR"} = $r;
> return undef;
> }
>
>From memory I had to flip the scheduler states around because Mon::Client
at the time was different to what Mon was actually doing. If you want me
to send the full copy of MON/Client.pm, just sing out. I don't think I ran
perltidy over Client.pm, so line numbers should be correct.
Version is listed as
# $Id: Client.pm,v 1.3 2006/09/05 17:09:21 vitroth Exp $
Cheers,
Ben
Ben Ragg - Internode - Network Operations
150 Grenfell Street, Adelaide, SA, 5000
Phone: 13NODE Web: http://www.on.net
On Fri, 21 Mar 2008, Augie Schwer wrote:
> Ben,
>
> Did you also change the list_state code in the Mon::Client code? I see
> where in the mon.cgi you check $scheduler_status[2] but I don't see
> anywhere where you set that or get list_state to return that.
>
> --Augie
>
> On Tue, Mar 18, 2008 at 5:20 PM, Ben Ragg <[EMAIL PROTECTED]> wrote:
> > Augie Schwer wrote:
> > > putting things into "disabled" and then forgetting all about them,
> > > which is dangerous and annoying.
> > >
> > > Care to share that code?
> > >
> > >
> > > The "hold" feature sounds pretty interesting. At my site I find people
> > Always happy to share :)
> >
> > Version we're using is..."mon,v 1.22 2006/07/13 12:03:39 vitroth Exp $"
> > ...it's been run through perl tidy to clean it up a little, so the line
> > numbers won't match up (hence I won't even bother ;)
> >
> > Attached our copy of the main mon program and mon.cgi
> >
> >
> > Changes to "mon"...
> >
> > Under the global definitions, add a new array...
> >
> > my @HOLD_ALERTS; # dont send alerts, 0) end, 1) start, 2) by, 3)
> > reason
> >
> >
> > In the main monitoring loop "for ( ; ; ) {" near the top add a check for
> > an expired hold timer...
> >
> > for ( ; ; ) {
> > debug( 1, "$i" . ( $STOPPED ? " (stopped)" : "" ) . "\n" );
> > $i++;
> > $tm = time;
> >
> > # Check if the Hold Timer has ended
> > @HOLD_ALERTS = () if ( defined($HOLD_ALERTS[0]) && $HOLD_ALERTS[0] <
> > $tm );
> >
> >
> > In "sub doalert" add a bit on to the if ($STOPPED)
> >
> > if ($STOPPED) {
> > syslog( "notice", "ignoring alert for $group,$service because the
> > mon scheduler is stopped" );
> > return;
> > } elsif (@HOLD_ALERTS) {
> > syslog( "notice",
> > "ignoring alert for $group,$service because alerts are held until
> > " . localtime( $HOLD_ALERTS[0] ) );
> > return;
> > }
> >
> >
> > In "sub client_command" add "hold" to the list of acceptable commands
> >
> > if (
> > $l !~ /^(dump|login|disable|enable|quit|list|set|get|setview|getview|
> > stop|start|loadstate|savestate|reset|clear|checkauth|
> >
> > reload|term|test|servertime|ack|version|protid|hold)(\s+(.*))?$/ix
> > )
> > {
> > sock_write( $fh, "520 invalid command\n" );
> > return;
> > }
> >
> >
> > and also within sub client_command, define what the command hold
> > actually does...
> >
> > #
> > # hold
> > #
> > } elsif ( $cmd eq "hold" ) {
> > my ( $period, $reason ) = split( /\s+/, $args, 2 );
> > $period = 180 if ( $period > 180 );
> > $HOLD_ALERTS[1] = time;
> > $HOLD_ALERTS[0] = $HOLD_ALERTS[1] + ( $period * 60 );
> > $HOLD_ALERTS[2] = $clients{$cl}->{"user"};
> > $HOLD_ALERTS[3] = $reason;
> > sock_write( $fh, "220 Alerts on hold until " . localtime(
> > $HOLD_ALERTS[0] ) . "\n" );
> >
> > ...that should be all the changes in the mon file itself.
> >
> >
> >
> > Also need to update the mon.cgi to make use of it...
> >
> > Under "sub query_opstatus" add another scheduler_status...
> >
> > if ( $scheduler_status[0] == 0 ) {
> > $webpage->print( "The scheduler on <b>$monhost:$monport</b> is
> > currently <font color=$greenlight_color>running</font>. ");
> > } elsif ( $scheduler_status[0] == 1 ) {
> > my $pretty_sched_down_time = strftime "%H:%M:%S %d-%b-%Y", localtime(
> > $scheduler_status[1] );
> > $webpage->print("<br>The scheduler has been <font
> > color=$redlight_color>stopped</font> since
> > $pretty_sched_down_time.<br>\n");
> > } elsif ( $scheduler_status[0] == 2 ) {
> > my $pretty_sched_down_time = strftime "%H:%M:%S %d-%b-%Y", localtime(
> > $scheduler_status[1] );
> > my $pretty_sched_up_time = strftime "%H:%M:%S %d-%b-%Y", localtime(
> > $scheduler_status[4] );
> >
> > $webpage->print("<br>The scheduler is running, but alerts have been
> > <font color=$yellowlight_color>held</font> since
> > $pretty_sched_down_time.<br>\n");
> > $webpage->print("Mon will return to normal operation at
> > $pretty_sched_up_time<br>");
> > $webpage->print("This hold was set by $scheduler_status[2] due to
> > \"$scheduler_status[3]\"<p>");
> > } else { #value is undef, scheduler cannot be contacted (or auth
> > failure)
> > $webpage->print("<br><font color=$redlight_color>The scheduler cannot
> > be contacted at this time.</font><br>\n");
> > }
> >
> >
> > And a new subroutine...
> >
> > sub mon_hold {
> >
> > my ($args) = @_;
> >
> > my $retval;
> > my $conn = &mon_connect;
> > return 0 if $conn == 0;
> >
> > $retval = $c->hold( $args, ${ackcomment} );
> >
> > return $retval;
> > }
> >
> > And under the "main programs" long list of elsif commands...
> >
> > elsif ($command eq "mon_hold" ) {
> > &setup_page("Alerts Hold");
> > &mon_hold($args);
> > sleep 1;
> > &query_opstatus("summary");
> > }
> >
> >
> > And sub moncgi_custom_print_bar
> >
> > my $fubar = <<EOF;
> > <tr>
> > <td colspan=3 align=center>
> > <form method="post" action="$url"
> > enctype="application/x-www-form-urlencoded">
> > <input name="command" value="mon_hold" type="hidden">
> > Hold alerts for <input name="args" size="2" type="text"> minutes,
> > reason:
> > <input name="ackcomment" size="20" type="text">
> > <input value="Hold" type="submit">
> > </form>
> > </td>
> > <td colspan=2 align=center>
> > <form method="post" action="$url"
> > enctype="application/x-www-form-urlencoded">
> > <input name="command" value="mon_hold" type="hidden">
> > <input name="args" value="0" type="hidden">
> > <input value="Remove Hold" type="submit">
> > </form>
> > </td>
> > </tr>
> >
> > EOF
> >
> > $webpage->print("$fubar");
> >
> >
> > Any questions feel free to sing out.
> >
> > Cheers,
> > Ben
> >
> >
> >
>
>
>
> --
> Augie Schwer - [EMAIL PROTECTED] - http://schwer.us
> Key fingerprint = 9815 AE19 AFD1 1FE7 5DEE 2AC3 CB99 2784 27B0 C072
>
_______________________________________________
mon mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/mon