td-client 1.0.0-java

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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/data/ca-bundle.crt +3448 -0
  3. data/lib/td-client.rb +1 -0
  4. data/lib/td/client.rb +606 -0
  5. data/lib/td/client/api.rb +707 -0
  6. data/lib/td/client/api/access_control.rb +74 -0
  7. data/lib/td/client/api/account.rb +45 -0
  8. data/lib/td/client/api/bulk_import.rb +184 -0
  9. data/lib/td/client/api/bulk_load.rb +172 -0
  10. data/lib/td/client/api/database.rb +50 -0
  11. data/lib/td/client/api/export.rb +38 -0
  12. data/lib/td/client/api/import.rb +38 -0
  13. data/lib/td/client/api/job.rb +390 -0
  14. data/lib/td/client/api/partial_delete.rb +27 -0
  15. data/lib/td/client/api/result.rb +46 -0
  16. data/lib/td/client/api/schedule.rb +120 -0
  17. data/lib/td/client/api/server_status.rb +21 -0
  18. data/lib/td/client/api/table.rb +132 -0
  19. data/lib/td/client/api/user.rb +134 -0
  20. data/lib/td/client/api_error.rb +37 -0
  21. data/lib/td/client/compat_gzip_reader.rb +22 -0
  22. data/lib/td/client/model.rb +816 -0
  23. data/lib/td/client/version.rb +5 -0
  24. data/lib/td/core_ext/openssl/ssl/sslcontext/set_params.rb +18 -0
  25. data/spec/spec_helper.rb +63 -0
  26. data/spec/td/client/access_control_api_spec.rb +37 -0
  27. data/spec/td/client/account_api_spec.rb +34 -0
  28. data/spec/td/client/api_error_spec.rb +77 -0
  29. data/spec/td/client/api_spec.rb +269 -0
  30. data/spec/td/client/api_ssl_connection_spec.rb +109 -0
  31. data/spec/td/client/bulk_import_spec.rb +199 -0
  32. data/spec/td/client/bulk_load_spec.rb +401 -0
  33. data/spec/td/client/db_api_spec.rb +123 -0
  34. data/spec/td/client/export_api_spec.rb +51 -0
  35. data/spec/td/client/import_api_spec.rb +148 -0
  36. data/spec/td/client/job_api_spec.rb +833 -0
  37. data/spec/td/client/model_job_spec.rb +136 -0
  38. data/spec/td/client/model_schedule_spec.rb +26 -0
  39. data/spec/td/client/model_schema_spec.rb +134 -0
  40. data/spec/td/client/partial_delete_api_spec.rb +58 -0
  41. data/spec/td/client/result_api_spec.rb +77 -0
  42. data/spec/td/client/sched_api_spec.rb +109 -0
  43. data/spec/td/client/server_status_api_spec.rb +25 -0
  44. data/spec/td/client/spec_resources.rb +99 -0
  45. data/spec/td/client/table_api_spec.rb +226 -0
  46. data/spec/td/client/user_api_spec.rb +118 -0
  47. data/spec/td/client_sched_spec.rb +79 -0
  48. data/spec/td/client_spec.rb +46 -0
  49. metadata +271 -0
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__), 'td', 'client')
@@ -0,0 +1,606 @@
1
+ module TreasureData
2
+
3
+ require 'td/client/api'
4
+ require 'td/client/model'
5
+
6
+
7
+ class Client
8
+ # @param [String] user TreasureData username
9
+ # @param [String] password TreasureData password
10
+ # @param [Hash] opts options for API
11
+ # @return [Client] instance of this class
12
+ def self.authenticate(user, password, opts={})
13
+ api = API.new(nil, opts)
14
+ apikey = api.authenticate(user, password)
15
+ new(apikey)
16
+ end
17
+
18
+ # @param [Hash] opts options for API
19
+ # @return [String] HTTP status code of server returns
20
+ def self.server_status(opts={})
21
+ api = API.new(nil, opts)
22
+ api.server_status
23
+ end
24
+
25
+ # @param [String] apikey TreasureData API key
26
+ # @param [Hash] opts options for API
27
+ def initialize(apikey, opts={})
28
+ @api = API.new(apikey, opts)
29
+ end
30
+
31
+ # @!attribute [r] api
32
+ attr_reader :api
33
+
34
+ # @return [String] API key
35
+ def apikey
36
+ @api.apikey
37
+ end
38
+
39
+ # @return [String] HTTP status code of server returns
40
+ def server_status
41
+ @api.server_status
42
+ end
43
+
44
+ # @param [String] db_name
45
+ # @param [Hash] opts
46
+ # @return [true]
47
+ def create_database(db_name, opts={})
48
+ @api.create_database(db_name, opts)
49
+ end
50
+
51
+ # @param [String] db_name
52
+ # @return [Symbol]
53
+ def delete_database(db_name)
54
+ @api.delete_database(db_name)
55
+ end
56
+
57
+ # @return [Account]
58
+ def account
59
+ account_id, plan, storage, guaranteed_cores, maximum_cores, created_at = @api.show_account
60
+ return Account.new(self, account_id, plan, storage, guaranteed_cores, maximum_cores, created_at)
61
+ end
62
+
63
+ # @param [Fixnum] from
64
+ # @param [Fixnum] to
65
+ # @return [Array] from, to, interval, history
66
+ def core_utilization(from, to)
67
+ from, to, interval, history = @api.account_core_utilization(from, to)
68
+ return from, to, interval, history
69
+ end
70
+
71
+ # @return [Array] databases
72
+ def databases
73
+ m = @api.list_databases
74
+ m.map {|db_name,(count, created_at, updated_at, org, permission)|
75
+ Database.new(self, db_name, nil, count, created_at, updated_at, org, permission)
76
+ }
77
+ end
78
+
79
+ # @param [String] db_name
80
+ # @return [Database]
81
+ def database(db_name)
82
+ m = @api.list_databases
83
+ m.each {|name,(count, created_at, updated_at, org, permission)|
84
+ if name == db_name
85
+ return Database.new(self, name, nil, count, created_at, updated_at, org, permission)
86
+ end
87
+ }
88
+ raise NotFoundError, "Database '#{db_name}' does not exist"
89
+ end
90
+
91
+ # @return [true]
92
+ def create_log_table(db_name, table_name)
93
+ @api.create_log_table(db_name, table_name)
94
+ end
95
+
96
+ # Swap table names
97
+ #
98
+ # @param [String] db_name
99
+ # @param [String] table_name1
100
+ # @param [String] table_name2
101
+ # @return [true]
102
+ def swap_table(db_name, table_name1, table_name2)
103
+ @api.swap_table(db_name, table_name1, table_name2)
104
+ end
105
+
106
+ # @param [String] db_name
107
+ # @param [String] table_name
108
+ # @param [String] schema
109
+ # @return [true]
110
+ def update_schema(db_name, table_name, schema)
111
+ @api.update_schema(db_name, table_name, schema.to_json)
112
+ end
113
+
114
+ # @param [String] db_name
115
+ # @param [String] table_name
116
+ # @param [Fixnum] expire_days
117
+ # @return [true]
118
+ def update_expire(db_name, table_name, expire_days)
119
+ @api.update_expire(db_name, table_name, expire_days)
120
+ end
121
+
122
+ # @param [String] db_name
123
+ # @param [String] table_name
124
+ # @return [Symbol]
125
+ def delete_table(db_name, table_name)
126
+ @api.delete_table(db_name, table_name)
127
+ end
128
+
129
+ # @param [String] db_name
130
+ # @return [Array] Tables
131
+ def tables(db_name)
132
+ m = @api.list_tables(db_name)
133
+ m.map {|table_name, (type, schema, count, created_at, updated_at, estimated_storage_size, last_import, last_log_timestamp, expire_days)|
134
+ schema = Schema.new.from_json(schema)
135
+ Table.new(self, db_name, table_name, type, schema, count, created_at, updated_at,
136
+ estimated_storage_size, last_import, last_log_timestamp, expire_days)
137
+ }
138
+ end
139
+
140
+ # @param [String] db_name
141
+ # @param [String] table_name
142
+ # @return [Table]
143
+ def table(db_name, table_name)
144
+ tables(db_name).each {|t|
145
+ if t.name == table_name
146
+ return t
147
+ end
148
+ }
149
+ raise NotFoundError, "Table '#{db_name}.#{table_name}' does not exist"
150
+ end
151
+
152
+ # @param [String] db_name
153
+ # @param [String] table_name
154
+ # @param [Fixnum] count
155
+ # @param [Proc] block
156
+ # @return [Array, nil]
157
+ def tail(db_name, table_name, count, to = nil, from = nil, &block)
158
+ @api.tail(db_name, table_name, count, to, from, &block)
159
+ end
160
+
161
+ # @param [String] db_name
162
+ # @param [String] q
163
+ # @param [String] result_url
164
+ # @param [Fixnum] priority
165
+ # @param [Fixnum] retry_limit
166
+ # @param [Hash] opts
167
+ # @return [Job]
168
+ def query(db_name, q, result_url=nil, priority=nil, retry_limit=nil, opts={})
169
+ # for compatibility, assume type is hive unless specifically specified
170
+ type = opts[:type] || opts['type'] || :hive
171
+ raise ArgumentError, "The specified query type is not supported: #{type}" unless [:hive, :pig, :impala, :presto].include?(type)
172
+ job_id = @api.query(q, type, db_name, result_url, priority, retry_limit, opts)
173
+ Job.new(self, job_id, type, q)
174
+ end
175
+
176
+ # @param [Fixnum] from
177
+ # @param [Fixnum] to
178
+ # @param [String] status
179
+ # @param [Hash] conditions
180
+ # @return [Job]
181
+ def jobs(from=nil, to=nil, status=nil, conditions=nil)
182
+ results = @api.list_jobs(from, to, status, conditions)
183
+ results.map {|job_id, type, status, query, start_at, end_at, cpu_time,
184
+ result_size, result_url, priority, retry_limit, org, db,
185
+ duration, num_records|
186
+ Job.new(self, job_id, type, query, status, nil, nil, start_at, end_at, cpu_time,
187
+ result_size, nil, result_url, nil, priority, retry_limit, org, db,
188
+ duration, num_records)
189
+ }
190
+ end
191
+
192
+ # @param [String] job_id
193
+ # @return [Job]
194
+ def job(job_id)
195
+ job_id = job_id.to_s
196
+ type, query, status, url, debug, start_at, end_at, cpu_time,
197
+ result_size, result_url, hive_result_schema, priority, retry_limit, org, db, duration, num_records = @api.show_job(job_id)
198
+ Job.new(self, job_id, type, query, status, url, debug, start_at, end_at, cpu_time,
199
+ result_size, nil, result_url, hive_result_schema, priority, retry_limit, org, db, duration, num_records)
200
+ end
201
+
202
+ # @param [String] job_id
203
+ # @return [String] HTTP status code
204
+ def job_status(job_id)
205
+ return @api.job_status(job_id)
206
+ end
207
+
208
+ # @param [String] job_id
209
+ # @return [Object]
210
+ def job_result(job_id)
211
+ @api.job_result(job_id)
212
+ end
213
+
214
+ # @param [String] job_id
215
+ # @param [String] format
216
+ # @param [IO] io
217
+ # @param [Proc] block
218
+ # @return [String]
219
+ def job_result_format(job_id, format, io=nil, &block)
220
+ @api.job_result_format(job_id, format, io, &block)
221
+ end
222
+
223
+ def job_result_raw(job_id, format, io=nil, &block)
224
+ @api.job_result_raw(job_id, format, io, &block)
225
+ end
226
+
227
+ # @param [String] job_id
228
+ # @param [Proc] block
229
+ # @return [nil]
230
+ def job_result_each(job_id, &block)
231
+ @api.job_result_each(job_id, &block)
232
+ end
233
+
234
+ # @param [String] job_id
235
+ # @param [Proc] block
236
+ # @return [nil]
237
+ def job_result_each_with_compr_size(job_id, &block)
238
+ @api.job_result_each_with_compr_size(job_id, &block)
239
+ end
240
+
241
+ # @param [String] job_id
242
+ # @return [String] former_status
243
+ def kill(job_id)
244
+ @api.kill(job_id)
245
+ end
246
+
247
+ # @param [String] db_name
248
+ # @param [String] table_name
249
+ # @param [String] storage_type
250
+ # @param [Hash] opts
251
+ # @return [Job]
252
+ def export(db_name, table_name, storage_type, opts={})
253
+ job_id = @api.export(db_name, table_name, storage_type, opts)
254
+ Job.new(self, job_id, :export, nil)
255
+ end
256
+
257
+ # @param [String] target_job_id
258
+ # @param [Hash] opts
259
+ # @return [Job]
260
+ def result_export(target_job_id, opts={})
261
+ job_id = @api.result_export(target_job_id, opts)
262
+ Job.new(self, job_id, :result_export, nil)
263
+ end
264
+
265
+ # @param [String] db_name
266
+ # @param [String] table_name
267
+ # @param [Fixnum] to
268
+ # @param [Fixnum] from
269
+ # @param [Hash] opts
270
+ # @return [Job]
271
+ def partial_delete(db_name, table_name, to, from, opts={})
272
+ job_id = @api.partial_delete(db_name, table_name, to, from, opts)
273
+ Job.new(self, job_id, :partialdelete, nil)
274
+ end
275
+
276
+ # @param [String] name
277
+ # @param [String] database
278
+ # @param [String] table
279
+ # @param [Hash] opts
280
+ # @return [nil]
281
+ def create_bulk_import(name, database, table, opts={})
282
+ @api.create_bulk_import(name, database, table, opts)
283
+ end
284
+
285
+ # @param [String] name
286
+ # @return [nil]
287
+ def delete_bulk_import(name)
288
+ @api.delete_bulk_import(name)
289
+ end
290
+
291
+ # @param [String] name
292
+ # @return [nil]
293
+ def freeze_bulk_import(name)
294
+ @api.freeze_bulk_import(name)
295
+ end
296
+
297
+ # @param [String] name
298
+ # @return [nil]
299
+ def unfreeze_bulk_import(name)
300
+ @api.unfreeze_bulk_import(name)
301
+ end
302
+
303
+ # @param [String] name
304
+ # @param [Hash] opts options for API
305
+ # @return [Job]
306
+ def perform_bulk_import(name, opts={})
307
+ job_id = @api.perform_bulk_import(name, opts)
308
+ Job.new(self, job_id, :bulk_import, nil)
309
+ end
310
+
311
+ # @param [String] name
312
+ # @return [nil]
313
+ def commit_bulk_import(name)
314
+ @api.commit_bulk_import(name)
315
+ end
316
+
317
+ # @param [String] name
318
+ # @param [Proc] block
319
+ # @return [Hash]
320
+ def bulk_import_error_records(name, &block)
321
+ @api.bulk_import_error_records(name, &block)
322
+ end
323
+
324
+ # @param [String] name
325
+ # @return [BulkImport]
326
+ def bulk_import(name)
327
+ data = @api.show_bulk_import(name)
328
+ BulkImport.new(self, data)
329
+ end
330
+
331
+ # @return [Array<BulkImport>]
332
+ def bulk_imports
333
+ @api.list_bulk_imports.map {|data|
334
+ BulkImport.new(self, data)
335
+ }
336
+ end
337
+
338
+ # @param [String] name
339
+ # @param [String] part_name
340
+ # @param [String, StringIO] stream
341
+ # @param [Fixnum] size
342
+ # @return [nil]
343
+ def bulk_import_upload_part(name, part_name, stream, size)
344
+ @api.bulk_import_upload_part(name, part_name, stream, size)
345
+ end
346
+
347
+ # @param [String] name
348
+ # @param [String] part_name
349
+ # @return [nil]
350
+ def bulk_import_delete_part(name, part_name)
351
+ @api.bulk_import_delete_part(name, part_name)
352
+ end
353
+
354
+ # @param [String] name
355
+ # @return [Array]
356
+ def list_bulk_import_parts(name)
357
+ @api.list_bulk_import_parts(name)
358
+ end
359
+
360
+ # @param [String] name
361
+ # @param [Hash] opts
362
+ # @return [Time]
363
+ def create_schedule(name, opts)
364
+ raise ArgumentError, "'cron' option is required" unless opts[:cron] || opts['cron']
365
+ raise ArgumentError, "'query' option is required" unless opts[:query] || opts['query']
366
+ start = @api.create_schedule(name, opts)
367
+ return start && Time.parse(start)
368
+ end
369
+
370
+ # @param [String] name
371
+ # @return [Array]
372
+ def delete_schedule(name)
373
+ @api.delete_schedule(name)
374
+ end
375
+
376
+ # @return [Array<Schedule>]
377
+ def schedules
378
+ result = @api.list_schedules
379
+ result.map {|name,cron,query,database,result_url,timezone,delay,next_time,priority,retry_limit,org_name|
380
+ Schedule.new(self, name, cron, query, database, result_url, timezone, delay, next_time, priority, retry_limit, org_name)
381
+ }
382
+ end
383
+
384
+ # @param [String] name
385
+ # @param [Hash] params
386
+ # @return [nil]
387
+ def update_schedule(name, params)
388
+ @api.update_schedule(name, params)
389
+ nil
390
+ end
391
+
392
+ # @param [String] name
393
+ # @param [Fixnum] from
394
+ # @param [Fixnum] to
395
+ # @return [Array<ScheduledJob>]
396
+ def history(name, from=nil, to=nil)
397
+ result = @api.history(name, from, to)
398
+ result.map {|scheduled_at,job_id,type,status,query,start_at,end_at,result_url,priority,database|
399
+ job_param = [job_id, type, query, status,
400
+ nil, nil, # url, debug
401
+ start_at, end_at,
402
+ nil, # cpu_time
403
+ nil, nil, # result_size, result
404
+ result_url,
405
+ nil, # hive_result_schema
406
+ priority,
407
+ nil, # retry_limit
408
+ nil, # TODO org_name
409
+ database]
410
+ ScheduledJob.new(self, scheduled_at, *job_param)
411
+ }
412
+ end
413
+
414
+ # @param [String] name
415
+ # @param [Fixnum] time UNIX timestamp
416
+ # @param [Fixnum] num
417
+ # @return [Array<ScheduledJob>]
418
+ def run_schedule(name, time, num)
419
+ results = @api.run_schedule(name, time, num)
420
+ results.map {|job_id,type,scheduled_at|
421
+ ScheduledJob.new(self, scheduled_at, job_id, type, nil)
422
+ }
423
+ end
424
+
425
+ # @param [String] db_name
426
+ # @param [String] table_name
427
+ # @param [String] format
428
+ # @param [String, StringIO] stream
429
+ # @param [Fixnum] size
430
+ # @param [String] unique_id
431
+ # @return [Float]
432
+ def import(db_name, table_name, format, stream, size, unique_id=nil)
433
+ @api.import(db_name, table_name, format, stream, size, unique_id)
434
+ end
435
+
436
+ # @return [Array<Result>]
437
+ def results
438
+ results = @api.list_result
439
+ rs = results.map {|name,url,organizations|
440
+ Result.new(self, name, url, organizations)
441
+ }
442
+ return rs
443
+ end
444
+
445
+ # @param [String] name
446
+ # @param [String] url
447
+ # @param [Hash] opts
448
+ # @return [true]
449
+ def create_result(name, url, opts={})
450
+ @api.create_result(name, url, opts)
451
+ end
452
+
453
+ # @param [String] name
454
+ # @return [true]
455
+ def delete_result(name)
456
+ @api.delete_result(name)
457
+ end
458
+
459
+ # @return [Array<User>]
460
+ def users
461
+ list = @api.list_users
462
+ list.map {|name,org,roles,email|
463
+ User.new(self, name, org, roles, email)
464
+ }
465
+ end
466
+
467
+ # @param [String] name
468
+ # @param [String] org
469
+ # @param [String] email
470
+ # @param [String] password
471
+ # @return [true]
472
+ def add_user(name, org, email, password)
473
+ @api.add_user(name, org, email, password)
474
+ end
475
+
476
+ # @param [String] user
477
+ # @return [true]
478
+ def remove_user(user)
479
+ @api.remove_user(user)
480
+ end
481
+
482
+ # @param [String] user
483
+ # @param [String] email
484
+ # @return [true]
485
+ def change_email(user, email)
486
+ @api.change_email(user, email)
487
+ end
488
+
489
+ # @param [String] user
490
+ # @return [Array<String>]
491
+ def list_apikeys(user)
492
+ @api.list_apikeys(user)
493
+ end
494
+
495
+ # @param [String] user
496
+ # @return [true]
497
+ def add_apikey(user)
498
+ @api.add_apikey(user)
499
+ end
500
+
501
+ # @param [String] user
502
+ # @param [String] apikey
503
+ # @return [true]
504
+ def remove_apikey(user, apikey)
505
+ @api.remove_apikey(user, apikey)
506
+ end
507
+
508
+ # @param [String] user
509
+ # @param [String] password
510
+ # @return [true]
511
+ def change_password(user, password)
512
+ @api.change_password(user, password)
513
+ end
514
+
515
+ # @param [String] old_password
516
+ # @param [String] password
517
+ # @return [true]
518
+ def change_my_password(old_password, password)
519
+ @api.change_my_password(old_password, password)
520
+ end
521
+
522
+ # @return [Array<AccessControl>]
523
+ def access_controls
524
+ list = @api.list_access_controls
525
+ list.map {|subject,action,scope,grant_option|
526
+ AccessControl.new(self, subject, action, scope, grant_option)
527
+ }
528
+ end
529
+
530
+ # @param [String] subject
531
+ # @param [String] action
532
+ # @param [String] scope
533
+ # @param [Array] grant_option
534
+ # @return [true]
535
+ def grant_access_control(subject, action, scope, grant_option)
536
+ @api.grant_access_control(subject, action, scope, grant_option)
537
+ end
538
+
539
+ # @param [String] subject
540
+ # @param [String] action
541
+ # @param [String] scope
542
+ # @return [true]
543
+ def revoke_access_control(subject, action, scope)
544
+ @api.revoke_access_control(subject, action, scope)
545
+ end
546
+
547
+ # @param [String] user
548
+ # @param [String] action
549
+ # @param [String] scope
550
+ # @return [Array]
551
+ def test_access_control(user, action, scope)
552
+ @api.test_access_control(user, action, scope)
553
+ end
554
+
555
+ # => BulkLoad::Job
556
+ def bulk_load_guess(job)
557
+ @api.bulk_load_guess(job)
558
+ end
559
+
560
+ # => BulkLoad::Job
561
+ def bulk_load_preview(job)
562
+ @api.bulk_load_preview(job)
563
+ end
564
+
565
+ # => String
566
+ def bulk_load_issue(database, table, job)
567
+ @api.bulk_load_issue(database, table, job)
568
+ end
569
+
570
+ # nil -> [BulkLoad]
571
+ def bulk_load_list
572
+ @api.bulk_load_list
573
+ end
574
+
575
+ # name: String, database: String, table: String, job: BulkLoad -> BulkLoad
576
+ def bulk_load_create(name, database, table, job, opts = {})
577
+ @api.bulk_load_create(name, database, table, job, opts)
578
+ end
579
+
580
+ # name: String -> BulkLoad
581
+ def bulk_load_show(name)
582
+ @api.bulk_load_show(name)
583
+ end
584
+
585
+ # name: String, settings: Hash -> BulkLoad
586
+ def bulk_load_update(name, settings)
587
+ @api.bulk_load_update(name, settings)
588
+ end
589
+
590
+ # name: String -> BulkLoad
591
+ def bulk_load_delete(name)
592
+ @api.bulk_load_delete(name)
593
+ end
594
+
595
+ # name: String -> [Job]
596
+ def bulk_load_history(name)
597
+ @api.bulk_load_history(name)
598
+ end
599
+
600
+ def bulk_load_run(name, scheduled_time = nil)
601
+ @api.bulk_load_run(name, scheduled_time)
602
+ end
603
+
604
+ end
605
+
606
+ end # module TreasureData