td 0.10.23 → 0.10.24

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,4 +1,20 @@
1
1
 
2
+ == 2012-05-10 version 0.10.24
3
+
4
+ * Added bulk_import subcommands
5
+ * bulk_import:list
6
+ * bulk_import:show <name>
7
+ * bulk_import:create <name> <db> <table>
8
+ * bulk_import:upload_part <name> <id> <path.msgpack.gz>
9
+ * bulk_import:delete_part <name> <id>
10
+ * bulk_import:perform <name>
11
+ * bulk_import:error_records <name>
12
+ * bulk_import:commit <name>
13
+ * bulk_import:delete <name>
14
+ * bulk_import:freeze <name>
15
+ * bulk_import:unfreeze <name>
16
+
17
+
2
18
  == 2012-04-26 version 0.10.23
3
19
 
4
20
  * Added result:list, result:create and result:delete subcommands
@@ -0,0 +1,205 @@
1
+
2
+ module TreasureData
3
+ module Command
4
+
5
+ def bulk_import_list(op)
6
+ op.cmd_parse
7
+
8
+ client = get_client
9
+
10
+ bis = client.bulk_imports
11
+
12
+ rows = []
13
+ bis.each {|bi|
14
+ rows << {:Name=>bi.name, :Table=>"#{bi.database}.#{bi.table}", :Status=>bi.status.to_s.capitalize, :Frozen=>bi.upload_frozen? ? 'frozen' : '', :JobID=>bi.job_id, :"Valid Parts"=>bi.valid_parts, :"Error Parts"=>bi.error_parts, :"Valid Records"=>bi.valid_records, :"Error Records"=>bi.error_records}
15
+ }
16
+
17
+ puts cmd_render_table(rows, :fields => [:Name, :Table, :Status, :Frozen, :JobID, :"Valid Parts", :"Error Parts", :"Valid Records", :"Error Records"])
18
+
19
+ if rows.empty?
20
+ $stderr.puts "There are no bulk import sessions."
21
+ $stderr.puts "Use '#{$prog} bulk_import:create <name> <db> <table>' to create a session."
22
+ end
23
+ end
24
+
25
+ def bulk_import_create(op)
26
+ name, db_name, table_name = op.cmd_parse
27
+
28
+ client = get_client
29
+
30
+ table = get_table(client, db_name, table_name)
31
+
32
+ client.create_bulk_import(name, db_name, table_name)
33
+
34
+ $stderr.puts "Bulk import session '#{name}' is created."
35
+ end
36
+
37
+ def bulk_import_delete(op)
38
+ name = op.cmd_parse
39
+
40
+ client = get_client
41
+
42
+ begin
43
+ client.delete_bulk_import(name)
44
+ rescue NotFoundError
45
+ cmd_debug_error $!
46
+ $stderr.puts "Bulk import session '#{name}' does not exist."
47
+ exit 1
48
+ end
49
+
50
+ $stderr.puts "Bulk import session '#{name}' is deleted."
51
+ end
52
+
53
+ def bulk_import_show(op)
54
+ name = op.cmd_parse
55
+
56
+ client = get_client
57
+
58
+ bis = client.bulk_imports
59
+ bi = bis.find {|bi| name == bi.name }
60
+ unless bi
61
+ $stderr.puts "Bulk import session '#{name}' does not exist."
62
+ $stderr.puts "Use '#{$prog} bulk_import:create <name> <db> <table>' to create a session."
63
+ exit 1
64
+ end
65
+
66
+ $stderr.puts "Name : #{bi.name}"
67
+ $stderr.puts "Database : #{bi.database}"
68
+ $stderr.puts "Table : #{bi.table}"
69
+ $stderr.puts "Status : #{bi.status.to_s.capitalize}"
70
+ $stderr.puts "Frozen : #{bi.upload_frozen?}"
71
+ $stderr.puts "JobID : #{bi.job_id}"
72
+ $stderr.puts "Valid Records: #{bi.valid_records}"
73
+ $stderr.puts "Error Records: #{bi.error_records}"
74
+ $stderr.puts "Valid Parts : #{bi.valid_parts}"
75
+ $stderr.puts "Error Parts : #{bi.error_parts}"
76
+ $stderr.puts "Uploaded Parts :"
77
+
78
+ list = client.list_bulk_import_parts(name)
79
+ list.each {|name|
80
+ puts " #{name}"
81
+ }
82
+ end
83
+
84
+ def bulk_import_upload_part(op)
85
+ name, part_name, path = op.cmd_parse
86
+
87
+ client = get_client
88
+
89
+ File.open(path) {|is|
90
+ client.bulk_import_upload_part(name, part_name, is, is.size)
91
+ }
92
+
93
+ $stderr.puts "Part '#{part_name}' is uploaded."
94
+ end
95
+
96
+ def bulk_import_delete_part(op)
97
+ name, part_name = op.cmd_parse
98
+
99
+ client = get_client
100
+
101
+ client.bulk_import_delete_part(name, part_name)
102
+
103
+ $stderr.puts "Part '#{part_name}' is deleted."
104
+ end
105
+
106
+ def bulk_import_perform(op)
107
+ wait = false
108
+ force = false
109
+
110
+ op.on('-w', '--wait', 'wait for finishing the job', TrueClass) {|b|
111
+ wait = b
112
+ }
113
+ op.on('-f', '--force', 'force start performing', TrueClass) {|b|
114
+ force = b
115
+ }
116
+
117
+ name = op.cmd_parse
118
+
119
+ client = get_client
120
+
121
+ unless force
122
+ bis = client.bulk_imports
123
+ bi = bis.find {|bi| name == bi.name }
124
+ if bi
125
+ if bi.status == 'performing'
126
+ $stderr.puts "Bulk import session '#{name}' is already performing."
127
+ $stderr.puts "Add '-f' option to force start."
128
+ $stderr.puts "Use '#{$prog} job:kill #{bi.job_id}' to cancel the last trial."
129
+ exit 1
130
+ elsif bi.status == 'ready'
131
+ $stderr.puts "Bulk import session '#{name}' is already ready to commit."
132
+ $stderr.puts "Add '-f' option to force start."
133
+ exit 1
134
+ end
135
+ end
136
+ end
137
+
138
+ job = client.perform_bulk_import(name)
139
+
140
+ $stderr.puts "Job #{job.job_id} is queued."
141
+ $stderr.puts "Use '#{$prog} job:show #{job.job_id}' to show the status."
142
+
143
+ if wait
144
+ require 'td/command/job' # wait_job
145
+ wait_job(job)
146
+ end
147
+ end
148
+
149
+ def bulk_import_commit(op)
150
+ name = op.cmd_parse
151
+
152
+ client = get_client
153
+
154
+ job = client.commit_bulk_import(name)
155
+
156
+ $stderr.puts "Bulk import session '#{name}' started to commit."
157
+ end
158
+
159
+ def bulk_import_error_records(op)
160
+ name = op.cmd_parse
161
+
162
+ client = get_client
163
+
164
+ bis = client.bulk_imports
165
+ bi = bis.find {|bi| name == bi.name }
166
+ unless bi
167
+ $stderr.puts "Bulk import session '#{name}' does not exist."
168
+ $stderr.puts "Use '#{$prog} bulk_import:create <name> <db> <table>' to create a session."
169
+ exit 1
170
+ end
171
+
172
+ if bi.status == "uploading" || bi.status == "performing"
173
+ $stderr.puts "Bulk import session '#{name}' is not performed."
174
+ $stderr.puts "Use '#{$prog} bulk_import:perform <name>' to run."
175
+ exit 1
176
+ end
177
+
178
+ client.bulk_import_error_records(name) {|r|
179
+ puts r.to_json
180
+ }
181
+ end
182
+
183
+ def bulk_import_freeze(op)
184
+ name = op.cmd_parse
185
+
186
+ client = get_client
187
+
188
+ client.freeze_bulk_import(name)
189
+
190
+ $stderr.puts "Bulk import session '#{name}' is frozen."
191
+ end
192
+
193
+ def bulk_import_unfreeze(op)
194
+ name = op.cmd_parse
195
+
196
+ client = get_client
197
+
198
+ client.unfreeze_bulk_import(name)
199
+
200
+ $stderr.puts "Bulk import session '#{name}' is unfrozen."
201
+ end
202
+
203
+ end
204
+ end
205
+
@@ -224,6 +224,18 @@ module List
224
224
  add_list 'table:export', %w[db table], 'Dump logs in a table to the specified storage', 'table:export example_db table1 --s3-bucket mybucket -k KEY_ID -s SECRET_KEY'
225
225
  add_list 'table:tail', %w[db table], 'Get recently imported logs', 'table:tail example_db table1', 'table:tail example_db table1 -t "2011-01-02 03:04:05" -n 30'
226
226
 
227
+ add_list 'bulk_import:list', %w[], 'List bulk import sessions', 'bulk_import:list'
228
+ add_list 'bulk_import:show', %w[name], 'Show list of uploaded parts', 'bulk_import:show'
229
+ add_list 'bulk_import:create', %w[name db table], 'Create a new bulk import session to the the table', 'bulk_import:create logs_201201 example_db event_logs'
230
+ add_list 'bulk_import:upload_part', %w[name id path.msgpack.gz], 'Upload or re-upload a file into a bulk import session', 'bulk_import:upload_part logs_201201 01h data-201201-01.msgpack.gz'
231
+ add_list 'bulk_import:delete_part', %w[name id], 'Delete a uploaded file from a bulk import session', 'bulk_import:delete_part logs_201201 01h'
232
+ add_list 'bulk_import:perform', %w[name], 'Start to validate and convert uploaded files', 'bulk_import:perform logs_201201'
233
+ add_list 'bulk_import:error_records', %w[name], 'Show records which did not pass validations', 'bulk_import:error_records logs_201201'
234
+ add_list 'bulk_import:commit', %w[name], 'Start to commit a performed bulk import session', 'bulk_import:commit logs_201201'
235
+ add_list 'bulk_import:delete', %w[name], 'Delete a bulk import session', 'bulk_import:delete logs_201201'
236
+ add_list 'bulk_import:freeze', %w[name], 'Reject succeeding uploadings to a bulk import session', 'bulk_import:freeze logs_201201'
237
+ add_list 'bulk_import:unfreeze', %w[name], 'Unfreeze a frozen bulk import session', 'bulk_import:unfreeze logs_201201'
238
+
227
239
  add_list 'result:list', %w[], 'Show list of result URLs', 'result:list', 'results'
228
240
  add_list 'result:show', %w[name], 'Describe information of a result URL', 'result mydb'
229
241
  add_list 'result:create', %w[name URL], 'Create a result URL', 'result:create mydb mysql://my-server/mydb'
@@ -298,6 +310,9 @@ module List
298
310
  add_alias 'scheds', 'sched:list'
299
311
  add_alias 'schedules', 'sched:list'
300
312
 
313
+ add_alias 'bulk_import', 'bulk_import:show'
314
+ add_alias 'bulk_imports', 'bulk_import:list'
315
+
301
316
  add_alias 'job', 'job:show'
302
317
  add_alias 'jobs', 'job:list'
303
318
  add_alias 'kill', 'job:kill'
@@ -98,13 +98,13 @@ module Command
98
98
  if rows.empty?
99
99
  if db_name
100
100
  $stderr.puts "Database '#{db_name}' has no tables."
101
- $stderr.puts "Use '#{$prog} table:create <db.table>' to create a table."
101
+ $stderr.puts "Use '#{$prog} table:create <db> <table>' to create a table."
102
102
  elsif dbs.empty?
103
103
  $stderr.puts "There are no databases."
104
104
  $stderr.puts "Use '#{$prog} db:create <db>' to create a database."
105
105
  else
106
106
  $stderr.puts "There are no tables."
107
- $stderr.puts "Use '#{$prog} table:create <db.table>' to create a table."
107
+ $stderr.puts "Use '#{$prog} table:create <db> <table>' to create a table."
108
108
  end
109
109
  end
110
110
  end
@@ -1,5 +1,5 @@
1
1
  module TreasureData
2
2
 
3
- VERSION = '0.10.23'
3
+ VERSION = '0.10.24'
4
4
 
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: td
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.23
4
+ version: 0.10.24
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-27 00:00:00.000000000Z
12
+ date: 2012-05-10 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: msgpack
16
- requirement: &70287442084840 !ruby/object:Gem::Requirement
16
+ requirement: &70362122344260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.4.4
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70287442084840
24
+ version_requirements: *70362122344260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &70287442084360 !ruby/object:Gem::Requirement
27
+ requirement: &70362122343780 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.4.3
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70287442084360
35
+ version_requirements: *70362122343780
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: hirb
38
- requirement: &70287442083880 !ruby/object:Gem::Requirement
38
+ requirement: &70362122343300 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,21 +43,21 @@ dependencies:
43
43
  version: 0.4.5
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70287442083880
46
+ version_requirements: *70362122343300
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: td-client
49
- requirement: &70287442083400 !ruby/object:Gem::Requirement
49
+ requirement: &70362122342820 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 0.8.15
54
+ version: 0.8.16
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70287442083400
57
+ version_requirements: *70362122342820
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: td-logger
60
- requirement: &70287442082860 !ruby/object:Gem::Requirement
60
+ requirement: &70362122342340 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: 0.3.8
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70287442082860
68
+ version_requirements: *70362122342340
69
69
  description:
70
70
  email:
71
71
  executables:
@@ -81,6 +81,7 @@ files:
81
81
  - lib/td/command/account.rb
82
82
  - lib/td/command/aggr.rb
83
83
  - lib/td/command/apikey.rb
84
+ - lib/td/command/bulk_import.rb
84
85
  - lib/td/command/common.rb
85
86
  - lib/td/command/db.rb
86
87
  - lib/td/command/export.rb