qingcloud-sdk 0.4.1 → 2.0.0.pre.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +201 -21
- data/README.md +141 -61
- data/bin/console +3 -3
- data/lib/qingcloud/sdk.rb +16 -14
- data/lib/qingcloud/sdk/general/config.rb +70 -0
- data/lib/qingcloud/sdk/general/contract.rb +28 -17
- data/lib/qingcloud/sdk/general/default/config.yaml +13 -0
- data/lib/qingcloud/sdk/general/error.rb +41 -32
- data/lib/qingcloud/sdk/general/logger.rb +54 -0
- data/lib/qingcloud/sdk/request/preprocessor.rb +81 -0
- data/lib/qingcloud/sdk/request/request.rb +80 -0
- data/lib/qingcloud/sdk/request/signer.rb +53 -0
- data/lib/qingcloud/sdk/service/cache.rb +1005 -0
- data/lib/qingcloud/sdk/service/dns_alias.rb +150 -0
- data/lib/qingcloud/sdk/service/eip.rb +389 -0
- data/lib/qingcloud/sdk/service/image.rb +304 -0
- data/lib/qingcloud/sdk/service/instance.rb +585 -0
- data/lib/qingcloud/sdk/service/job.rb +71 -0
- data/lib/qingcloud/sdk/service/key_pair.rb +257 -0
- data/lib/qingcloud/sdk/service/load_balancer.rb +1119 -0
- data/lib/qingcloud/sdk/service/mongo.rb +566 -0
- data/lib/qingcloud/sdk/service/qingcloud.rb +185 -0
- data/lib/qingcloud/sdk/service/rdb.rb +751 -0
- data/lib/qingcloud/sdk/service/router.rb +778 -0
- data/lib/qingcloud/sdk/service/security_group.rb +645 -0
- data/lib/qingcloud/sdk/service/shared_storage.rb +666 -0
- data/lib/qingcloud/sdk/service/snapshot.rb +283 -0
- data/lib/qingcloud/sdk/service/tag.rb +227 -0
- data/lib/qingcloud/sdk/service/user_data.rb +61 -0
- data/lib/qingcloud/sdk/service/volume.rb +296 -0
- data/lib/qingcloud/sdk/service/vxnet.rb +295 -0
- data/lib/qingcloud/sdk/version.rb +19 -5
- metadata +98 -29
- data/.gitignore +0 -13
- data/.rspec +0 -2
- data/.travis.yml +0 -3
- data/Rakefile +0 -6
- data/lib/qingcloud/sdk/iaas/connector.rb +0 -99
- data/lib/qingcloud/sdk/iaas/foundation.rb +0 -73
- data/lib/qingcloud/sdk/iaas/service.rb +0 -1274
- data/lib/qingcloud/sdk/template/config.json +0 -4
- data/lib/qingcloud/sdk/utility/file_manager.rb +0 -43
- data/lib/qingcloud/sdk/utility/json_parser.rb +0 -41
- data/lib/qingcloud/sdk/utility/logger.rb +0 -19
- data/qingcloud-sdk.gemspec +0 -31
data/bin/console
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'qingcloud/sdk'
|
5
5
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +10,5 @@ require "qingcloud/sdk"
|
|
10
10
|
# require "pry"
|
11
11
|
# Pry.start
|
12
12
|
|
13
|
-
require
|
13
|
+
require 'irb'
|
14
14
|
IRB.start
|
data/lib/qingcloud/sdk.rb
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
-
|
1
|
+
# +-------------------------------------------------------------------------
|
2
|
+
# | Copyright (C) 2016 Yunify, Inc.
|
3
|
+
# +-------------------------------------------------------------------------
|
4
|
+
# | Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# | you may not use this work except in compliance with the License.
|
6
|
+
# | You may obtain a copy of the License in the LICENSE file, or at:
|
7
|
+
# |
|
8
|
+
# | http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
# |
|
10
|
+
# | Unless required by applicable law or agreed to in writing, software
|
11
|
+
# | distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# | See the License for the specific language governing permissions and
|
14
|
+
# | limitations under the License.
|
15
|
+
# +-------------------------------------------------------------------------
|
2
16
|
|
3
|
-
|
4
|
-
require 'qingcloud/sdk/general/contract'
|
5
|
-
require 'qingcloud/sdk/general/error'
|
6
|
-
|
7
|
-
# Utility
|
8
|
-
require 'qingcloud/sdk/utility/logger'
|
9
|
-
require 'qingcloud/sdk/utility/file_manager'
|
10
|
-
require 'qingcloud/sdk/utility/json_parser'
|
11
|
-
|
12
|
-
# Client
|
13
|
-
require 'qingcloud/sdk/iaas/connector'
|
14
|
-
require 'qingcloud/sdk/iaas/foundation'
|
15
|
-
require 'qingcloud/sdk/iaas/service'
|
17
|
+
Dir[File.dirname(__FILE__) + '/sdk/**/*.rb'].each { |file| require file }
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# +-------------------------------------------------------------------------
|
2
|
+
# | Copyright (C) 2016 Yunify, Inc.
|
3
|
+
# +-------------------------------------------------------------------------
|
4
|
+
# | Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# | you may not use this work except in compliance with the License.
|
6
|
+
# | You may obtain a copy of the License in the LICENSE file, or at:
|
7
|
+
# |
|
8
|
+
# | http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
# |
|
10
|
+
# | Unless required by applicable law or agreed to in writing, software
|
11
|
+
# | distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# | See the License for the specific language governing permissions and
|
14
|
+
# | limitations under the License.
|
15
|
+
# +-------------------------------------------------------------------------
|
16
|
+
|
17
|
+
require 'fileutils'
|
18
|
+
require 'yaml'
|
19
|
+
|
20
|
+
require 'active_support/core_ext/hash/keys'
|
21
|
+
require 'active_support/core_ext/hash/deep_merge'
|
22
|
+
require 'net/http/persistent'
|
23
|
+
|
24
|
+
module QingCloud
|
25
|
+
module SDK
|
26
|
+
class Config < Hash
|
27
|
+
attr_accessor :connection
|
28
|
+
|
29
|
+
def self.init(access_key_id, secret_access_key)
|
30
|
+
initial_config = {
|
31
|
+
qy_access_key_id: access_key_id,
|
32
|
+
qy_secret_access_key: secret_access_key,
|
33
|
+
}
|
34
|
+
Config.new(initial_config)
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize(initial_config = {})
|
38
|
+
self.connection = Net::HTTP::Persistent.new
|
39
|
+
load_default_config
|
40
|
+
update initial_config
|
41
|
+
end
|
42
|
+
|
43
|
+
def update(another_config = {})
|
44
|
+
deep_merge! another_config.deep_symbolize_keys!
|
45
|
+
Logger.set_level self[:log_level]
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
def load_default_config
|
50
|
+
load_config_from_file Contract::DEFAULT_CONFIG_FILEPATH
|
51
|
+
end
|
52
|
+
|
53
|
+
def load_user_config
|
54
|
+
install_default_user_config unless File.exist? Contract::USER_CONFIG_FILEPATH
|
55
|
+
load_config_from_file Contract::USER_CONFIG_FILEPATH
|
56
|
+
end
|
57
|
+
|
58
|
+
def load_config_from_file(path)
|
59
|
+
path = path.sub '~', Dir.home if path.start_with? '~/'
|
60
|
+
update YAML.load_file File.absolute_path path
|
61
|
+
end
|
62
|
+
|
63
|
+
def install_default_user_config
|
64
|
+
Logger.warn "Installing default config file to #{Contract::USER_CONFIG_FILEPATH}"
|
65
|
+
FileUtils.mkdir_p Contract::USER_SUPPORT_DIRECTORY
|
66
|
+
FileUtils.copy Contract::DEFAULT_CONFIG_FILEPATH, Contract::USER_CONFIG_FILEPATH
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -1,20 +1,31 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
# +-------------------------------------------------------------------------
|
2
|
+
# | Copyright (C) 2016 Yunify, Inc.
|
3
|
+
# +-------------------------------------------------------------------------
|
4
|
+
# | Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# | you may not use this work except in compliance with the License.
|
6
|
+
# | You may obtain a copy of the License in the LICENSE file, or at:
|
7
|
+
# |
|
8
|
+
# | http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
# |
|
10
|
+
# | Unless required by applicable law or agreed to in writing, software
|
11
|
+
# | distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# | See the License for the specific language governing permissions and
|
14
|
+
# | limitations under the License.
|
15
|
+
# +-------------------------------------------------------------------------
|
10
16
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
module QingCloud
|
18
|
+
module SDK
|
19
|
+
module Contract
|
20
|
+
USER_SUPPORT_DIRECTORY = "#{Dir.home}/.qingcloud".freeze
|
21
|
+
USER_CONFIG_FILENAME = 'config.yaml'.freeze
|
22
|
+
USER_CONFIG_FILEPATH = "#{USER_SUPPORT_DIRECTORY}/#{USER_CONFIG_FILENAME}".freeze
|
17
23
|
|
18
|
-
|
24
|
+
# GEM_DIRECTORY = Gem::Specification.find_by_name('qingcloud-sdk').gem_dir
|
25
|
+
# DEFAULT_SUPPORT_DIRECTORY = GEM_DIRECTORY + '/lib/qingcloud/sdk/commons/default'
|
26
|
+
DEFAULT_SUPPORT_DIRECTORY = File.expand_path(File.dirname(__FILE__) + '/./default')
|
27
|
+
DEFAULT_CONFIG_FILENAME = 'config.yaml'.freeze
|
28
|
+
DEFAULT_CONFIG_FILEPATH = "#{DEFAULT_SUPPORT_DIRECTORY}/#{DEFAULT_CONFIG_FILENAME}".freeze
|
19
29
|
end
|
20
|
-
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# QingCloud services configuration
|
2
|
+
|
3
|
+
#qy_access_key_id: 'ACCESS_KEY_ID'
|
4
|
+
#qy_secret_access_key: 'SECRET_ACCESS_KEY'
|
5
|
+
|
6
|
+
host: 'api.qingcloud.com'
|
7
|
+
port: 443
|
8
|
+
protocol: 'https'
|
9
|
+
uri: '/iaas'
|
10
|
+
connection_retries: 3
|
11
|
+
|
12
|
+
# Valid log levels are "debug", "info", "warn", "error", and "fatal".
|
13
|
+
log_level: 'warn'
|
@@ -1,39 +1,48 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
# +-------------------------------------------------------------------------
|
2
|
+
# | Copyright (C) 2016 Yunify, Inc.
|
3
|
+
# +-------------------------------------------------------------------------
|
4
|
+
# | Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# | you may not use this work except in compliance with the License.
|
6
|
+
# | You may obtain a copy of the License in the LICENSE file, or at:
|
7
|
+
# |
|
8
|
+
# | http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
# |
|
10
|
+
# | Unless required by applicable law or agreed to in writing, software
|
11
|
+
# | distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# | See the License for the specific language governing permissions and
|
14
|
+
# | limitations under the License.
|
15
|
+
# +-------------------------------------------------------------------------
|
4
16
|
|
5
|
-
|
6
|
-
|
17
|
+
module QingCloud
|
18
|
+
module SDK
|
19
|
+
class SDKError < StandardError
|
20
|
+
end
|
7
21
|
|
8
|
-
|
9
|
-
|
10
|
-
'Network Error, please check your internet connection.'
|
11
|
-
end
|
12
|
-
end
|
22
|
+
class NetworkError < SDKError
|
23
|
+
end
|
13
24
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
25
|
+
class ParameterRequiredError < SDKError
|
26
|
+
def initialize(parameter_name, parent_name)
|
27
|
+
@parameter_name = parameter_name
|
28
|
+
@parent_name = parent_name
|
29
|
+
end
|
19
30
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
31
|
+
def message
|
32
|
+
"\"#{@parameter_name}\" is required in \"#{@parent_name}\"."
|
33
|
+
end
|
34
|
+
end
|
25
35
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
36
|
+
class ParameterValueNotAllowedError < SDKError
|
37
|
+
def initialize(parameter_name, parameter_value, allowed_values)
|
38
|
+
@parameter_name = parameter_name
|
39
|
+
@parameter_value = parameter_value
|
40
|
+
@allowed_values = allowed_values
|
41
|
+
end
|
31
42
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
43
|
+
def message
|
44
|
+
"\"#{@parameter_name}\" value \"#{@parameter_value}\" is not allowed, should be one of #{@allowed_values.join ', '}."
|
45
|
+
end
|
38
46
|
end
|
39
|
-
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# +-------------------------------------------------------------------------
|
2
|
+
# | Copyright (C) 2016 Yunify, Inc.
|
3
|
+
# +-------------------------------------------------------------------------
|
4
|
+
# | Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# | you may not use this work except in compliance with the License.
|
6
|
+
# | You may obtain a copy of the License in the LICENSE file, or at:
|
7
|
+
# |
|
8
|
+
# | http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
# |
|
10
|
+
# | Unless required by applicable law or agreed to in writing, software
|
11
|
+
# | distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# | See the License for the specific language governing permissions and
|
14
|
+
# | limitations under the License.
|
15
|
+
# +-------------------------------------------------------------------------
|
16
|
+
|
17
|
+
require 'active_support/logger'
|
18
|
+
|
19
|
+
module QingCloud
|
20
|
+
module SDK
|
21
|
+
class Logger
|
22
|
+
@@logger = ActiveSupport::Logger.new STDOUT
|
23
|
+
@@level = :warn
|
24
|
+
|
25
|
+
def self.set_level(level)
|
26
|
+
index = %w(debug info warn error fatal).find_index level.to_s
|
27
|
+
@@logger.level = index.nil? ? 0 : index
|
28
|
+
@@level = level.to_sym
|
29
|
+
end
|
30
|
+
|
31
|
+
set_level :warn
|
32
|
+
|
33
|
+
def self.debug(text)
|
34
|
+
@@logger.debug text
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.info(text)
|
38
|
+
@@logger.info text
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.warn(text)
|
42
|
+
@@logger.warn text
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.error(text)
|
46
|
+
@@logger.error text
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.fatal(text)
|
50
|
+
@@logger.fatal text
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# +-------------------------------------------------------------------------
|
2
|
+
# | Copyright (C) 2016 Yunify, Inc.
|
3
|
+
# +-------------------------------------------------------------------------
|
4
|
+
# | Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# | you may not use this work except in compliance with the License.
|
6
|
+
# | You may obtain a copy of the License in the LICENSE file, or at:
|
7
|
+
# |
|
8
|
+
# | http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
# |
|
10
|
+
# | Unless required by applicable law or agreed to in writing, software
|
11
|
+
# | distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# | See the License for the specific language governing permissions and
|
14
|
+
# | limitations under the License.
|
15
|
+
# +-------------------------------------------------------------------------
|
16
|
+
|
17
|
+
require 'active_support/core_ext/hash/keys'
|
18
|
+
|
19
|
+
module QingCloud
|
20
|
+
module SDK
|
21
|
+
class Preprocessor
|
22
|
+
def self.do(input)
|
23
|
+
input = decorate_input input
|
24
|
+
|
25
|
+
config = input[:config]
|
26
|
+
input[:request_endpoint] = "#{config[:protocol]}://#{config[:host]}:#{config[:port]}"
|
27
|
+
|
28
|
+
parsed_params = {}
|
29
|
+
input[:request_params].each do |param_k, param_v|
|
30
|
+
if param_v.is_a? Array
|
31
|
+
param_v.each_with_index do |value, index|
|
32
|
+
if value.is_a? Hash
|
33
|
+
value.each do |value_k, value_v|
|
34
|
+
parsed_params["#{param_k}.#{index}.#{value_k}"] = value_v
|
35
|
+
end
|
36
|
+
else
|
37
|
+
parsed_params["#{param_k}.#{index}"] = value
|
38
|
+
end
|
39
|
+
end
|
40
|
+
elsif param_v.is_a? Hash
|
41
|
+
param_v.each do |key, value|
|
42
|
+
parsed_params["#{param_k}.#{key}"] = value
|
43
|
+
end
|
44
|
+
else
|
45
|
+
parsed_params[param_k] = param_v
|
46
|
+
end
|
47
|
+
end
|
48
|
+
input[:request_params] = parsed_params.deep_symbolize_keys!
|
49
|
+
input[:request_params].update(
|
50
|
+
action: input[:api_name],
|
51
|
+
time_stamp: Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ'),
|
52
|
+
version: 1,
|
53
|
+
signature_method: 'HmacSHA256',
|
54
|
+
signature_version: 1,
|
55
|
+
access_key_id: input[:config][:qy_access_key_id],
|
56
|
+
)
|
57
|
+
|
58
|
+
if input[:properties][:zone] && !input[:properties][:zone].empty?
|
59
|
+
input[:request_params][:zone] = input[:properties][:zone]
|
60
|
+
end
|
61
|
+
|
62
|
+
Logger.info "Preprocess QingCloud request: [#{input[:id]}] #{input}"
|
63
|
+
input
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.decorate_input(input)
|
67
|
+
input.deep_symbolize_keys!
|
68
|
+
input[:id] = (Random.new.rand * 1_000_000).to_int
|
69
|
+
compact input
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.compact(object)
|
73
|
+
object.each do |k, v|
|
74
|
+
object[k] = compact v if v.is_a? Hash
|
75
|
+
object.delete k if v.nil? || v == ''
|
76
|
+
end
|
77
|
+
object
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# +-------------------------------------------------------------------------
|
2
|
+
# | Copyright (C) 2016 Yunify, Inc.
|
3
|
+
# +-------------------------------------------------------------------------
|
4
|
+
# | Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# | you may not use this work except in compliance with the License.
|
6
|
+
# | You may obtain a copy of the License in the LICENSE file, or at:
|
7
|
+
# |
|
8
|
+
# | http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
# |
|
10
|
+
# | Unless required by applicable law or agreed to in writing, software
|
11
|
+
# | distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# | See the License for the specific language governing permissions and
|
14
|
+
# | limitations under the License.
|
15
|
+
# +-------------------------------------------------------------------------
|
16
|
+
|
17
|
+
require 'json'
|
18
|
+
require 'net/http'
|
19
|
+
require 'ostruct'
|
20
|
+
|
21
|
+
module QingCloud
|
22
|
+
module SDK
|
23
|
+
class Request
|
24
|
+
attr_accessor :input, :request_url, :http_request, :http_response
|
25
|
+
|
26
|
+
def initialize(input)
|
27
|
+
self.input = Preprocessor.do input
|
28
|
+
end
|
29
|
+
|
30
|
+
def send
|
31
|
+
check
|
32
|
+
build
|
33
|
+
perform
|
34
|
+
unpack
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def check
|
40
|
+
unless !input[:config][:qy_access_key_id].nil? && !input[:config][:qy_access_key_id].empty?
|
41
|
+
raise SDKError, 'access key not provided'
|
42
|
+
end
|
43
|
+
unless !input[:config][:qy_secret_access_key].nil? && !input[:config][:qy_secret_access_key].empty?
|
44
|
+
raise SDKError, 'secret access key not provided'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def build
|
49
|
+
self.input = Signer.do input
|
50
|
+
|
51
|
+
params = input[:request_params].map { |k, v| "#{k}=#{v}" }
|
52
|
+
query_string = !params.empty? ? "?#{params.join '&'}" : ''
|
53
|
+
self.request_url = "#{input[:request_endpoint]}#{input[:config][:uri]}#{query_string}"
|
54
|
+
|
55
|
+
self.http_request = Net::HTTP::Get.new request_url
|
56
|
+
end
|
57
|
+
|
58
|
+
def perform
|
59
|
+
retries = input[:config][:connection_retries]
|
60
|
+
while
|
61
|
+
begin
|
62
|
+
Logger.info "Sending request: [#{input[:id]}] #{request_url}"
|
63
|
+
self.http_response = input[:config].connection.request request_url, http_request
|
64
|
+
rescue SocketError
|
65
|
+
retries > 0 ? retries -= 1 : (raise NetworkError)
|
66
|
+
sleep 1
|
67
|
+
next
|
68
|
+
end
|
69
|
+
break
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def unpack
|
74
|
+
output = JSON.parse(http_response.body)
|
75
|
+
Logger.info "Parse response: [#{input[:id]}] #{output}"
|
76
|
+
output.deep_symbolize_keys!
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|