Frequent Advisor
Route emails in a perl script
[ Edited ]

HI All,

 

Have a perl script which parses a file (FILE1 has a list of alerts) and sends an email in certain format.

Only thing I need is that for VIPS/hosts having the word test in it should send the email to test@foobar.com
and VIP/host having the word dev (eg. dev.corp.foobar.com) in it  to dev@foobar.com
and VIPs having the name prod in it to prod@foobar.com. The subject needs to be different for each one.

FILE1:

***** Alert *****

Notification Type: PROBLEM

Service: Appsname_2333_env1_region
Host: vip-scv.corp.foobar.com
Address: x.x.x.x
State: CRITICAL

Date/Time: Mon Aug 8 15:50:02 EDT 2011

Additional Info:

CRITICAL - Socket timeout after 3 seconds

Console http://foobar.com/nagios/index.php
 ***** Alert *****

Notification Type: PROBLEM

Service: DiffAppsname_8552_env2_region2
Host: vip2-scv.corp.foobar.com
Address: x.x.x.x
State: CRITICAL

Date/Time: Mon Aug 8 15:50:02 EDT 2011

Additional Info:

CRITICAL - Socket timeout after 3 seconds

Console http://foobar.com/nagios/index.php

 




PERL SCRIPT:


#!/usr/bin/perl -w

use strict;

my ($apps,$email,$host);
open(HM,"<","/var/tmp/email") or die "Fail- $!\n";
open(WM,">","/var/tmp/email_text") or die "Fail- $!\n";

while(<HM>) {
        chomp;
        $apps = $1 if /Service:(.*)/;
        $host = $1 if /^Host:(.*)/;
        if (/Date\/Time:(.*)/) {
                printf WM "%s:%s:%s\n",$apps,$host,$1;  
        }
}
seek HM,0,0;
print WM <HM>;

$email='mail -s "alerts from past 4 mins" user@foobar.com < /var/tmp/email_text 2>/var/tmp/email_err';
system($email);

if ( $? ne 0 ) {
         die "Failure - while sending email. Please check file /tmp/email_err \n";
}

close(WM);
close(HM);

unlink "/tmp/email" or warn "Could not unlink email: $!";;
unlink "/tmp/email_text" or warn "Could not unlink email_text: $!";;

 

Thanks,

Allan.