Improved error handling.
This commit is contained in:
parent
dd29b0692c
commit
b2ece28306
2 changed files with 76 additions and 6 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue