diff --git a/app/assets/javascripts/app/controllers/_integration/check_mk.coffee b/app/assets/javascripts/app/controllers/_integration/check_mk.coffee index 7a4c58903..39f6cc98a 100644 --- a/app/assets/javascripts/app/controllers/_integration/check_mk.coffee +++ b/app/assets/javascripts/app/controllers/_integration/check_mk.coffee @@ -15,10 +15,8 @@ class Index extends App.ControllerIntegrationBase ) new App.ScriptSnipped( - el: @$('.js-scriptSnipped') - facility: 'check_mk' + el: @$('.js-scriptSnippedPre') style: 'bash' - content: "#!/bin/bash\n\ncurl -X POST -F \"event_id=$NOTIFY_SERVICEPROBLEMID\" -F \"host=$NOTIFY_HOSTNAME\" -F \"service=$NOTIFY_SERVICEDESC\" -F \"state=$NOTIFY_SERVICESTATE\" -F \"text=$NOTIFY_SERVICEOUTPUT\" #{App.Config.get('http_type')}://#{App.Config.get('fqdn')}/api/v1/integration/check_mk/#{App.Setting.get('check_mk_token')}" description: [ ['To enable %s for sending http requests to %s, you need create a own "notification rule" in %s.', 'Check_MK', 'Zammad', 'Check_MK'] ['Configurable in the admin interface of %s.', 'Check_MK'] @@ -26,6 +24,38 @@ class Index extends App.ControllerIntegrationBase ] ) + new App.ScriptSnipped( + el: @$('.js-scriptSnipped') + header: 'Service Notification' + style: 'bash' + description: [ + ['Script can be located under: ||%s||', '/opt/omd/site/SITENAME/local/share/check_mk/notifications/zammad-service'] + ['Please make sure that the script is executable: ||%s||', 'chmod +x /opt/omd/site/SITENAME/local/share/check_mk/notifications/zammad-service'] + ] + content: "#!/bin/bash\n\ncurl -X POST -F \"event_id=$NOTIFY_SERVICEPROBLEMID\" -F \"host=$NOTIFY_HOSTNAME\" -F \"service=$NOTIFY_SERVICEDESC\" -F \"state=$NOTIFY_SERVICESTATE\" -F \"text=$NOTIFY_SERVICEOUTPUT\" #{App.Config.get('http_type')}://#{App.Config.get('fqdn')}/api/v1/integration/check_mk/#{App.Setting.get('check_mk_token')}" + ) + + new App.ScriptSnipped( + el: @$('.js-scriptSnippedExtended') + header: 'Host Notification' + style: 'bash' + description: [ + ['Script can be located under: ||%s||', '/opt/omd/site/SITENAME/local/share/check_mk/notifications/zammad-host'] + ['Please make sure that the script is executable: ||%s||', 'chmod +x /opt/omd/site/SITENAME/local/share/check_mk/notifications/zammad-host'] + ] + content: "#!/bin/bash\n\ncurl -X POST -F \"event_id=$NOTIFY_HOSTPROBLEMID\" -F \"host=$NOTIFY_HOSTNAME\" -F \"service=$NOTIFY_SERVICEDESC\" -F \"state=$NOTIFY_HOSTSTATE\" -F \"text=$NOTIFY_HOSTOUTPUT\" #{App.Config.get('http_type')}://#{App.Config.get('fqdn')}/api/v1/integration/check_mk/#{App.Setting.get('check_mk_token')}" + ) + + new App.ScriptSnipped( + el: @$('.js-scriptSnippedPost') + header: 'Further Attributes' + style: 'bash' + description: [ + ['It is also possible to set further attributes of created tickets. To do this, you only need to pass one additional parameter.'] + ] + content: '... -F "additional_ticket_attribute=some_value" ...' + ) + new App.HttpLog( el: @$('.js-log') facility: 'check_mk' diff --git a/app/assets/javascripts/app/controllers/widget/script_snipped.coffee b/app/assets/javascripts/app/controllers/widget/script_snipped.coffee index ec2fb1d6e..f623b891a 100644 --- a/app/assets/javascripts/app/controllers/widget/script_snipped.coffee +++ b/app/assets/javascripts/app/controllers/widget/script_snipped.coffee @@ -1,24 +1,19 @@ class App.ScriptSnipped extends App.Controller - #events: - # 'click .js-record': 'show' - elements: '.js-code': 'code' - constructor: -> super - #@fetch() - @records = [] @render() render: => @html App.view('widget/script_snipped')( - records: @records + header: @header || 'Usage', description: @description style: @style content: @content ) - @code.each (i, block) -> - hljs.highlightBlock block \ No newline at end of file + @code.each((i, block) -> + hljs.highlightBlock block + ) diff --git a/app/assets/javascripts/app/views/integration/base.jst.eco b/app/assets/javascripts/app/views/integration/base.jst.eco index 28b3996bb..a8884ff56 100644 --- a/app/assets/javascripts/app/views/integration/base.jst.eco +++ b/app/assets/javascripts/app/views/integration/base.jst.eco @@ -14,6 +14,9 @@ <% end %> <% end %>
+ + + \ No newline at end of file diff --git a/app/assets/javascripts/app/views/widget/script_snipped.jst.eco b/app/assets/javascripts/app/views/widget/script_snipped.jst.eco index 8325fc920..d18a59f2f 100644 --- a/app/assets/javascripts/app/views/widget/script_snipped.jst.eco +++ b/app/assets/javascripts/app/views/widget/script_snipped.jst.eco @@ -1,8 +1,10 @@<%- @T(item...) %>
<% end %> <% end %> -<%- @content %>
+<% if @content: %>
+ <%- @content %>
+<% end %>
diff --git a/app/controllers/integration/check_mk_controller.rb b/app/controllers/integration/check_mk_controller.rb
index e95cfaa52..e1310123a 100644
--- a/app/controllers/integration/check_mk_controller.rb
+++ b/app/controllers/integration/check_mk_controller.rb
@@ -17,9 +17,6 @@ class Integration::CheckMkController < ApplicationController
group_id = Setting.get('check_mk_group_id')
state_recovery_match = '(OK|UP)'
- # check if ticket with host is open
- customer = User.lookup(id: 1)
-
# follow-up detection by meta data
integration = 'check_mk'
open_states = Ticket::State.by_category(:open)
@@ -95,17 +92,32 @@ UserAgent: #{request.env['HTTP_USER_AGENT']}
return
end
- ticket = Ticket.create!(
- group_id: group_id,
- customer_id: customer.id,
- title: title,
- preferences: {
- check_mk: {
- host: params[:host],
- service: params[:service],
- },
- }
- )
+ # define customer of ticket
+ customer = nil
+ if params[:customer].present?
+ customer = User.find_by(login: params[:customer].downcase)
+ if !customer
+ customer = User.find_by(email: params[:customer].downcase)
+ end
+ end
+ if !customer
+ customer = User.lookup(id: 1)
+ end
+
+ params[:state] = nil
+ params[:customer] = nil
+ ticket = Ticket.new(Ticket.param_cleanup(Ticket.association_name_to_id_convert(params)))
+ ticket.group_id ||= group_id
+ ticket.customer_id = customer.id
+ ticket.title = title
+ ticket.preferences = {
+ check_mk: {
+ host: params[:host],
+ service: params[:service],
+ },
+ }
+ ticket.save!
+
Ticket::Article.create!(
ticket_id: ticket.id,
type_id: Ticket::Article::Type.find_by(name: 'web').id,
diff --git a/spec/requests/integration/check_mk_spec.rb b/spec/requests/integration/check_mk_spec.rb
index 6e56ead70..86eb6ed83 100644
--- a/spec/requests/integration/check_mk_spec.rb
+++ b/spec/requests/integration/check_mk_spec.rb
@@ -1,6 +1,12 @@
require 'rails_helper'
RSpec.describe 'Integration Check MK', type: :request do
+ let(:customer_user) do
+ create(:customer_user)
+ end
+ let(:group) do
+ create(:group)
+ end
before do
token = SecureRandom.urlsafe_base64(16)
@@ -9,6 +15,7 @@ RSpec.describe 'Integration Check MK', type: :request do
end
describe 'request handling' do
+
it 'does fail without a token' do
post '/api/v1/integration/check_mk/', params: {}
expect(response).to have_http_status(:not_found)
@@ -22,215 +29,481 @@ RSpec.describe 'Integration Check MK', type: :request do
expect(json_response['error']).to eq('Invalid token!')
end
- it 'does create and close a ticket' do
- params = {
- event_id: '123',
- state: 'down',
- host: 'some host',
- service: 'some service',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ context 'service check' do
+ it 'does create ticket with customer email' do
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ service: 'some service',
+ customer: customer_user.email,
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).to be_truthy
- expect(json_response['ticket_id']).to be_truthy
- expect(json_response['ticket_number']).to be_truthy
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
- ticket = Ticket.find(json_response['ticket_id'])
- expect(ticket.state.name).to eq('new')
- expect(ticket.articles.count).to eq(1)
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.customer.email).to eq(customer_user.email)
+ expect(ticket.articles.count).to eq(1)
+ end
- params = {
- event_id: '123',
- state: 'up',
- host: 'some host',
- service: 'some service',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ it 'does create ticket with customer login' do
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ service: 'some service',
+ customer: customer_user.login,
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).not_to be_empty
- expect(json_response['ticket_ids']).to include(ticket.id)
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
- ticket.reload
- expect(ticket.state.name).to eq('closed')
- expect(ticket.articles.count).to eq(2)
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.customer.email).to eq(customer_user.email)
+ expect(ticket.articles.count).to eq(1)
+ end
+
+ it 'does create ticket with group' do
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ service: 'some service',
+ group: group.name,
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
+
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.group.name).to eq(group.name)
+ expect(ticket.articles.count).to eq(1)
+ end
+
+ it 'does create ticket with extra field', db_strategy: :reset do
+ create :object_manager_attribute_text, name: 'text1'
+ ObjectManager::Attribute.migration_execute
+
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ service: 'some service',
+ text1: 'some text'
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
+
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.text1).to eq('some text')
+ end
+
+ it 'does create and close a ticket' do
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ service: 'some service',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
+
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(1)
+
+ params = {
+ event_id: '123',
+ state: 'up',
+ host: 'some host',
+ service: 'some service',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).not_to be_empty
+ expect(json_response['ticket_ids']).to include(ticket.id)
+
+ ticket.reload
+ expect(ticket.state.name).to eq('closed')
+ expect(ticket.articles.count).to eq(2)
+ end
+
+ it 'does double create and auto close' do
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ service: 'some service',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
+
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(1)
+
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ service: 'some service',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to eq('ticket already open, added note')
+ expect(json_response['ticket_ids']).to include(ticket.id)
+
+ ticket.reload
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(2)
+
+ params = {
+ event_id: '123',
+ state: 'up',
+ host: 'some host',
+ service: 'some service',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_ids']).to include(ticket.id)
+
+ ticket.reload
+ expect(ticket.state.name).to eq('closed')
+ expect(ticket.articles.count).to eq(3)
+ end
+
+ it 'does ticket close which get ignored' do
+ params = {
+ event_id: '123',
+ state: 'up',
+ host: 'some host',
+ service: 'some service',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to eq('no open tickets found, ignore action')
+ end
+
+ it 'does double create and no auto close' do
+ Setting.set('check_mk_auto_close', false)
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ service: 'some service',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
+
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(1)
+
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ service: 'some service',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to eq('ticket already open, added note')
+ expect(json_response['ticket_ids']).to include(ticket.id)
+
+ ticket.reload
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(2)
+
+ params = {
+ event_id: '123',
+ state: 'up',
+ host: 'some host',
+ service: 'some service',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to eq('ticket already open, added note')
+ expect(json_response['ticket_ids']).to include(ticket.id)
+
+ ticket.reload
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(3)
+ end
+
+ it 'does double create and auto close - with host recover' do
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ service: 'some service',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
+
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(1)
+
+ params = {
+ event_id: '123',
+ state: 'up',
+ host: 'some host',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to eq('no open tickets found, ignore action')
+ expect(json_response['ticket_ids']).to eq(nil)
+
+ ticket.reload
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(1)
+ end
end
- it 'does double create and auto close' do
- params = {
- event_id: '123',
- state: 'down',
- host: 'some host',
- service: 'some service',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ context 'host check' do
+ it 'does create and close a ticket' do
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).to be_truthy
- expect(json_response['ticket_id']).to be_truthy
- expect(json_response['ticket_number']).to be_truthy
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
- ticket = Ticket.find(json_response['ticket_id'])
- expect(ticket.state.name).to eq('new')
- expect(ticket.articles.count).to eq(1)
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(1)
- params = {
- event_id: '123',
- state: 'down',
- host: 'some host',
- service: 'some service',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ params = {
+ event_id: '123',
+ state: 'up',
+ host: 'some host',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).to eq('ticket already open, added note')
- expect(json_response['ticket_ids']).to include(ticket.id)
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).not_to be_empty
+ expect(json_response['ticket_ids']).to include(ticket.id)
- ticket.reload
- expect(ticket.state.name).to eq('new')
- expect(ticket.articles.count).to eq(2)
+ ticket.reload
+ expect(ticket.state.name).to eq('closed')
+ expect(ticket.articles.count).to eq(2)
+ end
- params = {
- event_id: '123',
- state: 'up',
- host: 'some host',
- service: 'some service',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ it 'does double create and auto close' do
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).to be_truthy
- expect(json_response['ticket_ids']).to include(ticket.id)
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
- ticket.reload
- expect(ticket.state.name).to eq('closed')
- expect(ticket.articles.count).to eq(3)
- end
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(1)
- it 'does ticket close which get ignored' do
- params = {
- event_id: '123',
- state: 'up',
- host: 'some host',
- service: 'some service',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).to eq('no open tickets found, ignore action')
- end
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to eq('ticket already open, added note')
+ expect(json_response['ticket_ids']).to include(ticket.id)
- it 'does double create and no auto close' do
- Setting.set('check_mk_auto_close', false)
- params = {
- event_id: '123',
- state: 'down',
- host: 'some host',
- service: 'some service',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ ticket.reload
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(2)
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).to be_truthy
- expect(json_response['ticket_id']).to be_truthy
- expect(json_response['ticket_number']).to be_truthy
+ params = {
+ event_id: '123',
+ state: 'up',
+ host: 'some host',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- ticket = Ticket.find(json_response['ticket_id'])
- expect(ticket.state.name).to eq('new')
- expect(ticket.articles.count).to eq(1)
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_ids']).to include(ticket.id)
- params = {
- event_id: '123',
- state: 'down',
- host: 'some host',
- service: 'some service',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ ticket.reload
+ expect(ticket.state.name).to eq('closed')
+ expect(ticket.articles.count).to eq(3)
+ end
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).to eq('ticket already open, added note')
- expect(json_response['ticket_ids']).to include(ticket.id)
+ it 'does ticket close which get ignored' do
+ params = {
+ event_id: '123',
+ state: 'up',
+ host: 'some host',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- ticket.reload
- expect(ticket.state.name).to eq('new')
- expect(ticket.articles.count).to eq(2)
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to eq('no open tickets found, ignore action')
+ end
- params = {
- event_id: '123',
- state: 'up',
- host: 'some host',
- service: 'some service',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ it 'does double create and no auto close' do
+ Setting.set('check_mk_auto_close', false)
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).to eq('ticket already open, added note')
- expect(json_response['ticket_ids']).to include(ticket.id)
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
- ticket.reload
- expect(ticket.state.name).to eq('new')
- expect(ticket.articles.count).to eq(3)
- end
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(1)
- it 'does double create and auto close - host only' do
- params = {
- event_id: '123',
- state: 'down',
- host: 'some host',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).to be_truthy
- expect(json_response['ticket_id']).to be_truthy
- expect(json_response['ticket_number']).to be_truthy
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to eq('ticket already open, added note')
+ expect(json_response['ticket_ids']).to include(ticket.id)
- ticket = Ticket.find(json_response['ticket_id'])
- expect(ticket.state.name).to eq('new')
- expect(ticket.articles.count).to eq(1)
+ ticket.reload
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(2)
- params = {
- event_id: '123',
- state: 'down',
- host: 'some host',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ params = {
+ event_id: '123',
+ state: 'up',
+ host: 'some host',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).to eq('ticket already open, added note')
- expect(json_response['ticket_ids']).to include(ticket.id)
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to eq('ticket already open, added note')
+ expect(json_response['ticket_ids']).to include(ticket.id)
- ticket.reload
- expect(ticket.state.name).to eq('new')
- expect(ticket.articles.count).to eq(2)
+ ticket.reload
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(3)
+ end
- params = {
- event_id: '123',
- state: 'up',
- host: 'some host',
- }
- post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
- expect(response).to have_http_status(:ok)
+ it 'does double create and auto close - with service recover' do
+ params = {
+ event_id: '123',
+ state: 'down',
+ host: 'some host',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
- expect(json_response).to be_a_kind_of(Hash)
- expect(json_response['result']).to be_truthy
- expect(json_response['ticket_ids']).to include(ticket.id)
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to be_truthy
+ expect(json_response['ticket_id']).to be_truthy
+ expect(json_response['ticket_number']).to be_truthy
- ticket.reload
- expect(ticket.state.name).to eq('closed')
- expect(ticket.articles.count).to eq(3)
+ ticket = Ticket.find(json_response['ticket_id'])
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(1)
+
+ params = {
+ event_id: '123',
+ state: 'up',
+ host: 'some host',
+ service: 'some service',
+ }
+ post "/api/v1/integration/check_mk/#{Setting.get('check_mk_token')}", params: params
+ expect(response).to have_http_status(:ok)
+
+ expect(json_response).to be_a_kind_of(Hash)
+ expect(json_response['result']).to eq('no open tickets found, ignore action')
+ expect(json_response['ticket_ids']).to eq(nil)
+
+ ticket.reload
+ expect(ticket.state.name).to eq('new')
+ expect(ticket.articles.count).to eq(1)
+ end
end
end