[rt-users] help in creating Scrips (Nagios autoclose)

sunnavy sunnavy at bestpractical.com
Wed Nov 4 00:45:40 EST 2009


Hi Rodolphe

which part you don't understand?
IMHO, the extension's workflow is not complex at all.

best wishes
sunnavy

On 09-11-03 17:41, Rodolphe A. wrote:
> sunnavy,
> 
> Can you give us some examples in RT with your plugin ?
> 
> Because I don't understand your documentation.
> 
> 
> Thanks,
> 
> Rodolphe
> 
> 2009/11/3 Rodolphe A. <rodolphedj at gmail.com>
> 
> > Hi sunnavy,
> >
> > Setup seems good. No error message.
> >
> > Thanks.
> >
> > I am reading your documentation on url :
> > http://cpan.uwinnipeg.ca/htdocs/RT-Extension-Nagios/
> >
> >
> >
> > Regards,
> >
> > Rodolphe
> >
> >
> > 2009/11/3 sunnavy <sunnavy at bestpractical.com>
> >
> > Hi Rodolphe
> >>
> >> It's a bug, I'm sorry for that.
> >> please test the new version attached.
> >>
> >> best wishes
> >> sunnavy
> >>
> >> On 09-11-02 15:16, Rodolphe ALT wrote:
> >> > Hi Sunnavy,
> >> >
> >> > Thanks a lot for this tip, because on the link (
> >> > http://wiki.bestpractical.com/view/AutoCloseOnNagiosRecoveryMessages)
> >> it was
> >> > not wrote.
> >> >
> >> > I have read the file README.
> >> >
> >> > After make and install, I have add this line in file
> >> > /opt/rt3/etc/RT_SiteConfig.pm
> >> > Set(@Plugins,qw(RT::Extension::Nagios));
> >> >
> >> > But when I have initialized database (make initdb), i have a message
> >> error :
> >> > [Mon Nov  2 13:30:56 2009] [error]: Action 'Nagios' not found
> >> > (/opt/rt3/sbin/../lib/RT/Handle.pm:987)
> >> >
> >> > And the scrip after that doesn't close always any messages. In the log :
> >> > [Mon Nov  2 13:45:32 2009] [debug]: Committing scrip #13 on txn #451 of
> >> > ticket #55 (/opt/rt3/bin/../lib/RT/Scrips_Overlay.pm:190)
> >> > [Mon Nov  2 13:45:32 2009] [debug]: Found a recovery msg:  ((eval
> >> 3253):18)
> >> >
> >> > And that's all.
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > Regards,
> >> >
> >> > Rodolphe
> >> >
> >> >
> >> > The scrip
> >> >
> >> > ---------------------------------
> >> >
> >> > # If the subject of the ticket matches a pattern suggesting
> >> > # that this is a Nagios RECOVERY message  AND there is
> >> > # an existing ticket (open or new) in the "General" queue with a
> >> matching
> >> > # "problem description", (that is not this ticket)
> >> > # merge this ticket into that ticket
> >> > #
> >> > # Based on
> >> http://marc.free.net.ph/message/20040319.180325.27528377.en.html
> >> >
> >> > my $problem_desc = undef;
> >> >
> >> > my $Transaction = $self->TransactionObj;
> >> > my $subject = $Transaction->Attachments->First->GetHeader('Subject');
> >> > #if ($subject =~ /\*\* RECOVERY (\w+) - (.*) OK \*\*/) {
> >> > if ($subject =~ /\*\* RECOVERY (.*) OK \*\*/) {
> >> >     # This looks like a nagios recovery message
> >> >     $problem_desc = $2;
> >> >
> >> >     $RT::Logger->debug("Found a recovery msg: $problem_desc");
> >> > } else {
> >> >     $RT::Logger->debug("Not a recovery msg: $problem_desc");
> >> >     return 1;
> >> > }
> >> >
> >> > # Ok, now let's merge this ticket with it's PROBLEM msg.
> >> > my $search = RT::Tickets->new($RT::SystemUser);
> >> > $search->LimitQueue(VALUE => 'General');
> >> > $search->LimitStatus(VALUE => 'new', OPERATOR => '=', ENTRYAGGREGATOR =>
> >> > 'or');
> >> > $search->LimitStatus(VALUE => 'open', OPERATOR => '=');
> >> >
> >> > if ($search->Count == 0) { return 1; }
> >> > 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 (\w+) - (.*) (\w+) \*\*/ ) {
> >> >         if ($2 eq $problem_desc){
> >> >             # 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;
> >> >
> >> >
> >> > -----------------------------------
> >> >
> >> >
> >> >
> >> > 2009/11/2 sunnavy <sunnavy at bestpractical.com>
> >> >
> >> > > Hi Rodolphe
> >> > >
> >> > > Maybe you're interested in the RT extension attached, which is based
> >> on the
> >> > > wiki you read.
> >> > > I'm thinking of publishing it to CPAN soon.
> >> > >
> >> > > best wishes
> >> > > sunnavy
> >> > >
> >> > > On 09-11-02 12:00, Rodolphe ALT wrote:
> >> > > > Hi all,
> >> > > >
> >> > > > I am trying create a scrip in RT3 for close automaticly the tickets
> >> from
> >> > > > Nagios alert.
> >> > > >
> >> > > > I am working from the scrips "AutoCloseOnNagiosRecoveryMessages - RT
> >> > > > Integration" from website
> >> > > >
> >> > > >
> >> > >
> >> http://exchange.nagios.org/directory/Addons/Helpdesk-and-Ticketing/RT/AutoCloseOnNagiosRecoveryMessages-%252D-RT-Integration/details
> >> > > >
> >> > > >
> >> http://wiki.bestpractical.com/view/AutoCloseOnNagiosRecoveryMessages
> >> > > >
> >> > > > <goog_1257158193783>
> >> > > >
> >> > > > https://wiki.koumbit.net/RequestTracker/NagiosBridge
> >> > > >
> >> > > >
> >> > > >
> >> > > > But with RT3 3.8.6 and Nagios 3.2, The subject of the email is not
> >> > > analyzed
> >> > > > correctly.
> >> > > >
> >> > > > I mean when I have enabled debug log and this is a log messages like
> >> :
> >> > > > [Mon Nov  2 10:30:33 2009] [debug]: Committing scrip #14 on txn #397
> >> of
> >> > > > ticket #46 (/opt/rt3/bin/../lib/RT/Scrips_Overlay.pm:190)
> >> > > > [Mon Nov  2 10:30:33 2009] [debug]: Message Lancement Scrip 14
> >> ((eval
> >> > > > 2528):12)
> >> > > > [Mon Nov  2 10:30:33 2009] [debug]: Found a recovery msg:  ((eval
> >> > > 2528):21)
> >> > > > [Mon Nov  2 10:30:33 2009] [debug]: Boucle 14 : 45 ((eval 2528):36)
> >> > > > [Mon Nov  2 10:30:33 2009] [debug]: Boucle 14 : 46 ((eval 2528):36)
> >> > > > [Mon Nov  2 10:30:33 2009] [debug]: Boucle 14 : 27 ((eval 2528):36)
> >> > > >
> >> > > > And that' all. not Merging ticket !
> >> > > >
> >> > > >
> >> > > > in scrip, I think this is the line who detect not the ticket :
> >> > > >     if ( $ticket->Subject =~ /\*\* PROBLEM (\w+(?:\s*\d+)?) - (.*)
> >> is
> >> > > (\w+)
> >> > > > \*\*/ ) {
> >> > > >
> >> > > > I have tested also without success :
> >> > > > if ( $ticket->Subject =~ /\*\* PROBLEM (\w+) - (.*) (\w+) \*\*/ ) {
> >> > > >
> >> > > >
> >> > > > And the email subject is like :
> >> > > > ** PROBLEM Service Alert: srv08.athome.local/Portail is CRITICAL **
> >> > > > ** RECOVERY Service Alert: srv08.athome.local/Portail is OK **
> >> > > >
> >> > > >
> >> > > > Can you help me to resolve this code ?
> >> > > >
> >> > > >
> >> > > > Thanks,
> >> > > >
> >> > > > Regards,
> >> > > >
> >> > > > Rodolphe
> >> > > >
> >> > > >
> >> > > > ----------------
> >> > > >
> >> > > >
> >> > > > ALL CODE of actual scrip is here :
> >> > > >
> >> > > > # If the subject of the ticket matches a pattern suggesting
> >> > > > # that this is a Nagios RECOVERY message  AND there is
> >> > > > # an existing ticket (open or new) in the "General" queue with a
> >> matching
> >> > > > # "problem description", (that is not this ticket)
> >> > > > # merge this ticket into that ticket
> >> > > > #
> >> > > > # Based on
> >> > > http://marc.free.net.ph/message/20040319.180325.27528377.en.html
> >> > > >
> >> > > > my $problem_desc = undef;
> >> > > > my $report_type = undef;
> >> > > >
> >> > > > $RT::Logger->debug("Message Lancement Scrip 14");
> >> > > >
> >> > > > my $Transaction = $self->TransactionObj;
> >> > > > my $subject =
> >> $Transaction->Attachments->First->GetHeader('Subject');
> >> > > > if ($subject =~ /\*\* RECOVERY (.*) OK \*\*/) {
> >> > > >     # This looks like a nagios recovery message
> >> > > >     $report_type = $1;
> >> > > >     $problem_desc = $3;
> >> > > >
> >> > > >     $RT::Logger->debug("Found a recovery msg: $problem_desc");
> >> > > > } else {
> >> > > >     $RT::Logger->debug("Not a recovery msg: $problem_desc");
> >> > > >     return 1;
> >> > > > }
> >> > > >
> >> > > > # Ok, now let's merge this ticket with it's PROBLEM msg.
> >> > > > my $search = RT::Tickets->new($RT::SystemUser);
> >> > > > $search->LimitQueue(VALUE => 'General');
> >> > > > $search->LimitStatus(VALUE => 'new', OPERATOR => '=',
> >> ENTRYAGGREGATOR =>
> >> > > > 'or');
> >> > > > $search->LimitStatus(VALUE => 'open', OPERATOR => '=');
> >> > > >
> >> > > > if ($search->Count == 0) { return 1; }
> >> > > > my $id = undef;
> >> > > > while (my $ticket = $search->Next) {
> >> > > >     $RT::Logger->debug("Boucle 14 : ".($ticket->Id));
> >> > > >     # 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 (\w+(?:\s*\d+)?) - (.*)
> >> is
> >> > > (\w+)
> >> > > > \*\*/ ) {
> >> > > >         if ($2 eq $problem_desc){
> >> > > >             # 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...
> >> > > >             $RT::Logger->debug("Scrip 14 : 1 ticket trouvé
> >> $ticket->Id
> >> > >  avec
> >> > > > la régle 1!");
> >> > > >
> >> > > >         }
> >> > > >     }
> >> > > >
> >> > > >    if ( $ticket->Subject =~ /\*\* PROBLEM (\w+) - (.*) (\w+) \*\*/ )
> >> {
> >> > > >     $RT::Logger->debug("Scrip 14 : 1 ticket trouvé $ticket->Id  avec
> >> la
> >> > > > régle 2!");
> >> > > >    }
> >> > > > }
> >> > > >
> >> > > > $id || return 1;
> >> > > >
> >> > > > if ($report_type eq "RECOVERY") {
> >> > > >   # Auto-close/resolve this whole thing
> >> > > >   $self->TicketObj->SetStatus( "resolved" );
> >> > > > #$Ticket->_Set(Field => 'Status', Value => 'resolved',
> >> RecordTransaction
> >> > > =>
> >> > > > 0);
> >> > > >
> >> > > > }
> >> > > > 1;
> >> > > >
> >> > > >
> >> > > >
> >> > > >
> >> > > >
> >> > > >
> >> > > >
> >> > > >
> >> > > >
> >> > > > ----------------
> >> > >
> >> > > > _______________________________________________
> >> > > > http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users
> >> > > >
> >> > > > Community help: http://wiki.bestpractical.com
> >> > > > Commercial support: sales at bestpractical.com
> >> > > >
> >> > > >
> >> > > > Discover RT's hidden secrets with RT Essentials from O'Reilly Media.
> >> > > > Buy a copy at http://rtbook.bestpractical.com
> >> > >
> >> > >
> >>
> >
> >



More information about the rt-users mailing list