foreman_monitoring 0.1.3 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -1
- data/Rakefile +0 -0
- data/app/controllers/api/v2/monitoring_results_controller.rb +1 -1
- data/app/controllers/concerns/foreman_monitoring/hosts_controller_extensions.rb +15 -16
- data/app/helpers/concerns/foreman_monitoring/hosts_helper_ext.rb +9 -14
- data/app/lib/proxy_api/monitoring.rb +6 -6
- data/app/models/concerns/foreman_monitoring/host_extensions.rb +11 -13
- data/app/models/concerns/foreman_monitoring/hostgroup_extensions.rb +3 -3
- data/app/models/concerns/orchestration/monitoring.rb +11 -13
- data/app/models/host_status/monitoring_status.rb +2 -4
- data/app/models/monitoring_result.rb +3 -7
- data/app/models/setting/monitoring.rb +2 -2
- data/app/views/hosts/_downtime_fields.html.erb +2 -2
- data/db/migrate/20160817135723_create_monitoring_results.rb +3 -1
- data/db/migrate/20161220201510_add_monitoring_proxy_id_to_host_and_hostgroup.rb +1 -1
- data/lib/foreman_monitoring/engine.rb +15 -15
- data/lib/foreman_monitoring/version.rb +1 -1
- data/lib/tasks/foreman_monitoring_tasks.rake +2 -4
- data/test/factories/feature.rb +1 -1
- data/test/factories/host.rb +3 -3
- data/test/factories/monitoring_results.rb +1 -1
- data/test/factories/smart_proxy.rb +1 -1
- data/test/functional/hosts_controller_test.rb +53 -42
- data/test/lib/proxy_api/monitoring_test.rb +13 -13
- data/test/test_plugin_helper.rb +3 -3
- data/test/unit/host_status/monitoring_status_test.rb +12 -12
- data/test/unit/host_test.rb +4 -4
- data/test/unit/monitoring_test.rb +3 -3
- metadata +18 -20
- data/test/unit/monitoring_result_test.rb +0 -73
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83bf8624bc1c1ecbb9e8dc6c11340022a204244afe293789405cdaf9e80b10be
|
4
|
+
data.tar.gz: 0d3d42280a04d22a33792c03ed62aee41a9800cf6a307abb16a06589d03ea0af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ec31b7e2cf93786431ccbedbbb7ec36e4fdcce70bb4d2beb0c2faf741b9e3287ceec3878c5f168c09bcb2fe190694f1f5f77d435e3f686456d47dd0f90b57aa
|
7
|
+
data.tar.gz: 317ad1fdc9bf7a61008007b6b8edce1eec053aecf55cd0abcda95e97dfc670021c01100f5fbe2f30eebbc543ededbbe3e0f3a4811e44609716be9b570635ed77
|
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
|
data/Rakefile
CHANGED
File without changes
|
@@ -18,7 +18,7 @@ module Api
|
|
18
18
|
def create
|
19
19
|
begin
|
20
20
|
MonitoringResult.import(monitoring_result_params.with_indifferent_access)
|
21
|
-
rescue => e
|
21
|
+
rescue StandardError => e
|
22
22
|
logger.error "Failed to import monitoring result: #{e.message}"
|
23
23
|
logger.debug e.backtrace.join("\n")
|
24
24
|
render :json => { 'message' => e.message }, :status => :unprocessable_entity
|
@@ -1,18 +1,17 @@
|
|
1
1
|
module ForemanMonitoring
|
2
2
|
module HostsControllerExtensions
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
alias_method_chain :update_multiple_power_state, :monitoring
|
3
|
+
def self.prepended(base)
|
4
|
+
base.class_eval do
|
5
|
+
before_action :find_resource_with_monitoring, :only => [:downtime]
|
6
|
+
before_action :find_multiple_with_monitoring, :only => %i[select_multiple_downtime update_multiple_downtime
|
7
|
+
select_multiple_monitoring_proxy update_multiple_monitoring_proxy]
|
8
|
+
before_action :validate_host_downtime_params, :only => [:downtime]
|
9
|
+
before_action :validate_hosts_downtime_params, :only => [:update_multiple_downtime]
|
10
|
+
before_action :validate_multiple_monitoring_proxy, :only => :update_multiple_monitoring_proxy
|
11
|
+
|
12
|
+
alias_method :find_resource_with_monitoring, :find_resource
|
13
|
+
alias_method :find_multiple_with_monitoring, :find_multiple
|
14
|
+
end
|
16
15
|
end
|
17
16
|
|
18
17
|
def downtime
|
@@ -39,7 +38,7 @@ module ForemanMonitoring
|
|
39
38
|
failed_hosts[host.name] = error_message
|
40
39
|
logger.error "Failed to set a host downtime for #{host}: #{error_message}"
|
41
40
|
end
|
42
|
-
rescue => error
|
41
|
+
rescue StandardError => error
|
43
42
|
failed_hosts[host.name] = error
|
44
43
|
Foreman::Logging.exception(_('Failed to set a host downtime for %s.') % host, error)
|
45
44
|
end
|
@@ -65,7 +64,7 @@ module ForemanMonitoring
|
|
65
64
|
update_multiple_proxy(_('Monitoring'), :monitoring_proxy=)
|
66
65
|
end
|
67
66
|
|
68
|
-
def
|
67
|
+
def update_multiple_power_state
|
69
68
|
options = {
|
70
69
|
:comment => 'Power state changed in Foreman',
|
71
70
|
:author => "Foreman User #{User.current}",
|
@@ -86,7 +85,7 @@ module ForemanMonitoring
|
|
86
85
|
end
|
87
86
|
end
|
88
87
|
end
|
89
|
-
|
88
|
+
super
|
90
89
|
end
|
91
90
|
|
92
91
|
private
|
@@ -1,18 +1,13 @@
|
|
1
1
|
module ForemanMonitoring
|
2
2
|
module HostsHelperExt
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
9
|
-
|
10
|
-
def multiple_actions_with_monitoring
|
11
|
-
return multiple_actions_without_monitoring unless authorized_for(:controller => :hosts, :action => :select_multiple_downtime)
|
12
|
-
multiple_actions_without_monitoring + [[_('Set downtime'), select_multiple_downtime_hosts_path], [_('Change Monitoring Proxy'), select_multiple_monitoring_proxy_hosts_path]]
|
3
|
+
def multiple_actions
|
4
|
+
actions = super
|
5
|
+
actions << [_('Set downtime'), select_multiple_downtime_hosts_path] if authorized_for(:controller => :hosts, :action => :select_multiple_downtime)
|
6
|
+
actions << [_('Change Monitoring Proxy'), select_multiple_monitoring_proxy_hosts_path] if authorized_for(:controller => :hosts, :action => :select_multiple_monitoring_proxy)
|
7
|
+
actions
|
13
8
|
end
|
14
9
|
|
15
|
-
def
|
10
|
+
def host_title_actions(host)
|
16
11
|
title_actions(
|
17
12
|
button_group(
|
18
13
|
display_link_if_authorized(_('Downtime'),
|
@@ -27,7 +22,7 @@ module ForemanMonitoring
|
|
27
22
|
:target => '#set_host_downtime' })
|
28
23
|
)
|
29
24
|
)
|
30
|
-
|
25
|
+
super
|
31
26
|
end
|
32
27
|
|
33
28
|
def host_monitoring_result_icon_class(result)
|
@@ -58,10 +53,10 @@ module ForemanMonitoring
|
|
58
53
|
end
|
59
54
|
end
|
60
55
|
|
61
|
-
def
|
56
|
+
def datetime_f(f, attr, options = {})
|
62
57
|
field(f, attr, options) do
|
63
58
|
addClass options, 'form-control'
|
64
|
-
f.
|
59
|
+
f.datetime_local_field attr, options
|
65
60
|
end
|
66
61
|
end
|
67
62
|
end
|
@@ -7,25 +7,25 @@ module ProxyAPI
|
|
7
7
|
|
8
8
|
def create_host_downtime(host, args = {})
|
9
9
|
parse(post(args, "downtime/host/#{host}"))
|
10
|
-
rescue => e
|
10
|
+
rescue StandardError => e
|
11
11
|
raise ProxyException.new(url, e, N_('Unable to set downtime for %s') % host)
|
12
12
|
end
|
13
13
|
|
14
14
|
def remove_host_downtime(host, args = {})
|
15
15
|
parse(delete("downtime/host/#{host}?#{args.to_query}"))
|
16
|
-
rescue => e
|
16
|
+
rescue StandardError => e
|
17
17
|
raise ProxyException.new(url, e, N_('Unable to remove downtime for %s') % host)
|
18
18
|
end
|
19
19
|
|
20
20
|
def create_host(host, attributes = {})
|
21
21
|
parse(put({ :attributes => attributes }, "host/#{host}"))
|
22
|
-
rescue => e
|
22
|
+
rescue StandardError => e
|
23
23
|
raise ProxyException.new(url, e, N_('Unable to create monitoring host object for %s') % host)
|
24
24
|
end
|
25
25
|
|
26
26
|
def update_host(host, attributes = {})
|
27
27
|
parse(post({ :attributes => attributes }, "host/#{host}"))
|
28
|
-
rescue => e
|
28
|
+
rescue StandardError => e
|
29
29
|
raise ProxyException.new(url, e, N_('Unable to update monitoring host object for %s') % host)
|
30
30
|
end
|
31
31
|
|
@@ -34,7 +34,7 @@ module ProxyAPI
|
|
34
34
|
parse(delete("host/#{host}"))
|
35
35
|
rescue RestClient::ResourceNotFound
|
36
36
|
true
|
37
|
-
rescue => e
|
37
|
+
rescue StandardError => e
|
38
38
|
raise ProxyException.new(url, e, N_('Unable to delete monitoring host object for %s') % host)
|
39
39
|
end
|
40
40
|
|
@@ -42,7 +42,7 @@ module ProxyAPI
|
|
42
42
|
parse(get("host/#{host}"))
|
43
43
|
rescue RestClient::ResourceNotFound
|
44
44
|
nil
|
45
|
-
rescue => e
|
45
|
+
rescue StandardError => e
|
46
46
|
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
47
|
end
|
48
48
|
end
|
@@ -1,15 +1,13 @@
|
|
1
1
|
module ForemanMonitoring
|
2
2
|
module HostExtensions
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
def self.prepended(base)
|
4
|
+
base.class_eval do
|
5
|
+
include Orchestration::Monitoring
|
6
6
|
|
7
|
-
|
7
|
+
after_build :downtime_host_build
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
has_many :monitoring_results, :dependent => :destroy, :foreign_key => 'host_id'
|
9
|
+
has_many :monitoring_results, :dependent => :destroy, :foreign_key => 'host_id', :inverse_of => :host
|
10
|
+
end
|
13
11
|
end
|
14
12
|
|
15
13
|
def monitoring_status(options = {})
|
@@ -42,12 +40,12 @@ module ForemanMonitoring
|
|
42
40
|
monitoring_proxy.present?
|
43
41
|
end
|
44
42
|
|
45
|
-
def
|
46
|
-
|
43
|
+
def hostgroup_inherited_attributes
|
44
|
+
super + ['monitoring_proxy_id']
|
47
45
|
end
|
48
46
|
|
49
|
-
def
|
50
|
-
ids =
|
47
|
+
def smart_proxy_ids
|
48
|
+
ids = super
|
51
49
|
[monitoring_proxy, hostgroup.try(:monitoring_proxy)].compact.each do |proxy|
|
52
50
|
ids << proxy.id
|
53
51
|
end
|
@@ -66,7 +64,7 @@ module ForemanMonitoring
|
|
66
64
|
:compute_resource => compute_resource.try(:to_label),
|
67
65
|
:hostgroup => hostgroup.try(:to_label),
|
68
66
|
:organization => organization.try(:name),
|
69
|
-
:location =>
|
67
|
+
:location => organization.try(:name),
|
70
68
|
:comment => comment,
|
71
69
|
:environment => environment.try(:to_s),
|
72
70
|
:owner_name => owner.try(:name)
|
@@ -3,12 +3,12 @@ module ForemanMonitoring
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
def monitoring_proxy
|
6
|
-
return super
|
7
|
-
SmartProxy.
|
6
|
+
return super if ancestry.blank?
|
7
|
+
SmartProxy.find_by(id: inherited_monitoring_proxy_id)
|
8
8
|
end
|
9
9
|
|
10
10
|
def inherited_monitoring_proxy_id
|
11
|
-
return monitoring_proxy_id
|
11
|
+
return monitoring_proxy_id if ancestry.blank?
|
12
12
|
self[:monitoring_proxy_id] || self.class.sort_by_ancestry(ancestors.where('monitoring_proxy_id is not NULL')).last.try(:monitoring_proxy_id)
|
13
13
|
end
|
14
14
|
end
|
@@ -23,10 +23,9 @@ module Orchestration::Monitoring
|
|
23
23
|
def queue_monitoring_update
|
24
24
|
return unless monitoring_update_required?(monitoring_object[:attrs], monitoring_attributes)
|
25
25
|
Rails.logger.debug('Detected a change to the monitoring object is required.')
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
26
|
+
return unless ::Monitoring.create_action?(:create)
|
27
|
+
queue.create(:name => _('Monitoring update for %s') % old, :priority => 2,
|
28
|
+
:action => [self, :setMonitoringUpdate])
|
30
29
|
end
|
31
30
|
|
32
31
|
def queue_monitoring_destroy
|
@@ -35,30 +34,29 @@ module Orchestration::Monitoring
|
|
35
34
|
queue.create(:name => _('Removing monitoring object for %s') % self, :priority => 2,
|
36
35
|
:action => [self, :delMonitoring])
|
37
36
|
end
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
37
|
+
return unless ::Monitoring.delete_action?(:downtime)
|
38
|
+
queue.create(:name => _('Set monitoring downtime for %s') % self, :priority => 2,
|
39
|
+
:action => [self, :setMonitoringDowntime])
|
42
40
|
end
|
43
41
|
|
44
42
|
def setMonitoring
|
45
43
|
Rails.logger.info "Adding Monitoring object for #{name}"
|
46
44
|
monitoring.create_host(self)
|
47
|
-
rescue => e
|
45
|
+
rescue StandardError => e
|
48
46
|
failure format(_("Failed to create a monitoring object %{name}: %{message}\n "), :name => name, :message => e.message), e
|
49
47
|
end
|
50
48
|
|
51
49
|
def delMonitoring
|
52
50
|
Rails.logger.info "Deleting Monitoring object for #{name}"
|
53
51
|
monitoring.delete_host(self)
|
54
|
-
rescue => e
|
52
|
+
rescue StandardError => e
|
55
53
|
failure format(_("Failed to delete a monitoring object %{name}: %{message}\n "), :name => name, :message => e.message), e
|
56
54
|
end
|
57
55
|
|
58
56
|
def setMonitoringUpdate
|
59
57
|
Rails.logger.info "Updating Monitoring object for #{name}"
|
60
58
|
monitoring.update_host(self)
|
61
|
-
rescue => e
|
59
|
+
rescue StandardError => e
|
62
60
|
failure format(_("Failed to update a monitoring object %{name}: %{message}\n "), :name => name, :message => e.message), e
|
63
61
|
end
|
64
62
|
|
@@ -67,14 +65,14 @@ module Orchestration::Monitoring
|
|
67
65
|
def setMonitoringDowntime
|
68
66
|
Rails.logger.info "Setting Monitoring downtime for #{name}"
|
69
67
|
monitoring.set_downtime_host(self, monitoring_downtime_defaults)
|
70
|
-
rescue => e
|
68
|
+
rescue StandardError => e
|
71
69
|
failure format(_("Failed to set a monitoring downtime for %{name}: %{message}\n "), :name => name, :message => e.message), e
|
72
70
|
end
|
73
71
|
|
74
72
|
def delMonitoringDowntime
|
75
73
|
Rails.logger.info "Deleting Monitoring downtime for #{name}"
|
76
74
|
monitoring.del_downtime_host(self, monitoring_downtime_defaults)
|
77
|
-
rescue => e
|
75
|
+
rescue StandardError => e
|
78
76
|
failure format(_("Failed to set a monitoring downtime for %{name}: %{message}\n "), :name => name, :message => e.message), e
|
79
77
|
end
|
80
78
|
|
@@ -11,7 +11,7 @@ module HostStatus
|
|
11
11
|
|
12
12
|
def to_status(_options = {})
|
13
13
|
state = OK
|
14
|
-
grouped_results.
|
14
|
+
grouped_results.each_key do |resultset|
|
15
15
|
result, downtime, acknowledged = resultset
|
16
16
|
next if downtime
|
17
17
|
result = map_result_to_status(result)
|
@@ -60,9 +60,7 @@ module HostStatus
|
|
60
60
|
host.monitoring_results.any?
|
61
61
|
end
|
62
62
|
|
63
|
-
|
64
|
-
host.monitored?
|
65
|
-
end
|
63
|
+
delegate :monitored?, to: :host, prefix: true
|
66
64
|
|
67
65
|
def should_affect_global_status?
|
68
66
|
Setting[:monitoring_affect_global_status]
|
@@ -1,11 +1,10 @@
|
|
1
|
-
class MonitoringResult <
|
1
|
+
class MonitoringResult < ApplicationRecord
|
2
2
|
enum :result => %i[ok warning critical unknown]
|
3
3
|
|
4
4
|
belongs_to_host
|
5
5
|
|
6
|
-
# rubocop:disable Metrics/AbcSize
|
7
6
|
def self.import(result)
|
8
|
-
host = Host.
|
7
|
+
host = Host.find_by(name: result[:host])
|
9
8
|
|
10
9
|
if host.nil?
|
11
10
|
logger.error "Unable to find host #{result[:host]}"
|
@@ -28,8 +27,7 @@ class MonitoringResult < ActiveRecord::Base
|
|
28
27
|
end
|
29
28
|
|
30
29
|
created = MonitoringResult.where(:host => host, :service => result[:service]).first_or_create
|
31
|
-
|
32
|
-
if created.timestamp.blank? || updates[:timestamp].blank? || (created.timestamp.to_time - updates[:timestamp].to_time) < 2
|
30
|
+
if created.timestamp.blank? || updates[:timestamp].blank? || created.timestamp < updates[:timestamp]
|
33
31
|
created.update_attributes(updates)
|
34
32
|
|
35
33
|
if created.persisted?
|
@@ -39,9 +37,7 @@ class MonitoringResult < ActiveRecord::Base
|
|
39
37
|
else
|
40
38
|
logger.debug "Skipping monitoring result import for #{host} as it is older than what we have."
|
41
39
|
end
|
42
|
-
# rubocop:enable Rails/Date
|
43
40
|
end
|
44
|
-
# rubocop:enable Metrics/AbcSize
|
45
41
|
|
46
42
|
def status
|
47
43
|
return :ok if downtime
|
@@ -7,10 +7,10 @@ class Setting
|
|
7
7
|
true, N_('Monitoring status should affect global status')),
|
8
8
|
set('monitoring_create_action',
|
9
9
|
_('What action should be taken when a host is created'),
|
10
|
-
'create', N_('Host Create Action'), nil,
|
10
|
+
'create', N_('Host Create Action'), nil, :collection => proc { ::Monitoring::CREATE_ACTIONS }),
|
11
11
|
set('monitoring_delete_action',
|
12
12
|
_('What action should be taken when a host is deleted'),
|
13
|
-
'delete', N_('Host Delete Action'), nil,
|
13
|
+
'delete', N_('Host Delete Action'), nil, :collection => proc { ::Monitoring::DELETE_ACTIONS })
|
14
14
|
]
|
15
15
|
end
|
16
16
|
|
@@ -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
|
-
<%=
|
3
|
-
<%=
|
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 %>
|
@@ -1,5 +1,6 @@
|
|
1
|
-
class CreateMonitoringResults < ActiveRecord::Migration
|
1
|
+
class CreateMonitoringResults < ActiveRecord::Migration[4.2]
|
2
2
|
def change
|
3
|
+
# rubocop:disable Rails/CreateTableWithTimestamps
|
3
4
|
create_table :monitoring_results do |t|
|
4
5
|
t.references :host, :null => false
|
5
6
|
t.string :service, :null => false
|
@@ -8,5 +9,6 @@ class CreateMonitoringResults < ActiveRecord::Migration
|
|
8
9
|
t.boolean :acknowledged, :default => false, :null => false
|
9
10
|
t.datetime :timestamp
|
10
11
|
end
|
12
|
+
# rubocop:enable Rails/CreateTableWithTimestamps
|
11
13
|
end
|
12
14
|
end
|
@@ -17,10 +17,10 @@ module ForemanMonitoring
|
|
17
17
|
end
|
18
18
|
|
19
19
|
initializer 'foreman_monitoring.load_default_settings',
|
20
|
-
|
20
|
+
:before => :load_config_initializers do |_app|
|
21
21
|
if begin
|
22
22
|
Setting.table_exists?
|
23
|
-
rescue
|
23
|
+
rescue StandardError
|
24
24
|
false
|
25
25
|
end
|
26
26
|
require_dependency File.expand_path('../../../app/models/setting/monitoring.rb', __FILE__)
|
@@ -29,22 +29,22 @@ module ForemanMonitoring
|
|
29
29
|
|
30
30
|
initializer 'foreman_monitoring.register_plugin', :before => :finisher_hook do |_app|
|
31
31
|
Foreman::Plugin.register :foreman_monitoring do
|
32
|
-
requires_foreman '>= 1.
|
32
|
+
requires_foreman '>= 1.17'
|
33
33
|
|
34
34
|
apipie_documented_controllers ["#{ForemanMonitoring::Engine.root}/app/controllers/api/v2/*.rb"]
|
35
35
|
|
36
36
|
security_block :foreman_monitoring do
|
37
37
|
permission :view_monitoring_results,
|
38
|
-
|
39
|
-
|
38
|
+
{},
|
39
|
+
:resource_type => 'Host'
|
40
40
|
permission :manage_host_downtimes,
|
41
|
-
|
42
|
-
|
41
|
+
{ :hosts => [:downtime, :select_multiple_downtime, :update_multiple_downtime] },
|
42
|
+
:resource_type => 'Host'
|
43
43
|
permission :upload_monitoring_results,
|
44
|
-
|
44
|
+
:'api/v2/monitoring_results' => [:create]
|
45
45
|
permission :edit_hosts,
|
46
|
-
|
47
|
-
|
46
|
+
{ :hosts => [:select_multiple_monitoring_proxy, :update_multiple_monitoring_proxy] },
|
47
|
+
:resource_type => 'Host'
|
48
48
|
end
|
49
49
|
|
50
50
|
role 'Monitoring viewer', [:view_monitoring_results]
|
@@ -71,11 +71,11 @@ module ForemanMonitoring
|
|
71
71
|
|
72
72
|
config.to_prepare do
|
73
73
|
begin
|
74
|
-
::Host::Managed.send
|
75
|
-
::Hostgroup.send
|
76
|
-
::HostsHelper.send(:
|
77
|
-
::HostsController.send
|
78
|
-
rescue => e
|
74
|
+
::Host::Managed.send(:prepend, ForemanMonitoring::HostExtensions)
|
75
|
+
::Hostgroup.send(:include, ForemanMonitoring::HostgroupExtensions)
|
76
|
+
::HostsHelper.send(:prepend, ForemanMonitoring::HostsHelperExt)
|
77
|
+
::HostsController.send(:prepend, ForemanMonitoring::HostsControllerExtensions)
|
78
|
+
rescue StandardError => e
|
79
79
|
Rails.logger.warn "ForemanMonitoring: skipping engine hook (#{e})"
|
80
80
|
end
|
81
81
|
end
|
@@ -19,7 +19,7 @@ namespace :foreman_monitoring do
|
|
19
19
|
"#{ForemanMonitoring::Engine.root}/lib/**/*.rb",
|
20
20
|
"#{ForemanMonitoring::Engine.root}/test/**/*.rb"]
|
21
21
|
end
|
22
|
-
rescue
|
22
|
+
rescue StandardError
|
23
23
|
puts 'Rubocop not loaded.'
|
24
24
|
end
|
25
25
|
|
@@ -30,6 +30,4 @@ end
|
|
30
30
|
Rake::Task[:test].enhance ['test:foreman_monitoring']
|
31
31
|
|
32
32
|
load 'tasks/jenkins.rake'
|
33
|
-
if Rake::Task.task_defined?(:'jenkins:unit')
|
34
|
-
Rake::Task['jenkins:unit'].enhance ['test:foreman_monitoring', 'foreman_monitoring:rubocop']
|
35
|
-
end
|
33
|
+
Rake::Task['jenkins:unit'].enhance ['test:foreman_monitoring', 'foreman_monitoring:rubocop'] if Rake::Task.task_defined?(:'jenkins:unit')
|
data/test/factories/feature.rb
CHANGED
data/test/factories/host.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
|
1
|
+
FactoryBot.modify do
|
2
2
|
factory :host do
|
3
3
|
trait :with_monitoring do
|
4
4
|
monitoring_proxy do
|
5
|
-
|
5
|
+
FactoryBot.create(:smart_proxy, :monitoring)
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
@@ -12,7 +12,7 @@ FactoryGirl.modify do
|
|
12
12
|
end
|
13
13
|
after(:create) do |host, evaluator|
|
14
14
|
evaluator.monitoring_result_count.times do
|
15
|
-
|
15
|
+
FactoryBot.create(:monitoring_result, :host => host)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -8,7 +8,7 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
8
8
|
ProxyAPI::Monitoring.stubs(:create_host).returns(true)
|
9
9
|
ProxyAPI::Monitoring.stubs(:update_host).returns(true)
|
10
10
|
ProxyAPI::Monitoring.stubs(:delete_host).returns(true)
|
11
|
-
@host =
|
11
|
+
@host = FactoryBot.create(:host, :managed)
|
12
12
|
end
|
13
13
|
|
14
14
|
context 'when setting a host downtime' do
|
@@ -18,14 +18,16 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
18
18
|
|
19
19
|
test 'the flash should inform it' do
|
20
20
|
Host::Managed.any_instance.stubs(:downtime_host).returns(true)
|
21
|
-
put :downtime,
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
put :downtime,
|
22
|
+
params: {
|
23
|
+
:id => @host.name,
|
24
|
+
:downtime => {
|
25
|
+
:comment => 'Maintenance work.',
|
26
|
+
:starttime => Time.current,
|
27
|
+
:endtime => Time.current.advance(:hours => 2)
|
28
|
+
}
|
29
|
+
},
|
30
|
+
session: set_session_user
|
29
31
|
assert_response :found
|
30
32
|
assert_redirected_to host_path(:id => @host)
|
31
33
|
assert_nil flash[:error]
|
@@ -34,7 +36,7 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
34
36
|
end
|
35
37
|
|
36
38
|
test 'with missing comment param the flash should inform it' do
|
37
|
-
put :downtime, { :id => @host.name }, set_session_user
|
39
|
+
put :downtime, params: { :id => @host.name }, session: set_session_user
|
38
40
|
assert_response :found
|
39
41
|
assert_redirected_to host_path(:id => @host)
|
40
42
|
assert_not_nil flash[:error]
|
@@ -42,7 +44,9 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
42
44
|
end
|
43
45
|
|
44
46
|
test 'with missing date params the flash should inform it' do
|
45
|
-
put :downtime,
|
47
|
+
put :downtime,
|
48
|
+
params: { :id => @host.name, :downtime => { :comment => 'Maintenance work.' } },
|
49
|
+
session: set_session_user
|
46
50
|
assert_response :found
|
47
51
|
assert_redirected_to host_path(:id => @host)
|
48
52
|
assert_not_nil flash[:error]
|
@@ -50,14 +54,16 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
50
54
|
end
|
51
55
|
|
52
56
|
test 'with invalid starttime the flash should inform it' do
|
53
|
-
put :downtime,
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
57
|
+
put :downtime,
|
58
|
+
params: {
|
59
|
+
:id => @host.name,
|
60
|
+
:downtime => {
|
61
|
+
:comment => 'Maintenance work.',
|
62
|
+
:starttime => 'invalid',
|
63
|
+
:endtime => 'invalid'
|
64
|
+
}
|
65
|
+
},
|
66
|
+
session: set_session_user
|
61
67
|
assert_response :found
|
62
68
|
assert_redirected_to host_path(:id => @host)
|
63
69
|
assert_not_nil flash[:error]
|
@@ -65,28 +71,34 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
65
71
|
end
|
66
72
|
|
67
73
|
test 'should parse the times in the correct time zone' do
|
68
|
-
User.current.
|
74
|
+
User.current.timezone = 'Berlin'
|
75
|
+
User.current.save
|
69
76
|
Host::Managed.any_instance.expects(:downtime_host).with(has_entries(:start_time => 1_492_676_100, :end_time => 1_492_683_300))
|
70
|
-
put :downtime,
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
77
|
+
put :downtime,
|
78
|
+
params: {
|
79
|
+
:id => @host.name,
|
80
|
+
:downtime => {
|
81
|
+
:comment => 'Maintenance work.',
|
82
|
+
:starttime => '2017-04-20T10:15',
|
83
|
+
:endtime => '2017-04-20T12:15'
|
84
|
+
}
|
85
|
+
},
|
86
|
+
session: set_session_user
|
78
87
|
end
|
79
88
|
end
|
80
89
|
|
81
90
|
describe 'setting a downtime on multiple hosts' do
|
82
91
|
before do
|
83
|
-
@hosts =
|
92
|
+
@hosts = FactoryBot.create_list(:host, 2, :with_monitoring)
|
84
93
|
@request.env['HTTP_REFERER'] = hosts_path
|
85
94
|
end
|
86
95
|
|
87
96
|
test 'show a host selection' do
|
88
97
|
host_ids = @hosts.map(&:id)
|
89
|
-
|
98
|
+
post :select_multiple_downtime,
|
99
|
+
params: { :host_ids => host_ids },
|
100
|
+
session: set_session_user,
|
101
|
+
xhr: true
|
90
102
|
assert_response :success
|
91
103
|
assert_includes response.body, @hosts.first.name
|
92
104
|
assert_includes response.body, @hosts.last.name
|
@@ -103,8 +115,7 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
103
115
|
}
|
104
116
|
}
|
105
117
|
|
106
|
-
post :update_multiple_downtime, params,
|
107
|
-
set_session_user
|
118
|
+
post :update_multiple_downtime, params: params, session: set_session_user
|
108
119
|
|
109
120
|
assert_response :found
|
110
121
|
assert_redirected_to hosts_path
|
@@ -116,7 +127,7 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
116
127
|
|
117
128
|
describe 'changing the power state on multiple hosts' do
|
118
129
|
before do
|
119
|
-
@hosts =
|
130
|
+
@hosts = FactoryBot.create_list(:host, 2, :with_monitoring)
|
120
131
|
@request.env['HTTP_REFERER'] = hosts_path
|
121
132
|
|
122
133
|
power_mock = mock('power')
|
@@ -135,8 +146,7 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
135
146
|
}
|
136
147
|
}
|
137
148
|
|
138
|
-
post :update_multiple_power_state, params,
|
139
|
-
set_session_user
|
149
|
+
post :update_multiple_power_state, params: params, session: set_session_user
|
140
150
|
|
141
151
|
assert_response :found
|
142
152
|
assert_redirected_to hosts_path
|
@@ -155,8 +165,7 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
155
165
|
}
|
156
166
|
}
|
157
167
|
|
158
|
-
post :update_multiple_power_state, params,
|
159
|
-
set_session_user
|
168
|
+
post :update_multiple_power_state, params: params, session: set_session_user
|
160
169
|
|
161
170
|
assert_response :found
|
162
171
|
assert_redirected_to hosts_path
|
@@ -167,15 +176,18 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
167
176
|
end
|
168
177
|
|
169
178
|
describe 'changing the monitoring proxy of multiple hosts' do
|
170
|
-
let(:hosts) {
|
171
|
-
let(:monitoring_proxy) {
|
179
|
+
let(:hosts) { FactoryBot.create_list(:host, 2, :with_monitoring) }
|
180
|
+
let(:monitoring_proxy) { FactoryBot.create(:smart_proxy, :monitoring, :organizations => [hosts.first.organization], :locations => [hosts.first.location]) }
|
172
181
|
before do
|
173
182
|
@request.env['HTTP_REFERER'] = hosts_path
|
174
183
|
end
|
175
184
|
|
176
185
|
test 'show a host selection' do
|
177
186
|
host_ids = hosts.map(&:id)
|
178
|
-
|
187
|
+
post :select_multiple_monitoring_proxy,
|
188
|
+
params: { :host_ids => host_ids },
|
189
|
+
session: set_session_user,
|
190
|
+
xhr: true
|
179
191
|
assert_response :success
|
180
192
|
hosts.each do |host|
|
181
193
|
assert response.body =~ /#{host.name}/m
|
@@ -192,8 +204,7 @@ class HostsControllerExtensionsTest < ActionController::TestCase
|
|
192
204
|
:proxy => { :proxy_id => monitoring_proxy.id }
|
193
205
|
}
|
194
206
|
|
195
|
-
post :update_multiple_monitoring_proxy, params,
|
196
|
-
set_session_user
|
207
|
+
post :update_multiple_monitoring_proxy, params: params, session: set_session_user
|
197
208
|
|
198
209
|
assert_response :found
|
199
210
|
assert_redirected_to hosts_path
|
@@ -3,7 +3,7 @@ require 'test_helper'
|
|
3
3
|
class ProxyApiDhcpTest < ActiveSupport::TestCase
|
4
4
|
def setup
|
5
5
|
@url = 'http://localhost:8443'
|
6
|
-
@monitoring = ProxyAPI::Monitoring.new(
|
6
|
+
@monitoring = ProxyAPI::Monitoring.new(:url => @url)
|
7
7
|
end
|
8
8
|
|
9
9
|
test 'constructor should complete' do
|
@@ -15,38 +15,38 @@ class ProxyApiDhcpTest < ActiveSupport::TestCase
|
|
15
15
|
end
|
16
16
|
|
17
17
|
test 'create_host_downtime should do post' do
|
18
|
-
@monitoring.expects(:post).with({}, 'downtime/host/example.com')
|
19
|
-
|
18
|
+
@monitoring.expects(:post).with({}, 'downtime/host/example.com')
|
19
|
+
.returns(fake_rest_client_response('result' => {}))
|
20
20
|
assert_equal({ 'result' => {} }, @monitoring.create_host_downtime('example.com'))
|
21
21
|
end
|
22
22
|
|
23
23
|
test 'remove_host_downtime should do delete' do
|
24
|
-
@monitoring.expects(:delete).with('downtime/host/example.com?comment=bla')
|
25
|
-
|
24
|
+
@monitoring.expects(:delete).with('downtime/host/example.com?comment=bla')
|
25
|
+
.returns(fake_rest_client_response('result' => {}))
|
26
26
|
assert_equal({ 'result' => {} }, @monitoring.remove_host_downtime('example.com', :comment => 'bla'))
|
27
27
|
end
|
28
28
|
|
29
29
|
test 'create_host should do put' do
|
30
|
-
@monitoring.expects(:put).with({ :attributes => { :ip => '1.1.1.1' } }, 'host/example.com')
|
31
|
-
|
30
|
+
@monitoring.expects(:put).with({ :attributes => { :ip => '1.1.1.1' } }, 'host/example.com')
|
31
|
+
.returns(fake_rest_client_response('result' => {}))
|
32
32
|
assert_equal({ 'result' => {} }, @monitoring.create_host('example.com', :ip => '1.1.1.1'))
|
33
33
|
end
|
34
34
|
|
35
35
|
test 'update_host should do post' do
|
36
|
-
@monitoring.expects(:post).with({ :attributes => { :ip => '1.1.1.1' } }, 'host/example.com')
|
37
|
-
|
36
|
+
@monitoring.expects(:post).with({ :attributes => { :ip => '1.1.1.1' } }, 'host/example.com')
|
37
|
+
.returns(fake_rest_client_response('result' => {}))
|
38
38
|
assert_equal({ 'result' => {} }, @monitoring.update_host('example.com', :ip => '1.1.1.1'))
|
39
39
|
end
|
40
40
|
|
41
41
|
test 'delete_host should do delete' do
|
42
|
-
@monitoring.expects(:delete).with('host/example.com')
|
43
|
-
|
42
|
+
@monitoring.expects(:delete).with('host/example.com')
|
43
|
+
.returns(fake_rest_client_response('result' => {}))
|
44
44
|
assert_equal({ 'result' => {} }, @monitoring.delete_host('example.com'))
|
45
45
|
end
|
46
46
|
|
47
47
|
test 'query_host should do get' do
|
48
|
-
@monitoring.expects(:get).with('host/example.com')
|
49
|
-
|
48
|
+
@monitoring.expects(:get).with('host/example.com')
|
49
|
+
.returns(fake_rest_client_response('result' => {}))
|
50
50
|
assert_equal({ 'result' => {} }, @monitoring.query_host('example.com'))
|
51
51
|
end
|
52
52
|
end
|
data/test/test_plugin_helper.rb
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
require 'test_helper'
|
3
3
|
require 'database_cleaner'
|
4
4
|
|
5
|
-
# Add plugin to
|
6
|
-
|
7
|
-
|
5
|
+
# Add plugin to FactoryBot's paths
|
6
|
+
FactoryBot.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
|
7
|
+
FactoryBot.reload
|
8
8
|
|
9
9
|
# Foreman's setup doesn't handle cleaning up for Minitest::Spec
|
10
10
|
DatabaseCleaner.strategy = :transaction
|
@@ -6,55 +6,55 @@ class MonitoringStatusTest < ActiveSupport::TestCase
|
|
6
6
|
disable_monitoring_orchestration
|
7
7
|
end
|
8
8
|
|
9
|
-
let(:host) {
|
9
|
+
let(:host) { FactoryBot.create(:host, :with_monitoring) }
|
10
10
|
let(:status) { HostStatus::MonitoringStatus.new(:host => host) }
|
11
11
|
|
12
12
|
context 'status changes' do
|
13
13
|
test '#to_status should change when monitoring results change' do
|
14
|
-
|
14
|
+
FactoryBot.create(:monitoring_result, :ok, :host => host)
|
15
15
|
assert_equal HostStatus::MonitoringStatus::OK, status.to_status
|
16
16
|
|
17
|
-
|
17
|
+
FactoryBot.create(:monitoring_result, :warning, :host => host)
|
18
18
|
assert_equal HostStatus::MonitoringStatus::WARNING, status.to_status
|
19
19
|
|
20
|
-
|
20
|
+
FactoryBot.create(:monitoring_result, :unknown, :host => host)
|
21
21
|
assert_equal HostStatus::MonitoringStatus::WARNING, status.to_status
|
22
22
|
|
23
|
-
|
23
|
+
FactoryBot.create(:monitoring_result, :critical, :host => host)
|
24
24
|
assert_equal HostStatus::MonitoringStatus::CRITICAL, status.to_status
|
25
25
|
end
|
26
26
|
|
27
27
|
test '#to_status should be warning with critical acknowledged' do
|
28
|
-
|
28
|
+
FactoryBot.create(:monitoring_result, :critical, :acknowledged, :host => host)
|
29
29
|
assert_equal HostStatus::MonitoringStatus::WARNING, status.to_status
|
30
30
|
end
|
31
31
|
|
32
32
|
test '#to_status should be ok with critical in downtime' do
|
33
|
-
|
33
|
+
FactoryBot.create(:monitoring_result, :critical, :downtime, :host => host)
|
34
34
|
assert_equal HostStatus::MonitoringStatus::OK, status.to_status
|
35
35
|
end
|
36
36
|
|
37
37
|
test '#to_global should change when monitoring results change' do
|
38
|
-
|
38
|
+
FactoryBot.create(:monitoring_result, :ok, :host => host)
|
39
39
|
status.refresh
|
40
40
|
assert_equal HostStatus::Global::OK, status.to_global
|
41
41
|
|
42
|
-
|
42
|
+
FactoryBot.create(:monitoring_result, :warning, :host => host)
|
43
43
|
status.refresh
|
44
44
|
assert_equal HostStatus::Global::WARN, status.to_global
|
45
45
|
|
46
|
-
|
46
|
+
FactoryBot.create(:monitoring_result, :unknown, :host => host)
|
47
47
|
status.refresh
|
48
48
|
assert_equal HostStatus::Global::WARN, status.to_global
|
49
49
|
|
50
|
-
|
50
|
+
FactoryBot.create(:monitoring_result, :critical, :host => host)
|
51
51
|
status.refresh
|
52
52
|
assert_equal HostStatus::Global::ERROR, status.to_global
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
56
|
context 'status with host with monitoring results' do
|
57
|
-
let(:host) {
|
57
|
+
let(:host) { FactoryBot.create(:host, :with_monitoring, :with_monitoring_results) }
|
58
58
|
|
59
59
|
test '#relevant? is only for hosts not in build mode' do
|
60
60
|
host.build = false
|
data/test/unit/host_test.rb
CHANGED
@@ -2,14 +2,14 @@ require 'test_plugin_helper'
|
|
2
2
|
|
3
3
|
class HostTest < ActiveSupport::TestCase
|
4
4
|
setup do
|
5
|
-
User.current =
|
5
|
+
User.current = FactoryBot.build(:user, :admin)
|
6
6
|
setup_settings
|
7
7
|
disable_orchestration
|
8
8
|
disable_monitoring_orchestration
|
9
9
|
end
|
10
10
|
|
11
11
|
context 'downtime handling' do
|
12
|
-
let(:host) {
|
12
|
+
let(:host) { FactoryBot.create(:host, :managed) }
|
13
13
|
|
14
14
|
test 'it should set a downtime when build status changes' do
|
15
15
|
host.expects(:downtime_host).once
|
@@ -22,7 +22,7 @@ class HostTest < ActiveSupport::TestCase
|
|
22
22
|
end
|
23
23
|
|
24
24
|
context 'a host with monitoring orchestration' do
|
25
|
-
let(:host) {
|
25
|
+
let(:host) { FactoryBot.build(:host, :managed, :with_monitoring) }
|
26
26
|
|
27
27
|
context 'with create/delete actions' do
|
28
28
|
setup do
|
@@ -125,7 +125,7 @@ class HostTest < ActiveSupport::TestCase
|
|
125
125
|
end
|
126
126
|
|
127
127
|
context 'a host without monitoring' do
|
128
|
-
let(:host) {
|
128
|
+
let(:host) { FactoryBot.build(:host, :managed) }
|
129
129
|
|
130
130
|
test 'should not queue any monitoring actions' do
|
131
131
|
assert_valid host
|
@@ -2,13 +2,13 @@ require 'test_plugin_helper'
|
|
2
2
|
|
3
3
|
class MonitoringTest < ActiveSupport::TestCase
|
4
4
|
setup do
|
5
|
-
User.current =
|
5
|
+
User.current = FactoryBot.build(:user, :admin)
|
6
6
|
setup_settings
|
7
7
|
disable_monitoring_orchestration
|
8
8
|
end
|
9
9
|
|
10
|
-
let(:monitoring_proxy) {
|
11
|
-
let(:host) {
|
10
|
+
let(:monitoring_proxy) { FactoryBot.create(:smart_proxy, :monitoring) }
|
11
|
+
let(:host) { FactoryBot.create(:host, :managed, :with_monitoring, :monitoring_proxy => monitoring_proxy) }
|
12
12
|
let(:monitoring) { Monitoring.new(:monitoring_proxy => monitoring_proxy) }
|
13
13
|
|
14
14
|
test '#set_downtime_host should call proxy api' do
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_monitoring
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Timo Goebel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rdoc
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rubocop
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.52.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.52.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: deface
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,7 +104,6 @@ files:
|
|
104
104
|
- test/test_plugin_helper.rb
|
105
105
|
- test/unit/host_status/monitoring_status_test.rb
|
106
106
|
- test/unit/host_test.rb
|
107
|
-
- test/unit/monitoring_result_test.rb
|
108
107
|
- test/unit/monitoring_test.rb
|
109
108
|
homepage: http://www.github.com/theforeman/foreman_monitoring
|
110
109
|
licenses:
|
@@ -131,14 +130,13 @@ signing_key:
|
|
131
130
|
specification_version: 4
|
132
131
|
summary: Foreman plugin for monitoring system integration.
|
133
132
|
test_files:
|
134
|
-
- test/unit/host_test.rb
|
135
|
-
- test/unit/monitoring_result_test.rb
|
136
|
-
- test/unit/host_status/monitoring_status_test.rb
|
137
|
-
- test/unit/monitoring_test.rb
|
138
|
-
- test/factories/smart_proxy.rb
|
139
|
-
- test/factories/monitoring_results.rb
|
140
133
|
- test/factories/feature.rb
|
141
134
|
- test/factories/host.rb
|
135
|
+
- test/factories/monitoring_results.rb
|
136
|
+
- test/factories/smart_proxy.rb
|
137
|
+
- test/functional/hosts_controller_test.rb
|
142
138
|
- test/lib/proxy_api/monitoring_test.rb
|
143
139
|
- test/test_plugin_helper.rb
|
144
|
-
- test/
|
140
|
+
- test/unit/host_status/monitoring_status_test.rb
|
141
|
+
- test/unit/host_test.rb
|
142
|
+
- test/unit/monitoring_test.rb
|
@@ -1,73 +0,0 @@
|
|
1
|
-
require 'test_plugin_helper'
|
2
|
-
|
3
|
-
class MonitoringResultTest < ActiveSupport::TestCase
|
4
|
-
setup do
|
5
|
-
User.current = FactoryBot.build(:user, :admin)
|
6
|
-
setup_settings
|
7
|
-
disable_orchestration
|
8
|
-
disable_monitoring_orchestration
|
9
|
-
end
|
10
|
-
|
11
|
-
context '#import' do
|
12
|
-
let(:host) { FactoryBot.create(:host, :managed, :with_monitoring) }
|
13
|
-
|
14
|
-
let(:initial) do
|
15
|
-
{
|
16
|
-
host: host.name,
|
17
|
-
service: 'cpu metrics',
|
18
|
-
timestamp: 1_516_365_380.8834700584,
|
19
|
-
result: 1,
|
20
|
-
acknowledged: true
|
21
|
-
}
|
22
|
-
end
|
23
|
-
|
24
|
-
let(:acknowledegment_cleared) do
|
25
|
-
{
|
26
|
-
host: host.name,
|
27
|
-
service: 'cpu metrics',
|
28
|
-
timestamp: 1_516_365_971.2455039024,
|
29
|
-
acknowledged: false
|
30
|
-
}
|
31
|
-
end
|
32
|
-
|
33
|
-
let(:state_change) do
|
34
|
-
{
|
35
|
-
host: host.name,
|
36
|
-
service: 'cpu metrics',
|
37
|
-
timestamp: 1_516_365_971.2461779118,
|
38
|
-
result: 0
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
42
|
-
test 'imports a monitoring result' do
|
43
|
-
MonitoringResult.import(initial)
|
44
|
-
imported = host.monitoring_results.last
|
45
|
-
assert_equal true, imported.acknowledged?
|
46
|
-
end
|
47
|
-
|
48
|
-
test 'handles ack and state change in correct order' do
|
49
|
-
MonitoringResult.import(initial)
|
50
|
-
MonitoringResult.import(acknowledegment_cleared)
|
51
|
-
MonitoringResult.import(state_change)
|
52
|
-
imported = host.monitoring_results.last
|
53
|
-
assert_equal :ok, imported.status
|
54
|
-
assert_equal false, imported.acknowledged?
|
55
|
-
end
|
56
|
-
|
57
|
-
test 'handles ack and state change in reverse order' do
|
58
|
-
MonitoringResult.import(initial)
|
59
|
-
MonitoringResult.import(state_change)
|
60
|
-
MonitoringResult.import(acknowledegment_cleared)
|
61
|
-
imported = host.monitoring_results.last
|
62
|
-
assert_equal :ok, imported.status
|
63
|
-
assert_equal false, imported.acknowledged?
|
64
|
-
end
|
65
|
-
|
66
|
-
test 'ignores old data' do
|
67
|
-
MonitoringResult.import(state_change)
|
68
|
-
MonitoringResult.import(initial)
|
69
|
-
imported = host.monitoring_results.last
|
70
|
-
assert_equal false, imported.acknowledged?
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|