module Kernel
Private Instance Methods
call_microservice(microservice, args = {})
click to toggle source
# File lib/microservice_dsl.rb, line 44 def call_microservice(microservice, args = {}) request = prepare_microservice_request microservice, args response = nil MicroserviceDSL::Instrument.instrument('run.microservice_dsl', 'Call microservice', request.url) do response = request.run end [response.body, response.headers['content-type'], response.code] end
prepare_microservice_request(microservice, args = {})
click to toggle source
# File lib/microservice_dsl.rb, line 11 def prepare_microservice_request(microservice, args = {}) raise ArgumentError unless microservice url = ENV["#{microservice.upcase}_URL"] || "http://#{microservice}.#{ENV['MS_DOMAIN'] || Rails.env}:#{ENV["MS_#{microservice.upcase}_PORT"] || '3000'}" url << "/#{args[:path]}" if args[:path] body = args[:body].is_a?(String) ? args[:body] : args[:body].to_json if args[:body] headers = MicroserviceDSL.default_headers.merge(args[:headers] || {}).merge(MicroserviceDSL.hop_header => MicroserviceDSL.hop_string) method = args[:method] || :get timeout = ENV['MS_DEFAULT_TIMEOUT'].try(:to_f) || 0 timeout = 10 if timeout == 0 req = Typhoeus::Request.new(url, method: method, headers: headers, body: body, params: args[:params], timeout: timeout) if method.to_s.casecmp('get').zero? req.on_complete do |res| if res.code == 200 && etag = res.headers['etag'] MicroserviceDSL.set_cache(url, etag, res) end end if cached = MicroserviceDSL.get_cache(url, req) req.options[:headers]['If-None-Match'] = cached[:etag] req.on_complete do |res| if res.code == 304 res.options[:response_body] = cached[:response][:body] res.options[:response_code] = cached[:response][:code] res.options[:headers] = Typhoeus::Response::Header.new(cached[:response][:headers]) end end end end req end