Class: TreasureData::Command::Runner
- Inherits:
-
Object
- Object
- TreasureData::Command::Runner
- Defined in:
- lib/td/command/runner.rb
Instance Attribute Summary collapse
-
#apikey ⇒ Object
Returns the value of attribute apikey.
-
#config_path ⇒ Object
Returns the value of attribute config_path.
-
#endpoint ⇒ Object
Returns the value of attribute endpoint.
-
#import_endpoint ⇒ Object
Returns the value of attribute import_endpoint.
-
#insecure ⇒ Object
Returns the value of attribute insecure.
-
#prog_name ⇒ Object
Returns the value of attribute prog_name.
Instance Method Summary collapse
-
#initialize ⇒ Runner
constructor
A new instance of Runner.
- #run(argv = ARGV) ⇒ Object
Constructor Details
#initialize ⇒ Runner
Returns a new instance of Runner.
5 6 7 8 9 10 11 12 |
# File 'lib/td/command/runner.rb', line 5 def initialize @config_path = nil @apikey = nil @endpoint = nil @import_endpoint = nil @prog_name = nil @insecure = false end |
Instance Attribute Details
#apikey ⇒ Object
Returns the value of attribute apikey.
14 15 16 |
# File 'lib/td/command/runner.rb', line 14 def apikey @apikey end |
#config_path ⇒ Object
Returns the value of attribute config_path.
14 15 16 |
# File 'lib/td/command/runner.rb', line 14 def config_path @config_path end |
#endpoint ⇒ Object
Returns the value of attribute endpoint.
14 15 16 |
# File 'lib/td/command/runner.rb', line 14 def endpoint @endpoint end |
#import_endpoint ⇒ Object
Returns the value of attribute import_endpoint.
14 15 16 |
# File 'lib/td/command/runner.rb', line 14 def import_endpoint @import_endpoint end |
#insecure ⇒ Object
Returns the value of attribute insecure.
14 15 16 |
# File 'lib/td/command/runner.rb', line 14 def insecure @insecure end |
#prog_name ⇒ Object
Returns the value of attribute prog_name.
14 15 16 |
# File 'lib/td/command/runner.rb', line 14 def prog_name @prog_name end |
Instance Method Details
#run(argv = ARGV) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
# File 'lib/td/command/runner.rb', line 16 def run(argv=ARGV) require 'td/version' require 'td/compat_core' require 'optparse' $prog = @prog_name || File.basename($0) op = OptionParser.new op.version = TOOLBELT_VERSION op. = <<EOF usage: #{$prog} [options] COMMAND [args] options: EOF op.summary_indent = " " (class << self;self;end).module_eval do define_method(:usage) do |errmsg| require 'td/command/list' $stdout.puts op.to_s $stdout.puts "" $stdout.puts <<EOF Basic commands: db # create/delete/list databases table # create/delete/list/import/export/tail tables query # issue a query job # show/kill/list jobs import # manage bulk import sessions (Java based fast processing) bulk_import # manage bulk import sessions (Old Ruby-based implementation) result # create/delete/list result URLs sched # create/delete/list schedules that run a query periodically schema # create/delete/modify schemas of tables connector # manage connectors users # show/create/list users workflow # manage workflows user # manage users Additional commands: status # show scheds, jobs, tables and results apikey # show/set API key server # show status of the Treasure Data server sample # create a sample log file help # show help messages Type 'td help COMMAND' for more information on a specific command. EOF if errmsg $stdout.puts "Error: #{errmsg}" return 1 else return 0 end end end # there local vars are loaded with the values of the options below # here they are preloaded with the defaults config_path = @config_path apikey = @apikey endpoint = @endpoint import_endpoint = @import_endpoint || @endpoint insecure = nil $verbose = false #$debug = false retry_post_requests = false op.on('-c', '--config PATH', "path to the configuration file (default: ~/.td/td.conf)") {|s| config_path = s } op.on('-k', '--apikey KEY', "use this API key instead of reading the config file") {|s| apikey = s } op.on('-e', '--endpoint API_SERVER', "specify the URL for API server to use (default: https://api.treasuredata.com)." , " The URL must contain a scheme (http:// or https:// prefix) to be valid.", " Valid IPv4 addresses are accepted as well in place of the host name.") {|e| require 'td/command/common' Command.validate_api_endpoint(e) endpoint = e } op.on('--import-endpoint API_IMPORT_SERVER', "specify the URL for API Import server to use (default: https://api-import.treasuredata.com).") { |e| require 'td/command/common' Command.validate_api_endpoint(e) import_endpoint = e } op.on('--insecure', "Insecure access: disable SSL (enabled by default)") {|b| insecure = true } op.on('-v', '--verbose', "verbose mode", TrueClass) {|b| $verbose = b } #op.on('-d', '--debug', "debug mode", TrueClass) {|b| # $debug = b #} op.on('-h', '--help', "show help") { return usage nil } op.on('-r', '--retry-post-requests', "retry on failed post requests.", "Warning: can cause resource duplication, such as duplicated job submissions.", TrueClass) {|b| retry_post_requests = b } op.on('--version', "show version") { $stdout.puts op.version return 0 } begin op.order!(argv) return usage nil if argv.empty? cmd = argv.shift # NOTE: these information are loaded from by each command through # 'TreasureData::Command::get_client' from 'lib/td/command/common.rb' require 'td/config' if config_path Config.path = config_path end if apikey Config.apikey = apikey Config.cl_apikey = true end if endpoint Config.endpoint = endpoint Config.cl_endpoint = true end if import_endpoint Config.import_endpoint = import_endpoint Config.cl_import_endpoint = true end if insecure Config.secure = false end if retry_post_requests Config.retry_post_requests = true end rescue return usage $!.to_s end require 'td/command/list' if defined?(Encoding) #Encoding.default_internal = 'UTF-8' if Encoding.respond_to?(:default_internal) Encoding.default_external = 'UTF-8' if Encoding.respond_to?(:default_external) end method, cmd_req_connectivity = Command::List.get_method(cmd) unless method $stderr.puts "'#{cmd}' is not a td command. Run '#{$prog}' to show the list." Command::List.show_guess(cmd) return 1 end status = nil begin # test the connectivity with the API endpoint if cmd_req_connectivity && Config.cl_endpoint Command.test_api_endpoint(Config.endpoint) end status = method.call(argv) rescue ConfigError $stderr.puts "TreasureData account is not configured yet." $stderr.puts "Run '#{$prog} account' first." rescue => e # known exceptions are rendered as simple error messages unless the # TD_TOOLBELT_DEBUG variable is set or the -v / --verbose option is used. # List of known exceptions: # => ParameterConfigurationError # => BulkImportExecutionError # => UpUpdateError # => ImportError require 'td/client/api' # => APIError # => ForbiddenError # => NotFoundError # => AuthError if ![ParameterConfigurationError, BulkImportExecutionError, UpdateError, ImportError, APIError, ForbiddenError, NotFoundError, AuthError, AlreadyExistsError, WorkflowError].include?(e.class) || !ENV['TD_TOOLBELT_DEBUG'].nil? || $verbose show_backtrace "Error #{$!.class}: backtrace:", $!.backtrace end if $!.respond_to?(:api_backtrace) && $!.api_backtrace show_backtrace "Error backtrace from server:", $!.api_backtrace.split("\n") end $stdout.print "Error: " if [ForbiddenError, NotFoundError, AuthError].include?(e.class) $stdout.print "#{e.class} - " end $stdout.puts $!.to_s require 'socket' if e.is_a?(::SocketError) $stderr.puts <<EOS Network dependent error occurred. If you want to use td command through a proxy, please set HTTP_PROXY environment variable (e.g. export HTTP_PROXY="host:port") EOS end return 1 end return (status.is_a? Integer) ? status : 0 end |