summaryrefslogtreecommitdiff
path: root/parse-nagios
diff options
context:
space:
mode:
authorPeter Palfrader <peter@palfrader.org>2007-05-23 21:25:21 +0000
committerweasel <weasel@bc3d92e2-beff-0310-a7cd-cc87d7ac0ede>2007-05-23 21:25:21 +0000
commitc0e8f01a25ed8f81daa4f6a56fee81c2053477bd (patch)
tree36f3d39b4422cd3efce56401116b4f5ac0b18fe7 /parse-nagios
Add nsa
git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@270 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede
Diffstat (limited to 'parse-nagios')
-rwxr-xr-xparse-nagios88
1 files changed, 88 insertions, 0 deletions
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 <project> <mailfile>\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 = <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);