lib/hawkular/hawkular_client.rb
require 'hawkular/inventory/inventory_api'
require 'hawkular/alerts/alerts_api'
require 'hawkular/tokens/tokens_api'
require 'hawkular/operations/operations_api'
require 'hawkular/prometheus/prometheus_api'
require 'hawkular/base_client'
module Hawkular
class Client
def initialize(hash)
hash[:credentials] ||= {}
hash[:options] ||= {}
fail Hawkular::ArgumentError, 'no parameter ":entrypoint" given' if hash[:entrypoint].nil?
@state = hash
end
def respond_to_missing?(method_name, include_private = false)
delegate_client = client_for_method(method_name)
return super if delegate_client.nil?
method = submethod_name_for(method_name)
return super unless delegate_client.respond_to?(method)
true
end
def method_missing(name, *args, &block)
super unless respond_to?(name)
client_for_method(name).__send__(submethod_name_for(name), *args, &block)
end
def inventory
@inventory ||= Inventory::Client.new("#{@state[:entrypoint]}/hawkular/inventory",
@state[:credentials],
@state[:options])
end
def alerts
@alerts ||= Alerts::Client.new("#{@state[:entrypoint]}/hawkular/alerts",
@state[:credentials],
@state[:options])
end
# adds a way to explicitly open the new web socket connection (the default is to recycle it)
# @param open_new [Boolean] if true, opens the new websocket connection
def operations(open_new = false)
@operations = init_operations_client if open_new
@operations ||= init_operations_client
end
def tokens
@tokens ||= Token::Client.new(@state[:entrypoint],
@state[:credentials],
@state[:options])
end
def prometheus
@prometheus ||= Prometheus::Client.new(@state[:entrypoint],
@state[:credentials],
@state[:options])
end
private
# this is in a dedicated method, because constructor opens the websocket connection to make the handshake
def init_operations_client
Operations::Client.new(entrypoint: @state[:entrypoint],
credentials: @state[:credentials],
options: @state[:options])
end
def client_for_method(method_name)
case method_name
when /^inventory_/ then inventory
when /^alerts_/ then alerts
when /^operations_/ then operations
when /^tokens_/ then tokens
when /^prometheus_/ then prometheus
end
end
def submethod_name_for(method_name)
method_name.to_s.sub(/^[^_]+_/, '')
end
end
end