flapjack 1.6.0rc1 → 1.6.0rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1a5aa06a9caf7b8c5b81d7b5b5245f8b623cda1b
4
- data.tar.gz: 5d10f49f09e6ab9e87da21537d80add6409708a8
3
+ metadata.gz: 77cf774d68b395a3d2c146b884788e5e71020479
4
+ data.tar.gz: 14de90365627b2362a59e6e0249861c4a070fc5c
5
5
  SHA512:
6
- metadata.gz: e4d57fdb2ee84f2a56118808d390fcea5087ca7b68c36c4588d8a352d490d98cccba536509606189524515800fd0b559a6b30dfeb2ab7ccc552a035dad5cd9a5
7
- data.tar.gz: fe92aeefa1f66b21d690d7902f775b175a1d95fc09ae601107bd8aad5fbcfe28d784be65f561387b7c5192c87f45b4d9b52e8457cd935b226606c14f37b73dcf
6
+ metadata.gz: ef929d2621508fde4072e9b3d66e1139315d581ed2e8304b503fe6e95b8669c82127ce9561e1ceea989b26686d015086a0a213d703341f3d81bf246b08cf87b0
7
+ data.tar.gz: 85d21013929b673fc3ca4e0b991c2c6decaec14b7819bd0e19f61186073a3382f0f3b698d2e91f37decdbed0344d3bfb08eeb9ffed3e2be8853dc9ac3093a176
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  ## Flapjack Changelog
2
2
 
3
- # 1.6.0 - 2015-05-13
3
+ # 1.6.0rc2 - 2015-05-14
4
+ - Bug: Fix SNS query encoding and subject length #867 (@ali-graham, @xcxsxvx)
5
+ - Chore: improve debug logging in pagerduty when looking for acks e44abd5 (@jessereynolds)
6
+
7
+ # 1.6.0rc1 - 2015-05-13
4
8
  - Feature: use token authentication for pagerduty gateway #831 (@alperkokmen)
5
9
  - Feature: expose failure delays in web UI #849 (@jessereynolds)
6
10
  - Bug: performance improvement - fix usage of KEYS command for entity check names c57d3a5 (@ali-graham)
@@ -66,7 +66,11 @@ module Flapjack
66
66
  notification_id = alert.notification_id
67
67
  message_type = alert.rollup ? 'rollup' : 'alert'
68
68
 
69
- sms_template_erb, sms_template =
69
+ aws_sns_subject_template_erb, aws_sns_subject_template =
70
+ load_template(@config['templates'], "#{message_type}_subject",
71
+ 'text', File.join(File.dirname(__FILE__), 'aws_sns'))
72
+
73
+ aws_sns_template_erb, aws_sns_template =
70
74
  load_template(@config['templates'], message_type, 'text',
71
75
  File.join(File.dirname(__FILE__), 'aws_sns'))
72
76
 
@@ -74,10 +78,14 @@ module Flapjack
74
78
  bnd = binding
75
79
 
76
80
  begin
77
- message = sms_template_erb.result(bnd).chomp
81
+ erb_to_be_executed = aws_sns_subject_template
82
+ subject = aws_sns_subject_template_erb.result(bnd).chomp
83
+
84
+ erb_to_be_executed = aws_sns_template
85
+ message = aws_sns_template_erb.result(bnd).chomp
78
86
  rescue => e
79
- @logger.error "Error while executing the ERB for an sms: " +
80
- "ERB being executed: #{sms_template}"
87
+ @logger.error "Error while executing the ERB for an AWS SNS message: " +
88
+ "ERB being executed: #{erb_to_be_executed}"
81
89
  raise
82
90
  end
83
91
 
@@ -102,7 +110,8 @@ module Flapjack
102
110
  return
103
111
  end
104
112
 
105
- query = {'Subject' => message,
113
+ query = {'Subject' => (subject.length > 100) ?
114
+ subject[0..99].gsub(/...$/, '...') : subject,
106
115
  'TopicArn' => address,
107
116
  'Message' => message,
108
117
  'Action' => 'Publish',
@@ -142,12 +151,18 @@ module Flapjack
142
151
  end
143
152
 
144
153
  def self.string_to_sign(method, host, uri, query)
145
- query = query.sort_by { |key, value| key }
154
+ @safe_re ||= Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")
155
+
156
+ # we should possibly escape the keys as well, but they are less
157
+ # likely to have problematic characters
158
+ encoded_query = query.keys.sort.collect {|key|
159
+ "#{key}=#{URI.escape(query[key].to_s, @safe_re)}"
160
+ }.join("&")
146
161
 
147
162
  [method.upcase,
148
163
  host.downcase,
149
164
  uri,
150
- URI.encode_www_form(query)
165
+ encoded_query
151
166
  ].join("\n")
152
167
  end
153
168
 
@@ -0,0 +1,4 @@
1
+ <%= @alert.type_sentence_case %>: '<%= @alert.check %>' on <%= @alert.entity -%>
2
+ <% unless ['acknowledgement', 'test'].include?(@alert.notification_type) -%>
3
+ is <%= @alert.state_title_case -%>
4
+ <% end -%>
@@ -0,0 +1 @@
1
+ <%= @alert.type_sentence_case %>: <%= @alert.rollup_states_summary -%>
@@ -174,11 +174,16 @@ module Flapjack
174
174
  end
175
175
 
176
176
  def find_pagerduty_acknowledgements
177
- @logger.debug("looking for acks in pagerduty for unack'd problems")
178
-
179
177
  unacknowledged_failing_checks = Flapjack::Data::EntityCheck.unacknowledged_failing(:redis => @redis)
178
+ if unacknowledged_failing_checks.empty?
179
+ @logger.debug("skipping looking for acks in pagerduty as there are no unacknowledged failing checks")
180
+ return nil
181
+ else
182
+ @logger.debug("looking for acks in pagerduty for unack'd problems")
183
+ end
180
184
 
181
- @logger.debug "found unacknowledged failing checks as follows: " + unacknowledged_failing_checks.join(', ')
185
+ @logger.debug "found #{unacknowledged_failing_checks.length} unacknowledged failing checks as follows: " +
186
+ unacknowledged_failing_checks.map {|c| "#{c.entity_name}:#{c.check}"}.join(', ')
182
187
 
183
188
  unacknowledged_failing_checks.each do |entity_check|
184
189
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  module Flapjack
4
- VERSION = "1.6.0rc1"
4
+ VERSION = "1.6.0rc2"
5
5
  end
@@ -53,6 +53,28 @@ describe Flapjack::Gateways::AwsSns, :logger => true do
53
53
  expect(req).to have_been_requested
54
54
  end
55
55
 
56
+ it 'truncates an overly long subject when sending' do
57
+ req = stub_request(:post, "http://sns.us-east-1.amazonaws.com/").
58
+ with(:query => hash_including({'Action' => 'Publish',
59
+ 'AWSAccessKeyId' => config['access_key'],
60
+ 'TopicArn' => message['address'],
61
+ 'SignatureVersion' => '2',
62
+ 'SignatureMethod' => 'HmacSHA256',
63
+ 'Subject' => "Recovery: '#{'1234567890' * 8}123456..."})).
64
+ to_return(:status => 200)
65
+
66
+ EM.synchrony do
67
+ expect(Flapjack::RedisPool).to receive(:new).and_return(redis)
68
+
69
+ long_event_id = "example.com:#{'1234567890' * 10}"
70
+ alert = Flapjack::Data::Alert.new(message.merge('event_id' => long_event_id), :logger => @logger)
71
+ aws_sns = Flapjack::Gateways::AwsSns.new(:config => config, :logger => @logger)
72
+ aws_sns.deliver(alert)
73
+ EM.stop
74
+ end
75
+ expect(req).to have_been_requested
76
+ end
77
+
56
78
  it "does not send an SMS message with an invalid config" do
57
79
  EM.synchrony do
58
80
  expect(Flapjack::RedisPool).to receive(:new).and_return(redis)
@@ -75,7 +97,8 @@ describe Flapjack::Gateways::AwsSns, :logger => true do
75
97
  let(:uri) { '/' }
76
98
 
77
99
  let(:query) { {'TopicArn' => 'HelloWorld',
78
- 'Action' => 'Publish'} }
100
+ 'Action' => 'Publish',
101
+ 'Message' => 'Hello World'} }
79
102
 
80
103
  let(:string_to_sign) { Flapjack::Gateways::AwsSns.string_to_sign(method, host, uri, query) }
81
104
 
@@ -94,7 +117,7 @@ describe Flapjack::Gateways::AwsSns, :logger => true do
94
117
  end
95
118
 
96
119
  it 'should put the encoded, sorted query-string on the fourth line' do
97
- expect(lines[3]).to eq("Action=Publish&TopicArn=HelloWorld")
120
+ expect(lines[3]).to eq("Action=Publish&Message=Hello%20World&TopicArn=HelloWorld")
98
121
  end
99
122
 
100
123
  end
@@ -142,9 +142,9 @@ describe Flapjack::Gateways::Pagerduty, :logger => true do
142
142
  })
143
143
 
144
144
  entity_check = double('entity_check')
145
- expect(entity_check).to receive(:check).exactly(1).times.and_return('PING')
145
+ expect(entity_check).to receive(:check).exactly(2).times.and_return('PING')
146
146
  expect(entity_check).to receive(:contacts).and_return([contact])
147
- expect(entity_check).to receive(:entity_name).exactly(1).times.and_return('foo-app-01.bar.net')
147
+ expect(entity_check).to receive(:entity_name).exactly(2).times.and_return('foo-app-01.bar.net')
148
148
  expect(entity_check).to receive(:in_unscheduled_maintenance?).exactly(1).times.and_return(false)
149
149
  expect(entity_check).to receive(:failed?).exactly(1).times.and_return(true)
150
150
  expect(Flapjack::Data::Event).to receive(:create_acknowledgement).with('foo-app-01.bar.net', 'PING',
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: 1.6.0rc1
4
+ version: 1.6.0rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lindsay Holmwood
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-05-13 00:00:00.000000000 Z
14
+ date: 2015-05-14 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: dante
@@ -442,7 +442,9 @@ files:
442
442
  - lib/flapjack/filters/unscheduled_maintenance.rb
443
443
  - lib/flapjack/gateways/aws_sns.rb
444
444
  - lib/flapjack/gateways/aws_sns/alert.text.erb
445
+ - lib/flapjack/gateways/aws_sns/alert_subject.text.erb
445
446
  - lib/flapjack/gateways/aws_sns/rollup.text.erb
447
+ - lib/flapjack/gateways/aws_sns/rollup_subject.text.erb
446
448
  - lib/flapjack/gateways/email.rb
447
449
  - lib/flapjack/gateways/email/alert.html.erb
448
450
  - lib/flapjack/gateways/email/alert.text.erb