foreman_monitoring 0.1.3 → 1.0.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.
- 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
|