module Wireway::Core::Request
Public Instance Methods
black_box(**args)
click to toggle source
# File lib/wireway/core/request.rb, line 98 def black_box(**args) params = {}.merge!(args) route = '/black_box/restful/request_api' res = node_addresses return res unless res[0] res = post(addresses: res[1][:black_box], route: route, params: params) do |result| body = JSON.parse(result[1][:body]).deep_symbolize_keys return [false, body[:result], body[:errors]].compact unless body[:success] [true, body] end end
dashboard(**args)
click to toggle source
# File lib/wireway/core/request.rb, line 56 def dashboard(**args) params = { response_type: 'json', }.merge!(args) route = '/dashboard/restful/request_api' res = node_addresses return res unless res[0] post(addresses: res[1][:dashboard], route: route, params: params) do |result| return [true, result[1][:body]] if (params[:response_type] != 'json') body = JSON.parse(result[1][:body]).deep_symbolize_keys return [false, body[:result]] unless body[:success] [true, body[:result]] end end
get(addresses:, route:, params: {}) { |result| ... }
click to toggle source
# File lib/wireway/core/request.rb, line 110 def get(addresses:, route:, params: {}) result = round_robin(addresses: addresses) do |address| full_url = [address+route, URI.encode_www_form(params)] full_url.delete_if{|item| !item.present? } RestClient.get(full_url.join("?")) end return result unless (result[0] && block_given?) begin yield result rescue return [false, '[Wireway]运行时结果处理异常', {errors: {message: $!.to_s, path: $@}}] end end
node_addresses()
click to toggle source
后期应由专门组件对于已登记地址信息进行活跃验证,并将可用节点信息回传给Satcom 后期当某一节点调用不通过时将常量赋值为404进行更新 url路径不需要动态获取,只有ip和端口是动态的,如果请求路径都不一致,不能认为是合规的节点.
# File lib/wireway/core/request.rb, line 11 def node_addresses return $wireway_node_addresses unless $wireway_node_addresses == 404 nodes = ['123.57.155.17:3113'] route = '/satcom/other/c919/node_addresses.json' res = get(addresses: nodes, route: route) do |result| hash = JSON.parse(result[1][:body]).deep_symbolize_keys [true, hash] end return res unless res[0] nodes = res[1].map{|key, value| [key, value[:nodes]]}.to_h $wireway_node_addresses = [true, nodes] end
platforms_exposed_api()
click to toggle source
# File lib/wireway/core/request.rb, line 26 def platforms_exposed_api res = node_addresses return res unless res[0] exposed_api = {} platforms = {:satcom => ["123.57.155.17:3113"], :dashboard => ['123.57.155.17:3111'], :black_box => ['123.57.155.17:3116']} platforms.each do |platform_code, addresses| route = "/#{platform_code}/restful/exposed_api" res = get(addresses: addresses, route: route) do |result| hash = JSON.parse(result[1][:body]).deep_symbolize_keys exposed_api.merge!(hash) if hash.is_a?(Hash) end end [true, exposed_api] end
post(addresses:, route:, params: {}) { |result| ... }
click to toggle source
# File lib/wireway/core/request.rb, line 125 def post(addresses:, route:, params: {}) result = round_robin(addresses: addresses) do |address| RestClient.post "#{address}/#{route}", params end return result unless (result[0] && block_given?) begin yield result rescue return [false, '[Wireway]运行时结果处理异常', {errors: {message: $!.to_s, path: $@}}] end end
request_api_params(platform_code:, api_code:)
click to toggle source
# File lib/wireway/core/request.rb, line 43 def request_api_params(platform_code:, api_code:) res = node_addresses return res unless res[0] addresses = res[1][platform_code.to_sym] route = "/#{platform_code}/restful/request_api_params" get(addresses: addresses, route: route, params: {api_code: api_code}) do |result| hash = JSON.parse(result[1][:body]).deep_symbolize_keys [true, hash] end end
satcom(**args)
click to toggle source
# File lib/wireway/core/request.rb, line 71 def satcom(**args) params = {}.merge!(args) route = '/satcom/restful/request_api' res = node_addresses return res unless res[0] post(addresses: res[1][:satcom], route: route, params: params) do |result| body = JSON.parse(result[1][:body]).deep_symbolize_keys return [false, body[:result], body[:errors]].compact unless body[:success] # [true, body[:result]] [true, body] end end
wireway(**args)
click to toggle source
# File lib/wireway/core/request.rb, line 84 def wireway(**args) params = { local: false }.merge!(args) route = '/wireway/restful/request_api_result' res = node_addresses return res unless res[0] post(addresses: res[1][:wireway], route: route, params: params) do |result| body = JSON.parse(result[1][:body]).deep_symbolize_keys return [false, body[:result], body[:errors]].compact unless body[:success] [true, body[:result]] end end
Private Instance Methods
get_response() { || ... }
click to toggle source
# File lib/wireway/core/request.rb, line 152 def get_response begin response = yield return [false, "[Wireway]响应码异常:#{response.code}", {response: response}] unless (response.code == 200) hash = {code: 200} res = handle_body_encode(body: response.body) return res unless res[0] hash.merge!({body: res[1]}) rescue return [false, '[Wireway]请求异常', {errors: {message: $!.to_s, path: $@}}] end [true, hash] end
handle_body_encode(body: )
click to toggle source
# File lib/wireway/core/request.rb, line 169 def handle_body_encode(body: ) body = case body.encoding.to_s when 'UTF-8', 'ASCII-8BIT' body else body.encode('utf-8','gbk', :undef => :replace, :replace => "?", :invalid => :replace).chars.select{|i| i.valid_encoding?}.join end [true, body] end
round_robin(addresses:) { |address| ... }
click to toggle source
# File lib/wireway/core/request.rb, line 139 def round_robin(addresses:) res = nil addresses.each do |address| res = get_response do yield address end # TODO: 后期应该优化判断是服务不可以用还是传递参数问题倒是返回false # 或者当一定比例节点均无法正常响应时即判定为参数问题 break if res[0] end res end