class Hawkular::Metrics::Client

Client to access the Hawkular_metrics subsystem

Attributes

avail[R]

@return [Availability] access counters API

counters[R]

@return [Counters] access counters API

gauges[R]

@return [Gauges] access gauges API

legacy_api[R]

@return [boolean] if it's using the legacy API or not

strings[R]

@return [Strings] access strings API

tenants[R]

@return [Tenants] access tenants API

Public Class Methods

new(entrypoint, credentials = {}, options = {}) click to toggle source

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"})
Calls superclass method 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

check_version() click to toggle source
   # 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
data_by_tags(tags, buckets: nil, bucketDuration: nil, start: nil, ends: nil) click to toggle source

Retrieve all types of metrics datapoints by tags @param tags [Hash] @param buckets [Integer] optional number of buckets @param bucketDuration [String] optional interval (default no aggregation) @param starts [Integer] optional timestamp (default now - 8h) @param ends [Integer] optional timestamp (default now) @return [Array] datapoints

   # File lib/hawkular/metrics/metric_api.rb
26 def data_by_tags(tags, buckets: nil, bucketDuration: nil, # rubocop:disable Naming/VariableName
27                  start: nil, ends: nil)
28   data = {
29     tags: tags_param(tags), buckets: buckets, bucketDuration: bucketDuration, start: start, end: ends
30   }
31 
32   http_post('metrics/stats/query', data)
33 end
default_timestamp(array) click to toggle source

@!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
fetch_version_and_status() click to toggle source

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(gauges: [], counters: [], availabilities: [], strings: []) click to toggle source

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
query_stats(gauge_ids: [], counter_ids: [], avail_ids: [], rates: false, starts: nil, ends: nil, bucket_duration: '3600s') click to toggle source

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
tags() click to toggle source

Fetch all tags for metrics definitions @return [Hash{String=>String}]

    # File lib/hawkular/metrics/metric_api.rb
 94 def tags
 95   tags = []
 96   http_get('/metrics/').map do |g|
 97     next if g['tags'].nil?
 98 
 99     g['tags'].map do |k, v|
100       tags << { k => v }
101     end
102   end
103   tags.uniq!
104 end
tags_param(tags) click to toggle source
   # File lib/hawkular/metrics/metric_api.rb
15 def tags_param(tags)
16   tags.map { |k, v| "#{k}:#{v}" }.join(',')
17 end