class QuickbaseLogger::Logger

Attributes

purge_frequency[RW]
text_logger[RW]

Public Class Methods

new(options={}) click to toggle source
Calls superclass method
# File lib/quickbase_logger/logger.rb, line 9
def initialize(options={})
  raise ArgumentError.new("QuickbaseLogger::Logger.new must receive a :related_script argument.") unless options[:related_script]

  @log = []
  @start = "#{formatted_date} #{formatted_time}"
  @purge_frequency = options.fetch(:purge_frequency, 30)

  file_name = options.fetch(:file_name, 'quickbase_logger_default')

  if !File.directory?(formatted_logger_path)
    FileUtils::mkdir_p(formatted_logger_path)
  end

  @text_logger = ::Logger.new("#{formatted_logger_path}#{file_name}.log", "monthly") # standard ruby Logger instance
  @text_logger.info("===== #{Date.today.strftime('%m/%d/%Y')} =====")
  @text_logger.info("START")

  super(options)
end

Public Instance Methods

error(message) click to toggle source
# File lib/quickbase_logger/logger.rb, line 53
def error(message)
  log << "Error [#{formatted_time}]: #{message}"
end
info(message) click to toggle source
# File lib/quickbase_logger/logger.rb, line 45
def info(message)
  log << "Info [#{formatted_time}]: #{message}"
end
log_to_quickbase() { || ... } click to toggle source
# File lib/quickbase_logger/logger.rb, line 29
def log_to_quickbase
  raise ArgumentError.new("#log_to_quickbase() must be given a block. Code run inside that block will be logged to the QuickBase application.") unless block_given?

  begin
    yield
    log_success_to_text_file
    log_success_to_quickbase
  rescue => err
    log_failure_to_text_file(err)
    log_failure_to_quickbase(err)
    raise err
  end

  purge_logs
end
purge_logs() click to toggle source
# File lib/quickbase_logger/logger.rb, line 57
def purge_logs
  purge_date = Date.today - purge_frequency.days
  purge_date = purge_date.strftime("%m/%d/%Y")
  related_script_fid = self.class.fields[:related_script].fid

  begin
    qb_client.purge_records(self.class.dbid, {query: "{#{related_script_fid}.EX.#{related_script}}AND{1.OBF.#{purge_date}}"})
  rescue StandardError => err
    text_logger.error("--- FAILED TO PURGE OLD RECORDS ---")
    text_logger.error(err)
    text_logger.error("BACKTRACE:\n\t#{err.backtrace.slice(0, 10).join("\n\t")}")
    raise err
  end
end
warn(message) click to toggle source
# File lib/quickbase_logger/logger.rb, line 49
def warn(message)
  log << "Warn [#{formatted_time}]: #{message}"
end

Private Instance Methods

formatted_date() click to toggle source
# File lib/quickbase_logger/logger.rb, line 122
def formatted_date
  DateTime.now.strftime("%m/%d/%Y").strip
end
formatted_logger_path() click to toggle source
# File lib/quickbase_logger/logger.rb, line 130
def formatted_logger_path
  path = QuickbaseLogger.configuration.logger_path || "/log"
  path[-1] =~ /\// ? path : "#{path}/"
end
formatted_time() click to toggle source
# File lib/quickbase_logger/logger.rb, line 126
def formatted_time
  DateTime.now.strftime("%l:%M:%S %p").strip
end
log_failure_to_quickbase(err) click to toggle source
# File lib/quickbase_logger/logger.rb, line 104
def log_failure_to_quickbase(err)
  self.end = "#{formatted_date} #{formatted_time}"
  self.status = "Failure"

  self.log = self.log.join("\n")
  self.log << "\nERROR: #{err} \n"
  self.log << "BACKTRACE:\n\t#{err.backtrace.slice(0, 10).join("\n\t")}"

  begin
    save
  rescue StandardError => err
    text_logger.error("--- COULD NOT WRITE FAILURE TO QUICKBASE ---")
    text_logger.error(err)
    text_logger.error("BACKTRACE:\n\t#{err.backtrace.slice(0, 10).join("\n\t")}")
    raise err
  end
end
log_failure_to_text_file(err) click to toggle source
# File lib/quickbase_logger/logger.rb, line 80
def log_failure_to_text_file(err)
  joined_logs = self.log.join("\n\t")
  text_logger.info("LOGS:\n\t#{joined_logs}")

  text_logger.error("ERROR: #{err}")
  text_logger.error("BACKTRACE:\n\t#{err.backtrace.slice(0, 10).join("\n\t")}")
  text_logger.info("END")
end
log_success_to_quickbase() click to toggle source
# File lib/quickbase_logger/logger.rb, line 89
def log_success_to_quickbase
  self.status = "Success"
  self.end = "#{formatted_date} #{formatted_time}"
  self.log = self.log.join("\n")

  begin
    save
  rescue StandardError => err
    text_logger.error("--- COULD NOT WRITE SUCCESS TO QUICKBASE ---")
    text_logger.error(err)
    text_logger.error("BACKTRACE:\n\t#{err.backtrace.slice(0, 10).join("\n\t")}")
    raise err
  end
end
log_success_to_text_file() click to toggle source
# File lib/quickbase_logger/logger.rb, line 74
def log_success_to_text_file
  joined_logs = self.log.join("\n\t")
  text_logger.info("LOGS:\n\t#{joined_logs}")
  text_logger.info("END")
end