Harbor Documentation

Harbor::LogAppenders::Email

Attributes

  • duplicate_subject_delivery_threshold [RW] (Not documented)

Public Class Methods

new(container, from, *addresses)

      # File lib/harbor/logging/appenders/email.rb, line 8
 8:       def initialize(container, from, *addresses)
 9:         @container = container
10:         @from = from
11:         @addresses = addresses
12:         @tracked_subjects = []
13: 
14:         # Deliver emails with exact-match subjects only every 10 Minutes
15:         @duplicate_subject_delivery_threshold = 60 * 10
16: 
17:         super("exception_notifier", :level => :error)
18:       end

Public Instance Methods

write(event)

      # File lib/harbor/logging/appenders/email.rb, line 20
20:       def write(event)
21:         unless @level > event.level
22:           flush_expired_subjects
23: 
24:           data = event.data
25:           subject = data.split($/, 2)[0]
26: 
27:           if tracked_subject = @tracked_subjects.detect { |tracked_subject| tracked_subject.subject == subject }
28:             tracked_subject.occurances << Time.now
29:             
30:             # Don't send the email if we've already sent one within the time threshold
31:             return false if (Time.now - tracked_subject.sent_at) < @duplicate_subject_delivery_threshold
32:           else
33:             tracked_subject = TrackedSubject.new(subject)
34:             tracked_subject.occurances << Time.now
35: 
36:             @tracked_subjects << tracked_subject
37:           end
38: 
39:           mailer = @container.get(:mailer)
40:           mailer.from = @from
41:           mailer.to = @addresses
42: 
43:           data << "\n(from: #{`hostname`.chomp}, PID: #{Process.pid})"
44: 
45:           mailer.subject = "[ERROR] #{subject}"
46:           mailer["x_priority"] = "1 (Highest)"
47:           mailer["x_msmail_priority"] = "High"
48:           mailer.text = if tracked_subject.occurances.size > 1
49:             "Repeated #{tracked_subject.occurances.size} times since #{tracked_subject.sent_at.strftime('%Y-%m-%d %R%z')}\n\n#{data}"
50:           else
51:             data
52:           end
53:           mailer.send!
54: 
55:           tracked_subject.occurances.clear
56:           tracked_subject.sent_at = Time.now
57:         end
58:       end

Private Instance Methods

flush_expired_subjects()

Flushes items from the @tracked_subjects array when they are no longer useful

      # File lib/harbor/logging/appenders/email.rb, line 65
65:       def flush_expired_subjects
66:         @tracked_subjects.reject! do |tracked_subject|
67:           tracked_subject.occurances.empty? && (Time.now - tracked_subject.sent_at) >= @duplicate_subject_delivery_threshold
68:         end
69:       end