Class: Anomonitor::Anomaly
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Anomonitor::Anomaly
- Defined in:
- app/models/anomonitor/anomaly.rb
Instance Method Summary collapse
- #cleared_after_ack? ⇒ Boolean
- #items_list ⇒ Object
- #manual_resolve? ⇒ Boolean
- #merge_tags!(extra) ⇒ Object
- #open? ⇒ Boolean
- #reopen! ⇒ Object
- #resolve!(by: "auto", notify: false) ⇒ Object
- #resolved? ⇒ Boolean
- #retry_webhook! ⇒ Object
- #tag_value(key) ⇒ Object
- #webhook_failed? ⇒ Boolean
Instance Method Details
#cleared_after_ack? ⇒ Boolean
30 31 32 |
# File 'app/models/anomonitor/anomaly.rb', line 30 def cleared_after_ack? tag_value("cleared_at").present? end |
#items_list ⇒ Object
75 76 77 78 79 80 81 82 83 |
# File 'app/models/anomonitor/anomaly.rb', line 75 def items_list list = tag_value("items_list") return Array(list) if list.is_a?(Array) items = tag_value("items") return [] if items.nil? || items.to_s.empty? items.to_s.split(",").map(&:strip) end |
#manual_resolve? ⇒ Boolean
26 27 28 |
# File 'app/models/anomonitor/anomaly.rb', line 26 def manual_resolve? tag_value("resolved_by").to_s == "manual" end |
#merge_tags!(extra) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'app/models/anomonitor/anomaly.rb', line 92 def (extra) current = .is_a?(Hash) ? .stringify_keys : {} extra = extra.stringify_keys extra.each do |k, v| if v.nil? current.delete(k) else current[k] = v end end self. = current end |
#open? ⇒ Boolean
14 15 16 |
# File 'app/models/anomonitor/anomaly.rb', line 14 def open? resolved_at.nil? end |
#reopen! ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'app/models/anomonitor/anomaly.rb', line 46 def reopen! # Lift manual-ack silence so the next matching drift can notify again. # Keeps history as resolved unless it was still open. if open? ("reopened_at" => Time.current.iso8601) save! return self end ( "cleared_at" => Time.current.iso8601, "reopened_at" => Time.current.iso8601 ) save! self end |
#resolve!(by: "auto", notify: false) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 |
# File 'app/models/anomonitor/anomaly.rb', line 34 def resolve!(by: "auto", notify: false) return self if resolved? ("resolved_by" => by.to_s) update!(resolved_at: Time.current) if notify event = by.to_s == "manual" ? Notifiers::ACKED : Notifiers::RESOLVED Anomonitor.config.build_notifier.deliver(self, event: event) end self end |
#resolved? ⇒ Boolean
18 19 20 |
# File 'app/models/anomonitor/anomaly.rb', line 18 def resolved? !open? end |
#retry_webhook! ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 |
# File 'app/models/anomonitor/anomaly.rb', line 63 def retry_webhook! delivered = Anomonitor.config.build_notifier.deliver( self, event: resolved? ? Notifiers::RESOLVED : Notifiers::DETECTED ) update!( webhook_status: delivered ? "delivered" : "failed", webhook_delivered_at: delivered ? Time.current : webhook_delivered_at ) delivered end |
#tag_value(key) ⇒ Object
85 86 87 88 89 90 |
# File 'app/models/anomonitor/anomaly.rb', line 85 def tag_value(key) t = return nil unless t.is_a?(Hash) t[key.to_s] || t[key.to_sym] end |
#webhook_failed? ⇒ Boolean
22 23 24 |
# File 'app/models/anomonitor/anomaly.rb', line 22 def webhook_failed? webhook_status.to_s == "failed" end |