class IronBank::LocalRecords
Utility class to save records locally.
Constants
- BACKOFF
- RESOURCE_QUERY_FIELDS
Attributes
query_attempts[R]
resource[R]
Public Class Methods
directory()
click to toggle source
# File lib/iron_bank/local_records.rb, line 16 def self.directory IronBank.configuration.export_directory end
export()
click to toggle source
# File lib/iron_bank/local_records.rb, line 20 def self.export FileUtils.mkdir_p(directory) unless Dir.exist?(directory) RESOURCE_QUERY_FIELDS.each_key { |resource| new(resource).save_file } end
new(resource)
click to toggle source
# File lib/iron_bank/local_records.rb, line 47 def initialize(resource) @resource = resource @query_attempts = 0 end
Public Instance Methods
save_file()
click to toggle source
# File lib/iron_bank/local_records.rb, line 25 def save_file until completed? || max_query? IronBank.logger.info(export_query_info) sleep backoff_time end File.open(file_path, "w") do |file| file.write(export.content.force_encoding("UTF-8")) end end
Private Instance Methods
backoff_time()
click to toggle source
# File lib/iron_bank/local_records.rb, line 89 def backoff_time BACKOFF[:interval] * (BACKOFF[:factor]**query_attempts) end
completed?()
click to toggle source
# File lib/iron_bank/local_records.rb, line 68 def completed? return false unless (status = export.reload.status) case status when "Pending", "Processing" then false when "Completed" then true else raise_export_error end end
export()
click to toggle source
# File lib/iron_bank/local_records.rb, line 52 def export @export ||= IronBank::Export.create( "select #{RESOURCE_QUERY_FIELDS[resource].join(', ')} from #{resource}" ) end
export_query_info()
click to toggle source
# File lib/iron_bank/local_records.rb, line 62 def export_query_info "Waiting for export #{export.id} (#{resource}) to complete " \ "(attempt #{query_attempts} of #{BACKOFF[:max]}; #{backoff_time}s " \ "sleeping time)" end
file_path()
click to toggle source
# File lib/iron_bank/local_records.rb, line 58 def file_path File.expand_path("#{resource}.csv", self.class.directory) end
max_query?()
click to toggle source
# File lib/iron_bank/local_records.rb, line 82 def max_query? @query_attempts += 1 return false unless @query_attempts > BACKOFF[:max] raise IronBank::Error, "Export query attempts exceeded" end
raise_export_error()
click to toggle source
# File lib/iron_bank/local_records.rb, line 78 def raise_export_error raise IronBank::Error, "Export #{export.id} has status #{export.status}" end