wobble 1.0.6 → 1.1.0
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/README.md +1 -1
- data/bin/wobble +41 -12
- data/lib/wobble/tracker.rb +54 -17
- data/lib/wobble/version.rb +1 -1
- metadata +142 -129
data/README.md
CHANGED
data/bin/wobble
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'gli'
|
4
|
+
require 'rainbow'
|
4
5
|
require 'terminal-table'
|
5
6
|
|
6
7
|
require 'wobble'
|
@@ -19,31 +20,59 @@ desc "retrieve job statuses from Hadoop's JobTracker"
|
|
19
20
|
arg_name 'jobs'
|
20
21
|
|
21
22
|
command :jobs do |c|
|
22
|
-
c.desc 'specify status type (i.e. running, completed,
|
23
|
+
c.desc 'specify status type (i.e. running, completed, or failed)'
|
23
24
|
c.flag :status
|
24
25
|
c.action do |global_options, options, args|
|
25
|
-
types = %w(running completed failed
|
26
|
+
types = %w(running completed failed)
|
26
27
|
|
27
28
|
if options['status']
|
28
29
|
if types.include? options['status']
|
29
|
-
|
30
|
+
@tracker.status = options['status']
|
31
|
+
|
32
|
+
format_table @tracker.jobs
|
30
33
|
end
|
31
34
|
else
|
32
|
-
|
33
|
-
format_table status
|
34
|
-
end
|
35
|
+
format_table @tracker.jobs
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
38
|
-
def
|
39
|
-
|
39
|
+
def headings
|
40
|
+
%w(ID Created Priority User Name Mapped Reduced).map { |h| h.bright }
|
41
|
+
end
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
43
|
+
def color_rows(jobs)
|
44
|
+
if @tracker.status
|
45
|
+
case @tracker.status
|
46
|
+
when 'running'
|
47
|
+
jobs.map do |job|
|
48
|
+
job.map do |value|
|
49
|
+
value.color :yellow
|
50
|
+
end
|
51
|
+
end
|
52
|
+
when 'completed'
|
53
|
+
jobs.map do |job|
|
54
|
+
job.map do |value|
|
55
|
+
value.color :green
|
56
|
+
end
|
57
|
+
end
|
58
|
+
when 'failed'
|
59
|
+
jobs.map do |job|
|
60
|
+
job.map do |value|
|
61
|
+
value.color :red
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
45
65
|
end
|
66
|
+
end
|
46
67
|
|
68
|
+
def format_table(jobs)
|
69
|
+
table = Terminal::Table.new do |t|
|
70
|
+
t.headings = headings
|
71
|
+
t.rows = color_rows(jobs)
|
72
|
+
end
|
73
|
+
|
74
|
+
table.align_column 0, :right
|
75
|
+
|
47
76
|
puts table
|
48
77
|
end
|
49
78
|
end
|
data/lib/wobble/tracker.rb
CHANGED
@@ -1,56 +1,93 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
require 'nokogiri'
|
3
|
+
require 'rainbow'
|
3
4
|
|
4
5
|
module Wobble
|
5
6
|
class Tracker
|
6
7
|
attr_accessor :host
|
7
8
|
attr_accessor :status
|
9
|
+
attr_accessor :xpath_prefix
|
8
10
|
|
9
11
|
def initialize(host)
|
10
12
|
@host = Nokogiri::HTML(Net::HTTP.get(URI(host)))
|
13
|
+
@xpath_prefix = "//html/body/table[@class='datatable']"
|
11
14
|
end
|
12
15
|
|
13
16
|
def jobs
|
14
|
-
ids.zip(priorities, users, names)
|
17
|
+
ids.zip(timestamps, priorities, users, names, mapped, reduced)
|
15
18
|
end
|
16
19
|
|
17
|
-
def find_jobs
|
18
|
-
xpath_stub = "//html/body/table[@class='datatable']"
|
19
|
-
|
20
|
+
def find_jobs
|
20
21
|
case status
|
21
22
|
when 'running'
|
22
|
-
|
23
|
+
running_jobs
|
23
24
|
when 'completed'
|
24
|
-
|
25
|
+
completed_jobs
|
25
26
|
when 'failed'
|
26
|
-
|
27
|
-
when 'retired'
|
28
|
-
host.xpath("/html/body/table[@class='sortable'][2]/tbody").first.search('tr')
|
27
|
+
failed_jobs
|
29
28
|
else
|
30
|
-
|
29
|
+
find_by_table_index
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
33
|
+
def find_by_table_index(table_index=nil)
|
34
|
+
if table_index
|
35
|
+
table = host.xpath("#{xpath_prefix}[#{table_index}]/tbody")
|
36
|
+
else
|
37
|
+
table = host.xpath("#{xpath_prefix}/tbody")
|
37
38
|
end
|
39
|
+
|
40
|
+
table.first.search('tr')
|
41
|
+
end
|
42
|
+
|
43
|
+
def running_jobs
|
44
|
+
find_by_table_index 1
|
45
|
+
end
|
46
|
+
|
47
|
+
def completed_jobs
|
48
|
+
find_by_table_index 2
|
49
|
+
end
|
50
|
+
|
51
|
+
def failed_jobs
|
52
|
+
find_by_table_index 3
|
53
|
+
end
|
54
|
+
|
55
|
+
def find_by_column_index(index)
|
56
|
+
find_jobs.xpath("td[#{index}]").map { |c| c.content }.reject(&:empty?)
|
57
|
+
end
|
58
|
+
|
59
|
+
def timestamps
|
60
|
+
find_by_column_index(1).map { |timestamp| edit_timestamp timestamp }
|
38
61
|
end
|
39
62
|
|
40
63
|
def ids
|
41
|
-
|
64
|
+
find_by_column_index(1).map { |name| edit_id name }
|
42
65
|
end
|
43
66
|
|
44
67
|
def priorities
|
45
|
-
|
68
|
+
find_by_column_index 2
|
46
69
|
end
|
47
70
|
|
48
71
|
def users
|
49
|
-
|
72
|
+
find_by_column_index 3
|
50
73
|
end
|
51
74
|
|
52
75
|
def names
|
53
|
-
|
76
|
+
find_by_column_index(4).map { |name| edit_name name }
|
77
|
+
end
|
78
|
+
|
79
|
+
def mapped
|
80
|
+
find_by_column_index 5
|
81
|
+
end
|
82
|
+
|
83
|
+
def reduced
|
84
|
+
find_by_column_index 8
|
85
|
+
end
|
86
|
+
|
87
|
+
def edit_timestamp(id)
|
88
|
+
DateTime.parse(id.gsub(/job_/, '').gsub(/_\d+/, ''))
|
89
|
+
.to_time
|
90
|
+
.to_s
|
54
91
|
end
|
55
92
|
|
56
93
|
def edit_id(id)
|
data/lib/wobble/version.rb
CHANGED
metadata
CHANGED
@@ -1,194 +1,207 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: wobble
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 6
|
10
|
-
version: 1.0.6
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Allen Goodman
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
-
none: false
|
24
|
-
requirements:
|
25
|
-
- - ~>
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
hash: 3
|
28
|
-
segments:
|
29
|
-
- 0
|
30
|
-
version: "0"
|
31
|
-
version_requirements: *id001
|
12
|
+
date: 2012-11-16 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
32
15
|
name: aruba
|
33
|
-
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
34
22
|
type: :development
|
35
|
-
|
36
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
25
|
none: false
|
38
|
-
requirements:
|
26
|
+
requirements:
|
39
27
|
- - ~>
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
|
42
|
-
|
43
|
-
- 10
|
44
|
-
version: "10"
|
45
|
-
version_requirements: *id002
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
46
31
|
name: rake
|
47
|
-
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '10'
|
48
38
|
type: :development
|
49
|
-
|
50
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
41
|
none: false
|
52
|
-
requirements:
|
42
|
+
requirements:
|
53
43
|
- - ~>
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
|
56
|
-
|
57
|
-
- 2
|
58
|
-
version: "2"
|
59
|
-
version_requirements: *id003
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '10'
|
46
|
+
- !ruby/object:Gem::Dependency
|
60
47
|
name: rspec
|
61
|
-
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2'
|
62
54
|
type: :development
|
63
|
-
|
64
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
57
|
none: false
|
66
|
-
requirements:
|
58
|
+
requirements:
|
67
59
|
- - ~>
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
|
70
|
-
|
71
|
-
- 1
|
72
|
-
- 9
|
73
|
-
- 0
|
74
|
-
version: 1.9.0
|
75
|
-
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2'
|
62
|
+
- !ruby/object:Gem::Dependency
|
76
63
|
name: webmock
|
77
|
-
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.9.0
|
78
70
|
type: :development
|
79
|
-
|
80
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
73
|
none: false
|
82
|
-
requirements:
|
74
|
+
requirements:
|
83
75
|
- - ~>
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
|
86
|
-
|
87
|
-
- 0
|
88
|
-
version: "0"
|
89
|
-
version_requirements: *id005
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.9.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
90
79
|
name: yard
|
91
|
-
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
92
86
|
type: :development
|
93
|
-
|
94
|
-
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
89
|
none: false
|
96
|
-
requirements:
|
90
|
+
requirements:
|
97
91
|
- - ~>
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
|
100
|
-
|
101
|
-
- 1
|
102
|
-
- 5
|
103
|
-
- 5
|
104
|
-
version: 1.5.5
|
105
|
-
version_requirements: *id006
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
106
95
|
name: nokogiri
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.5.5
|
102
|
+
type: :runtime
|
107
103
|
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.5.5
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rainbow
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
108
118
|
type: :runtime
|
109
|
-
|
110
|
-
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: terminal-table
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
111
129
|
none: false
|
112
|
-
requirements:
|
130
|
+
requirements:
|
113
131
|
- - ~>
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
hash: 13
|
116
|
-
segments:
|
117
|
-
- 1
|
118
|
-
- 4
|
119
|
-
- 5
|
132
|
+
- !ruby/object:Gem::Version
|
120
133
|
version: 1.4.5
|
121
|
-
version_requirements: *id007
|
122
|
-
name: terminal-table
|
123
|
-
prerelease: false
|
124
134
|
type: :runtime
|
125
|
-
|
126
|
-
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
137
|
none: false
|
128
|
-
requirements:
|
138
|
+
requirements:
|
129
139
|
- - ~>
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
|
132
|
-
|
133
|
-
- 2
|
134
|
-
- 4
|
135
|
-
- 1
|
136
|
-
version: 2.4.1
|
137
|
-
version_requirements: *id008
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 1.4.5
|
142
|
+
- !ruby/object:Gem::Dependency
|
138
143
|
name: gli
|
139
|
-
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 2.4.1
|
140
150
|
type: :runtime
|
141
|
-
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 2.4.1
|
158
|
+
description: A command-line interface for Hadoop’s JobTracker.
|
142
159
|
email: allen.goodman@me.com
|
143
|
-
executables:
|
160
|
+
executables:
|
144
161
|
- wobble
|
145
162
|
extensions: []
|
146
|
-
|
147
|
-
extra_rdoc_files:
|
163
|
+
extra_rdoc_files:
|
148
164
|
- README.md
|
149
|
-
files:
|
165
|
+
files:
|
150
166
|
- bin/wobble
|
151
167
|
- lib/wobble/version.rb
|
152
168
|
- lib/wobble.rb
|
153
169
|
- lib/wobble/tracker.rb
|
154
170
|
- README.md
|
155
|
-
has_rdoc: true
|
156
171
|
homepage: https://github.com/2a6U37Nn/wobble
|
157
172
|
licenses: []
|
158
|
-
|
159
173
|
post_install_message:
|
160
|
-
rdoc_options:
|
174
|
+
rdoc_options:
|
161
175
|
- --title
|
162
176
|
- wobble
|
163
177
|
- --main
|
164
178
|
- README.md
|
165
179
|
- -ri
|
166
|
-
require_paths:
|
180
|
+
require_paths:
|
167
181
|
- lib
|
168
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
182
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
169
183
|
none: false
|
170
|
-
requirements:
|
171
|
-
- -
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
|
174
|
-
segments:
|
184
|
+
requirements:
|
185
|
+
- - ! '>='
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
segments:
|
175
189
|
- 0
|
176
|
-
|
177
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
|
+
hash: -453464498335322200
|
191
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
192
|
none: false
|
179
|
-
requirements:
|
180
|
-
- -
|
181
|
-
- !ruby/object:Gem::Version
|
182
|
-
|
183
|
-
segments:
|
193
|
+
requirements:
|
194
|
+
- - ! '>='
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: '0'
|
197
|
+
segments:
|
184
198
|
- 0
|
185
|
-
|
199
|
+
hash: -453464498335322200
|
186
200
|
requirements: []
|
187
|
-
|
188
201
|
rubyforge_project:
|
189
|
-
rubygems_version: 1.
|
202
|
+
rubygems_version: 1.8.23
|
190
203
|
signing_key:
|
191
204
|
specification_version: 3
|
192
|
-
summary:
|
205
|
+
summary: A command-line interface for Hadoop’s JobTracker.
|
193
206
|
test_files: []
|
194
|
-
|
207
|
+
has_rdoc: true
|