Class: TreasureData::API
- Inherits:
-
Object
- Object
- TreasureData::API
- Includes:
- AccessControl, Account, BulkImport, BulkLoad, Database, Export, Import, Job, PartialDelete, Result, Schedule, ServerStatus, Table, User
- Defined in:
- lib/td/client/api.rb,
lib/td/client/api/job.rb,
lib/td/client/api/user.rb,
lib/td/client/api/table.rb,
lib/td/client/api/export.rb,
lib/td/client/api/import.rb,
lib/td/client/api/result.rb,
lib/td/client/api/account.rb,
lib/td/client/api/database.rb,
lib/td/client/api/schedule.rb,
lib/td/client/api/bulk_load.rb,
lib/td/client/api/bulk_import.rb,
lib/td/client/api/server_status.rb,
lib/td/client/api/access_control.rb,
lib/td/client/api/partial_delete.rb
Defined Under Namespace
Modules: AccessControl, Account, BulkImport, BulkLoad, CountReadBodyTotalSize, Database, DeflateReadBodyMixin, DirectReadBodyMixin, Export, Import, Job, PartialDelete, Result, Schedule, ServerStatus, Table, User Classes: IncompleteError
Constant Summary collapse
- DEFAULT_ENDPOINT =
'api.treasure-data.com'
- DEFAULT_IMPORT_ENDPOINT =
'api-import.treasure-data.com'
- NEW_DEFAULT_ENDPOINT =
'api.treasuredata.com'
- NEW_DEFAULT_IMPORT_ENDPOINT =
'api-import.treasuredata.com'
Constants included from BulkLoad
BulkLoad::JOB, BulkLoad::LIST, BulkLoad::SESSION
Instance Attribute Summary collapse
-
#apikey ⇒ Object
readonly
Returns the value of attribute apikey.
Class Method Summary collapse
-
.create_empty_gz_data ⇒ String
for fluent-plugin-td / td command to check table existence with import onlt user.
- .normalize_database_name(name) ⇒ Object
- .normalize_table_name(name) ⇒ Object
-
.normalize_type_name(name) ⇒ Object
TODO support array types.
- .normalized_msgpack(record, out = nil) ⇒ Object
- .validate_column_name(name) ⇒ Object
- .validate_database_name(name) ⇒ Object
- .validate_name(target, min_len, max_len, name) ⇒ Object
- .validate_result_set_name(name) ⇒ Object
- .validate_table_name(name) ⇒ Object
Instance Method Summary collapse
-
#initialize(apikey, opts = {}) ⇒ API
constructor
A new instance of API.
- #ssl_ca_file=(ssl_ca_file) ⇒ Object
Methods included from User
#add_apikey, #add_user, #authenticate, #change_email, #change_my_password, #change_password, #list_apikeys, #list_users, #remove_apikey, #remove_user
Methods included from Table
#create_log_table, #delete_table, #list_tables, #swap_table, #tail, #update_expire, #update_schema
Methods included from ServerStatus
Methods included from Schedule
#create_schedule, #delete_schedule, #history, #list_schedules, #run_schedule, #update_schedule
Methods included from Result
#create_result, #delete_result, #list_result
Methods included from PartialDelete
Methods included from Job
#hive_query, #job_result, #job_result_each, #job_result_each_with_compr_size, #job_result_format, #job_result_raw, #job_status, #kill, #list_jobs, #pig_query, #query, #show_job
Methods included from Import
Methods included from Export
Methods included from Database
#create_database, #delete_database, #list_databases
Methods included from BulkLoad
#bulk_load_create, #bulk_load_delete, #bulk_load_guess, #bulk_load_history, #bulk_load_issue, #bulk_load_list, #bulk_load_preview, #bulk_load_run, #bulk_load_show, #bulk_load_update
Methods included from BulkImport
#bulk_import_delete_part, #bulk_import_error_records, #bulk_import_upload_part, #commit_bulk_import, #create_bulk_import, #delete_bulk_import, #freeze_bulk_import, #list_bulk_import_parts, #list_bulk_imports, #perform_bulk_import, #show_bulk_import, #unfreeze_bulk_import
Methods included from Account
#account_core_utilization, #show_account
Methods included from AccessControl
#grant_access_control, #list_access_controls, #revoke_access_control, #test_access_control
Constructor Details
#initialize(apikey, opts = {}) ⇒ API
Returns a new instance of API.
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 |
# File 'lib/td/client/api.rb', line 49 def initialize(apikey, opts={}) require 'json' require 'time' require 'uri' require 'net/http' require 'net/https' require 'time' #require 'faraday' # faraday doesn't support streaming upload with httpclient yet so now disabled require 'httpclient' require 'zlib' require 'stringio' require 'cgi' require 'msgpack' @apikey = apikey @user_agent = "TD-Client-Ruby: #{TreasureData::Client::VERSION}" @user_agent = "#{opts[:user_agent]}; " + @user_agent if opts.has_key?(:user_agent) endpoint = opts[:endpoint] || ENV['TD_API_SERVER'] || DEFAULT_ENDPOINT uri = URI.parse(endpoint) @connect_timeout = opts[:connect_timeout] || 60 @read_timeout = opts[:read_timeout] || 600 @send_timeout = opts[:send_timeout] || 600 @retry_post_requests = opts[:retry_post_requests] || false @retry_delay = opts[:retry_delay] || 5 @max_cumul_retry_delay = opts[:max_cumul_retry_delay] || 600 case uri.scheme when 'http', 'https' @host = uri.host @port = uri.port # the opts[:ssl] option is ignored here, it's value # overridden by the scheme of the endpoint URI @ssl = (uri.scheme == 'https') @base_path = uri.path.to_s else if uri.port # invalid URI raise "Invalid endpoint: #{endpoint}" end # generic URI @host, @port = endpoint.split(':', 2) @port = @port.to_i if opts[:ssl] @port = 443 if @port == 0 @ssl = true else @port = 80 if @port == 0 @ssl = false end @base_path = '' end @http_proxy = opts[:http_proxy] || ENV['HTTP_PROXY'] if @http_proxy http_proxy = if @http_proxy =~ /\Ahttp:\/\/(.*)\z/ $~[1] else @http_proxy end proxy_host, proxy_port = http_proxy.split(':', 2) proxy_port = (proxy_port ? proxy_port.to_i : 80) @http_class = Net::HTTP::Proxy(proxy_host, proxy_port) else @http_class = Net::HTTP end @headers = opts[:headers] || {} @api = api_client("#{@ssl ? 'https' : 'http'}://#{@host}:#{@port}") end |
Instance Attribute Details
#apikey ⇒ Object (readonly)
Returns the value of attribute apikey.
126 127 128 |
# File 'lib/td/client/api.rb', line 126 def apikey @apikey end |
Class Method Details
.create_empty_gz_data ⇒ String
for fluent-plugin-td / td command to check table existence with import onlt user
231 232 233 234 235 |
# File 'lib/td/client/api.rb', line 231 def self.create_empty_gz_data io = StringIO.new Zlib::GzipWriter.new(io).close io.string end |
.normalize_database_name(name) ⇒ Object
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/td/client/api.rb', line 189 def self.normalize_database_name(name) name = name.to_s if name.empty? raise "Empty name is not allowed" end if name.length < 3 name += "_" * (3 - name.length) end if 255 < name.length name = name[0, 253] + "__" end name = name.downcase name = name.gsub(/[^a-z0-9_]/, '_') name end |
.normalize_table_name(name) ⇒ Object
206 207 208 |
# File 'lib/td/client/api.rb', line 206 def self.normalize_table_name(name) normalize_database_name(name) end |
.normalize_type_name(name) ⇒ Object
TODO support array types
212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 |
# File 'lib/td/client/api.rb', line 212 def self.normalize_type_name(name) case name when /int/i, /integer/i "int" when /long/i, /bigint/i "long" when /string/i "string" when /float/i "float" when /double/i "double" else raise "Type name must eather of int, long, string float or double" end end |
.normalized_msgpack(record, out = nil) ⇒ Object
130 131 132 133 134 135 136 137 138 |
# File 'lib/td/client/api.rb', line 130 def self.normalized_msgpack(record, out = nil) record.keys.each { |k| v = record[k] if v.kind_of?(Bignum) record[k] = v.to_s end } record.to_msgpack(out) end |
.validate_column_name(name) ⇒ Object
184 185 186 |
# File 'lib/td/client/api.rb', line 184 def self.validate_column_name(name) validate_name("column", 1, 255, name) end |
.validate_database_name(name) ⇒ Object
169 170 171 |
# File 'lib/td/client/api.rb', line 169 def self.validate_database_name(name) validate_name("database", 3, 255, name) end |
.validate_name(target, min_len, max_len, name) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/td/client/api.rb', line 144 def self.validate_name(target, min_len, max_len, name) if !target.instance_of?(String) || target.empty? raise ParameterValidationError, "A valid target name is required" end name = name.to_s if name.empty? raise ParameterValidationError, "Empty #{target} name is not allowed" end if name.length < min_len || name.length > max_len raise ParameterValidationError, "#{target.capitalize} name must be between #{min_len} and #{max_len} characters long. Got #{name.length} " + (name.length == 1 ? "character" : "characters") + "." end unless name =~ /^([a-z0-9_]+)$/ raise ParameterValidationError, "#{target.capitalize} name must only consist of lower-case alpha-numeric characters and '_'." end name end |
.validate_result_set_name(name) ⇒ Object
179 180 181 |
# File 'lib/td/client/api.rb', line 179 def self.validate_result_set_name(name) validate_name("result set", 3, 255, name) end |
.validate_table_name(name) ⇒ Object
174 175 176 |
# File 'lib/td/client/api.rb', line 174 def self.validate_table_name(name) validate_name("table", 3, 255, name) end |
Instance Method Details
#ssl_ca_file=(ssl_ca_file) ⇒ Object
238 239 240 |
# File 'lib/td/client/api.rb', line 238 def ssl_ca_file=(ssl_ca_file) @ssl_ca_file = ssl_ca_file end |