foreman_monitoring 0.1.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -7
  3. data/Rakefile +0 -0
  4. data/app/controllers/api/v2/downtime_controller.rb +63 -0
  5. data/app/controllers/api/v2/monitoring_results_controller.rb +5 -4
  6. data/app/controllers/concerns/foreman_monitoring/find_host_by_client_cert.rb +60 -0
  7. data/app/controllers/concerns/foreman_monitoring/hosts_controller_extensions.rb +21 -20
  8. data/app/helpers/concerns/foreman_monitoring/hosts_helper_ext.rb +16 -19
  9. data/app/lib/proxy_api/monitoring.rb +9 -6
  10. data/app/models/concerns/foreman_monitoring/host_extensions.rb +15 -14
  11. data/app/models/concerns/foreman_monitoring/hostgroup_extensions.rb +7 -3
  12. data/app/models/concerns/orchestration/monitoring.rb +22 -15
  13. data/app/models/host_status/monitoring_status.rb +7 -4
  14. data/app/models/monitoring_result.rb +13 -6
  15. data/app/models/setting/monitoring.rb +4 -2
  16. data/app/overrides/add_host_monitoring_result_tab.rb +8 -6
  17. data/app/overrides/add_host_multiple_power_set_downtime_checkbox.rb +5 -3
  18. data/app/overrides/add_host_set_downtime_modal.rb +4 -2
  19. data/app/services/monitoring.rb +3 -0
  20. data/app/views/hosts/_downtime_fields.html.erb +2 -2
  21. data/app/views/monitoring_results/_host_tab_pane.html.erb +2 -2
  22. data/config/routes.rb +3 -0
  23. data/db/migrate/20160817135723_create_monitoring_results.rb +5 -1
  24. data/db/migrate/20161220201510_add_monitoring_proxy_id_to_host_and_hostgroup.rb +3 -1
  25. data/db/migrate/201910180900_rename_downtime_host_permission.rb +15 -0
  26. data/db/seeds.d/60-monitoring_proxy_feature.rb +2 -0
  27. data/lib/foreman_monitoring.rb +2 -0
  28. data/lib/foreman_monitoring/engine.rb +32 -28
  29. data/lib/foreman_monitoring/version.rb +3 -1
  30. data/lib/tasks/foreman_monitoring_tasks.rake +5 -5
  31. data/locale/gemspec.rb +2 -0
  32. data/test/controllers/api/v2/downtime_controller_test.rb +73 -0
  33. data/test/factories/feature.rb +4 -2
  34. data/test/factories/host.rb +6 -4
  35. data/test/factories/monitoring_results.rb +9 -7
  36. data/test/factories/smart_proxy.rb +3 -1
  37. data/test/functional/hosts_controller_test.rb +65 -52
  38. data/test/lib/proxy_api/monitoring_test.rb +16 -14
  39. data/test/test_plugin_helper.rb +5 -3
  40. data/test/unit/host_status/monitoring_status_test.rb +18 -16
  41. data/test/unit/host_test.rb +6 -4
  42. data/test/unit/monitoring_result_test.rb +75 -0
  43. data/test/unit/monitoring_test.rb +5 -3
  44. metadata +62 -14
@@ -1,14 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanMonitoring
2
4
  module HostgroupExtensions
3
5
  extend ActiveSupport::Concern
4
6
 
5
7
  def monitoring_proxy
6
- return super unless ancestry.present?
7
- SmartProxy.find_by_id(inherited_monitoring_proxy_id)
8
+ return super if ancestry.blank?
9
+
10
+ SmartProxy.find_by(id: inherited_monitoring_proxy_id)
8
11
  end
9
12
 
10
13
  def inherited_monitoring_proxy_id
11
- return monitoring_proxy_id unless ancestry.present?
14
+ return monitoring_proxy_id if ancestry.blank?
15
+
12
16
  self[:monitoring_proxy_id] || self.class.sort_by_ancestry(ancestors.where('monitoring_proxy_id is not NULL')).last.try(:monitoring_proxy_id)
13
17
  end
14
18
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Orchestration::Monitoring
2
4
  extend ActiveSupport::Concern
3
5
 
@@ -10,55 +12,59 @@ module Orchestration::Monitoring
10
12
 
11
13
  def queue_monitoring
12
14
  return unless monitored? && errors.empty?
15
+
13
16
  clear_monitoring_object
14
17
  !monitoring_object.key?(:attrs) ? queue_monitoring_create : queue_monitoring_update
15
18
  end
16
19
 
17
20
  def queue_monitoring_create
18
21
  return true unless ::Monitoring.create_action?(:create)
19
- queue.create(:name => _('Create monitoring object for %s') % self, :priority => 20,
22
+
23
+ queue.create(:name => _('Create monitoring object for %s') % self, :priority => 20,
20
24
  :action => [self, :setMonitoring])
21
25
  end
22
26
 
23
27
  def queue_monitoring_update
24
28
  return unless monitoring_update_required?(monitoring_object[:attrs], monitoring_attributes)
29
+
25
30
  Rails.logger.debug('Detected a change to the monitoring object is required.')
26
- if ::Monitoring.create_action?(:create)
27
- queue.create(:name => _('Monitoring update for %s') % old, :priority => 2,
28
- :action => [self, :setMonitoringUpdate])
29
- end
31
+ return unless ::Monitoring.create_action?(:create)
32
+
33
+ queue.create(:name => _('Monitoring update for %s') % old, :priority => 2,
34
+ :action => [self, :setMonitoringUpdate])
30
35
  end
31
36
 
32
37
  def queue_monitoring_destroy
33
38
  return unless monitored? && errors.empty?
39
+
34
40
  if ::Monitoring.delete_action?(:delete)
35
- queue.create(:name => _('Removing monitoring object for %s') % self, :priority => 2,
41
+ queue.create(:name => _('Removing monitoring object for %s') % self, :priority => 2,
36
42
  :action => [self, :delMonitoring])
37
43
  end
38
- if ::Monitoring.delete_action?(:downtime)
39
- queue.create(:name => _('Set monitoring downtime for %s') % self, :priority => 2,
40
- :action => [self, :setMonitoringDowntime])
41
- end
44
+ return unless ::Monitoring.delete_action?(:downtime)
45
+
46
+ queue.create(:name => _('Set monitoring downtime for %s') % self, :priority => 2,
47
+ :action => [self, :setMonitoringDowntime])
42
48
  end
43
49
 
44
50
  def setMonitoring
45
51
  Rails.logger.info "Adding Monitoring object for #{name}"
46
52
  monitoring.create_host(self)
47
- rescue => e
53
+ rescue StandardError => e
48
54
  failure format(_("Failed to create a monitoring object %{name}: %{message}\n "), :name => name, :message => e.message), e
49
55
  end
50
56
 
51
57
  def delMonitoring
52
58
  Rails.logger.info "Deleting Monitoring object for #{name}"
53
59
  monitoring.delete_host(self)
54
- rescue => e
60
+ rescue StandardError => e
55
61
  failure format(_("Failed to delete a monitoring object %{name}: %{message}\n "), :name => name, :message => e.message), e
56
62
  end
57
63
 
58
64
  def setMonitoringUpdate
59
65
  Rails.logger.info "Updating Monitoring object for #{name}"
60
66
  monitoring.update_host(self)
61
- rescue => e
67
+ rescue StandardError => e
62
68
  failure format(_("Failed to update a monitoring object %{name}: %{message}\n "), :name => name, :message => e.message), e
63
69
  end
64
70
 
@@ -67,14 +73,14 @@ module Orchestration::Monitoring
67
73
  def setMonitoringDowntime
68
74
  Rails.logger.info "Setting Monitoring downtime for #{name}"
69
75
  monitoring.set_downtime_host(self, monitoring_downtime_defaults)
70
- rescue => e
76
+ rescue StandardError => e
71
77
  failure format(_("Failed to set a monitoring downtime for %{name}: %{message}\n "), :name => name, :message => e.message), e
72
78
  end
73
79
 
74
80
  def delMonitoringDowntime
75
81
  Rails.logger.info "Deleting Monitoring downtime for #{name}"
76
82
  monitoring.del_downtime_host(self, monitoring_downtime_defaults)
77
- rescue => e
83
+ rescue StandardError => e
78
84
  failure format(_("Failed to set a monitoring downtime for %{name}: %{message}\n "), :name => name, :message => e.message), e
79
85
  end
80
86
 
@@ -97,6 +103,7 @@ module Orchestration::Monitoring
97
103
 
98
104
  def monitoring_update_required?(actual_attrs, desired_attrs)
99
105
  return true if actual_attrs.deep_symbolize_keys.keys != desired_attrs.deep_symbolize_keys.keys
106
+
100
107
  actual_attrs.deep_symbolize_keys.merge(desired_attrs.deep_symbolize_keys) do |k, actual_v, desired_v|
101
108
  if actual_v.is_a?(Hash) && desired_v.is_a?(Hash)
102
109
  return true if monitoring_update_required?(actual_v, desired_v)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HostStatus
2
4
  class MonitoringStatus < HostStatus::Status
3
5
  OK = 0
@@ -11,9 +13,10 @@ module HostStatus
11
13
 
12
14
  def to_status(_options = {})
13
15
  state = OK
14
- grouped_results.each do |resultset, _count|
16
+ grouped_results.each_key do |resultset|
15
17
  result, downtime, acknowledged = resultset
16
18
  next if downtime
19
+
17
20
  result = map_result_to_status(result)
18
21
  result = WARNING if acknowledged || result == UNKNOWN
19
22
  state = result if result > state
@@ -23,6 +26,7 @@ module HostStatus
23
26
 
24
27
  def to_global(_options = {})
25
28
  return HostStatus::Global::OK unless should_affect_global_status?
29
+
26
30
  case status
27
31
  when OK
28
32
  HostStatus::Global::OK
@@ -60,9 +64,7 @@ module HostStatus
60
64
  host.monitoring_results.any?
61
65
  end
62
66
 
63
- def host_monitored?
64
- host.monitored?
65
- end
67
+ delegate :monitored?, to: :host, prefix: true
66
68
 
67
69
  def should_affect_global_status?
68
70
  Setting[:monitoring_affect_global_status]
@@ -76,6 +78,7 @@ module HostStatus
76
78
 
77
79
  def map_result_to_status(result)
78
80
  return result if Rails::VERSION::MAJOR < 5
81
+
79
82
  case result.to_sym
80
83
  when :ok
81
84
  OK
@@ -1,10 +1,13 @@
1
- class MonitoringResult < ActiveRecord::Base
2
- enum :result => %i[ok warning critical unknown]
1
+ # frozen_string_literal: true
2
+
3
+ class MonitoringResult < ApplicationRecord
4
+ enum :result => { :ok => 0, :warning => 1, :critical => 2, :unknown => 3 }
3
5
 
4
6
  belongs_to_host
5
7
 
8
+ # rubocop:disable Metrics/AbcSize
6
9
  def self.import(result)
7
- host = Host.find_by_name(result[:host])
10
+ host = Host.find_by(name: result[:host])
8
11
 
9
12
  if host.nil?
10
13
  logger.error "Unable to find host #{result[:host]}"
@@ -27,21 +30,25 @@ class MonitoringResult < ActiveRecord::Base
27
30
  end
28
31
 
29
32
  created = MonitoringResult.where(:host => host, :service => result[:service]).first_or_create
30
- if created.timestamp.blank? || updates[:timestamp].blank? || created.timestamp < updates[:timestamp]
31
- created.update_attributes(updates)
33
+ # rubocop:disable Rails/Date
34
+ if created.timestamp.blank? || updates[:timestamp].blank? || (created.timestamp.to_time - updates[:timestamp].to_time) < 2
35
+ created.update(updates)
32
36
 
33
37
  if created.persisted?
34
38
  logger.info("Imported monitoring result for #{host} in #{(Time.now.utc - start_time).round(2)} seconds")
35
- host.refresh_statuses
39
+ host.get_status(::HostStatus::MonitoringStatus).refresh!
36
40
  end
37
41
  else
38
42
  logger.debug "Skipping monitoring result import for #{host} as it is older than what we have."
39
43
  end
44
+ # rubocop:enable Rails/Date
40
45
  end
46
+ # rubocop:enable Metrics/AbcSize
41
47
 
42
48
  def status
43
49
  return :ok if downtime
44
50
  return :warning if acknowledged
51
+
45
52
  result.to_sym
46
53
  end
47
54
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Setting
2
4
  class Monitoring < ::Setting
3
5
  def self.default_settings
@@ -7,10 +9,10 @@ class Setting
7
9
  true, N_('Monitoring status should affect global status')),
8
10
  set('monitoring_create_action',
9
11
  _('What action should be taken when a host is created'),
10
- 'create', N_('Host Create Action'), nil, { :collection => proc { ::Monitoring::CREATE_ACTIONS } }),
12
+ 'create', N_('Host Create Action'), nil, :collection => proc { ::Monitoring::CREATE_ACTIONS }),
11
13
  set('monitoring_delete_action',
12
14
  _('What action should be taken when a host is deleted'),
13
- 'delete', N_('Host Delete Action'), nil, { :collection => proc { ::Monitoring::DELETE_ACTIONS } })
15
+ 'delete', N_('Host Delete Action'), nil, :collection => proc { ::Monitoring::DELETE_ACTIONS })
14
16
  ]
15
17
  end
16
18
 
@@ -1,9 +1,11 @@
1
- Deface::Override.new(:virtual_path => 'hosts/show',
2
- :name => 'add_monitoring_result_tab',
1
+ # frozen_string_literal: true
2
+
3
+ Deface::Override.new(:virtual_path => 'hosts/show',
4
+ :name => 'add_monitoring_result_tab',
3
5
  :insert_bottom => 'ul.nav-tabs',
4
- :partial => 'monitoring_results/host_tab')
6
+ :partial => 'monitoring_results/host_tab')
5
7
 
6
- Deface::Override.new(:virtual_path => 'hosts/show',
7
- :name => 'add_monitoring_result_tab_pane',
8
+ Deface::Override.new(:virtual_path => 'hosts/show',
9
+ :name => 'add_monitoring_result_tab_pane',
8
10
  :insert_bottom => 'div.tab-content',
9
- :partial => 'monitoring_results/host_tab_pane')
11
+ :partial => 'monitoring_results/host_tab_pane')
@@ -1,4 +1,6 @@
1
- Deface::Override.new(:virtual_path => 'hosts/select_multiple_power_state',
2
- :name => 'add_host_multiple_power_set_downtime_checkbox',
1
+ # frozen_string_literal: true
2
+
3
+ Deface::Override.new(:virtual_path => 'hosts/select_multiple_power_state',
4
+ :name => 'add_host_multiple_power_set_downtime_checkbox',
3
5
  :insert_before => "erb[silent]:contains('end')",
4
- :partial => 'hosts/host_downtime_checkbox')
6
+ :partial => 'hosts/host_downtime_checkbox')
@@ -1,4 +1,6 @@
1
- Deface::Override.new(:virtual_path => 'hosts/show',
2
- :name => 'add_monitoring_set_downtime_modal',
1
+ # frozen_string_literal: true
2
+
3
+ Deface::Override.new(:virtual_path => 'hosts/show',
4
+ :name => 'add_monitoring_set_downtime_modal',
3
5
  :insert_after => 'div#review_before_build',
4
6
  :partial => 'hosts/set_host_downtime')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Monitoring
2
4
  CREATE_ACTIONS = {
3
5
  'none' => _('None'),
@@ -49,6 +51,7 @@ class Monitoring
49
51
  def query_host(host)
50
52
  result = proxy_api.query_host(host.name)
51
53
  return {} unless result
54
+
52
55
  {
53
56
  :attrs => result
54
57
  }
@@ -1,3 +1,3 @@
1
1
  <%= text_f f, :comment, :size => "col-md-5", :label => _('Comment'), :help_inline => _('Short description that explains why the downtime was set.'), :required => true %>
2
- <%= datetime_f f, :starttime, :size => "col-md-5", :label => _('Starttime'), :help_inline => _('Time when the downtime should start.'), :value => Time.current.strftime("%Y-%m-%dT%H:%M"), :required => true %>
3
- <%= datetime_f f, :endtime, :size => "col-md-5", :label => _('Endtime'), :help_inline => _('Time when the downtime should end.'), :value => Time.current.advance(:hours => 2).strftime("%Y-%m-%dT%H:%M"), :required => true %>
2
+ <%= monitoring_datetime_f f, :starttime, :size => "col-md-5", :label => _('Starttime'), :help_inline => _('Time when the downtime should start.'), :min => DateTime.now, :value => Time.current, :required => true %>
3
+ <%= monitoring_datetime_f f, :endtime, :size => "col-md-5", :label => _('Endtime'), :help_inline => _('Time when the downtime should end.'), :value => Time.current.advance(:hours => 2), :required => true %>
@@ -1,8 +1,8 @@
1
1
  <%- if authorized_for(:permission => 'view_monitoring_results', :auth_object => @host) && @host.monitored? -%>
2
2
  <div class="tab-pane" id="monitoring">
3
3
  <% if @host.monitoring_results.any? %>
4
- <table class="table table-bordered table-striped">
5
- <thead
4
+ <table class="<%= table_css_classes %>">
5
+ <thead>
6
6
  <tr>
7
7
  <th colspan="2">Monitoring</th>
8
8
  </tr>
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Rails.application.routes.draw do
2
4
  namespace :api, :defaults => { :format => 'json' } do
3
5
  scope '(:apiv)', :module => :v2,
@@ -5,6 +7,7 @@ Rails.application.routes.draw do
5
7
  :apiv => /v1|v2/,
6
8
  :constraints => ApiConstraints.new(:version => 2) do
7
9
  resources :monitoring_results, :only => [:create]
10
+ resources :downtime, :only => [:create]
8
11
  end
9
12
  end
10
13
 
@@ -1,5 +1,8 @@
1
- class CreateMonitoringResults < ActiveRecord::Migration
1
+ # frozen_string_literal: true
2
+
3
+ class CreateMonitoringResults < ActiveRecord::Migration[4.2]
2
4
  def change
5
+ # rubocop:disable Rails/CreateTableWithTimestamps
3
6
  create_table :monitoring_results do |t|
4
7
  t.references :host, :null => false
5
8
  t.string :service, :null => false
@@ -8,5 +11,6 @@ class CreateMonitoringResults < ActiveRecord::Migration
8
11
  t.boolean :acknowledged, :default => false, :null => false
9
12
  t.datetime :timestamp
10
13
  end
14
+ # rubocop:enable Rails/CreateTableWithTimestamps
11
15
  end
12
16
  end
@@ -1,4 +1,6 @@
1
- class AddMonitoringProxyIdToHostAndHostgroup < ActiveRecord::Migration
1
+ # frozen_string_literal: true
2
+
3
+ class AddMonitoringProxyIdToHostAndHostgroup < ActiveRecord::Migration[4.2]
2
4
  def self.up
3
5
  add_column :hosts, :monitoring_proxy_id, :integer
4
6
  add_column :hostgroups, :monitoring_proxy_id, :integer
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RenameDowntimeHostPermission < ActiveRecord::Migration[5.2]
4
+ def up
5
+ # rubocop:disable Rails/SkipsModelValidations
6
+ Permission.where(name: 'manage_host_downtimes').update_all(name: 'manage_downtime_hosts') if table_exists?(:permissions)
7
+ # rubocop:enable Rails/SkipsModelValidations
8
+ end
9
+
10
+ def down
11
+ # rubocop:disable Rails/SkipsModelValidations
12
+ Permission.where(name: 'manage_downtime_hosts').update_all(name: 'manage_host_downtimes') if table_exists?(:permissions)
13
+ # rubocop:enable Rails/SkipsModelValidations
14
+ end
15
+ end
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  f = Feature.where(:name => 'Monitoring').first_or_create
2
4
  raise "Unable to create proxy feature: #{format_errors f}" if f.nil? || f.errors.any?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'foreman_monitoring/engine'
2
4
 
3
5
  module ForemanMonitoring
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'deface'
2
4
 
3
5
  module ForemanMonitoring
@@ -17,42 +19,44 @@ module ForemanMonitoring
17
19
  end
18
20
 
19
21
  initializer 'foreman_monitoring.load_default_settings',
20
- :before => :load_config_initializers do |_app|
21
- if begin
22
- Setting.table_exists?
23
- rescue
24
- false
25
- end
26
- require_dependency File.expand_path('../../../app/models/setting/monitoring.rb', __FILE__)
27
- end
22
+ :before => :load_config_initializers do |_app|
23
+ setting_table_exists = begin
24
+ Setting.table_exists?
25
+ rescue StandardError
26
+ false
27
+ end
28
+ require_dependency File.expand_path('../../app/models/setting/monitoring.rb', __dir__) if setting_table_exists
28
29
  end
29
30
 
30
31
  initializer 'foreman_monitoring.register_plugin', :before => :finisher_hook do |_app|
31
32
  Foreman::Plugin.register :foreman_monitoring do
32
- requires_foreman '>= 1.15'
33
+ requires_foreman '>= 2.2'
33
34
 
34
35
  apipie_documented_controllers ["#{ForemanMonitoring::Engine.root}/app/controllers/api/v2/*.rb"]
35
36
 
36
37
  security_block :foreman_monitoring do
37
38
  permission :view_monitoring_results,
38
- {},
39
- :resource_type => 'Host'
40
- permission :manage_host_downtimes,
41
- { :hosts => [:downtime, :select_multiple_downtime, :update_multiple_downtime] },
42
- :resource_type => 'Host'
39
+ {},
40
+ :resource_type => 'Host'
41
+ permission :manage_downtime_hosts,
42
+ { :hosts => [:downtime, :select_multiple_downtime, :update_multiple_downtime], :'api/v2/downtime' => [:create] },
43
+ :resource_type => 'Host'
43
44
  permission :upload_monitoring_results,
44
- :'api/v2/monitoring_results' => [:create]
45
- permission :edit_hosts,
46
- { :hosts => [:select_multiple_monitoring_proxy, :update_multiple_monitoring_proxy] },
47
- :resource_type => 'Host'
45
+ :'api/v2/monitoring_results' => [:create]
48
46
  end
49
47
 
50
- role 'Monitoring viewer', [:view_monitoring_results]
51
- role 'Monitoring manager', [:view_monitoring_results, :manage_host_downtimes]
48
+ # Extend built in permissions
49
+ Foreman::AccessControl.permission(:edit_hosts).actions.concat [
50
+ 'hosts/select_multiple_monitoring_proxy',
51
+ 'hosts/update_multiple_monitoring_proxy'
52
+ ]
53
+
54
+ role 'Monitoring viewer', [:view_monitoring_results], 'Role granting permissions to view monitor results'
55
+ role 'Monitoring manager', [:view_monitoring_results, :manage_downtime_hosts], 'Role granting permissions to view monitor results and manage downtimes'
52
56
 
53
57
  register_custom_status HostStatus::MonitoringStatus
54
58
 
55
- add_controller_action_scope(HostsController, :index) { |base_scope| base_scope.includes(:monitoring_results) }
59
+ add_controller_action_scope('HostsController', :index) { |base_scope| base_scope.includes(:monitoring_results) }
56
60
 
57
61
  monitoring_proxy_options = {
58
62
  :feature => 'Monitoring',
@@ -65,23 +69,23 @@ module ForemanMonitoring
65
69
  smart_proxy_for Host::Managed, :monitoring_proxy, monitoring_proxy_options
66
70
  smart_proxy_for Hostgroup, :monitoring_proxy, monitoring_proxy_options
67
71
 
68
- add_controller_action_scope(HostsController, :index) { |base_scope| base_scope.includes(:monitoring_proxy) }
72
+ add_controller_action_scope('HostsController', :index) { |base_scope| base_scope.includes(:monitoring_proxy) }
69
73
  end
70
74
  end
71
75
 
72
76
  config.to_prepare do
73
77
  begin
74
- ::Host::Managed.send :include, ForemanMonitoring::HostExtensions
75
- ::Hostgroup.send :include, ForemanMonitoring::HostgroupExtensions
76
- ::HostsHelper.send(:include, ForemanMonitoring::HostsHelperExt)
77
- ::HostsController.send :include, ForemanMonitoring::HostsControllerExtensions
78
- rescue => e
78
+ ::Host::Managed.prepend(ForemanMonitoring::HostExtensions)
79
+ ::Hostgroup.include(ForemanMonitoring::HostgroupExtensions)
80
+ ::HostsHelper.prepend(ForemanMonitoring::HostsHelperExt)
81
+ ::HostsController.prepend(ForemanMonitoring::HostsControllerExtensions)
82
+ rescue StandardError => e
79
83
  Rails.logger.warn "ForemanMonitoring: skipping engine hook (#{e})"
80
84
  end
81
85
  end
82
86
 
83
87
  initializer 'foreman_monitoring.register_gettext', after: :load_config_initializers do |_app|
84
- locale_dir = File.join(File.expand_path('../../..', __FILE__), 'locale')
88
+ locale_dir = File.join(File.expand_path('../..', __dir__), 'locale')
85
89
  locale_domain = 'foreman_monitoring'
86
90
  Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
87
91
  end