td 0.10.78 → 0.10.79
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 +9 -0
- data/lib/td/command/list.rb +4 -2
- data/lib/td/command/runner.rb +16 -1
- data/lib/td/command/table.rb +18 -10
- data/lib/td/command/user.rb +33 -19
- data/lib/td/file_reader.rb +1 -1
- data/lib/td/version.rb +1 -1
- metadata +4 -4
data/ChangeLog
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
== 2013-06-13 version 0.10.79
|
2
|
+
|
3
|
+
* -h option shows --version option
|
4
|
+
* Show more messages when network related error occurred
|
5
|
+
* Fix bulk import encoding issue when -e option is specified
|
6
|
+
* Add user:apikey:add subcommand
|
7
|
+
* Add user:apikey:remove subcommand
|
8
|
+
|
9
|
+
|
1
10
|
== 2013-05-27 version 0.10.78
|
2
11
|
|
3
12
|
* Add -q(--query) option to sched:create command
|
data/lib/td/command/list.rb
CHANGED
@@ -127,7 +127,7 @@ module List
|
|
127
127
|
LIST = []
|
128
128
|
COMMAND = {}
|
129
129
|
GUESS = {}
|
130
|
-
HELP_EXCLUDE = [/^help/, /^account/, /^aggr/]
|
130
|
+
HELP_EXCLUDE = [/^help/, /^account/, /^aggr/, /^update/, /^user/, /^ip_limit/, /^role/, /^org/, /^acl/]
|
131
131
|
USAGE_EXCLUDE = [/bulk_import:upload_part\z/, /bulk_import:delete_part\z/]
|
132
132
|
|
133
133
|
def self.add_list(name, args, description, *examples)
|
@@ -284,7 +284,9 @@ module List
|
|
284
284
|
add_list 'user:show', %w[name], 'Show an user'
|
285
285
|
add_list 'user:create', %w[name], 'Create an user'
|
286
286
|
add_list 'user:delete', %w[name], 'Delete an user'
|
287
|
-
add_list 'user:apikey:list', %w[name], 'Show API keys'
|
287
|
+
add_list 'user:apikey:list', %w[name], 'Show API keys of an user'
|
288
|
+
add_list 'user:apikey:add', %w[name], 'Add an API key to an user'
|
289
|
+
add_list 'user:apikey:remove', %w[name apikey], 'Remove an API key from an user'
|
288
290
|
add_list 'user:password:change', %w[name], 'Change password'
|
289
291
|
|
290
292
|
add_list 'role:list', %w[], 'Show list of roles'
|
data/lib/td/command/runner.rb
CHANGED
@@ -96,6 +96,11 @@ EOF
|
|
96
96
|
usage nil
|
97
97
|
}
|
98
98
|
|
99
|
+
op.on('--version', "show version") {
|
100
|
+
puts op.version
|
101
|
+
exit
|
102
|
+
}
|
103
|
+
|
99
104
|
begin
|
100
105
|
op.order!(argv)
|
101
106
|
usage nil if argv.empty?
|
@@ -133,13 +138,23 @@ EOF
|
|
133
138
|
rescue TreasureData::ConfigError
|
134
139
|
$stderr.puts "TreasureData account is not configured yet."
|
135
140
|
$stderr.puts "Run '#{$prog} account' first."
|
136
|
-
rescue
|
141
|
+
rescue => e
|
137
142
|
$stderr.puts "error #{$!.class}: backtrace:"
|
138
143
|
$!.backtrace.each {|b|
|
139
144
|
$stderr.puts " #{b}"
|
140
145
|
}
|
141
146
|
puts ""
|
142
147
|
puts $!
|
148
|
+
|
149
|
+
require 'socket'
|
150
|
+
if e.is_a?(::SocketError)
|
151
|
+
$stderr.puts <<EOS
|
152
|
+
|
153
|
+
Network dependent error occurred.
|
154
|
+
If you want to use td command through a proxy,
|
155
|
+
please set HTTP_PROXY environment variable (e.g. export HTTP_PROXY="host:port")
|
156
|
+
EOS
|
157
|
+
end
|
143
158
|
end
|
144
159
|
end
|
145
160
|
end
|
data/lib/td/command/table.rb
CHANGED
@@ -110,17 +110,25 @@ module Command
|
|
110
110
|
|
111
111
|
rows = []
|
112
112
|
::Parallel.each(databases, :in_threads => num_threads) {|db|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
113
|
+
begin
|
114
|
+
db.tables.each {|table|
|
115
|
+
pschema = table.schema.fields.map {|f|
|
116
|
+
"#{f.name}:#{f.type}"
|
117
|
+
}.join(', ')
|
118
|
+
rows << {
|
119
|
+
:Database => db.name, :Table => table.name, :Type => table.type.to_s, :Count => TreasureData::Helpers.format_with_delimiter(table.count),
|
120
|
+
:Size => show_size_in_bytes ? TreasureData::Helpers.format_with_delimiter(table.estimated_storage_size) : table.estimated_storage_size_string,
|
121
|
+
'Last import' => table.last_import ? table.last_import.localtime : nil,
|
122
|
+
:Schema => pschema
|
123
|
+
}
|
122
124
|
}
|
123
|
-
|
125
|
+
rescue APIError => e
|
126
|
+
# ignores permission error because db:list shows all databases
|
127
|
+
# even if the user can't access to tables in the database
|
128
|
+
unless e.to_s =~ /not authorized/
|
129
|
+
raise e
|
130
|
+
end
|
131
|
+
end
|
124
132
|
}
|
125
133
|
rows = rows.sort_by {|map|
|
126
134
|
[map[:Database], map[:Type].size, map[:Table]]
|
data/lib/td/command/user.rb
CHANGED
@@ -133,22 +133,10 @@ module Command
|
|
133
133
|
client.create_organization(org)
|
134
134
|
end
|
135
135
|
|
136
|
-
ok = false
|
137
136
|
begin
|
138
137
|
client.add_user(name, org, email, password)
|
139
|
-
|
140
|
-
begin
|
141
|
-
client.add_apikey(name)
|
142
|
-
ok = true
|
143
|
-
|
144
|
-
ensure
|
145
|
-
if !ok
|
146
|
-
client.remove_user(name)
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
138
|
ensure
|
151
|
-
if create_org
|
139
|
+
if create_org
|
152
140
|
client.delete_organization(org)
|
153
141
|
end
|
154
142
|
end
|
@@ -175,13 +163,39 @@ module Command
|
|
175
163
|
#def user_email_change(op)
|
176
164
|
#end
|
177
165
|
|
178
|
-
|
179
|
-
|
180
|
-
#end
|
166
|
+
def user_apikey_add(op)
|
167
|
+
name = op.cmd_parse
|
181
168
|
|
182
|
-
|
183
|
-
|
184
|
-
|
169
|
+
client = get_client
|
170
|
+
|
171
|
+
begin
|
172
|
+
client.add_apikey(name)
|
173
|
+
rescue TreasureData::NotFoundError
|
174
|
+
$stderr.puts "User '#{name}' does not exist."
|
175
|
+
$stderr.puts "Use '#{$prog} users' to show users."
|
176
|
+
exit 1
|
177
|
+
end
|
178
|
+
|
179
|
+
$stderr.puts "Added an API key to user '#{name}'."
|
180
|
+
$stderr.puts "Use '#{$prog} user:apikeys #{name}' to show the API key"
|
181
|
+
end
|
182
|
+
|
183
|
+
def user_apikey_remove(op)
|
184
|
+
name, key = op.cmd_parse
|
185
|
+
|
186
|
+
client = get_client
|
187
|
+
|
188
|
+
begin
|
189
|
+
client.remove_apikey(name, key)
|
190
|
+
rescue TreasureData::NotFoundError
|
191
|
+
$stderr.puts "User '#{name}' or API key '#{key}' does not exist."
|
192
|
+
$stderr.puts "Use '#{$prog} users' to show users."
|
193
|
+
$stderr.puts "Use '#{$prog} user:apikeys '#{key}' to show API keys"
|
194
|
+
exit 1
|
195
|
+
end
|
196
|
+
|
197
|
+
$stderr.puts "Removed an an API key from user '#{name}'."
|
198
|
+
end
|
185
199
|
|
186
200
|
def user_apikey_list(op)
|
187
201
|
name = op.cmd_parse
|
data/lib/td/file_reader.rb
CHANGED
@@ -50,7 +50,7 @@ module TreasureData
|
|
50
50
|
class LineReader
|
51
51
|
def initialize(io, error, opts)
|
52
52
|
if encoding = opts[:encoding]
|
53
|
-
io.set_encoding(encoding) if io.respond_to?(:set_encoding)
|
53
|
+
io.set_encoding(encoding, 'UTF-8') if io.respond_to?(:set_encoding)
|
54
54
|
end
|
55
55
|
#@delimiter = opts[:line_delimiter_expr] || /\r?\n/
|
56
56
|
@io = io
|
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.79
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: msgpack
|
@@ -262,7 +262,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
262
262
|
version: '0'
|
263
263
|
segments:
|
264
264
|
- 0
|
265
|
-
hash:
|
265
|
+
hash: 860167470271522845
|
266
266
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
267
267
|
none: false
|
268
268
|
requirements:
|
@@ -271,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
271
|
version: '0'
|
272
272
|
segments:
|
273
273
|
- 0
|
274
|
-
hash:
|
274
|
+
hash: 860167470271522845
|
275
275
|
requirements: []
|
276
276
|
rubyforge_project:
|
277
277
|
rubygems_version: 1.8.23
|