hadoop-metrics 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/hadoop_metrics/api.rb
CHANGED
@@ -3,22 +3,45 @@ require 'json'
|
|
3
3
|
|
4
4
|
module HadoopMetrics
|
5
5
|
module API
|
6
|
-
def
|
7
|
-
|
8
|
-
@
|
9
|
-
|
10
|
-
|
11
|
-
if @snake_case
|
12
|
-
jmx_json = HadoopMetrics.snake_cased(jmx_json)
|
13
|
-
end
|
14
|
-
|
15
|
-
jmx_json
|
6
|
+
def initialize(host, port, opts = {})
|
7
|
+
@endpoint = "#{host}:#{port}"
|
8
|
+
@metrics_endpoint = URI("http://#{@endpoint}/metrics?format=json")
|
9
|
+
@snake_case = opts[:snake_case] || true
|
10
|
+
@name = opts[:name] || host
|
16
11
|
end
|
17
12
|
|
13
|
+
attr_reader :name
|
14
|
+
|
18
15
|
def metrics
|
19
16
|
HadoopMetrics.get_response(@metrics_endpoint)
|
20
17
|
end
|
21
18
|
|
19
|
+
def gc
|
20
|
+
disable_snake_case {
|
21
|
+
result = via_jmx('java.lang:type=GarbageCollector,name=*').map { |jmx_gc_info|
|
22
|
+
gc_info = {'type' => (/PS Scavenge/.match(jmx_gc_info['name']) ? 'minor' : 'major')}
|
23
|
+
gc_info['estimated_time'] = jmx_gc_info['CollectionTime']
|
24
|
+
gc_info['count'] = jmx_gc_info['CollectionCount']
|
25
|
+
gc_info['last_start'] = jmx_gc_info['LastGcInfo']['startTime']
|
26
|
+
gc_info['last_duration'] = jmx_gc_info['LastGcInfo']['duration']
|
27
|
+
gc_info
|
28
|
+
}
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def via_jmx(query, json_fields = [])
|
33
|
+
HadoopMetrics.get_response(URI("http://#{@endpoint}/jmx?qry=#{query}"))['beans'].map { |jmx_json|
|
34
|
+
json_fields.each { |f|
|
35
|
+
jmx_json[f] = JSON.parse(jmx_json[f])
|
36
|
+
}
|
37
|
+
if @snake_case
|
38
|
+
jmx_json = HadoopMetrics.snake_cased(jmx_json)
|
39
|
+
end
|
40
|
+
|
41
|
+
jmx_json
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
22
45
|
private
|
23
46
|
|
24
47
|
def group_by(category, target, column)
|
@@ -35,6 +58,15 @@ module HadoopMetrics
|
|
35
58
|
}
|
36
59
|
end
|
37
60
|
|
61
|
+
def disable_snake_case
|
62
|
+
old_snake_case = @snake_case
|
63
|
+
@snake_case = false
|
64
|
+
|
65
|
+
yield
|
66
|
+
ensure
|
67
|
+
@snake_case = old_snake_case
|
68
|
+
end
|
69
|
+
|
38
70
|
def method_missing(method, *args)
|
39
71
|
category, target = method.to_s.split('_', 2)
|
40
72
|
group_by(category, target, *args)
|
@@ -62,10 +94,14 @@ module HadoopMetrics
|
|
62
94
|
end
|
63
95
|
|
64
96
|
def self.snake_cased(json)
|
65
|
-
|
66
|
-
json.each_pair { |
|
67
|
-
|
97
|
+
snake_cased_json = {}
|
98
|
+
json.each_pair { |key, value|
|
99
|
+
v = json[key]
|
100
|
+
if v.is_a?(Hash)
|
101
|
+
v = snake_cased(v)
|
102
|
+
end
|
103
|
+
snake_cased_json[HadoopMetrics.to_snake_case(key.dup)] = v
|
68
104
|
}
|
69
|
-
|
105
|
+
snake_cased_json
|
70
106
|
end
|
71
107
|
end
|
@@ -4,11 +4,10 @@ module HadoopMetrics
|
|
4
4
|
class JobTracker
|
5
5
|
include API
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
@snake_case = opts.has_key?(:snake_case) ? opts[:snake_case] : true
|
7
|
+
JSON_FILED_VALUES = %W(SummaryJson AliveNodesInfoJson BlacklistedNodesInfoJson QueueInfoJson)
|
8
|
+
|
9
|
+
def info
|
10
|
+
via_jmx('hadoop:service=JobTracker,name=JobTrackerInfo', JSON_FILED_VALUES).first
|
12
11
|
end
|
13
12
|
|
14
13
|
def fairscheduler_pools(column = 'name')
|
@@ -4,11 +4,10 @@ module HadoopMetrics
|
|
4
4
|
class TaskTracker
|
5
5
|
include API
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
@snake_case = opts[:snake_case] || true
|
7
|
+
JSON_FILED_VALUES = %W(TasksInfoJson)
|
8
|
+
|
9
|
+
def info
|
10
|
+
via_jmx('hadoop:service=TaskTracker,name=TaskTrackerInfo', JSON_FILED_VALUES).first
|
12
11
|
end
|
13
12
|
|
14
13
|
def shuffle_output(column = 'sessionId')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hadoop-metrics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -58,7 +58,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
58
58
|
version: '0'
|
59
59
|
segments:
|
60
60
|
- 0
|
61
|
-
hash:
|
61
|
+
hash: -596763061643403807
|
62
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
@@ -67,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
67
|
version: '0'
|
68
68
|
segments:
|
69
69
|
- 0
|
70
|
-
hash:
|
70
|
+
hash: -596763061643403807
|
71
71
|
requirements: []
|
72
72
|
rubyforge_project:
|
73
73
|
rubygems_version: 1.8.23
|