agent_log.rb 1.2KB

123456789101112131415161718192021222324252627282930
  1. # AgentLogs are temporary records of Agent activity, intended for debugging and error tracking. They can be viewed
  2. # in Agents' detail pages. AgentLogs with a `level` of 4 or greater are considered "errors" and automatically update
  3. # Agents' `last_error_log_at` column. These are often used to determine if an Agent is `working?`.
  4. class AgentLog < ActiveRecord::Base
  5. attr_accessible :agent, :inbound_event, :level, :message, :outbound_event
  6. belongs_to :agent
  7. belongs_to :inbound_event, :class_name => "Event"
  8. belongs_to :outbound_event, :class_name => "Event"
  9. validates_presence_of :agent, :message
  10. validates_numericality_of :level, :only_integer => true, :greater_than_or_equal_to => 0, :less_than => 5
  11. def self.log_for_agent(agent, message, options = {})
  12. log = agent.logs.create! options.merge(:message => message)
  13. if agent.logs.count > log_length
  14. oldest_id_to_keep = agent.logs.limit(1).offset(log_length - 1).pluck("agent_logs.id")
  15. agent.logs.where("agent_logs.id < ?", oldest_id_to_keep).delete_all
  16. end
  17. agent.update_column :last_error_log_at, Time.now if log.level >= 4
  18. log
  19. end
  20. def self.log_length
  21. ENV['AGENT_LOG_LENGTH'].present? ? ENV['AGENT_LOG_LENGTH'].to_i : 200
  22. end
  23. end