class Hawkular::Metrics::Client
Client
to access the Hawkular_metrics subsystem
Attributes
@return [Availability] access counters API
@return [Counters] access counters API
@return [Gauges] access gauges API
@return [boolean] if it's using the legacy API or not
@return [Strings] access strings API
@return [Tenants] access tenants API
Public Class Methods
Construct a new Hawkular
Metrics
client class. optional parameters @param entrypoint [String] Base url of the Hawkular
(metrics) server @param credentials Hash of username, password, token(optional) @param options [Hash{String=>String}] client options @example initialize with Hawkular-tenant option
Hawkular::Metrics::Client::new("http://server", {username:"username",password:"password"}, {"tenant" => "your tenant ID"})
Hawkular::BaseClient::new
# File lib/hawkular/metrics/metrics_client.rb 57 def initialize(entrypoint, 58 credentials = {}, 59 options = {}) 60 entrypoint = normalize_entrypoint_url entrypoint, 'hawkular/metrics' 61 super(entrypoint, credentials, options) 62 check_version 63 @tenants = Client::Tenants.new self 64 @counters = Client::Counters.new self 65 @gauges = Client::Gauges.new self 66 @avail = Client::Availability.new self 67 @strings = Client::Strings.new self 68 end
Public Instance Methods
# File lib/hawkular/metrics/metrics_client.rb 36 def check_version 37 version_status_hash = fetch_version_and_status 38 39 fail_version_msg = 'Unable to determine implementation version for metrics' 40 fail Hawkular::Exception, fail_version_msg if version_status_hash['Implementation-Version'].nil? 41 version = version_status_hash['Implementation-Version'] 42 major, minor = version.scan(/\d+/).map(&:to_i) 43 fail Hawkular::Exception, fail_version_msg if major.nil? || minor.nil? 44 @legacy_api = (major.zero? && minor < 16) 45 end
@!visibility private
# File lib/hawkular/metrics/metric_api.rb 7 def default_timestamp(array) 8 n = now 9 array.each do |p| 10 p[:timestamp] ||= n 11 end 12 array 13 end
Return version and status information for the used version of Hawkular-Metrics @return [Hash{String=>String}]
('Implementation-Version', 'Built-From-Git-SHA1', 'Status')
# File lib/hawkular/metrics/metric_api.rb 38 def fetch_version_and_status 39 http_get('/status') 40 end
Push data for multiple metrics of all supported types @param gauges [Array] @param counters [Array] @param availabilities [Array] @example push datapoints of 2 counter metrics
client = Hawkular::Metrics::client::new client.push_data(counters: [{:id => "counter1", :data => [{:value => 1}, {:value => 2}]}, {:id => "counter2", :data => [{:value => 1}, {:value => 3}]}])
@example push gauge and availability datapoints
client.push_data(gauges: [{:id => "gauge1", :data => [{:value => 1}, {:value => 2}]}], availabilities: [{:id => "avail1", :data => [{:value => "up"}]}])
# File lib/hawkular/metrics/metric_api.rb 53 def push_data(gauges: [], counters: [], availabilities: [], strings: []) 54 gauges.each { |g| default_timestamp g[:data] } 55 counters.each { |g| default_timestamp g[:data] } 56 availabilities.each { |g| default_timestamp g[:data] } 57 strings.each { |g| default_timestamp g[:data] } 58 data = { gauges: gauges, counters: counters, availabilities: availabilities, strings: strings } 59 path = '/metrics/' 60 path << (@legacy_api ? 'data' : 'raw') 61 http_post(path, data) 62 end
Fetch stats for multiple metrics of all supported types @param gauge_ids [Array] list of gauge ids @param counter_ids [Array] list of counter ids @param avail_ids [Array] list of availability ids @param rates [Boolean] flag to include rates for gauges and counters metrics @param starts [Integer] optional timestamp (default now - 8h) @param ends [Integer] optional timestamp (default now) @param bucket_duration [String] optional interval (default 3600s) @return [Hash] stats grouped per type @example
client = Hawkular::Metrics::client::new client.query_stats( gauge_ids: ['G1', 'G2'], counter_ids: ['C2', 'C3'], avail_ids: ['A2', 'A3'], starts: 200, ends: 500, bucket_duration: '150ms' )
# File lib/hawkular/metrics/metric_api.rb 83 def query_stats(gauge_ids: [], counter_ids: [], avail_ids: [], rates: false, starts: nil, ends: nil, 84 bucket_duration: '3600s') 85 path = '/metrics/stats/query' 86 metrics = { gauge: gauge_ids, counter: counter_ids, availability: avail_ids } 87 data = { metrics: metrics, start: starts, end: ends, bucketDuration: bucket_duration } 88 data['types'] = %w[gauge gauge_rate counter counter_rate availability] if rates 89 http_post(path, data) 90 end