Class: Floom::Reporter

Inherits:
Client
  • Object
show all
Defined in:
lib/floom/client/reporter.rb

Instance Attribute Summary

Attributes inherited from Client

#connection

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Client

#initialize, #reset_connection!, #to_s

Constructor Details

This class inherits a constructor from Floom::Client

Class Method Details

.thrift_classObject



4
# File 'lib/floom/client/reporter.rb', line 4

def self.thrift_class() ThriftFlumeReportServer::Client ; end

Instance Method Details

#extract_jvm_info(metrics, namespace = 'null') ⇒ Object



24
25
26
27
28
29
# File 'lib/floom/client/reporter.rb', line 24

def extract_jvm_info(metrics, namespace = 'null')
  jvm_info_key = metrics.keys.detect{ |key| key =~ /^#{namespace}\.jvm-Info$/ }
  jvm_info     = metrics.delete(jvm_info_key) || {} 
  jvm_info.delete('name')
  { jvm_info: jvm_info }
end

#extract_logical_nodes(metrics, physical_node) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/floom/client/reporter.rb', line 31

def extract_logical_nodes(metrics, physical_node)
  logical_node_keys = metrics.keys.map{ |key| key.match(/^#{physical_node}\.(?<node_name>[\w-]+)\.(?<metric>[\w-.]+)$/) }.compact
  logical_nodes  = logical_node_keys.inject({}) do |hsh, node_key|
    logical_node = node_key[:node_name]
    metric_key   = node_key[:metric]
    hsh[logical_node] = {} unless hsh[logical_node]
    hsh[logical_node].merge!(metric_key => metrics.delete(node_key.to_s))
    hsh
  end
  { logical_nodes: logical_nodes }
end

#extract_master(metrics) ⇒ Object



10
11
12
13
14
15
# File 'lib/floom/client/reporter.rb', line 10

def extract_master(metrics)
  master_key = metrics.keys.detect{ |key| key =~ /^flume-master-\d+$/ }
  master     = metrics.delete(master_key) || {}
  master.delete('name')
  { master: master }
end

#extract_physical_nodes(metrics) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/floom/client/reporter.rb', line 43

def extract_physical_nodes(metrics)
  physical_node_keys = metrics.keys.map{ |key| key.match(/^pn-(?<node_name>[\w-]+)$/) }.compact
  physical_nodes   = physical_node_keys.inject({}) do |hsh, node_key|
    node_name      = node_key[:node_name]
    hsh[node_name] = {} unless hsh[node_name]
    hsh[node_name].merge!(metrics.delete(node_key.to_s)).
      merge!(extract_system_info(metrics, node_key.to_s)).
      merge!(extract_jvm_info(metrics, node_key.to_s)).
      merge!(extract_logical_nodes(metrics, node_name))
    hsh
  end
  { physical_nodes: physical_nodes }
end

#extract_system_info(metrics, namespace = 'null') ⇒ Object



17
18
19
20
21
22
# File 'lib/floom/client/reporter.rb', line 17

def extract_system_info(metrics, namespace = 'null')
  system_info_key = metrics.keys.detect{ |key| key =~ /^#{namespace}\.system-info$/ }
  system_info     = metrics.delete(system_info_key) || {}
  system_info.delete('name')
  { system_info: system_info }
end

#rehash(metrics = reports) ⇒ Object



57
58
59
60
61
62
# File 'lib/floom/client/reporter.rb', line 57

def rehash(metrics = reports)
  {}.merge!(extract_master metrics).
    merge!(extract_jvm_info metrics).
    merge!(extract_system_info metrics).
    merge!(extract_physical_nodes metrics)
end

#reportsObject



6
7
8
# File 'lib/floom/client/reporter.rb', line 6

def reports
  connection.getAllReports.inject({}){ |hsh, (name, report)| hsh[name] = Floom::Report.parse(report) ; hsh }
end