class Proxy::Monitoring::Icinga2::Icinga2Client

Public Class Methods

baseurl() click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 122
def baseurl
  "https://#{Proxy::Monitoring::Icinga2::Plugin.settings.server}:#{Proxy::Monitoring::Icinga2::Plugin.settings.api_port}/v1"
end
cacert() click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 102
def cacert
  Proxy::Monitoring::Icinga2::Plugin.settings.api_cacert
end
cert() click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 90
def cert
  file = Proxy::Monitoring::Icinga2::Plugin.settings.api_usercert
  return unless !file.nil? && File.file?(file)
  OpenSSL::X509::Certificate.new(File.read(file))
end
certificate_request?() click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 118
def certificate_request?
  cert && key
end
client(request_url) click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 11
def client(request_url)
  headers = {
    'Accept' => 'application/json'
  }

  options = {
    headers: headers,
    user: user,
    ssl_ca_file: cacert,
    verify_ssl: ssl
  }

  auth_options = if certificate_request?
                   {
                     ssl_client_cert: cert,
                     ssl_client_key: key
                   }
                 else
                   {
                     password: password
                   }
                 end
  options.merge!(auth_options)

  RestClient::Resource.new(
    [baseurl, request_url].join(''),
    options
  )
end
delete(url) click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 86
def delete(url)
  client(url).delete
end
events_socket(endpoint) click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 41
def events_socket(endpoint)
  uri = URI.parse([baseurl, endpoint].join(''))
  socket = TCPSocket.new(uri.host, uri.port)

  ssl_context = OpenSSL::SSL::SSLContext.new
  ssl_context.ca_file = cacert

  if ssl
    ssl_context.set_params(verify_mode: OpenSSL::SSL::VERIFY_PEER)
  else
    ssl_context.set_params(verify_mode: OpenSSL::SSL::VERIFY_NONE)
  end

  if certificate_request?
    ssl_context.cert = cert
    ssl_context.key = key
  end

  ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
  ssl_socket.sync_close = true
  ssl_socket.connect

  ssl_socket.write "POST #{uri.request_uri} HTTP/1.1\r\n"
  ssl_socket.write "Accept: application/json\r\n"
  unless certificate_request?
    auth = Base64.encode64("#{user}:#{password}")
    ssl_socket.write "Authorization: Basic #{auth}"
  end
  ssl_socket.write "\r\n"

  ssl_socket
end
get(url) click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 74
def get(url)
  client(url).get
end
key() click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 96
def key
  file = Proxy::Monitoring::Icinga2::Plugin.settings.api_userkey
  return unless !file.nil? && File.file?(file)
  OpenSSL::PKey::RSA.new(File.read(file))
end
password() click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 110
def password
  Proxy::Monitoring::Icinga2::Plugin.settings.api_password
end
post(url, data) click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 78
def post(url, data)
  client(url).post(data)
end
put(url, data) click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 82
def put(url, data)
  client(url).put(data)
end
ssl() click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 114
def ssl
  Proxy::Monitoring::Icinga2::Plugin.settings.verify_ssl
end
user() click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_client.rb, line 106
def user
  Proxy::Monitoring::Icinga2::Plugin.settings.api_user
end