check.rb 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. module Blazer
  2. class Check < ActiveRecord::Base
  3. belongs_to :query
  4. validates :query_id, presence: true
  5. before_validation :set_state
  6. def set_state
  7. self.state ||= "new"
  8. end
  9. def split_emails
  10. emails.to_s.downcase.split(",").map(&:strip)
  11. end
  12. def update_state(rows, error)
  13. invert = respond_to?(:invert) && self.invert
  14. self.state =
  15. if error
  16. if error == Blazer::TIMEOUT_MESSAGE
  17. "timed out"
  18. else
  19. "error"
  20. end
  21. elsif rows.any?
  22. invert ? "passing" : "failing"
  23. else
  24. invert ? "failing" : "passing"
  25. end
  26. self.last_run_at = Time.now if respond_to?(:last_run_at=)
  27. if respond_to?(:timeouts=)
  28. if state == "timed out"
  29. self.timeouts += 1
  30. self.state = "disabled" if timeouts >= 3
  31. else
  32. self.timeouts = 0
  33. end
  34. end
  35. # do not notify on creation, except when not passing
  36. if (state_was || state != "passing") && state != state_was && emails.present?
  37. Blazer::CheckMailer.state_change(self, state, state_was, rows.size, error).deliver_later
  38. end
  39. save! if changed?
  40. end
  41. end
  42. end