foreman_monitoring 0.1.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +14 -7
- data/Rakefile +0 -0
- data/app/controllers/api/v2/downtime_controller.rb +63 -0
- data/app/controllers/api/v2/monitoring_results_controller.rb +5 -4
- data/app/controllers/concerns/foreman_monitoring/find_host_by_client_cert.rb +59 -0
- data/app/controllers/concerns/foreman_monitoring/hosts_controller_extensions.rb +7 -5
- data/app/helpers/concerns/foreman_monitoring/hosts_helper_ext.rb +11 -13
- data/app/lib/proxy_api/monitoring.rb +9 -6
- data/app/models/concerns/foreman_monitoring/host_extensions.rb +6 -3
- data/app/models/concerns/foreman_monitoring/hostgroup_extensions.rb +7 -3
- data/app/models/concerns/orchestration/monitoring.rb +22 -15
- data/app/models/host_status/monitoring_status.rb +7 -4
- data/app/models/monitoring_result.rb +13 -6
- data/app/models/setting/monitoring.rb +4 -2
- data/app/overrides/add_host_monitoring_result_tab.rb +8 -6
- data/app/overrides/add_host_multiple_power_set_downtime_checkbox.rb +5 -3
- data/app/overrides/add_host_set_downtime_modal.rb +4 -2
- data/app/services/monitoring.rb +3 -0
- data/app/views/hosts/_downtime_fields.html.erb +2 -2
- data/app/views/monitoring_results/_host_tab_pane.html.erb +2 -2
- data/config/routes.rb +3 -0
- data/db/migrate/20160817135723_create_monitoring_results.rb +5 -1
- data/db/migrate/20161220201510_add_monitoring_proxy_id_to_host_and_hostgroup.rb +3 -1
- data/db/migrate/201910180900_rename_downtime_host_permission.rb +15 -0
- data/db/seeds.d/60-monitoring_proxy_feature.rb +2 -0
- data/lib/foreman_monitoring.rb +2 -0
- data/lib/foreman_monitoring/engine.rb +32 -28
- data/lib/foreman_monitoring/version.rb +3 -1
- data/lib/tasks/foreman_monitoring_tasks.rake +5 -5
- data/locale/gemspec.rb +2 -0
- data/test/controllers/api/v2/downtime_controller_test.rb +73 -0
- data/test/factories/feature.rb +4 -2
- data/test/factories/host.rb +6 -4
- data/test/factories/monitoring_results.rb +9 -7
- data/test/factories/smart_proxy.rb +3 -1
- data/test/functional/hosts_controller_test.rb +65 -52
- data/test/lib/proxy_api/monitoring_test.rb +16 -14
- data/test/test_plugin_helper.rb +5 -3
- data/test/unit/host_status/monitoring_status_test.rb +18 -16
- data/test/unit/host_test.rb +6 -4
- data/test/unit/monitoring_result_test.rb +75 -0
- data/test/unit/monitoring_test.rb +5 -3
- metadata +68 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5e703d5ad965ed3aecba3fee0dc31a7a2c80a84eab893392484555fda8ba8ab1
|
4
|
+
data.tar.gz: 6dce2771bea3df536cb244aadfbad6483387d71157c4b70d5cbe0256b27f508c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3c24e7c223b0103333d21717636f338176cb2756028d60943c8e6276ffaa366de039dec2b5afd527b5f50464737194b6cc6d5e357f9696d6b56aff167b7fc6e
|
7
|
+
data.tar.gz: ca91aa5af43494a254fbe03bd13cb4e4e30dccfdab8e47befb8252f97b2cce1bd8ab850739993d1675d194f3253a8b5825b248f6d95cc75b6b7c4915252356eb
|
data/README.md
CHANGED
@@ -17,7 +17,7 @@ The gem name is `foreman_monitoring`.
|
|
17
17
|
|
18
18
|
RPM users can install the `tfm-rubygem-foreman_monitoring` package.
|
19
19
|
|
20
|
-
Deb users can install the `ruby-
|
20
|
+
Deb users can install the `ruby-foreman-monitoring` package.
|
21
21
|
|
22
22
|
If using the gem as installation source database enhancement and service restart must
|
23
23
|
be done manually.
|
@@ -28,6 +28,13 @@ foreman-rake db:seed
|
|
28
28
|
touch ~foreman/tmp/restart.txt
|
29
29
|
```
|
30
30
|
|
31
|
+
## Compatibility
|
32
|
+
|
33
|
+
| Foreman Version | Plugin Version |
|
34
|
+
| --------------- | --------------:|
|
35
|
+
| >= 1.15 | ~> 0.1 |
|
36
|
+
| >= 1.17 | ~> 1.0 |
|
37
|
+
|
31
38
|
# Usage
|
32
39
|
|
33
40
|
For managing a host in the monitoring solution a Smart Proxy providing
|
@@ -35,15 +42,15 @@ the `monitoring` feature has to be assigned. This can be done during
|
|
35
42
|
provisioning or as a bulk action from the host overview.
|
36
43
|
|
37
44
|
You can configure the default action which will be done during host
|
38
|
-
provisioning and
|
39
|
-
object or take no action while
|
40
|
-
object, set a downtime or take no action. For rebuild it will by default
|
45
|
+
provisioning and de-provisioning. Provisioning allows to create a monitoring
|
46
|
+
object or take no action while de-provisoning allows deleting the monitoring
|
47
|
+
object, set a downtime or take no action. For rebuild, it will by default
|
41
48
|
set a downtime.
|
42
49
|
|
43
50
|
The plugin will show you the monitoring status as a sub-status and a detail
|
44
51
|
panel. You can configure if the sub-status should affect the global status.
|
45
52
|
|
46
|
-
Furthermore it allows to individually set a downtime at the host detail view
|
53
|
+
Furthermore, it allows to individually set a downtime at the host detail view
|
47
54
|
or as a bulk action from the host overview.
|
48
55
|
|
49
56
|
# Troubleshooting
|
@@ -51,8 +58,8 @@ or as a bulk action from the host overview.
|
|
51
58
|
Logging entries relevant to the plug-in will be located in the Foreman's log
|
52
59
|
which is by default `/var/log/foreman/production.log`.
|
53
60
|
|
54
|
-
Also check the troubleshooting section of the Smart Proxy plug-in if problems
|
55
|
-
|
61
|
+
Also, check the troubleshooting section of the Smart Proxy plug-in if problems
|
62
|
+
occur in the underlying communication.
|
56
63
|
|
57
64
|
## Contributing
|
58
65
|
|
data/Rakefile
CHANGED
File without changes
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Api
|
4
|
+
module V2
|
5
|
+
class DowntimeController < V2::BaseController
|
6
|
+
include Api::Version2
|
7
|
+
include ::ForemanMonitoring::FindHostByClientCert
|
8
|
+
|
9
|
+
authorize_host_by_client_cert %i[create]
|
10
|
+
before_action :find_host, :only => [:create]
|
11
|
+
|
12
|
+
api :POST, '/downtime', N_('Schedule host downtime')
|
13
|
+
param :duration, :number, :desc => N_('Downtime duration (seconds)'), :required => false
|
14
|
+
param :reason, String, :desc => N_('Downtime reason'), :required => false
|
15
|
+
|
16
|
+
def create
|
17
|
+
begin
|
18
|
+
options = {
|
19
|
+
:comment => downtime_params[:reason] || _('Host requested downtime')
|
20
|
+
}
|
21
|
+
if downtime_params.key? :duration
|
22
|
+
options[:start_time] = Time.now.to_i
|
23
|
+
options[:end_time] = Time.now.to_i + downtime_params[:duration].to_i
|
24
|
+
end
|
25
|
+
@host.downtime_host(options)
|
26
|
+
rescue StandardError => e
|
27
|
+
Foreman::Logging.exception('Failed to request downtime', e)
|
28
|
+
render :json => { 'message' => e.message }, :status => :unprocessable_entity
|
29
|
+
return
|
30
|
+
end
|
31
|
+
|
32
|
+
render :json => { 'message' => 'OK' }
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def downtime_params
|
38
|
+
params.permit(:duration, :reason)
|
39
|
+
end
|
40
|
+
|
41
|
+
def find_host
|
42
|
+
@host = detected_host
|
43
|
+
|
44
|
+
return true if @host
|
45
|
+
|
46
|
+
logger.info 'Denying access because no host could be detected.'
|
47
|
+
if User.current
|
48
|
+
render_error 'access_denied',
|
49
|
+
:status => :forbidden,
|
50
|
+
:locals => {
|
51
|
+
:details => 'You need to authenticate with a valid client cert. The DN has to match a known host.'
|
52
|
+
}
|
53
|
+
else
|
54
|
+
render_error 'unauthorized',
|
55
|
+
:status => :unauthorized,
|
56
|
+
:locals => {
|
57
|
+
:user_login => get_client_cert_hostname
|
58
|
+
}
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Api
|
2
4
|
module V2
|
3
5
|
class MonitoringResultsController < V2::BaseController
|
@@ -17,10 +19,9 @@ module Api
|
|
17
19
|
|
18
20
|
def create
|
19
21
|
begin
|
20
|
-
MonitoringResult.import(monitoring_result_params.with_indifferent_access)
|
21
|
-
rescue => e
|
22
|
-
|
23
|
-
logger.debug e.backtrace.join("\n")
|
22
|
+
MonitoringResult.import(monitoring_result_params.to_h.with_indifferent_access)
|
23
|
+
rescue StandardError => e
|
24
|
+
Foreman::Logging.exception('Failed to import monitoring result', e)
|
24
25
|
render :json => { 'message' => e.message }, :status => :unprocessable_entity
|
25
26
|
return
|
26
27
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ForemanMonitoring
|
4
|
+
module FindHostByClientCert
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def authorize_host_by_client_cert(actions, _options = {})
|
9
|
+
skip_before_action :require_login, :only => actions, :raise => false
|
10
|
+
skip_before_action :authorize, :only => actions
|
11
|
+
skip_before_action :verify_authenticity_token, :only => actions
|
12
|
+
skip_before_action :set_taxonomy, :only => actions, :raise => false
|
13
|
+
skip_before_action :session_expiry, :update_activity_time, :only => actions
|
14
|
+
before_action(:only => actions) { require_client_cert_or_login }
|
15
|
+
attr_reader :detected_host
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
# Permits Hosts authorized by their client cert
|
22
|
+
# or a user with permission
|
23
|
+
def require_client_cert_or_login
|
24
|
+
@detected_host = find_host_by_client_cert
|
25
|
+
|
26
|
+
if detected_host
|
27
|
+
set_admin_user
|
28
|
+
return true
|
29
|
+
end
|
30
|
+
|
31
|
+
require_login
|
32
|
+
unless User.current
|
33
|
+
render_error 'unauthorized', :status => :unauthorized unless performed? && api_request?
|
34
|
+
return false
|
35
|
+
end
|
36
|
+
authorize
|
37
|
+
end
|
38
|
+
|
39
|
+
def find_host_by_client_cert
|
40
|
+
hostname = get_client_cert_hostname
|
41
|
+
|
42
|
+
return unless hostname
|
43
|
+
|
44
|
+
host ||= Host::Base.find_by(certname: hostname) ||
|
45
|
+
Host::Base.find_by(name: hostname)
|
46
|
+
logger.info { "Found Host #{host} by client cert #{hostname}" } if host
|
47
|
+
host
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_client_cert_hostname
|
51
|
+
client_certificate = Foreman::ClientCertificate.new(request: request)
|
52
|
+
return unless client_certificate.verified?
|
53
|
+
|
54
|
+
hostname = client_certificate.subject
|
55
|
+
logger.debug "Extracted hostname '#{hostname}' from client certificate." if hostname
|
56
|
+
hostname
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ForemanMonitoring
|
2
4
|
module HostsControllerExtensions
|
3
5
|
def self.prepended(base)
|
@@ -38,14 +40,14 @@ module ForemanMonitoring
|
|
38
40
|
failed_hosts[host.name] = error_message
|
39
41
|
logger.error "Failed to set a host downtime for #{host}: #{error_message}"
|
40
42
|
end
|
41
|
-
rescue =>
|
42
|
-
failed_hosts[host.name] =
|
43
|
-
Foreman::Logging.exception(_('Failed to set a host downtime for %s.') % host,
|
43
|
+
rescue StandardError => e
|
44
|
+
failed_hosts[host.name] = e
|
45
|
+
Foreman::Logging.exception(_('Failed to set a host downtime for %s.') % host, e)
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
47
49
|
if failed_hosts.empty?
|
48
|
-
|
50
|
+
success _('A downtime was set for the selected hosts.')
|
49
51
|
else
|
50
52
|
error n_('A downtime clould not be set for host: %s.',
|
51
53
|
'A downtime could not be set for hosts: %s.',
|
@@ -128,7 +130,7 @@ module ForemanMonitoring
|
|
128
130
|
def action_permission
|
129
131
|
case params[:action]
|
130
132
|
when 'downtime', 'select_multiple_downtime', 'update_multiple_downtime'
|
131
|
-
:
|
133
|
+
:manage_downtime
|
132
134
|
when 'select_multiple_monitoring_proxy', 'update_multiple_monitoring_proxy'
|
133
135
|
:edit
|
134
136
|
else
|
@@ -1,13 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ForemanMonitoring
|
2
4
|
module HostsHelperExt
|
3
5
|
def multiple_actions
|
4
6
|
actions = super
|
5
|
-
if authorized_for(:controller => :hosts, :action => :select_multiple_downtime)
|
6
|
-
|
7
|
-
end
|
8
|
-
if authorized_for(:controller => :hosts, :action => :select_multiple_monitoring_proxy)
|
9
|
-
actions << [_('Change Monitoring Proxy'), select_multiple_monitoring_proxy_hosts_path]
|
10
|
-
end
|
7
|
+
actions << [_('Set downtime'), select_multiple_downtime_hosts_path] if authorized_for(:controller => :hosts, :action => :select_multiple_downtime)
|
8
|
+
actions << [_('Change Monitoring Proxy'), select_multiple_monitoring_proxy_hosts_path] if authorized_for(:controller => :hosts, :action => :select_multiple_monitoring_proxy)
|
11
9
|
actions
|
12
10
|
end
|
13
11
|
|
@@ -16,14 +14,14 @@ module ForemanMonitoring
|
|
16
14
|
button_group(
|
17
15
|
display_link_if_authorized(_('Downtime'),
|
18
16
|
hash_for_host_path(:id => host).merge(:auth_object => host,
|
19
|
-
:permission => :
|
17
|
+
:permission => :manage_downtime_hosts,
|
20
18
|
:anchor => 'set_host_downtime'),
|
21
19
|
:class => 'btn btn-default',
|
22
20
|
:disabled => !host.monitored?,
|
23
|
-
:title
|
24
|
-
:id
|
25
|
-
:data
|
26
|
-
|
21
|
+
:title => _('Set a downtime for this host'),
|
22
|
+
:id => 'host-downtime',
|
23
|
+
:data => { :toggle => 'modal',
|
24
|
+
:target => '#set_host_downtime' })
|
27
25
|
)
|
28
26
|
)
|
29
27
|
super
|
@@ -57,10 +55,10 @@ module ForemanMonitoring
|
|
57
55
|
end
|
58
56
|
end
|
59
57
|
|
60
|
-
def
|
58
|
+
def monitoring_datetime_f(f, attr, options = {})
|
61
59
|
field(f, attr, options) do
|
62
60
|
addClass options, 'form-control'
|
63
|
-
f.
|
61
|
+
f.datetime_field attr, options
|
64
62
|
end
|
65
63
|
end
|
66
64
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ProxyAPI
|
2
4
|
class Monitoring < ProxyAPI::Resource
|
3
5
|
def initialize(args)
|
@@ -7,34 +9,35 @@ module ProxyAPI
|
|
7
9
|
|
8
10
|
def create_host_downtime(host, args = {})
|
9
11
|
parse(post(args, "downtime/host/#{host}"))
|
10
|
-
rescue => e
|
12
|
+
rescue StandardError => e
|
11
13
|
raise ProxyException.new(url, e, N_('Unable to set downtime for %s') % host)
|
12
14
|
end
|
13
15
|
|
14
16
|
def remove_host_downtime(host, args = {})
|
15
17
|
parse(delete("downtime/host/#{host}?#{args.to_query}"))
|
16
|
-
rescue => e
|
18
|
+
rescue StandardError => e
|
17
19
|
raise ProxyException.new(url, e, N_('Unable to remove downtime for %s') % host)
|
18
20
|
end
|
19
21
|
|
20
22
|
def create_host(host, attributes = {})
|
21
23
|
parse(put({ :attributes => attributes }, "host/#{host}"))
|
22
|
-
rescue => e
|
24
|
+
rescue StandardError => e
|
23
25
|
raise ProxyException.new(url, e, N_('Unable to create monitoring host object for %s') % host)
|
24
26
|
end
|
25
27
|
|
26
28
|
def update_host(host, attributes = {})
|
27
29
|
parse(post({ :attributes => attributes }, "host/#{host}"))
|
28
|
-
rescue => e
|
30
|
+
rescue StandardError => e
|
29
31
|
raise ProxyException.new(url, e, N_('Unable to update monitoring host object for %s') % host)
|
30
32
|
end
|
31
33
|
|
32
34
|
def delete_host(host)
|
33
35
|
raise Foreman::Exception, 'Missing hostname.' if host.blank?
|
36
|
+
|
34
37
|
parse(delete("host/#{host}"))
|
35
38
|
rescue RestClient::ResourceNotFound
|
36
39
|
true
|
37
|
-
rescue => e
|
40
|
+
rescue StandardError => e
|
38
41
|
raise ProxyException.new(url, e, N_('Unable to delete monitoring host object for %s') % host)
|
39
42
|
end
|
40
43
|
|
@@ -42,7 +45,7 @@ module ProxyAPI
|
|
42
45
|
parse(get("host/#{host}"))
|
43
46
|
rescue RestClient::ResourceNotFound
|
44
47
|
nil
|
45
|
-
rescue => e
|
48
|
+
rescue StandardError => e
|
46
49
|
raise ProxyException.new(url, e, N_('Unable to query monitoring host object for %{host}: %{message}') % { :host => host, :message => e.try(:response) || e.try(:message) })
|
47
50
|
end
|
48
51
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ForemanMonitoring
|
2
4
|
module HostExtensions
|
3
5
|
def self.prepended(base)
|
@@ -6,7 +8,7 @@ module ForemanMonitoring
|
|
6
8
|
|
7
9
|
after_build :downtime_host_build
|
8
10
|
|
9
|
-
has_many :monitoring_results, :dependent => :destroy, :foreign_key => 'host_id'
|
11
|
+
has_many :monitoring_results, :dependent => :destroy, :foreign_key => 'host_id', :inverse_of => :host
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
@@ -28,6 +30,7 @@ module ForemanMonitoring
|
|
28
30
|
|
29
31
|
def downtime_host(options)
|
30
32
|
return unless monitored?
|
33
|
+
|
31
34
|
begin
|
32
35
|
monitoring.set_downtime_host(self, options)
|
33
36
|
rescue ProxyAPI::ProxyException => e
|
@@ -59,12 +62,12 @@ module ForemanMonitoring
|
|
59
62
|
:architecture => architecture.try(:name),
|
60
63
|
:os => operatingsystem.try(:to_label),
|
61
64
|
:osfamily => operatingsystem.try(:family),
|
62
|
-
:virtual => provider != 'BareMetal',
|
65
|
+
:virtual => virtual.presence || provider != 'BareMetal',
|
63
66
|
:provider => provider,
|
64
67
|
:compute_resource => compute_resource.try(:to_label),
|
65
68
|
:hostgroup => hostgroup.try(:to_label),
|
66
69
|
:organization => organization.try(:name),
|
67
|
-
:location =>
|
70
|
+
:location => location.try(:name),
|
68
71
|
:comment => comment,
|
69
72
|
:environment => environment.try(:to_s),
|
70
73
|
:owner_name => owner.try(:name)
|
@@ -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
|
7
|
-
|
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
|
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
|
-
|
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
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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
|
41
|
+
queue.create(:name => _('Removing monitoring object for %s') % self, :priority => 2,
|
36
42
|
:action => [self, :delMonitoring])
|
37
43
|
end
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
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)
|