Hi All
Firstly, I should say, I'm really no coder. I can hack things about a bit, but
thats about it.
I've adapted
http://requesttracker.wikia.com/wiki/AutoCloseOnNagiosRecoveryMessages into the
following.
We use Opsview, which is a modified version of Nagios, and formats its emails
slightly differently. I've a scrip which is set for just the queue we need it
for, with:
Condition: on create
Action: user defined
Template: global template: blank
Stage TransactionBatch
I've mashed the following:
my $problem_desc = undef;
my $problem_host = undef;
my $problem = undef;
my $search = undef;
my $Transaction = $self->TransactionObj;
my $subject = $Transaction->Attachments->First->GetHeader('Subject');
if ($subject =~ /RECOVERY: (.+) is OK on host (.*)/) {
# This looks like a nagios recovery message
$problem_desc = $1;
$problem_host = $2;
$problem = "$problem_desc on $problem_host";
$RT::Logger->debug("found a recovery msg: $problem");
} else {
$RT::Logger->debug("not a recovery msg");
return 1;
}
# Ok, now let's merge this ticket with it's PROBLEM msg.
my $search = RT::Tickets->new($RT::SystemUser);
$RT::Logger->debug("doing search");
$search->LimitQueue(VALUE => 'Reports');
$search->LimitStatus(VALUE => 'new', OPERATOR => '=', ENTRYAGGREGATOR => 'or');
$search->LimitStatus(VALUE => 'open', OPERATOR => '=');
$RT::Logger->debug("did search");
if ($search->Count == 0) { return 1; }
$RT::Logger->debug("starting loop");
my $id = undef;
while (my $ticket = $search->Next) {
# Ignore the ticket that opened this transation (the recovery one...)
next if $self->TicketObj->Id == $ticket->Id;
# Look for nagios PROBLEM warning messages...
if ( $ticket->Subject =~ /PROBLEM: (.+) is (CRITICAL|WARNING|UNKNOWN) on
host (.*)/ ) {
$RT::Logger->debug("checking msg");
$RT::Logger->debug("problem $problem checking $1 on $3");
if ("$1 on $3" eq $problem){
$RT::Logger->debug("found ticket");
# Aha! Found the Problem TICKET corresponding to this RECOVERY
# ticket
$id = $ticket->Id;
# Nagios may send more then one PROBLEM message, right?
$RT::Logger->debug("Merging ticket " . $self->TicketObj->Id . "
into $id because of OA number match.");
$self->TicketObj->MergeInto($id);
# Keep looking for more PROBLEM tickets...
}
}
}
$id || return 1;
# Auto-close/resolve this whole thing
$self->TicketObj->SetStatus( "resolved" );
1;
Which is designed to look for messages with the subject line of:
RECOVERY: name of service is OK on host name.of.host
and then parse the remainder of the queue for associated problem tickets with
the subject line of
PROBLEM: name of service is CRITICAL on host name.of.host
when it finds them - it should merge and close.
I actually want to extend this further to merge the 'problem' emails along the
way, but wanted to get this first stage working properly first.
The above works, if I email in myself with a relevant subject line (scrip 62 is
the relevant scrip)
[Wed Feb 16 15:42:27 2011] [debug]: About to think about scrips for transaction
#1467131 (/opt/rt3/bin/../lib/RT/Transaction_Overlay.pm:163)
[Wed Feb 16 15:42:27 2011] [debug]: Committing scrip #55 on txn #1467130 of
ticket #252411 (/opt/rt3/bin/../lib/RT/Scrips_Overlay.pm:190)
[Wed Feb 16 15:42:27 2011] [info]: Ticket 252411 created in queue 'Reports' by
tom.elliott (/opt/rt3/bin/../lib/RT/Ticket_Overlay.pm:667)
[Wed Feb 16 15:42:27 2011] [debug]: Found 1 scrips for TransactionBatch stage
with applicable type(s) Create (/opt/rt3/bin/../lib/RT/Scrips_Overlay.pm:370)
[Wed Feb 16 15:42:27 2011] [debug]: Committing scrip #62 on txn #1467130 of
ticket #252411 (/opt/rt3/bin/../lib/RT/Scrips_Overlay.pm:190)
[Wed Feb 16 15:42:27 2011] [debug]: Found a recovery msg: name of service on
name.of.host ((eval 29152):20)
[Wed Feb 16 15:42:27 2011] [debug]: doing search ((eval 29152):28)
[Wed Feb 16 15:42:27 2011] [debug]: did search ((eval 29152):32)
[Wed Feb 16 15:42:27 2011] [debug]: starting loop ((eval 29152):34)
(heavily trimmed log)
However, when our monitoring system emails in, it generates an email with
exactly the same subject and we get:
Wed Feb 16 15:39:04 2011] [info]: Ticket 252408 created in queue 'Reports' by
nagios@opsview.[masked] (/opt/rt3/bin/../lib/RT/Ticket_Overlay.pm:667)
[Wed Feb 16 15:39:04 2011] [debug]: Found 0 scrips for TransactionBatch stage
with applicable type(s) (/opt/rt3/bin/../lib/RT/Scrips_Overlay.pm:370)
Any ideas? I'm aware this probably isn't enough information, but I'm not sure
what else to provide. I think I am probably doing something quite silly or
missing something fundamental. Perhaps I need a custom condition? Any input
really appreciated. Thanks all.
--
Kind regards,
Tom Elliott
Gyron Internet Ltd
mail: [email protected]
web: http://gyron.net/
tel: 0845 888 6900
fax: 0845 888 6910
24 hour customer support: 0845 888 6999
This message may be private and confidential. If you have received this message
in error, please notify us and remove it from your system.
Gyron may monitor email traffic data and the content of email for the purposes
of security and staff training.
Gyron Internet Ltd is a limited company registered in England and Wales.
Registered number: 4239332. Registered office: 3 Centro, Boundary Way, Hemel
Hempstead, HP2 7SU. VAT reg no 804 2532 63. Gyron is a registered trademark.
Gyron is a Deloitte Technology Fast 50 ranked company.