ZABBIX PreFilter Modul

Hallo zusammen Vielleicht kanns jemand gebrauchen, darum sende ich es einfach Mal. Für das Monitoring von einigen Servern verwende ich ZABBIX (www.zabbix.org) und lasse mich per Email an OTRS benachrichtigen. Mit dem Angehängten ZABBIX.pm PreFilter Modul kann man Tickets bei Erhalt der "OFF" Nachricht automatisch schliessen lassen. Voraussetzung ist, dass ZABBIX einen eindeutigen Subject macht. Bei mir ist der jeweils in der Form "[$hostname] $triggername : (ON|OFF)" Das PreFilter Modul sucht nach offenen Tickets, wenn eine Email von der definierten Adresse kommt und mit OFF endet. Gesucht wird nach dem Subject der OFF Nachricht. Ist ein offenes Ticket gefunden, wird der Subject mit der Ticketnummer neu gebildet und der Status wird auf "closed" gesetzt. In Config.pm muss man folgendes Eintragen: $Self->{'PostMaster::PreFilterModule'}->{'$EINDEUTIGER-BEZEICHNER'} = { Module => 'Kernel::System::PostMaster::Filter::ZABBIX', From => '$emailadresse-von-zabbix', ); ZABBIX.pm muss nach $OTRS/Kernel/System/PostMaster/Filter/ kopiert werden. Gruss Thomas -- müller it gmbh hagenholzstrasse 76 8050 zürich +41 (0)78 862 41 38 muellerit.ch - ihre it abteilung. # -- # Kernel/System/PostMaster/Filter/ZABBIX.pm # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see http://www.gnu.org/licenses/gpl.txt. # -- package Kernel::System::PostMaster::Filter::ZABBIX; use strict; use Kernel::System::Ticket; use vars qw($VERSION); $VERSION = '$Revision: 1.4 $'; $VERSION =~ s/^.*:\s(\d+\.\d+)\s.*$/$1/; sub new { my $Type = shift; my %Param = @_; # allocate new hash for object my $Self = {}; bless ($Self, $Type); $Self->{Debug} = $Param{Debug} || 0; # get needed opbjects foreach (qw(ConfigObject LogObject DBObject ParseObject TimeObject MainObject)) { $Self->{$_} = $Param{$_} || die "Got no $_!"; } $Self->{'TicketObject'} = Kernel::System::Ticket->new( ConfigObject => $Self->{ConfigObject}, LogObject => $Self->{LogObject}, DBObject => $Self->{DBObject}, MainObject => $Self->{MainObject}, TimeObject => $Self->{TimeObject}, ); return $Self; } sub Run { my $Self = shift; my %Param = @_; # get config options my %Config = (); my %Set = (); if ($Param{JobConfig} && ref($Param{JobConfig}) eq 'HASH') { %Config = %{$Param{JobConfig}}; if ($Config{Set}) { %Set = %{$Config{Set}}; } } my $subject = $Param{GetParam}->{Subject}; my $from = $Config{'From'}; unless ($Param{GetParam}->{From} =~ /$from/) { # Not from specified address return 1; } if ($subject =~ /(.*): OFF/) { $subject = $1; my %List = $Self->{TicketObject}->TicketSearch( Title => $subject . ": ON", Limit => 1, States => ['new', 'open'], UserID => 1, ); foreach my $ticketId (keys %List) { my %Ticket = $Self->{TicketObject}->TicketGet( TicketID => $ticketId, ); if ($Ticket{'TicketNumber'} ne "") { $Param{GetParam}->{Subject} = $Self->{TicketObject}->TicketSubjectBuild( TicketNumber => $Ticket{'TicketNumber'}, Subject => $subject ) . ": OFF"; $Param{GetParam}->{"X-OTRS-FollowUp-State"} = "closed successful"; $Self->{LogObject}->Log( Priority => 'notice', Message => "Set param 'X-OTRS-FollowUp-State' to 'closed' because of subject ($subject : OFF) (Message-ID: $Param{GetParam}->{'Message-ID'}) "); } } } return 1; } 1;
participants (1)
-
Thomas Mueller