check.rb 1.2 KB

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