class ChupaText::Decomposers::HTTPServer
Public Class Methods
default_url()
click to toggle source
# File lib/chupa-text/decomposers/http-server.rb, line 30 def default_url @@default_url end
default_url=(url)
click to toggle source
# File lib/chupa-text/decomposers/http-server.rb, line 34 def default_url=(url) @@default_url = url end
new(options)
click to toggle source
Calls superclass method
ChupaText::Decomposer::new
# File lib/chupa-text/decomposers/http-server.rb, line 39 def initialize(options) super @url = @options[:url] @url = URI(@url) if @url end
Public Instance Methods
decompose(data, &block)
click to toggle source
# File lib/chupa-text/decomposers/http-server.rb, line 58 def decompose(data, &block) url = @url || default_url http = Net::HTTP.new(url.host, url.port) http.use_ssl = true if url.is_a?(URI::HTTPS) if data.timeout.is_a?(Numeric) timeout = data.timeout * 0.9 http.open_timeout = timeout http.read_timeout = timeout http.write_timeout = timeout if http.respond_to?(:write_timeout=) http.continue_timeout = timeout end begin http.start do process_request(url, http, data, &block) end rescue SystemCallError => error error do message = "#{log_tag}[connection] " message << "Failed to process data in server: " message << "#{url}: " message << "#{error.class}: #{error.message}\n" message << error.backtrace.join("\n") message end rescue Net::ReadTimeout => error error do message = "#{log_tag}[timeout] " message << "Failed to process data in server: " message << "#{url}: " message << "#{error.class}: #{error.message}\n" message << error.backtrace.join("\n") message end end end
target?(data)
click to toggle source
# File lib/chupa-text/decomposers/http-server.rb, line 45 def target?(data) return false if data.text_plain? @url or default_url end
target_score(data)
click to toggle source
# File lib/chupa-text/decomposers/http-server.rb, line 50 def target_score(data) if target?(data) -100 else nil end end
Private Instance Methods
build_parameters(data, input)
click to toggle source
# File lib/chupa-text/decomposers/http-server.rb, line 137 def build_parameters(data, input) parameters = [] [ ["timeout", data.timeout || ChupaText::ExternalCommand.default_timeout], ["limit_cpu", data.limit_cpu || ChupaText::ExternalCommand.default_limit_cpu], ["limit_as", data.limit_as || ChupaText::ExternalCommand.default_limit_as], ["max_body_size", data.max_body_size], ["need_screenshot", data.need_screenshot?], ].each do |key, value| next if value.nil? parameters << [key, StringIO.new(value.to_s)] end parameters << [ "data", input, { filename: data.path.to_s, content_type: data.mime_type, }, ] parameters end
default_url()
click to toggle source
# File lib/chupa-text/decomposers/http-server.rb, line 95 def default_url url = self.class.default_url || ENV["CHUPA_TEXT_HTTP_SERVER_URL"] return nil if url.nil? URI(url) end
log_tag()
click to toggle source
# File lib/chupa-text/decomposers/http-server.rb, line 163 def log_tag "[decomposer][http-server]" end
process_request(url, http, data) { |text_data| ... }
click to toggle source
# File lib/chupa-text/decomposers/http-server.rb, line 101 def process_request(url, http, data) request = Net::HTTP::Post.new(url) request["transfer-encoding"] = "chunked" request["expect"] = "100-continue" if http.continue_timeout data.open do |input| request.set_form(build_parameters(data, input), "multipart/form-data") response = http.request(request) case response when Net::HTTPOK extracted = JSON.parse(response.body) (extracted["texts"] || []).each do |text| text_data = TextData.new(text["body"], source_data: data) text.each do |key, value| next if key == "body" text_data[key] = value end yield(text_data) end else error do message = "#{log_tag} Failed to process data in server: " message << "<#{data.uri}>(#{data.mime_type}): #{url}: " message << "#{response.code}: #{response.message.strip}\n" case response.content_type when "application/json" PP.pp(JSON.parse(response.body), message) else message << response.body end message end end end end