td-client 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|