From c0e8f01a25ed8f81daa4f6a56fee81c2053477bd Mon Sep 17 00:00:00 2001 From: Peter Palfrader Date: Wed, 23 May 2007 21:25:21 +0000 Subject: Add nsa git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@270 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede --- parse-nagios | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100755 parse-nagios (limited to 'parse-nagios') diff --git a/parse-nagios b/parse-nagios new file mode 100755 index 0000000..3edb127 --- /dev/null +++ b/parse-nagios @@ -0,0 +1,88 @@ +#!/usr/bin/perl -wT + +use strict; +use English; +use File::Basename; + +my $MAX_LINES = 4; +my $ENVELOPE_FROM = 'nobody@commit.noreply.org'; +my $HEADER_FROM = 'nobody@commit.noreply.org'; +my $BOT_ADDRESS = 'commit@commit.noreply.org'; +my $SENDMAIL = '/usr/sbin/sendmail'; + +$ENV{'PATH'} = '/bin:/usr/bin'; +delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'}; + +die ("Usage: $PROGRAM_NAME \n") unless (scalar @ARGV == 2); +my $project = $ARGV[0]; + +umask 077; + + +$project =~ m/^([a-zA-Z-]+(\.[a-zA-Z-]+)*)+$/; +$project = $1; +die ("Project is not a nice name.\n") unless defined $project; + + +my $type; +my $service; +my $host; +my $state; +my $info; +my $running_number; +my $ack_by; +my $comment; + +open (MAIL, $ARGV[1]) || die ("Cannot open $ARGV[1]: $!\n"); +my @mail = ; +close(MAIL); + +my $line; +while (defined($line = shift @mail)) { + if ($line =~ m/^Subject:.*?alert ([0-9]+) - /) { + $running_number = $1; + } elsif ($line =~ m/^Notification Type:\s*(.*)/) { + $type = $1; + } elsif ($line =~ m/^Service:\s*(.*)/) { + $service = $1; + } elsif ($line =~ m/^Host:\s*(.*)/) { + $host = $1; + } elsif ($line =~ m/^State:\s*(.*)/) { + $state = $1; + } elsif ($line =~ m/^ACK by:\s*(.*)/) { + $ack_by = $1; + } elsif ($line =~ m/^Comment:\s*(.*)/) { + $comment = $1; + } elsif ($line =~ m/^(Additional )?Info:/) { + while (defined($line = shift @mail) && !($line =~ /\S/)) { + # null + } + if (defined $line) { + chomp $line; + $info = $line; + }; + } +}; +die ("$PROGRAM_NAME - $project: No type found.\n") unless defined $type; +# die ("$PROGRAM_NAME - $project: No service found.\n") unless defined $service; +die ("$PROGRAM_NAME - $project: No host found.\n") unless defined $host; +die ("$PROGRAM_NAME - $project: No state found.\n") unless defined $state; +die ("$PROGRAM_NAME - $project: No info found.\n") unless defined $info; + +$type =~ tr/A-Z/a-z/; +$service = $host unless defined $service; + +my $extra = (defined $running_number) ? " (#$running_number)" : ""; + +#open(MAIL, "|cat") or +open(MAIL, "|$SENDMAIL -t -oi -f $ENVELOPE_FROM") or + die ("Cannot exec sendmail: $!\n"); +print MAIL "From: $HEADER_FROM\n"; +print MAIL "To: $BOT_ADDRESS\n"; +print MAIL "Subject: Announce $project\n"; +print MAIL "Precedence: junk\n"; +print MAIL "\n"; +print MAIL "[$type\@$host] $service is $state$extra: $info\n"; +print MAIL "ACK by: $ack_by\n" if ($ack_by); +print MAIL "Comment: $comment\n" if ($comment); +close(MAIL); -- cgit v1.2.3