class Chronicle::ETL::JobLogger

Saves JobLogs to db and loads previous ones

Public Class Methods

db_exists?() click to toggle source
# File lib/chronicle/etl/job_logger.rb, line 47
def self.db_exists?
  File.exists?(db_filename)
end
db_filename() click to toggle source
# File lib/chronicle/etl/job_logger.rb, line 55
def self.db_filename
  data = Runcom::Data.new "chronicle/etl/job_log.db"
  filename = data.all[0].to_s
end
initialize_db() click to toggle source
# File lib/chronicle/etl/job_logger.rb, line 60
def self.initialize_db
  FileUtils.mkdir_p(File.dirname(db_filename))
end
initialize_schema(db) click to toggle source
# File lib/chronicle/etl/job_logger.rb, line 64
def self.initialize_schema db
  db.create_table :job_logs do
    primary_key :id
    String :job_id, null: false
    String :last_id
    Time :highest_timestamp
    Integer :num_records_processed
    boolean :success, default: false
    Time :started_at
    Time :finished_at
  end
end
load_latest(job_id) click to toggle source

For a given `job_id`, return the last successful log

# File lib/chronicle/etl/job_logger.rb, line 32
def self.load_latest(job_id)
  with_db_connection do |db|
    attrs = db[:job_logs].reverse_order(:finished_at).where(success: true).first
    JobLog.build_from_serialized(attrs) if attrs
  end
end
new(job) click to toggle source

Create a new JobLogger

# File lib/chronicle/etl/job_logger.rb, line 15
def initialize(job)
  @job_log = JobLog.new do |job_log|
    job_log.job = job
  end
end
schema_exists?(db) click to toggle source
# File lib/chronicle/etl/job_logger.rb, line 51
def self.schema_exists?(db)
  return db.tables.include? :job_logs
end
with_db_connection() { |db| ... } click to toggle source
# File lib/chronicle/etl/job_logger.rb, line 39
def self.with_db_connection
  initialize_db unless db_exists?
  Sequel.connect("sqlite://#{db_filename}") do |db|
    initialize_schema(db) unless schema_exists?(db)
    yield db
  end
end

Public Instance Methods

save() click to toggle source

Save this JobLogger's JobLog to db

# File lib/chronicle/etl/job_logger.rb, line 22
def save
  return unless @job_log.save_log?

  JobLogger.with_db_connection do |db|
    dataset = db[:job_logs]
    dataset.insert(@job_log.serialize)
  end
end