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