td-client 0.8.1 → 0.8.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/ChangeLog +7 -0
- data/lib/td/client.rb +32 -3
- data/lib/td/client/api.rb +77 -2
- data/lib/td/client/model.rb +25 -0
- data/lib/td/client/version.rb +1 -1
- metadata +4 -4
data/ChangeLog
CHANGED
data/lib/td/client.rb
CHANGED
@@ -105,10 +105,10 @@ class Client
|
|
105
105
|
Job.new(self, job_id, :hive, q) # TODO url
|
106
106
|
end
|
107
107
|
|
108
|
-
# => [Job
|
108
|
+
# => [Job]
|
109
109
|
def jobs(from=nil, to=nil)
|
110
|
-
|
111
|
-
|
110
|
+
result = @api.list_jobs(from, to)
|
111
|
+
result.map {|job_id,type,status,query,start_at,end_at|
|
112
112
|
Job.new(self, job_id, type, query, status, nil, nil, start_at, end_at)
|
113
113
|
}
|
114
114
|
end
|
@@ -146,6 +146,35 @@ class Client
|
|
146
146
|
@api.kill(job_id)
|
147
147
|
end
|
148
148
|
|
149
|
+
# => first_time:Time
|
150
|
+
def create_schedule(name, opts)
|
151
|
+
raise ArgumentError, "'cron' option is required" unless opts[:cron] || opts['cron']
|
152
|
+
raise ArgumentError, "'query' option is required" unless opts[:query] || opts['query']
|
153
|
+
start = @api.create_schedule(name, opts)
|
154
|
+
return Time.parse(start)
|
155
|
+
end
|
156
|
+
|
157
|
+
# => true
|
158
|
+
def delete_schedule(name)
|
159
|
+
@api.delete_schedule(name)
|
160
|
+
end
|
161
|
+
|
162
|
+
# [Schedule]
|
163
|
+
def schedules
|
164
|
+
result = @api.list_schedules
|
165
|
+
result.map {|name,cron,query,database|
|
166
|
+
Schedule.new(self, name, cron, query, database)
|
167
|
+
}
|
168
|
+
end
|
169
|
+
|
170
|
+
# [ScheduledJob]
|
171
|
+
def history(name, from=nil, to=nil)
|
172
|
+
result = @api.history(name, from, to)
|
173
|
+
result.map {|scheduled_at,job_id,type,status,query,start_at,end_at|
|
174
|
+
ScheduledJob.new(self, scheduled_at, job_id, type, query, status, nil, nil, start_at, end_at)
|
175
|
+
}
|
176
|
+
end
|
177
|
+
|
149
178
|
# => time:Flaot
|
150
179
|
def import(db_name, table_name, format, stream, size)
|
151
180
|
@api.import(db_name, table_name, format, stream, size)
|
data/lib/td/client/api.rb
CHANGED
@@ -297,6 +297,76 @@ class API
|
|
297
297
|
end
|
298
298
|
|
299
299
|
|
300
|
+
####
|
301
|
+
## Schedule API
|
302
|
+
##
|
303
|
+
|
304
|
+
# => start:String
|
305
|
+
def create_schedule(name, opts)
|
306
|
+
params = opts.update({'type'=>'hive'})
|
307
|
+
code, body, res = post("/v3/schedule/create/#{e name}", params)
|
308
|
+
if code != "200"
|
309
|
+
raise_error("Create schedule failed", res)
|
310
|
+
end
|
311
|
+
# TODO format check
|
312
|
+
js = JSON.load(body)
|
313
|
+
return js['start']
|
314
|
+
end
|
315
|
+
|
316
|
+
# => cron:String, query:String
|
317
|
+
def delete_schedule(name)
|
318
|
+
code, body, res = post("/v3/schedule/delete/#{e name}")
|
319
|
+
if code != "200"
|
320
|
+
raise_error("Delete schedule failed", res)
|
321
|
+
end
|
322
|
+
# TODO format check
|
323
|
+
js = JSON.load(body)
|
324
|
+
return js['cron'], js["query"]
|
325
|
+
end
|
326
|
+
|
327
|
+
def list_schedules
|
328
|
+
code, body, res = get("/v3/schedule/list")
|
329
|
+
if code != "200"
|
330
|
+
raise_error("List schedules failed", res)
|
331
|
+
end
|
332
|
+
# TODO format check
|
333
|
+
js = JSON.load(body)
|
334
|
+
result = []
|
335
|
+
js['schedules'].each {|m|
|
336
|
+
name = m['name']
|
337
|
+
cron = m['cron']
|
338
|
+
query = m['query']
|
339
|
+
database = m['database']
|
340
|
+
result << [name, cron, query, database]
|
341
|
+
}
|
342
|
+
return result
|
343
|
+
end
|
344
|
+
|
345
|
+
def history(name, from=0, to=nil)
|
346
|
+
params = {}
|
347
|
+
params['from'] = from.to_s if from
|
348
|
+
params['to'] = to.to_s if to
|
349
|
+
code, body, res = get("/v3/schedule/history/#{e name}", params)
|
350
|
+
if code != "200"
|
351
|
+
raise_error("List history failed", res)
|
352
|
+
end
|
353
|
+
# TODO format check
|
354
|
+
js = JSON.load(body)
|
355
|
+
result = []
|
356
|
+
js['history'].each {|m|
|
357
|
+
job_id = m['job_id']
|
358
|
+
type = (m['type'] || '?').to_sym
|
359
|
+
status = m['status']
|
360
|
+
query = m['query']
|
361
|
+
start_at = m['start_at']
|
362
|
+
end_at = m['end_at']
|
363
|
+
scheduled_at = m['scheduled_at']
|
364
|
+
result << [scheduled_at, job_id, type, status, query, start_at, end_at]
|
365
|
+
}
|
366
|
+
return result
|
367
|
+
end
|
368
|
+
|
369
|
+
|
300
370
|
####
|
301
371
|
## Import API
|
302
372
|
##
|
@@ -385,8 +455,13 @@ class API
|
|
385
455
|
|
386
456
|
path = BASE_URL + url
|
387
457
|
|
388
|
-
|
389
|
-
|
458
|
+
if params && !params.empty?
|
459
|
+
request = Net::HTTP::Post.new(path, header)
|
460
|
+
request.set_form_data(params)
|
461
|
+
else
|
462
|
+
header['Content-Length'] = 0.to_s
|
463
|
+
request = Net::HTTP::Post.new(path, header)
|
464
|
+
end
|
390
465
|
|
391
466
|
response = http.request(request)
|
392
467
|
return [response.code, response.body, response]
|
data/lib/td/client/model.rb
CHANGED
@@ -250,5 +250,30 @@ class Job < Model
|
|
250
250
|
end
|
251
251
|
|
252
252
|
|
253
|
+
class ScheduledJob < Job
|
254
|
+
def initialize(client, scheduled_at, *super_args)
|
255
|
+
super(client, *super_args)
|
256
|
+
@scheduled_at = scheduled_at
|
257
|
+
end
|
258
|
+
|
259
|
+
def scheduled_at
|
260
|
+
@scheduled_at ? Time.parse(@scheduled_at) : nil
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
|
265
|
+
class Schedule < Model
|
266
|
+
def initialize(client, name, cron, query, database=nil)
|
267
|
+
super(client)
|
268
|
+
@name = name
|
269
|
+
@cron = cron
|
270
|
+
@query = query
|
271
|
+
@database = database
|
272
|
+
end
|
273
|
+
|
274
|
+
attr_reader :name, :cron, :query, :database
|
275
|
+
end
|
276
|
+
|
277
|
+
|
253
278
|
end
|
254
279
|
|
data/lib/td/client/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: td-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 59
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
9
|
+
- 2
|
10
|
+
version: 0.8.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sadayuki Furuhashi
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-09-
|
18
|
+
date: 2011-09-13 00:00:00 +09:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|