foreman_monitoring 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +619 -0
  3. data/README.md +31 -0
  4. data/Rakefile +47 -0
  5. data/app/controllers/api/v2/monitoring_results_controller.rb +29 -0
  6. data/app/helpers/concerns/foreman_monitoring/hosts_helper_ext.rb +46 -0
  7. data/app/lib/proxy_api/monitoring.rb +14 -0
  8. data/app/models/concerns/foreman_monitoring/host_extensions.rb +42 -0
  9. data/app/models/host_status/monitoring_status.rb +72 -0
  10. data/app/models/monitoring_result.rb +74 -0
  11. data/app/models/setting/monitoring.rb +16 -0
  12. data/app/overrides/add_host_monitoring_result_tab.rb +11 -0
  13. data/app/services/monitoring.rb +13 -0
  14. data/app/views/monitoring_results/_host_tab.html.erb +1 -0
  15. data/app/views/monitoring_results/_host_tab_pane.html.erb +25 -0
  16. data/config/routes.rb +10 -0
  17. data/db/migrate/20160817135723_create_monitoring_results.rb +12 -0
  18. data/db/seeds.d/60-monitoring_proxy_feature.rb +2 -0
  19. data/lib/foreman_monitoring/engine.rb +51 -0
  20. data/lib/foreman_monitoring/version.rb +3 -0
  21. data/lib/foreman_monitoring.rb +4 -0
  22. data/lib/tasks/foreman_monitoring_tasks.rake +35 -0
  23. data/locale/Makefile +62 -0
  24. data/locale/en/foreman_monitoring.po +19 -0
  25. data/locale/foreman_monitoring.pot +19 -0
  26. data/locale/gemspec.rb +2 -0
  27. data/test/factories/feature.rb +7 -0
  28. data/test/factories/host.rb +14 -0
  29. data/test/factories/monitoring_results.rb +30 -0
  30. data/test/factories/smart_proxy.rb +7 -0
  31. data/test/lib/proxy_api/monitoring_test.rb +22 -0
  32. data/test/test_plugin_helper.rb +24 -0
  33. data/test/unit/host_status/monitoring_status_test.rb +91 -0
  34. data/test/unit/host_test.rb +26 -0
  35. data/test/unit/monitoring_test.rb +17 -0
  36. metadata +115 -0
@@ -0,0 +1,30 @@
1
+ FactoryGirl.define do
2
+ factory :monitoring_result do
3
+ sequence(:service) { |n| "Service #{n}" }
4
+ result { rand(0..3) }
5
+
6
+ trait :ok do
7
+ result 0
8
+ end
9
+
10
+ trait :warning do
11
+ result 1
12
+ end
13
+
14
+ trait :critical do
15
+ result 2
16
+ end
17
+
18
+ trait :unknown do
19
+ result 3
20
+ end
21
+
22
+ trait :downtime do
23
+ downtime true
24
+ end
25
+
26
+ trait :acknowledged do
27
+ acknowledged true
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,7 @@
1
+ FactoryGirl.modify do
2
+ factory :smart_proxy do
3
+ trait :monitoring do
4
+ features { |sp| [sp.association(:feature, :monitoring)] }
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+
3
+ class ProxyApiDhcpTest < ActiveSupport::TestCase
4
+ def setup
5
+ @url = 'http://localhost:8443'
6
+ @monitoring = ProxyAPI::Monitoring.new({ :url => @url })
7
+ end
8
+
9
+ test 'constructor should complete' do
10
+ assert_not_nil @monitoring
11
+ end
12
+
13
+ test 'base url should equal /monitoring' do
14
+ assert_equal "#{@url}/monitoring", @monitoring.url
15
+ end
16
+
17
+ test 'create_host_downtime should do post' do
18
+ @monitoring.expects(:post).with({}, 'downtime/host/example.com').
19
+ returns(fake_rest_client_response({ 'result' => {} }))
20
+ assert_equal({ 'result' => {} }, @monitoring.create_host_downtime('example.com'))
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ # This calls the main test_helper in Foreman-core
2
+ require 'test_helper'
3
+ require 'database_cleaner'
4
+
5
+ # Add plugin to FactoryGirl's paths
6
+ FactoryGirl.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
7
+ FactoryGirl.reload
8
+
9
+ # Foreman's setup doesn't handle cleaning up for Minitest::Spec
10
+ DatabaseCleaner.strategy = :transaction
11
+
12
+ def setup_settings
13
+ Setting::Monitoring.load_defaults
14
+ end
15
+
16
+ class Minitest::Spec
17
+ before :each do
18
+ DatabaseCleaner.start
19
+ end
20
+
21
+ after :each do
22
+ DatabaseCleaner.clean
23
+ end
24
+ end
@@ -0,0 +1,91 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class MonitoringStatusTest < ActiveSupport::TestCase
4
+ setup do
5
+ setup_settings
6
+ end
7
+
8
+ let(:host) { FactoryGirl.create(:host) }
9
+ let(:status) { HostStatus::MonitoringStatus.new(:host => host) }
10
+
11
+ context 'status changes' do
12
+ test '#to_status should change when monitoring results change' do
13
+ FactoryGirl.create(:monitoring_result, :ok, :host => host)
14
+ assert_equal HostStatus::MonitoringStatus::OK, status.to_status
15
+
16
+ FactoryGirl.create(:monitoring_result, :warning, :host => host)
17
+ assert_equal HostStatus::MonitoringStatus::WARNING, status.to_status
18
+
19
+ FactoryGirl.create(:monitoring_result, :unknown, :host => host)
20
+ assert_equal HostStatus::MonitoringStatus::WARNING, status.to_status
21
+
22
+ FactoryGirl.create(:monitoring_result, :critical, :host => host)
23
+ assert_equal HostStatus::MonitoringStatus::CRITICAL, status.to_status
24
+ end
25
+
26
+ test '#to_status should be warning with critical acknowledged' do
27
+ FactoryGirl.create(:monitoring_result, :critical, :acknowledged, :host => host)
28
+ assert_equal HostStatus::MonitoringStatus::WARNING, status.to_status
29
+ end
30
+
31
+ test '#to_status should be ok with critical in downtime' do
32
+ FactoryGirl.create(:monitoring_result, :critical, :downtime, :host => host)
33
+ assert_equal HostStatus::MonitoringStatus::OK, status.to_status
34
+ end
35
+
36
+ test '#to_global should change when monitoring results change' do
37
+ FactoryGirl.create(:monitoring_result, :ok, :host => host)
38
+ status.refresh
39
+ assert_equal HostStatus::Global::OK, status.to_global
40
+
41
+ FactoryGirl.create(:monitoring_result, :warning, :host => host)
42
+ status.refresh
43
+ assert_equal HostStatus::Global::WARN, status.to_global
44
+
45
+ FactoryGirl.create(:monitoring_result, :unknown, :host => host)
46
+ status.refresh
47
+ assert_equal HostStatus::Global::WARN, status.to_global
48
+
49
+ FactoryGirl.create(:monitoring_result, :critical, :host => host)
50
+ status.refresh
51
+ assert_equal HostStatus::Global::ERROR, status.to_global
52
+ end
53
+ end
54
+
55
+ context 'status with host with monitoring results' do
56
+ let(:host) { FactoryGirl.create(:host, :with_monitoring_results) }
57
+
58
+ test '#relevant? is only for hosts not in build mode' do
59
+ host.build = false
60
+ assert status.relevant?
61
+
62
+ host.build = true
63
+ refute status.relevant?
64
+ end
65
+
66
+ test '#host_known_in_monitoring? should be true' do
67
+ assert status.host_known_in_monitoring?
68
+ end
69
+ end
70
+
71
+ context 'status with host without monitoring results' do
72
+ test '#relevant? is always false when build changes' do
73
+ host.build = false
74
+ refute status.relevant?
75
+
76
+ host.build = true
77
+ refute status.relevant?
78
+ end
79
+
80
+ test '#refresh! refreshes the date and persists the record' do
81
+ status.expects(:refresh)
82
+ status.refresh!
83
+
84
+ assert status.persisted?
85
+ end
86
+
87
+ test '#host_known_in_monitoring? should be false' do
88
+ refute status.host_known_in_monitoring?
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class HostTest < ActiveSupport::TestCase
4
+ setup do
5
+ User.current = FactoryGirl.build(:user, :admin)
6
+ setup_settings
7
+ end
8
+
9
+ context 'downtime handling' do
10
+ let(:host) { FactoryGirl.create(:host, :managed) }
11
+
12
+ test 'it should set a downtime when host is deleted' do
13
+ host.expects(:downtime_host).once
14
+ assert host.destroy
15
+ end
16
+
17
+ test 'it should set a downtime when build status changes' do
18
+ host.expects(:downtime_host).once
19
+
20
+ host.build = false
21
+ assert host.save
22
+ host.build = true
23
+ assert host.save
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class MonitoringTest < ActiveSupport::TestCase
4
+ setup do
5
+ User.current = FactoryGirl.build(:user, :admin)
6
+ setup_settings
7
+ @proxy = FactoryGirl.create(:smart_proxy, :monitoring)
8
+ end
9
+
10
+ let(:host) { FactoryGirl.create(:host, :managed) }
11
+ let(:monitoring) { Monitoring.new }
12
+
13
+ test '#set_downtime_host should call proxy api' do
14
+ ProxyAPI::Monitoring.any_instance.expects(:create_host_downtime).returns({}).once
15
+ monitoring.set_downtime_host(host)
16
+ end
17
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: foreman_monitoring
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Timo Goebel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-08-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubocop
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Foreman plugin for monitoring system integration.
42
+ email:
43
+ - timo.goebel@dm.de
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - LICENSE
49
+ - README.md
50
+ - Rakefile
51
+ - app/controllers/api/v2/monitoring_results_controller.rb
52
+ - app/helpers/concerns/foreman_monitoring/hosts_helper_ext.rb
53
+ - app/lib/proxy_api/monitoring.rb
54
+ - app/models/concerns/foreman_monitoring/host_extensions.rb
55
+ - app/models/host_status/monitoring_status.rb
56
+ - app/models/monitoring_result.rb
57
+ - app/models/setting/monitoring.rb
58
+ - app/overrides/add_host_monitoring_result_tab.rb
59
+ - app/services/monitoring.rb
60
+ - app/views/monitoring_results/_host_tab.html.erb
61
+ - app/views/monitoring_results/_host_tab_pane.html.erb
62
+ - config/routes.rb
63
+ - db/migrate/20160817135723_create_monitoring_results.rb
64
+ - db/seeds.d/60-monitoring_proxy_feature.rb
65
+ - lib/foreman_monitoring.rb
66
+ - lib/foreman_monitoring/engine.rb
67
+ - lib/foreman_monitoring/version.rb
68
+ - lib/tasks/foreman_monitoring_tasks.rake
69
+ - locale/Makefile
70
+ - locale/en/foreman_monitoring.po
71
+ - locale/foreman_monitoring.pot
72
+ - locale/gemspec.rb
73
+ - test/factories/feature.rb
74
+ - test/factories/host.rb
75
+ - test/factories/monitoring_results.rb
76
+ - test/factories/smart_proxy.rb
77
+ - test/lib/proxy_api/monitoring_test.rb
78
+ - test/test_plugin_helper.rb
79
+ - test/unit/host_status/monitoring_status_test.rb
80
+ - test/unit/host_test.rb
81
+ - test/unit/monitoring_test.rb
82
+ homepage: http://www.github.com/theforeman/foreman_monitoring
83
+ licenses: []
84
+ metadata: {}
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubyforge_project:
101
+ rubygems_version: 2.4.5
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: Foreman plugin for monitoring system integration.
105
+ test_files:
106
+ - test/factories/feature.rb
107
+ - test/factories/host.rb
108
+ - test/factories/monitoring_results.rb
109
+ - test/factories/smart_proxy.rb
110
+ - test/lib/proxy_api/monitoring_test.rb
111
+ - test/test_plugin_helper.rb
112
+ - test/unit/host_status/monitoring_status_test.rb
113
+ - test/unit/host_test.rb
114
+ - test/unit/monitoring_test.rb
115
+ has_rdoc: