flapjack 0.7.5 → 0.7.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +4 -0
- data/lib/flapjack/data/notification.rb +5 -0
- data/lib/flapjack/gateways/email/alert.html.haml +2 -2
- data/lib/flapjack/gateways/email/alert.text.erb +1 -1
- data/lib/flapjack/gateways/email.rb +22 -33
- data/lib/flapjack/version.rb +1 -1
- data/spec/lib/flapjack/gateways/email_spec.rb +42 -1
- metadata +3 -3
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
## Flapjack Changelog
|
2
2
|
|
3
|
+
# 0.7.6 - 2013-05-20
|
4
|
+
- Bug: Problems with email notifications (no name, text part missing fields) gh-158 (@ali-graham)
|
5
|
+
|
3
6
|
# 0.7.5 - 2013-05-20
|
4
7
|
- Bug: Removal of contact media via POST /contacts is not working gh-175 (@ali-graham)
|
8
|
+
|
5
9
|
# 0.7.4 - 2013-05-16
|
6
10
|
- Bug: Event counter values are strings, not integers gh-173 (@auxesis)
|
7
11
|
|
@@ -18,6 +18,11 @@ module Flapjack
|
|
18
18
|
contacts = opts[:contacts]
|
19
19
|
return [] if contacts.nil?
|
20
20
|
@messages ||= contacts.collect {|contact|
|
21
|
+
|
22
|
+
# TODO don't include messages here if the contact doesn't have
|
23
|
+
# the medium enabled or has blackholed at this level -- this
|
24
|
+
# will simplify the executive logic
|
25
|
+
|
21
26
|
contact.media.keys.inject([]) { |ret, mk|
|
22
27
|
m = Flapjack::Data::Message.for_contact(:contact => contact)
|
23
28
|
m.notification = self
|
@@ -11,7 +11,7 @@
|
|
11
11
|
padding: 4px;
|
12
12
|
}
|
13
13
|
|
14
|
-
%p
|
14
|
+
%p Hi #{@contact_first_name}
|
15
15
|
|
16
16
|
%p Monitoring has detected the following:
|
17
17
|
|
@@ -20,7 +20,7 @@
|
|
20
20
|
%tr
|
21
21
|
%td
|
22
22
|
%strong Entity
|
23
|
-
%td= @
|
23
|
+
%td= @entity_name
|
24
24
|
%tr
|
25
25
|
%td
|
26
26
|
%strong Check
|
@@ -27,16 +27,20 @@ module Flapjack
|
|
27
27
|
def perform(notification)
|
28
28
|
@logger.debug "Woo, got a notification to send out: #{notification.inspect}"
|
29
29
|
|
30
|
-
notification_type
|
31
|
-
contact_first_name
|
32
|
-
contact_last_name
|
33
|
-
state
|
34
|
-
summary
|
35
|
-
time
|
30
|
+
@notification_type = notification['notification_type']
|
31
|
+
@contact_first_name = notification['contact_first_name']
|
32
|
+
@contact_last_name = notification['contact_last_name']
|
33
|
+
@state = notification['state']
|
34
|
+
@summary = notification['summary']
|
35
|
+
@time = notification['time']
|
36
|
+
@entity_name, @check = notification['event_id'].split(':')
|
36
37
|
|
37
38
|
entity_check = Flapjack::Data::EntityCheck.for_event_id(notification['event_id'],
|
38
39
|
:redis => ::Resque.redis)
|
39
40
|
|
41
|
+
@in_unscheduled_maintenance = entity_check.in_scheduled_maintenance?
|
42
|
+
@in_scheduled_maintenance = entity_check.in_unscheduled_maintenance?
|
43
|
+
|
40
44
|
headline_map = {'problem' => 'Problem: ',
|
41
45
|
'recovery' => 'Recovery: ',
|
42
46
|
'acknowledgement' => 'Acknowledgement: ',
|
@@ -44,12 +48,10 @@ module Flapjack
|
|
44
48
|
'unknown' => ''
|
45
49
|
}
|
46
50
|
|
47
|
-
headline = headline_map[notification_type] || ''
|
48
|
-
|
49
|
-
subject = "#{headline}'#{entity_check.check}' on #{entity_check.entity_name}"
|
50
|
-
subject += " is #{state.upcase}" unless ['acknowledgement', 'test'].include?(notification_type)
|
51
|
+
headline = headline_map[@notification_type] || ''
|
51
52
|
|
52
|
-
|
53
|
+
@subject = "#{headline}'#{@check}' on #{@entity_name}"
|
54
|
+
@subject += " is #{@state.upcase}" unless ['acknowledgement', 'test'].include?(@notification_type)
|
53
55
|
|
54
56
|
begin
|
55
57
|
host = @smtp_config ? @smtp_config['host'] : nil
|
@@ -61,10 +63,11 @@ module Flapjack
|
|
61
63
|
m_reply_to = m_from
|
62
64
|
m_to = notification['address']
|
63
65
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
66
|
+
@logger.debug("sending Flapjack::Notification::Email " +
|
67
|
+
"#{notification['id']} to: #{m_to} subject: #{@subject}")
|
68
|
+
|
69
|
+
mail = prepare_email(:subject => @subject,
|
70
|
+
:from => m_from, :to => m_to)
|
68
71
|
|
69
72
|
email = EM::P::SmtpClient.send(
|
70
73
|
:from => m_from,
|
@@ -97,22 +100,7 @@ module Flapjack
|
|
97
100
|
|
98
101
|
private
|
99
102
|
|
100
|
-
def self.prepare_email(
|
101
|
-
|
102
|
-
@notification_type = notification['notification_type']
|
103
|
-
@contact_first_name = notification['contact_first_name']
|
104
|
-
@contact_last_name = notification['contact_last_name']
|
105
|
-
@state = notification['state']
|
106
|
-
@summary = notification['summary']
|
107
|
-
@time = notification['time']
|
108
|
-
@entity, @check = notification['event_id'].split(':')
|
109
|
-
@in_unscheduled_maintenance = opts[:in_unscheduled_maintenance]
|
110
|
-
@in_scheduled_maintenance = opts[:in_scheduled_maintenance]
|
111
|
-
|
112
|
-
m_subject = notification['subject']
|
113
|
-
|
114
|
-
@logger.debug("sending Flapjack::Notification::Email " +
|
115
|
-
"#{notification['id']} to: #{opts[:to]} subject: #{m_subject}")
|
103
|
+
def self.prepare_email(opts = {})
|
116
104
|
|
117
105
|
text_template = ERB.new(File.read(File.dirname(__FILE__) +
|
118
106
|
'/email/alert.text.erb'))
|
@@ -121,17 +109,18 @@ module Flapjack
|
|
121
109
|
'/email/alert.html.haml'))
|
122
110
|
|
123
111
|
mail_scope = self
|
112
|
+
bnd = binding
|
124
113
|
|
125
114
|
# this part is the only use of the mail gem -- maybe this can be done
|
126
115
|
# using standard library calls instead?
|
127
116
|
mail = Mail.new do
|
128
117
|
from opts[:from]
|
129
118
|
to opts[:to]
|
130
|
-
subject
|
119
|
+
subject opts[:subject]
|
131
120
|
reply_to opts[:from]
|
132
121
|
|
133
122
|
text_part do
|
134
|
-
body text_template.result(
|
123
|
+
body text_template.result(bnd)
|
135
124
|
end
|
136
125
|
|
137
126
|
html_part do
|
data/lib/flapjack/version.rb
CHANGED
@@ -1,6 +1,47 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'flapjack/gateways/email'
|
3
3
|
|
4
|
-
describe Flapjack::Gateways::Email do
|
4
|
+
describe Flapjack::Gateways::Email, :logger => true do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
Flapjack::Gateways::Email.instance_variable_set('@config', {})
|
8
|
+
Flapjack::Gateways::Email.instance_variable_set('@logger', @logger)
|
9
|
+
Flapjack::Gateways::Email.start
|
10
|
+
end
|
11
|
+
|
12
|
+
it "sends a mail with text and html parts" do
|
13
|
+
email = mock('email')
|
14
|
+
|
15
|
+
entity_check = mock(Flapjack::Data::EntityCheck)
|
16
|
+
entity_check.should_receive(:in_scheduled_maintenance?).and_return(false)
|
17
|
+
entity_check.should_receive(:in_unscheduled_maintenance?).and_return(false)
|
18
|
+
|
19
|
+
redis = mock('redis')
|
20
|
+
::Resque.should_receive(:redis).and_return(redis)
|
21
|
+
|
22
|
+
Flapjack::Data::EntityCheck.should_receive(:for_event_id).
|
23
|
+
with('example.com:ping', :redis => redis).and_return(entity_check)
|
24
|
+
|
25
|
+
# TODO better checking of what gets passed here
|
26
|
+
EM::P::SmtpClient.should_receive(:send).with(
|
27
|
+
hash_including(:host => 'localhost',
|
28
|
+
:port => 25)).and_return(email)
|
29
|
+
|
30
|
+
response = mock(response)
|
31
|
+
response.should_receive(:"respond_to?").with(:code).and_return(true)
|
32
|
+
response.should_receive(:code).and_return(250)
|
33
|
+
|
34
|
+
EM::Synchrony.should_receive(:sync).with(email).and_return(response)
|
35
|
+
|
36
|
+
notification = {'notification_type' => 'recovery',
|
37
|
+
'contact_first_name' => 'John',
|
38
|
+
'contact_last_name' => 'Smith',
|
39
|
+
'state' => 'ok',
|
40
|
+
'summary' => 'smile',
|
41
|
+
'time' => Time.now.to_i,
|
42
|
+
'event_id' => 'example.com:ping'}
|
43
|
+
|
44
|
+
Flapjack::Gateways::Email.perform(notification)
|
45
|
+
end
|
5
46
|
|
6
47
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flapjack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -553,7 +553,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
553
553
|
version: '0'
|
554
554
|
segments:
|
555
555
|
- 0
|
556
|
-
hash:
|
556
|
+
hash: -549406373323108870
|
557
557
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
558
558
|
none: false
|
559
559
|
requirements:
|
@@ -562,7 +562,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
562
562
|
version: '0'
|
563
563
|
segments:
|
564
564
|
- 0
|
565
|
-
hash:
|
565
|
+
hash: -549406373323108870
|
566
566
|
requirements: []
|
567
567
|
rubyforge_project:
|
568
568
|
rubygems_version: 1.8.23
|