smart_proxy_monitoring 0.2.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e366cc37c357a3178a8d28262e1b177a384296778987df9b7107fb400a22dfae
4
- data.tar.gz: 6f38e4e49c70adc11feee5bf495c00650dbe5aaf7f5187a5dca31e1c80edbc3e
3
+ metadata.gz: 854e2834d3a112ff8466941ee1607049c0e1c9db361584283dc0d1372ffaa331
4
+ data.tar.gz: 31e5fbafdcc4aa464abe53baceb9a00d35f919ccda01bc779474249782566cee
5
5
  SHA512:
6
- metadata.gz: bbfbf8d19457f374c487630507cfd867aed6726bc3d84396e31596b648c26e047bc8ccf084d801edba5ea9667e3c17fb609f2cce47d6e033cf7c036c0c3df286
7
- data.tar.gz: 846663a2a6aaee48323920970a3199326d888f45918ac575808699267f6b1af11181d3bd2d4f71db8bc5efb79aab13bc11a0798b02a540a014df04776cf1b13f
6
+ metadata.gz: f472c3317ae4535a7530af87b48adddb0b79a232816691b09eae39c291295b34c165c064a619bd449c5d43d4348406cbb997c70d7c5fedf4b396772a53984e5c
7
+ data.tar.gz: bc2ce1a4c72bc6b4910a01fa9de8494cead6f39845e2779346041f9e1b63db715fd5a410041363f74164ea7e4359c3b51d651278794522e0746b650edfe57465
@@ -58,7 +58,7 @@ module Proxy::Monitoring
58
58
  comment = params[:comment] || 'triggered by foreman'
59
59
  start_time = params[:start_time] || Time.now.to_i
60
60
  end_time = params[:end_time] || (Time.now.to_i + (24 * 3600))
61
- all_services = params[:all_services]
61
+ all_services = params[:all_services].to_s == 'true'
62
62
 
63
63
  log_provider_errors do
64
64
  validate_dns_name!(host)
@@ -95,7 +95,7 @@ module Proxy::Monitoring
95
95
  end
96
96
 
97
97
  def validate_dns_name!(name)
98
- raise Proxy::Monitoring::Error.new("Invalid DNS name #{name}") unless name =~ /^([a-zA-Z0-9]([-a-zA-Z0-9]+)?\.?)+$/
98
+ raise Proxy::Monitoring::Error, "Invalid DNS name #{name}" unless /^([a-zA-Z0-9]([-a-zA-Z0-9]+)?\.?)+$/.match?(name)
99
99
  end
100
100
 
101
101
  def strip_domain(name)
@@ -14,8 +14,7 @@ module Proxy::Monitoring
14
14
  expose_setting :collect_status
15
15
  expose_setting :strip_domain
16
16
 
17
- http_rackup_path File.expand_path('monitoring_http_config.ru', File.expand_path('../', __FILE__))
18
- https_rackup_path File.expand_path('monitoring_http_config.ru', File.expand_path('../', __FILE__))
17
+ rackup_path File.expand_path('monitoring_http_config.ru', __dir__)
19
18
 
20
19
  load_classes ::Proxy::Monitoring::ConfigurationLoader
21
20
  end
@@ -1,5 +1,5 @@
1
1
  module Proxy
2
2
  module Monitoring
3
- VERSION = '0.2.0'.freeze
3
+ VERSION = '0.4.0'.freeze
4
4
  end
5
5
  end
@@ -3,5 +3,29 @@ module Proxy::Monitoring
3
3
  class NotFound < RuntimeError; end
4
4
  class AuthenticationError < RuntimeError; end
5
5
 
6
- class Provider; end
6
+ class Provider
7
+ def query_host(host)
8
+ raise NotImplementedError
9
+ end
10
+
11
+ def create_host(host, attributes)
12
+ raise NotImplementedError
13
+ end
14
+
15
+ def update_host(host, attributes)
16
+ raise NotImplementedError
17
+ end
18
+
19
+ def remove_host(host)
20
+ raise NotImplementedError
21
+ end
22
+
23
+ def remove_downtime_host(host, author, comment)
24
+ raise NotImplementedError
25
+ end
26
+
27
+ def set_downtime_host(host, author, comment, start_time, end_time, all_services: nil, **)
28
+ raise NotImplementedError
29
+ end
30
+ end
7
31
  end
@@ -1,4 +1,3 @@
1
- require 'thread'
2
1
  require 'socket'
3
2
  require 'json'
4
3
 
@@ -24,19 +23,17 @@ module ::Proxy::Monitoring::Icinga2
24
23
  logger.info 'Icinga event api monitoring started.'
25
24
 
26
25
  while line = ssl_socket.gets
27
- next unless line.chars.first == '{'
26
+ next unless line[0] == '{'
28
27
 
29
28
  with_event_counter('Icinga2 Event API Monitor') do
30
- begin
31
- parsed = JSON.parse(line)
32
- if @queue.size > 100_000
33
- @queue.clear
34
- logger.error 'Queue was full. Flushing. Events were lost.'
35
- end
36
- @queue.push(parsed)
37
- rescue JSON::ParserError => e
38
- logger.error "Icinga2 Event API Monitor: Malformed JSON: #{e.message}"
29
+ parsed = JSON.parse(line)
30
+ if @queue.size > 100_000
31
+ @queue.clear
32
+ logger.error 'Queue was full. Flushing. Events were lost.'
39
33
  end
34
+ @queue.push(parsed)
35
+ rescue JSON::ParserError => e
36
+ logger.error "Icinga2 Event API Monitor: Malformed JSON: #{e.message}"
40
37
  end
41
38
 
42
39
  end
@@ -51,7 +48,7 @@ module ::Proxy::Monitoring::Icinga2
51
48
  sleep 1
52
49
  retry
53
50
  ensure
54
- ssl_socket.sysclose unless ssl_socket.nil?
51
+ ssl_socket&.sysclose
55
52
  end
56
53
 
57
54
  def do_start
@@ -61,7 +58,7 @@ module ::Proxy::Monitoring::Icinga2
61
58
  end
62
59
 
63
60
  def stop
64
- @thread.terminate unless @thread.nil?
61
+ @thread&.terminate
65
62
  end
66
63
  end
67
64
  end
@@ -1,7 +1,6 @@
1
1
  require 'json'
2
2
  require 'uri'
3
3
  require 'rest-client'
4
- require 'thread'
5
4
  require 'socket'
6
5
  require 'base64'
7
6
 
@@ -10,36 +9,36 @@ module ::Proxy::Monitoring::Icinga2
10
9
  class << self
11
10
  def client(request_url)
12
11
  headers = {
13
- 'Accept' => 'application/json'
12
+ 'Accept' => 'application/json',
14
13
  }
15
14
 
16
15
  options = {
17
16
  headers: headers,
18
17
  user: user,
19
18
  ssl_ca_file: cacert,
20
- verify_ssl: ssl
19
+ verify_ssl: ssl,
21
20
  }
22
21
 
23
22
  auth_options = if certificate_request?
24
23
  {
25
24
  ssl_client_cert: cert,
26
- ssl_client_key: key
25
+ ssl_client_key: key,
27
26
  }
28
27
  else
29
28
  {
30
- password: password
29
+ password: password,
31
30
  }
32
31
  end
33
32
  options.merge!(auth_options)
34
33
 
35
34
  RestClient::Resource.new(
36
- [baseurl, request_url].join(''),
35
+ [baseurl, request_url].join,
37
36
  options
38
37
  )
39
38
  end
40
39
 
41
40
  def events_socket(endpoint)
42
- uri = URI.parse([baseurl, endpoint].join(''))
41
+ uri = URI.parse([baseurl, endpoint].join)
43
42
  socket = TCPSocket.new(uri.host, uri.port)
44
43
 
45
44
  ssl_context = OpenSSL::SSL::SSLContext.new
@@ -90,12 +89,14 @@ module ::Proxy::Monitoring::Icinga2
90
89
  def cert
91
90
  file = Proxy::Monitoring::Icinga2::Plugin.settings.api_usercert
92
91
  return unless !file.nil? && File.file?(file)
92
+
93
93
  OpenSSL::X509::Certificate.new(File.read(file))
94
94
  end
95
95
 
96
96
  def key
97
97
  file = Proxy::Monitoring::Icinga2::Plugin.settings.api_userkey
98
98
  return unless !file.nil? && File.file?(file)
99
+
99
100
  OpenSSL::PKey::RSA.new(File.read(file))
100
101
  end
101
102
 
@@ -1,4 +1,3 @@
1
- require 'thread'
2
1
  require 'socket'
3
2
  require 'json'
4
3
 
@@ -35,14 +34,15 @@ module ::Proxy::Monitoring::Icinga2
35
34
  results = Icinga2Client.get('/objects/hosts?attrs=name&attrs=last_check_result&attrs=acknowledgement')
36
35
  results = JSON.parse(results)
37
36
  results['results'].each do |result|
38
- next if result['attrs']['last_check_result'] == nil
37
+ next if result['attrs']['last_check_result'].nil?
38
+
39
39
  parsed = {
40
40
  host: result['attrs']['name'],
41
41
  result: result['attrs']['last_check_result']['state'],
42
42
  timestamp: result['attrs']['last_check_result']['schedule_end'],
43
43
  acknowledged: (result['attrs']['acknowledgement'] != 0),
44
44
  initial: true,
45
- type: '_parsed'
45
+ type: '_parsed',
46
46
  }
47
47
  @queue.push(parsed)
48
48
  end
@@ -52,7 +52,8 @@ module ::Proxy::Monitoring::Icinga2
52
52
  results = Icinga2Client.get('/objects/services?attrs=name&attrs=last_check_result&attrs=acknowledgement&attrs=host_name')
53
53
  results = JSON.parse(results)
54
54
  results['results'].each do |result|
55
- next if result['attrs']['last_check_result'] == nil
55
+ next if result['attrs']['last_check_result'].nil?
56
+
56
57
  parsed = {
57
58
  host: result['attrs']['host_name'],
58
59
  service: result['attrs']['name'],
@@ -60,7 +61,7 @@ module ::Proxy::Monitoring::Icinga2
60
61
  timestamp: result['attrs']['last_check_result']['schedule_end'],
61
62
  acknowledged: (result['attrs']['acknowledgement'] != 0),
62
63
  initial: true,
63
- type: '_parsed'
64
+ type: '_parsed',
64
65
  }
65
66
  @queue.push(parsed)
66
67
  end
@@ -71,12 +72,13 @@ module ::Proxy::Monitoring::Icinga2
71
72
  results = JSON.parse(results)
72
73
  results['results'].each do |result|
73
74
  next unless result['attrs']['trigger_time'] != 0
75
+
74
76
  parsed = {
75
77
  host: result['attrs']['host_name'],
76
78
  service: result['attrs']['service_name'],
77
79
  downtime: true,
78
80
  initial: true,
79
- type: '_parsed'
81
+ type: '_parsed',
80
82
  }
81
83
  @queue.push(parsed)
82
84
  end
@@ -89,7 +91,7 @@ module ::Proxy::Monitoring::Icinga2
89
91
  end
90
92
 
91
93
  def stop
92
- @thread.terminate unless @thread.nil?
94
+ @thread&.terminate
93
95
  end
94
96
 
95
97
  private
@@ -1,5 +1,3 @@
1
- require 'thread'
2
-
3
1
  module ::Proxy::Monitoring::Icinga2
4
2
  class MonitoringResult < Proxy::HttpRequest::ForemanRequest
5
3
  def push_result(result)
@@ -60,7 +58,7 @@ module ::Proxy::Monitoring::Icinga2
60
58
  rescue Errno::ECONNREFUSED => e
61
59
  logger.error "Foreman refused connection when tried to upload monitoring result: #{e.message}"
62
60
  sleep 10
63
- rescue => e
61
+ rescue StandardError => e
64
62
  logger.error "Error while uploading monitoring results to Foreman: #{e.message}"
65
63
  sleep 1
66
64
  retry
@@ -76,16 +74,15 @@ module ::Proxy::Monitoring::Icinga2
76
74
  end
77
75
 
78
76
  def stop
79
- @thread.terminate unless @thread.nil?
77
+ @thread&.terminate
80
78
  end
81
79
 
82
80
  private
83
81
 
84
82
  def symbolize_keys_deep!(h)
85
- h.keys.each do |k|
86
- ks = k.to_sym
87
- h[ks] = h.delete k
88
- symbolize_keys_deep! h[ks] if h[ks].is_a? Hash
83
+ h.transform_keys!(&:to_sym)
84
+ h.each_value do |v|
85
+ symbolize_keys_deep!(v) if v.is_a?(Hash)
89
86
  end
90
87
  end
91
88
 
@@ -1,5 +1,3 @@
1
- require 'thread'
2
-
3
1
  module ::Proxy::Monitoring::Icinga2
4
2
  class Icinga2UploadQueue
5
3
  def queue
@@ -5,7 +5,7 @@ module Proxy::Monitoring::Icinga2
5
5
  include Proxy::Log
6
6
  include Proxy::Util
7
7
 
8
- ICINGA_HOST_ATTRS = %w(display_name address address6 templates)
8
+ ICINGA_HOST_ATTRS = %w[display_name address address6 templates].freeze
9
9
 
10
10
  ICINGA_ATTR_MAPPING = {
11
11
  'ip' => 'address',
@@ -39,7 +39,7 @@ module Proxy::Monitoring::Icinga2
39
39
  result.to_json
40
40
  end
41
41
 
42
- def remove_host(host)
42
+ def remove_host(host)
43
43
  request_url = "/objects/hosts/#{host}?cascade=1"
44
44
 
45
45
  result = with_errorhandling("Remove #{host}") do
@@ -49,8 +49,13 @@ module Proxy::Monitoring::Icinga2
49
49
  end
50
50
 
51
51
  def remove_downtime_host(host, author, comment)
52
- request_url = "/actions/remove-downtime?type=Host&filter=#{uri_encode_filter("host.name==\"#{host}\"\&\&author==\"#{author}\"\&\&comment=\"#{comment}\"")}"
53
- data = {}
52
+ request_url = "/actions/remove-downtime"
53
+ data = {
54
+ type: 'Host',
55
+ filter: "host.name==\"#{host}\"",
56
+ author: author,
57
+ comment: comment,
58
+ }
54
59
 
55
60
  result = with_errorhandling("Remove downtime from #{host}") do
56
61
  Icinga2Client.post(request_url, data.to_json)
@@ -59,13 +64,15 @@ module Proxy::Monitoring::Icinga2
59
64
  end
60
65
 
61
66
  def set_downtime_host(host, author, comment, start_time, end_time, all_services: nil, **)
62
- request_url = "/actions/schedule-downtime?type=Host&filter=#{uri_encode_filter("host.name==\"#{host}\"")}"
67
+ request_url = "/actions/schedule-downtime"
63
68
  data = {
69
+ 'type' => 'Host',
70
+ 'filter' => "host.name==\"#{host}\"",
64
71
  'author' => author,
65
72
  'comment' => comment,
66
73
  'start_time' => start_time,
67
74
  'end_time' => end_time,
68
- 'duration' => 1000
75
+ 'duration' => 1000,
69
76
  }
70
77
  data['all_services'] = all_services unless all_services.nil?
71
78
 
@@ -77,15 +84,11 @@ module Proxy::Monitoring::Icinga2
77
84
 
78
85
  private
79
86
 
80
- def uri_encode_filter(filter)
81
- URI.encode(filter)
82
- end
83
-
84
87
  def host_attributes(host, data)
85
88
  attributes = {}
86
89
 
87
90
  data['templates'].delete(host)
88
- data.delete('templates') if data['templates'] == [ 'foreman-host' ]
91
+ data.delete('templates') if data['templates'] == ['foreman-host']
89
92
  if data['vars'].nil?
90
93
  data.delete('vars')
91
94
  else
@@ -103,7 +106,7 @@ module Proxy::Monitoring::Icinga2
103
106
  def host_data(attributes)
104
107
  data = {}
105
108
 
106
- data['templates'] = [ 'foreman-host' ] unless attributes.has_key?('templates')
109
+ data['templates'] = ['foreman-host'] unless attributes.key?('templates')
107
110
  data['attrs'] = {}
108
111
 
109
112
  attributes.each do |key, value|
@@ -120,31 +123,33 @@ module Proxy::Monitoring::Icinga2
120
123
  logger.debug "Monitoring - Action successful: #{action}"
121
124
  result = JSON.parse(response.body)
122
125
  if result.key?('error') && result['status'] == "No objects found."
123
- raise Proxy::Monitoring::NotFound.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned no objects found.")
126
+ raise Proxy::Monitoring::NotFound, "Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned no objects found."
124
127
  end
128
+
125
129
  unless result.key?('results')
126
130
  logger.error "Invalid Icinga result or result with errors: #{result.inspect}"
127
- raise Proxy::Monitoring::Error.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned an invalid result.")
131
+ raise Proxy::Monitoring::Error, "Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned an invalid result."
128
132
  end
129
133
  unless result['results'].first
130
- raise Proxy::Monitoring::NotFound.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned an empty result.")
134
+ raise Proxy::Monitoring::NotFound, "Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned an empty result."
131
135
  end
132
136
  if result['results'][0]['code'] && result['results'][0]['code'] != 200
133
- raise Proxy::Monitoring::Error.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned an error: #{result['results'][0]['code']} #{result['results'][0]['status']}")
137
+ raise Proxy::Monitoring::Error, "Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned an error: #{result['results'][0]['code']} #{result['results'][0]['status']}"
134
138
  end
139
+
135
140
  result
136
141
  rescue JSON::ParserError => e
137
- raise Proxy::Monitoring::Error.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned invalid JSON: '#{e.message}'")
142
+ raise Proxy::Monitoring::Error, "Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned invalid JSON: '#{e.message}'"
138
143
  rescue RestClient::Unauthorized => e
139
- raise Proxy::Monitoring::AuthenticationError.new("Error authenicating to Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server}: #{e.message}.")
144
+ raise Proxy::Monitoring::AuthenticationError, "Error authenicating to Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server}: #{e.message}."
140
145
  rescue RestClient::ResourceNotFound => e
141
- raise Proxy::Monitoring::NotFound.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned: #{e.message}.")
146
+ raise Proxy::Monitoring::NotFound, "Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned: #{e.message}."
142
147
  rescue RestClient::Exception => e
143
- raise Proxy::Monitoring::Error.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned an error: '#{e.response}'")
144
- rescue Errno::ECONNREFUSED => e
145
- raise Proxy::Monitoring::ConnectionError.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} is not responding")
146
- rescue SocketError => e
147
- raise Proxy::Monitoring::ConnectionError.new("Icinga server '#{::Proxy::Monitoring::Icinga2::Plugin.settings.server}' is unknown")
148
+ raise Proxy::Monitoring::Error, "Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned an error: '#{e.response}'"
149
+ rescue Errno::ECONNREFUSED
150
+ raise Proxy::Monitoring::ConnectionError, "Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} is not responding"
151
+ rescue SocketError
152
+ raise Proxy::Monitoring::ConnectionError, "Icinga server '#{::Proxy::Monitoring::Icinga2::Plugin.settings.server}' is unknown"
148
153
  end
149
154
  end
150
155
  end
@@ -54,12 +54,13 @@ module ::Proxy::Monitoring::IcingaDirector
54
54
  {
55
55
  headers: request_headers,
56
56
  ssl_ca_file: cacert,
57
- verify_ssl: verify_ssl?
57
+ verify_ssl: verify_ssl?,
58
58
  }.merge(auth_options)
59
59
  end
60
60
 
61
61
  def auth_options
62
62
  return {} unless basic_auth?
63
+
63
64
  {
64
65
  user: user,
65
66
  password: password,
@@ -72,7 +73,7 @@ module ::Proxy::Monitoring::IcingaDirector
72
73
 
73
74
  def request_headers
74
75
  {
75
- 'Accept' => 'application/json'
76
+ 'Accept' => 'application/json',
76
77
  }
77
78
  end
78
79
 
@@ -90,7 +91,7 @@ module ::Proxy::Monitoring::IcingaDirector
90
91
  end
91
92
 
92
93
  def baseurl
93
- Proxy::Monitoring::IcingaDirector::Plugin.settings.director_url + '/'
94
+ "#{Proxy::Monitoring::IcingaDirector::Plugin.settings.director_url}/"
94
95
  end
95
96
 
96
97
  def user
@@ -50,7 +50,7 @@ module Proxy::Monitoring::IcingaDirector
50
50
  :address => attributes.delete('ip'),
51
51
  :address6 => attributes.delete('ip6'),
52
52
  :imports => attributes.delete('templates') || ['foreman_host'],
53
- :vars => attributes
53
+ :vars => attributes,
54
54
  }
55
55
  end
56
56
 
@@ -63,7 +63,7 @@ module Proxy::Monitoring::IcingaDirector
63
63
  'ip' => ip,
64
64
  'ip6' => ip6,
65
65
  }
66
- result.merge!('templates' => templates) if templates != ['foreman_host']
66
+ result['templates'] = templates if templates != ['foreman_host']
67
67
  result.merge!(response['vars'] || {})
68
68
  result
69
69
  end
metadata CHANGED
@@ -1,87 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_proxy_monitoring
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Timo Goebel
8
8
  - Dirk Goetz
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-05-02 00:00:00.000000000 Z
12
+ date: 2024-12-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '0'
20
+ version: '2.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ">="
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '0'
28
- - !ruby/object:Gem::Dependency
29
- name: json
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: '0'
35
- type: :runtime
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: '0'
42
- - !ruby/object:Gem::Dependency
43
- name: rake
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: '0'
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: '0'
56
- - !ruby/object:Gem::Dependency
57
- name: mocha
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- - !ruby/object:Gem::Dependency
71
- name: test-unit
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: '0'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: '0'
84
- description: Monitoring plug-in for Foreman's smart proxy
27
+ version: '2.0'
28
+ description: For use together with the foreman_monitoring plugin.
85
29
  email:
86
30
  - timo.goebel@dm.de
87
31
  - dirk.goetz@netways.de
@@ -123,9 +67,9 @@ files:
123
67
  - settings.d/monitoring_icingadirector.yml.example
124
68
  homepage: https://github.com/theforeman/smart_proxy_monitoring
125
69
  licenses:
126
- - GPL-3.0
70
+ - GPL-3.0-only
127
71
  metadata: {}
128
- post_install_message:
72
+ post_install_message:
129
73
  rdoc_options: []
130
74
  require_paths:
131
75
  - lib
@@ -133,15 +77,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
77
  requirements:
134
78
  - - ">="
135
79
  - !ruby/object:Gem::Version
136
- version: '0'
80
+ version: '2.7'
81
+ - - "<"
82
+ - !ruby/object:Gem::Version
83
+ version: '4'
137
84
  required_rubygems_version: !ruby/object:Gem::Requirement
138
85
  requirements:
139
86
  - - ">="
140
87
  - !ruby/object:Gem::Version
141
88
  version: '0'
142
89
  requirements: []
143
- rubygems_version: 3.2.22
144
- signing_key:
90
+ rubygems_version: 3.3.27
91
+ signing_key:
145
92
  specification_version: 4
146
93
  summary: Monitoring plug-in for Foreman's smart proxy
147
94
  test_files: []