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