class Proxy::Monitoring::Icinga2::Provider
Constants
- ICINGA_ATTR_MAPPING
- ICINGA_HOST_ATTRS
Public Instance Methods
create_host(host, attributes)
click to toggle source
# File lib/smart_proxy_monitoring_icinga2/monitoring_icinga2_main.rb, line 24 def create_host(host, attributes) request_url = "/objects/hosts/#{host}" result = with_errorhandling("Create #{host}") do Icinga2Client.put(request_url, host_data(attributes).to_json) end result.to_json end
query_host(host)
click to toggle source
# File lib/smart_proxy_monitoring_icinga2/monitoring_icinga2_main.rb, line 15 def query_host(host) request_url = "/objects/hosts/#{host}?attrs=vars&attrs=address&attrs=address6&attrs=templates" result = with_errorhandling("Query #{host}") do Icinga2Client.get(request_url) end host_attributes(host, result['results'][0]['attrs']) end
remove_downtime_host(host, author, comment)
click to toggle source
# File lib/smart_proxy_monitoring_icinga2/monitoring_icinga2_main.rb, line 51 def remove_downtime_host(host, author, comment) request_url = "/actions/remove-downtime?type=Host&filter=#{uri_encode_filter("host.name==\"#{host}\"\&\&author==\"#{author}\"\&\&comment=\"#{comment}\"")}" data = {} result = with_errorhandling("Remove downtime from #{host}") do Icinga2Client.post(request_url, data.to_json) end result.to_json end
remove_host(host)
click to toggle source
# File lib/smart_proxy_monitoring_icinga2/monitoring_icinga2_main.rb, line 42 def remove_host(host) request_url = "/objects/hosts/#{host}?cascade=1" result = with_errorhandling("Remove #{host}") do Icinga2Client.delete(request_url) end result.to_json end
set_downtime_host(host, author, comment, start_time, end_time, all_services: nil, **)
click to toggle source
# File lib/smart_proxy_monitoring_icinga2/monitoring_icinga2_main.rb, line 61 def set_downtime_host(host, author, comment, start_time, end_time, all_services: nil, **) request_url = "/actions/schedule-downtime?type=Host&filter=#{uri_encode_filter("host.name==\"#{host}\"")}" data = { 'author' => author, 'comment' => comment, 'start_time' => start_time, 'end_time' => end_time, 'duration' => 1000 } data['all_services'] = all_services unless all_services.nil? result = with_errorhandling("Set downtime on #{host}") do Icinga2Client.post(request_url, data.to_json) end result.to_json end
update_host(host, attributes)
click to toggle source
# File lib/smart_proxy_monitoring_icinga2/monitoring_icinga2_main.rb, line 33 def update_host(host, attributes) request_url = "/objects/hosts/#{host}" result = with_errorhandling("Update #{host}") do Icinga2Client.post(request_url, host_data(attributes).to_json) end result.to_json end
Private Instance Methods
host_attributes(host, data)
click to toggle source
# File lib/smart_proxy_monitoring_icinga2/monitoring_icinga2_main.rb, line 84 def host_attributes(host, data) attributes = {} data['templates'].delete(host) data.delete('templates') if data['templates'] == [ 'foreman-host' ] if data['vars'].nil? data.delete('vars') else data = data.merge(data.delete('vars')) end data.each do |key, value| key = ICINGA_ATTR_MAPPING.invert[key] if ICINGA_ATTR_MAPPING.invert.key?(key) attributes[key] = value end attributes end
host_data(attributes)
click to toggle source
# File lib/smart_proxy_monitoring_icinga2/monitoring_icinga2_main.rb, line 103 def host_data(attributes) data = {} data['templates'] = [ 'foreman-host' ] unless attributes.has_key?('templates') data['attrs'] = {} attributes.each do |key, value| key = ICINGA_ATTR_MAPPING[key] if ICINGA_ATTR_MAPPING.key?(key) key = "vars.#{key}" unless ICINGA_HOST_ATTRS.include?(key) data['attrs'][key] = value end data end
uri_encode_filter(filter)
click to toggle source
# File lib/smart_proxy_monitoring_icinga2/monitoring_icinga2_main.rb, line 80 def uri_encode_filter(filter) URI.encode(filter) end
with_errorhandling(action) { || ... }
click to toggle source
# File lib/smart_proxy_monitoring_icinga2/monitoring_icinga2_main.rb, line 118 def with_errorhandling(action) response = yield logger.debug "Monitoring - Action successful: #{action}" result = JSON.parse(response.body) if result.key?('error') && result['status'] == "No objects found." raise Proxy::Monitoring::NotFound.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned no objects found.") end unless result.key?('results') logger.error "Invalid Icinga result or result with errors: #{result.inspect}" raise Proxy::Monitoring::Error.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned an invalid result.") end unless result['results'].first raise Proxy::Monitoring::NotFound.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned an empty result.") end if result['results'][0]['code'] && result['results'][0]['code'] != 200 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']}") end result rescue JSON::ParserError => e raise Proxy::Monitoring::Error.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned invalid JSON: '#{e.message}'") rescue RestClient::Unauthorized => e raise Proxy::Monitoring::AuthenticationError.new("Error authenicating to Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server}: #{e.message}.") rescue RestClient::ResourceNotFound => e raise Proxy::Monitoring::NotFound.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned: #{e.message}.") rescue RestClient::Exception => e raise Proxy::Monitoring::Error.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} returned an error: '#{e.response}'") rescue Errno::ECONNREFUSED => e raise Proxy::Monitoring::ConnectionError.new("Icinga server at #{::Proxy::Monitoring::Icinga2::Plugin.settings.server} is not responding") rescue SocketError => e raise Proxy::Monitoring::ConnectionError.new("Icinga server '#{::Proxy::Monitoring::Icinga2::Plugin.settings.server}' is unknown") end