3scale/porta

View on GitHub
app/models/log_entry.rb

Summary

Maintainability
A
0 mins
Test Coverage
class LogEntry < ApplicationRecord

  include ThreeScale::Search::Scopes

  validates :level, :description, :provider, presence: true
  validates :description, length: {maximum: 255}

  TTL = 6.months

  LEVELS = {
    :info => 10,
    :warning => 20,
    :error => 30
  }

  belongs_to :provider, :class_name => "Account"
  belongs_to :buyer, :class_name => "Account"

  scope :by_buyer_query, ->(query) do
    where("buyer_id IN (?) or buyer_id IS NULL", Account.buyers.search_ids(query))
  end

  self.allowed_search_scopes = [:buyer_query]

  def level
    LEVELS.invert[self[:level]]
  end

  def self.log(type, text, provider, buyer)
    entry = create!({ :level => LEVELS[type], :description => text, :buyer => buyer, provider_id: provider.to_param})
    rails_log(type, text)
    entry
  rescue => exception
    System::ErrorReporting.report_error(exception)
  end

  def self.delete_old
    where('created_at < ?', LogEntry::TTL.ago).delete_all
  end

  def description=(text)
    super text.to_s.truncate(column_for_attribute(:description).limit)
  end

  private_class_method def self.rails_log(type, text)
    type = :warn if type == :warning
    Rails.logger.public_send(type, text)
  end

end