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 +16 -0
- data/lib/td/command/bulk_import.rb +205 -0
- data/lib/td/command/list.rb +15 -0
- data/lib/td/command/table.rb +2 -2
- data/lib/td/version.rb +1 -1
- metadata +14 -13
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
|
+
|
data/lib/td/command/list.rb
CHANGED
@@ -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'
|
data/lib/td/command/table.rb
CHANGED
@@ -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
|
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
|
107
|
+
$stderr.puts "Use '#{$prog} table:create <db> <table>' to create a table."
|
108
108
|
end
|
109
109
|
end
|
110
110
|
end
|
data/lib/td/version.rb
CHANGED
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.
|
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-
|
12
|
+
date: 2012-05-10 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: msgpack
|
16
|
-
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: *
|
24
|
+
version_requirements: *70362122344260
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: json
|
27
|
-
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: *
|
35
|
+
version_requirements: *70362122343780
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: hirb
|
38
|
-
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: *
|
46
|
+
version_requirements: *70362122343300
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: td-client
|
49
|
-
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.
|
54
|
+
version: 0.8.16
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70362122342820
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: td-logger
|
60
|
-
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: *
|
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
|