class GnCrossmap::ResolverJob

Remote resolution for parallel jobs

Public Class Methods

new(names, batch_data, resolver_url, ds_id) click to toggle source
# File lib/gn_crossmap/resolver_job.rb, line 6
def initialize(names, batch_data, resolver_url, ds_id)
  @names_size = names.size
  @names = names.join("\n")
  @batch_data = batch_data
  @resolver_url = resolver_url
  @ds_id = ds_id
  @stats = Stats.new
end

Public Instance Methods

run() click to toggle source
# File lib/gn_crossmap/resolver_job.rb, line 15
def run
  res = remote_resolve(@names)
  [res, @batch_data, @stats]
end

Private Instance Methods

process_resolver_error(err, name) click to toggle source
# File lib/gn_crossmap/resolver_job.rb, line 51
def process_resolver_error(err, name)
  @stats.stats[:matches][7] += 1
  GnCrossmap.logger.error("Resolver broke on '#{name}': #{err.message}")
end
remote_resolve(names) click to toggle source
# File lib/gn_crossmap/resolver_job.rb, line 22
def remote_resolve(names)
  batch_start = Time.now
  res = RestClient.post(@resolver_url, data: names,
                                       data_source_ids: @ds_id)
  [res.body]
rescue RestClient::Exception
  single_remote_resolve(names)
ensure
  update_stats(batch_start)
end
single_post() click to toggle source
# File lib/gn_crossmap/resolver_job.rb, line 43
def single_post
  RestClient.post(@resolver_url, data: name,
                                 data_source_ids: @ds_id)
rescue RestClient::Exception => e
  process_resolver_error(e, name)
  nil
end
single_remote_resolve(names) click to toggle source
# File lib/gn_crossmap/resolver_job.rb, line 33
def single_remote_resolve(names)
  all_res = []
  names.split("\n").each do |name|
    res = single_post(name)
    next unless res
    all_res << res.body
  end
  all_res
end
update_stats(batch_start) click to toggle source
# File lib/gn_crossmap/resolver_job.rb, line 56
def update_stats(batch_start)
  @stats.stats[:current_speed] = @names_size / (Time.now - batch_start)
  @stats.stats[:resolution][:completed_records] = @names_size
end