Improved error handling.

This commit is contained in:
Martin Edenhofer 2017-08-07 00:28:08 +02:00
parent dd29b0692c
commit b2ece28306
2 changed files with 76 additions and 6 deletions

View file

@ -20,17 +20,17 @@ class Channel::Filter::MonitoringBase
auto_close_state_id = Setting.get("#{integration}_auto_close_state_id") auto_close_state_id = Setting.get("#{integration}_auto_close_state_id")
state_recovery_match = '(OK|UP)' state_recovery_match = '(OK|UP)'
return if !mail[:from] return if mail[:from].blank?
return if !mail[:body] return if mail[:body].blank?
session_user_id = mail[ 'x-zammad-session-user-id'.to_sym ] session_user_id = mail[ 'x-zammad-session-user-id'.to_sym ]
return if !session_user_id return if !session_user_id
# check if sender is monitoring # check if sender is monitoring
return if !mail[:from].match(/#{sender}/i) return if !mail[:from].match(/#{Regexp.quote(sender)}/i)
# get mail attibutes like host and state # get mail attibutes like host and state
result = {} result = {}
mail[:body].gsub(%r{(Service|Host|State|Address|Date/Time|Additional\sInfo):(.+?)\n}i) { |_match| mail[:body].gsub(%r{(Service|Host|State|Address|Date/Time|Additional\sInfo|Info):(.+?)\n}i) { |_match|
key = $1 key = $1
if key if key
key = key.downcase key = key.downcase
@ -42,6 +42,9 @@ class Channel::Filter::MonitoringBase
result[key] = value result[key] = value
} }
# check min. params
return if result['host'].blank?
# check if ticket with host is open # check if ticket with host is open
customer = User.lookup(id: session_user_id) customer = User.lookup(id: session_user_id)
@ -63,7 +66,7 @@ class Channel::Filter::MonitoringBase
mail[ 'x-zammad-ticket-id'.to_sym ] = ticket.id mail[ 'x-zammad-ticket-id'.to_sym ] = ticket.id
# check if service is recovered # check if service is recovered
if auto_close && result['state'].match(/#{state_recovery_match}/i) if auto_close && result['state'].present? && result['state'].match(/#{state_recovery_match}/i)
state = Ticket::State.lookup(id: auto_close_state_id) state = Ticket::State.lookup(id: auto_close_state_id)
if state if state
mail[ 'x-zammad-ticket-followup-state'.to_sym ] = state.name mail[ 'x-zammad-ticket-followup-state'.to_sym ] = state.name

View file

@ -19,7 +19,7 @@ User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0 MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable Content-Transfer-Encoding: quoted-printable
Message-Id: <20160131094621.29ECD400F29C-icinga-1@monitoring.znuny.com> Message-Id: <20160131094621.29ECD400F29C-icinga-1-0@monitoring.znuny.com>
From: icinga_not_matching@monitoring.example.com (icinga) From: icinga_not_matching@monitoring.example.com (icinga)
***** Icinga ***** ***** Icinga *****
@ -44,6 +44,73 @@ Comment: [] =
assert_not(ticket_p.preferences['integration']) assert_not(ticket_p.preferences['integration'])
assert_not(ticket_p.preferences['icinga']) assert_not(ticket_p.preferences['icinga'])
# RBL check
email_raw_string = "To: support@example.com
Subject: [PROBLEM] RBL check on apn4711.dc.example.com is CRITICAL!
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Message-Id: <20160131094621.29ECD400F29C-icinga-1-1@monitoring.znuny.com>
From: icinga@monitoring.example.com (icinga)
***** Icinga 2 Service Monitoring on apn4711.dc.example.com *****
=3D=3D> RBL check on apn4711.dc.example.com is CRITICAL! <=3D=3D
Info: CHECK_RBL CRITICAL - apn4711.dc.example.com BLACKLISTED on 1 server of=
38 (ix.dnsbl.example.com)=20
When: 2017-08-06 22:18:43 +0200
Service: RBL check (Display Name: \"RBL check\")
Host: apn4711.dc.example.com (Display Name: \"apn4711.dc.example.com\")
IPv4: 127.0.0.1="
ticket_0, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
assert_equal('new', ticket_0.state.name)
assert(ticket_0.preferences)
assert(ticket_0.preferences['integration'])
assert_equal('icinga', ticket_0.preferences['integration'])
assert(ticket_0.preferences['icinga'])
assert_equal('apn4711.dc.example.com (Display Name: "apn4711.dc.example.com")', ticket_0.preferences['icinga']['host'])
assert_equal('CHECK_RBL CRITICAL - apn4711.dc.example.com BLACKLISTED on 1 server of 38 (ix.dnsbl.example.com)', ticket_0.preferences['icinga']['info'])
assert_equal('RBL check (Display Name: "RBL check")', ticket_0.preferences['icinga']['service'])
assert_nil(ticket_0.preferences['icinga']['state'])
# RBL check II
email_raw_string = "To: support@example.com
Subject: [PROBLEM] RBL check on apn4711.dc.example.com is CRITICAL!
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Message-Id: <20160131094621.29ECD400F29C-icinga-1-2@monitoring.znuny.com>
From: icinga@monitoring.example.com (icinga)
***** Icinga 2 Service Monitoring on apn4711.dc.example.com *****
=3D=3D> RBL check on apn4711.dc.example.com is CRITICAL! <=3D=3D
Info: CHECK_RBL CRITICAL - apn4711.dc.example.com BLACKLISTED on 1 server of=
38 (ix.dnsbl.example.com)=20
When: 2017-08-06 22:18:43 +0200
Service: RBL check (Display Name: \"RBL check\")
Host: apn4711.dc.example.com (Display Name: \"apn4711.dc.example.com\")
IPv4: 127.0.0.1="
ticket_0_1, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
assert_equal('new', ticket_0_1.state.name)
assert(ticket_0_1.preferences)
assert(ticket_0_1.preferences['integration'])
assert_equal('icinga', ticket_0_1.preferences['integration'])
assert(ticket_0_1.preferences['icinga'])
assert_equal('apn4711.dc.example.com (Display Name: "apn4711.dc.example.com")', ticket_0_1.preferences['icinga']['host'])
assert_equal('CHECK_RBL CRITICAL - apn4711.dc.example.com BLACKLISTED on 1 server of 38 (ix.dnsbl.example.com)', ticket_0_1.preferences['icinga']['info'])
assert_equal('RBL check (Display Name: "RBL check")', ticket_0_1.preferences['icinga']['service'])
assert_nil(ticket_0_1.preferences['icinga']['state'])
assert_equal(ticket_0_1.id, ticket_0.id)
# matching sender - CPU Load/host.internal.loc # matching sender - CPU Load/host.internal.loc
email_raw_string = "To: support@example.com email_raw_string = "To: support@example.com
Subject: PROBLEM - host.internal.loc - CPU Load is WARNING Subject: PROBLEM - host.internal.loc - CPU Load is WARNING