interferon 0.0.12 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,87 +6,232 @@ require 'interferon/destinations/datadog'
6
6
  include Interferon
7
7
 
8
8
  describe Interferon::Interferon do
9
- it "would not be dry run if only alert message changed" do
10
- alert1 = create_test_alert('name1', 'testquery', 'message1')
11
- alert2 = mock_alert_json('name2', 'testquery', 'message2')
12
9
 
13
- expect(Interferon::Interferon.same_alerts_for_dry_run_purpose(alert1, alert2)).to be true
14
- end
10
+ let(:the_existing_alerts) {mock_existing_alerts}
11
+ let(:dest) {MockDest.new(the_existing_alerts)}
12
+
13
+ context "when checking alerts have changed" do
14
+ it "detects a change if alert message is different" do
15
+ alert1 = create_test_alert('name1', 'testquery', 'message1')
16
+ alert2 = mock_alert_json('name2', 'testquery', 'message2')
17
+
18
+ expect(Interferon::Interferon.same_alerts(dest, [alert1, []], alert2)).to be false
19
+ end
20
+
21
+ it "detects a change if datadog query is different" do
22
+ alert1 = create_test_alert('name1', 'testquery1', 'message1')
23
+ alert2 = mock_alert_json('name2', 'testquery2', 'message2')
15
24
 
16
- it "would be dry run if alert datadog query changed" do
17
- alert1 = create_test_alert('name1', 'testquery1', 'message1')
18
- alert2 = mock_alert_json('name2', 'testquery2', 'message2')
25
+ expect(Interferon::Interferon.same_alerts(dest, [alert1, []], alert2)).to be false
26
+ end
19
27
 
20
- expect(Interferon::Interferon.same_alerts_for_dry_run_purpose(alert1, alert2)).to be false
28
+ it "detects a change if alert notify_no_data is different" do
29
+ alert1 = create_test_alert('name1', 'testquery1', 'message1', false)
30
+ alert2 = mock_alert_json('name2', 'testquery2', 'message2', true)
31
+
32
+ expect(Interferon::Interferon.same_alerts(dest, [alert1, []], alert2)).to be false
33
+ end
34
+
35
+ it "detects a change if alert silenced is different" do
36
+ alert1 = create_test_alert('name1', 'testquery1', 'message1', false, true)
37
+ alert2 = mock_alert_json('name2', 'testquery2', 'message2', false, false)
38
+
39
+ expect(Interferon::Interferon.same_alerts(dest, [alert1, []], alert2)).to be false
40
+ end
41
+
42
+ it "does not detect a change when alert datadog query and message are the same" do
43
+ alert1 = create_test_alert('name1', 'testquery1', 'message1')
44
+ alert2 = mock_alert_json('name1', 'testquery1', "message1\nThis alert was created via the alerts framework")
45
+
46
+ expect(Interferon::Interferon.same_alerts(dest, [alert1, []], alert2)).to be true
47
+ end
21
48
  end
22
49
 
23
50
  context "dry_run_update_alerts_on_destination" do
24
- let(:the_existing_alerts) {mock_existing_alerts}
25
- let(:dest) {MockDest.new(the_existing_alerts)}
51
+ let(:interferon) {Interferon::Interferon.new(nil,nil,nil,nil,true,0)}
52
+
26
53
  before do
27
54
  allow_any_instance_of(MockAlert).to receive(:evaluate)
55
+ allow(dest).to receive(:remove_alert)
28
56
  allow(dest).to receive(:remove_alert_by_id)
29
57
  allow(dest).to receive(:report_stats)
30
58
  end
31
59
 
32
- it 'dry run does not re-run existing alerts' do
60
+ it 'does not re-run existing alerts' do
33
61
  alerts = mock_existing_alerts
34
- interferon = Interferon::Interferon.new(nil,nil,nil,nil)
35
62
  expect(dest).not_to receive(:create_alert)
36
63
  expect(dest).not_to receive(:remove_alert_by_id)
37
-
38
- interferon.update_alerts_on_destination(dest, ['host'], [alerts['name1'], alerts['name2']], {}, true)
64
+
65
+ interferon.update_alerts_on_destination(dest, ['host'], [alerts['name1'], alerts['name2']], {})
39
66
  end
40
67
 
41
- it 'dry run runs added alerts' do
68
+ it 'runs added alerts' do
42
69
  alerts = mock_existing_alerts
43
- interferon = Interferon::Interferon.new(nil,nil,nil,nil)
44
70
  added = create_test_alert('name3', 'testquery3', '')
45
71
  expect(dest).to receive(:create_alert).once.and_call_original
46
- expect(dest).to receive(:remove_alert_by_id).with('[-dry-run-]name3').once
47
-
48
- interferon.update_alerts_on_destination(dest, ['host'], [alerts['name1'], alerts['name2'], added], {}, true)
72
+ expect(dest).to receive(:remove_alert_by_id).with('3').once
73
+
74
+ interferon.update_alerts_on_destination(dest, ['host'], [alerts['name1'], alerts['name2'], added], {})
75
+ end
76
+
77
+ it 'runs updated alerts' do
78
+ added = create_test_alert('name1', 'testquery3', '')
79
+ expect(dest).to receive(:create_alert).once.and_call_original
80
+ expect(dest).to receive(:remove_alert_by_id).with('1').once
81
+
82
+ interferon.update_alerts_on_destination(dest, ['host'], [added], {})
83
+ end
84
+
85
+ it 'deletes old alerts' do
86
+ expect(dest).to receive(:remove_alert).twice
87
+
88
+ interferon.update_alerts_on_destination(dest, ['host'], [], {})
89
+ end
90
+
91
+ it 'deletes duplicate old alerts' do
92
+ alert1 = mock_alert_json('name1', 'testquery1', '', false, false, [1, 2, 3])
93
+ alert2 = mock_alert_json('name2', 'testquery2', '')
94
+ existing_alerts = {'name1' => alert1, 'name2' => alert2}
95
+ dest = MockDest.new(existing_alerts)
96
+ allow(dest).to receive(:remove_alert)
97
+ allow(dest).to receive(:remove_alert_by_id)
98
+ allow(dest).to receive(:report_stats)
99
+
100
+ expect(dest).to receive(:remove_alert).with(existing_alerts['name1'])
101
+ expect(dest).to receive(:remove_alert).with(existing_alerts['name2'])
102
+
103
+ interferon.update_alerts_on_destination(dest, ['host'], [], {})
104
+ end
105
+
106
+ it 'deletes duplicate old alerts when creating new alert' do
107
+ alert1 = mock_alert_json('name1', 'testquery1', '', false, false, [1, 2, 3])
108
+ alert2 = mock_alert_json('name2', 'testquery2', '')
109
+ existing_alerts = {'name1' => alert1, 'name2' => alert2}
110
+ dest = MockDest.new(existing_alerts)
111
+ allow(dest).to receive(:remove_alert)
112
+ allow(dest).to receive(:remove_alert_by_id)
113
+ allow(dest).to receive(:report_stats)
114
+
115
+ added = create_test_alert('name1', 'testquery1', '')
116
+
117
+ # Since we change id to nil we will not be attempting to delete duplicate alerts
118
+ # during dry run
119
+ # expect(dest).to receive(:remove_alert).with(existing_alerts['name1'])
120
+ expect(dest).to receive(:remove_alert).with(existing_alerts['name2'])
121
+
122
+ interferon.update_alerts_on_destination(dest, ['host'], [added], {})
123
+ end
124
+ end
125
+
126
+ context "update_alerts_on_destination" do
127
+ let(:interferon) {Interferon::Interferon.new(nil,nil,nil,nil,false,0)}
128
+
129
+ before do
130
+ allow_any_instance_of(MockAlert).to receive(:evaluate)
131
+ allow(dest).to receive(:remove_alert)
132
+ allow(dest).to receive(:remove_alert_by_id)
133
+ allow(dest).to receive(:report_stats)
49
134
  end
50
135
 
51
- it 'dry run runs updated alerts' do
136
+ it 'does not re-run existing alerts' do
52
137
  alerts = mock_existing_alerts
53
- interferon = Interferon::Interferon.new(nil,nil,nil,nil)
138
+ expect(dest).not_to receive(:create_alert)
139
+ expect(dest).not_to receive(:remove_alert_by_id)
140
+
141
+ interferon.update_alerts_on_destination(dest, ['host'], [alerts['name1'], alerts['name2']], {})
142
+ end
143
+
144
+ it 'runs added alerts' do
145
+ alerts = mock_existing_alerts
146
+ added = create_test_alert('name3', 'testquery3', '')
147
+ expect(dest).to receive(:create_alert).once.and_call_original
148
+ expect(dest).not_to receive(:remove_alert_by_id).with('3')
149
+
150
+ interferon.update_alerts_on_destination(dest, ['host'], [alerts['name1'], alerts['name2'], added], {})
151
+ end
152
+
153
+ it 'runs updated alerts' do
54
154
  added = create_test_alert('name1', 'testquery3', '')
55
155
  expect(dest).to receive(:create_alert).once.and_call_original
56
- expect(dest).to receive(:remove_alert_by_id).with('[-dry-run-]name1').once
57
-
58
- interferon.update_alerts_on_destination(dest, ['host'], [added], {}, true)
156
+ expect(dest).not_to receive(:remove_alert_by_id).with('1')
157
+
158
+ interferon.update_alerts_on_destination(dest, ['host'], [added], {})
59
159
  end
60
160
 
61
- def mock_existing_alerts
62
- alert1 = mock_alert_json('name1', 'testquery1', '')
161
+ it 'deletes old alerts' do
162
+ alerts = mock_existing_alerts
163
+ expect(dest).to receive(:remove_alert).with(alerts['name1'])
164
+ expect(dest).to receive(:remove_alert).with(alerts['name2'])
165
+
166
+ interferon.update_alerts_on_destination(dest, ['host'], [], {})
167
+ end
168
+
169
+ it 'deletes duplicate old alerts' do
170
+ alert1 = mock_alert_json('name1', 'testquery1', '', false, false, [1, 2, 3])
63
171
  alert2 = mock_alert_json('name2', 'testquery2', '')
64
- {'name1'=>alert1, 'name2'=>alert2}
172
+ existing_alerts = {'name1' => alert1, 'name2' => alert2}
173
+ dest = MockDest.new(existing_alerts)
174
+ allow(dest).to receive(:remove_alert)
175
+ allow(dest).to receive(:remove_alert_by_id)
176
+ allow(dest).to receive(:report_stats)
177
+
178
+ expect(dest).to receive(:remove_alert).with(existing_alerts['name1'])
179
+ expect(dest).to receive(:remove_alert).with(existing_alerts['name2'])
180
+
181
+ interferon.update_alerts_on_destination(dest, ['host'], [], {})
65
182
  end
66
183
 
67
- class MockDest < Interferon::Destinations::Datadog
68
- @existing_alerts
184
+ it 'deletes duplicate old alerts when creating new alert' do
185
+ alert1 = mock_alert_json('name1', 'testquery1', '', false, false, [1, 2, 3])
186
+ alert2 = mock_alert_json('name2', 'testquery2', '')
187
+ existing_alerts = {'name1' => alert1, 'name2' => alert2}
188
+ dest = MockDest.new(existing_alerts)
189
+ allow(dest).to receive(:report_stats)
190
+
191
+ added = create_test_alert('name1', 'testquery1', '')
69
192
 
70
- def initialize(the_existing_alerts)
71
- @existing_alerts = the_existing_alerts
72
- end
193
+ expect(dest).to receive(:remove_alert).with(mock_alert_json('name1', 'testquery1', '', false, false, [2, 3]))
194
+ expect(dest).to receive(:remove_alert).with(existing_alerts['name2'])
73
195
 
74
- def create_alert(alert, people)
75
- name = alert['name']
76
- [name, name]
77
- end
196
+ interferon.update_alerts_on_destination(dest, ['host'], [added], {})
197
+ end
198
+ end
199
+
200
+ def mock_existing_alerts
201
+ alert1 = mock_alert_json('name1', 'testquery1', '')
202
+ alert2 = mock_alert_json('name2', 'testquery2', '')
203
+ {'name1' => alert1, 'name2' => alert2}
204
+ end
205
+
206
+ class MockDest < Interferon::Destinations::Datadog
207
+ @existing_alerts
78
208
 
79
- def existing_alerts
80
- @existing_alerts
81
- end
209
+ def initialize(the_existing_alerts)
210
+ @existing_alerts = the_existing_alerts
211
+ end
212
+
213
+ def create_alert(alert, people)
214
+ name = alert['name']
215
+ id = [alert['name'][-1]]
216
+ [name, id]
217
+ end
218
+
219
+ def existing_alerts
220
+ @existing_alerts
82
221
  end
83
222
  end
84
223
 
85
- def mock_alert_json(name, datadog_query, message)
86
- {'name'=> name,'query'=> datadog_query,'message'=> message}
224
+ def mock_alert_json(name, datadog_query, message, notify_no_data=false, silenced=false, id=nil)
225
+ { 'name'=> name,
226
+ 'query'=> datadog_query,
227
+ 'message'=> message,
228
+ 'notify_no_data' => notify_no_data,
229
+ 'silenced' => silenced,
230
+ 'id' => id.nil? ? [name[-1]] : id
231
+ }
87
232
  end
88
233
 
89
- def create_test_alert(name, datadog_query, message)
234
+ def create_test_alert(name, datadog_query, message, notify_no_data=false, silenced=false)
90
235
  alert_dsl = MockAlertDSL.new
91
236
  metric_dsl = MockMetricDSL.new
92
237
  metric_dsl.datadog_query(datadog_query)
@@ -94,6 +239,8 @@ describe Interferon::Interferon do
94
239
  alert_dsl.name(name)
95
240
  alert_dsl.applies(true)
96
241
  alert_dsl.message(message)
242
+ alert_dsl.silenced(silenced)
243
+ alert_dsl.notify_no_data(notify_no_data)
97
244
  notify_dsl = MockNotifyDSL.new
98
245
  notify_dsl.groups(['a'])
99
246
  alert_dsl.notify(notify_dsl)
@@ -0,0 +1,41 @@
1
+ require "spec_helper"
2
+ require "interferon/work_hours_helper"
3
+
4
+ describe Interferon::WorkHoursHelper do
5
+ subject { described_class }
6
+
7
+ describe ".now_is_work_hour?" do
8
+ context "when it is a work hour in a work day" do
9
+ it "return true" do
10
+ expect(subject.is_work_hour?(
11
+ Time.parse("Mon Nov 26 9:01:20 PST 2001").utc
12
+ )).to be_truthy
13
+ expect(subject.is_work_hour?(
14
+ Time.parse("Fri Nov 30 16:35:20 PST 2001").utc
15
+ )).to be_truthy
16
+ end
17
+ end
18
+
19
+ context "when it is a work hour in a weekend" do
20
+ it "return false" do
21
+ expect(subject.is_work_hour?(
22
+ Time.parse("Sat Nov 24 09:01:20 PST 2001").utc
23
+ )).to be_falsy
24
+ expect(subject.is_work_hour?(
25
+ Time.parse("Sun Nov 25 09:01:20 PST 2001").utc
26
+ )).to be_falsy
27
+ end
28
+ end
29
+
30
+ context "when it is not a work hour" do
31
+ it "return false" do
32
+ expect(subject.is_work_hour?(
33
+ Time.parse("Thu Nov 29 08:33:20 PST 2001").utc
34
+ )).to be_falsy
35
+ expect(subject.is_work_hour?(
36
+ Time.parse("Fri Nov 30 17:33:20 PST 2001").utc
37
+ )).to be_falsy
38
+ end
39
+ end
40
+ end
41
+ end
metadata CHANGED
@@ -1,113 +1,189 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: interferon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Serebryany
8
+ - Jimmy Ngo
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2016-05-24 00:00:00.000000000 Z
12
+ date: 2017-01-05 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: dogapi
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
- - - "~>"
18
+ - - ~>
18
19
  - !ruby/object:Gem::Version
19
20
  version: '1.11'
20
- - - ">="
21
+ - - ! '>='
21
22
  - !ruby/object:Gem::Version
22
23
  version: 1.11.1
23
24
  type: :runtime
24
25
  prerelease: false
25
26
  version_requirements: !ruby/object:Gem::Requirement
26
27
  requirements:
27
- - - "~>"
28
+ - - ~>
28
29
  - !ruby/object:Gem::Version
29
30
  version: '1.11'
30
- - - ">="
31
+ - - ! '>='
31
32
  - !ruby/object:Gem::Version
32
33
  version: 1.11.1
33
34
  - !ruby/object:Gem::Dependency
34
35
  name: aws-sdk
35
36
  requirement: !ruby/object:Gem::Requirement
36
37
  requirements:
37
- - - "~>"
38
+ - - ~>
38
39
  - !ruby/object:Gem::Version
39
40
  version: '1.35'
40
- - - ">="
41
+ - - ! '>='
41
42
  - !ruby/object:Gem::Version
42
43
  version: 1.35.1
43
44
  type: :runtime
44
45
  prerelease: false
45
46
  version_requirements: !ruby/object:Gem::Requirement
46
47
  requirements:
47
- - - "~>"
48
+ - - ~>
48
49
  - !ruby/object:Gem::Version
49
50
  version: '1.35'
50
- - - ">="
51
+ - - ! '>='
51
52
  - !ruby/object:Gem::Version
52
53
  version: 1.35.1
53
54
  - !ruby/object:Gem::Dependency
54
55
  name: dogstatsd-ruby
55
56
  requirement: !ruby/object:Gem::Requirement
56
57
  requirements:
57
- - - "~>"
58
+ - - ~>
58
59
  - !ruby/object:Gem::Version
59
60
  version: '1.4'
60
- - - ">="
61
+ - - ! '>='
61
62
  - !ruby/object:Gem::Version
62
63
  version: 1.4.1
63
64
  type: :runtime
64
65
  prerelease: false
65
66
  version_requirements: !ruby/object:Gem::Requirement
66
67
  requirements:
67
- - - "~>"
68
+ - - ~>
68
69
  - !ruby/object:Gem::Version
69
70
  version: '1.4'
70
- - - ">="
71
+ - - ! '>='
71
72
  - !ruby/object:Gem::Version
72
73
  version: 1.4.1
74
+ - !ruby/object:Gem::Dependency
75
+ name: diffy
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ~>
79
+ - !ruby/object:Gem::Version
80
+ version: 3.1.0
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: 3.1.0
84
+ type: :runtime
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: 3.1.0
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 3.1.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: parallel
96
+ requirement: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ~>
99
+ - !ruby/object:Gem::Version
100
+ version: '1.9'
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: 1.9.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '1.9'
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: 1.9.0
114
+ - !ruby/object:Gem::Dependency
115
+ name: nokogiri
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - <
119
+ - !ruby/object:Gem::Version
120
+ version: 1.7.0
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - <
126
+ - !ruby/object:Gem::Version
127
+ version: 1.7.0
128
+ - !ruby/object:Gem::Dependency
129
+ name: tzinfo
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ~>
133
+ - !ruby/object:Gem::Version
134
+ version: 1.2.2
135
+ - - ! '>='
136
+ - !ruby/object:Gem::Version
137
+ version: 1.2.2
138
+ type: :runtime
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ~>
143
+ - !ruby/object:Gem::Version
144
+ version: 1.2.2
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: 1.2.2
73
148
  - !ruby/object:Gem::Dependency
74
149
  name: rspec
75
150
  requirement: !ruby/object:Gem::Requirement
76
151
  requirements:
77
- - - "~>"
152
+ - - ~>
78
153
  - !ruby/object:Gem::Version
79
154
  version: '3.2'
80
155
  type: :development
81
156
  prerelease: false
82
157
  version_requirements: !ruby/object:Gem::Requirement
83
158
  requirements:
84
- - - "~>"
159
+ - - ~>
85
160
  - !ruby/object:Gem::Version
86
161
  version: '3.2'
87
162
  - !ruby/object:Gem::Dependency
88
163
  name: pry
89
164
  requirement: !ruby/object:Gem::Requirement
90
165
  requirements:
91
- - - "~>"
166
+ - - ~>
92
167
  - !ruby/object:Gem::Version
93
168
  version: '0.10'
94
169
  type: :development
95
170
  prerelease: false
96
171
  version_requirements: !ruby/object:Gem::Requirement
97
172
  requirements:
98
- - - "~>"
173
+ - - ~>
99
174
  - !ruby/object:Gem::Version
100
175
  version: '0.10'
101
- description: ": Store metrics alerts in code!"
176
+ description: ': Store metrics alerts in code!'
102
177
  email:
103
178
  - igor.serebryany@airbnb.com
179
+ - jimmy.ngo@airbnb.com
104
180
  executables:
105
181
  - interferon
106
182
  extensions: []
107
183
  extra_rdoc_files: []
108
184
  files:
109
- - ".gitignore"
110
- - ".travis.yml"
185
+ - .gitignore
186
+ - .travis.yml
111
187
  - Gemfile
112
188
  - LICENSE
113
189
  - README.md
@@ -128,6 +204,7 @@ files:
128
204
  - lib/interferon/loaders.rb
129
205
  - lib/interferon/logging.rb
130
206
  - lib/interferon/version.rb
207
+ - lib/interferon/work_hours_helper.rb
131
208
  - script/pre-commit
132
209
  - spec/fixtures/loaders/host_sources/test_host_source.rb
133
210
  - spec/fixtures/loaders/test_sources/order_test_source.rb
@@ -140,10 +217,12 @@ files:
140
217
  - spec/helpers/logging_helper.rb
141
218
  - spec/helpers/mock_alert.rb
142
219
  - spec/helpers/optica_helper.rb
220
+ - spec/lib/interferon/group_sources/filesystem_spec.rb
143
221
  - spec/lib/interferon/host_sources/optica_services_spec.rb
144
222
  - spec/lib/interferon/host_sources/optica_spec.rb
145
223
  - spec/lib/interferon/loaders_spec.rb
146
224
  - spec/lib/interferon_spec.rb
225
+ - spec/lib/work_hours_helper_spec.rb
147
226
  - spec/spec_helper.rb
148
227
  homepage: https://www.github.com/airbnb/interferon
149
228
  licenses:
@@ -155,20 +234,20 @@ require_paths:
155
234
  - lib
156
235
  required_ruby_version: !ruby/object:Gem::Requirement
157
236
  requirements:
158
- - - ">="
237
+ - - ! '>='
159
238
  - !ruby/object:Gem::Version
160
239
  version: '0'
161
240
  required_rubygems_version: !ruby/object:Gem::Requirement
162
241
  requirements:
163
- - - ">="
242
+ - - ! '>='
164
243
  - !ruby/object:Gem::Version
165
244
  version: '0'
166
245
  requirements: []
167
246
  rubyforge_project:
168
- rubygems_version: 2.4.5.1
247
+ rubygems_version: 2.6.6
169
248
  signing_key:
170
249
  specification_version: 4
171
- summary: ": Store metrics alerts in code!"
250
+ summary: ': Store metrics alerts in code!'
172
251
  test_files:
173
252
  - spec/fixtures/loaders/host_sources/test_host_source.rb
174
253
  - spec/fixtures/loaders/test_sources/order_test_source.rb
@@ -181,8 +260,10 @@ test_files:
181
260
  - spec/helpers/logging_helper.rb
182
261
  - spec/helpers/mock_alert.rb
183
262
  - spec/helpers/optica_helper.rb
263
+ - spec/lib/interferon/group_sources/filesystem_spec.rb
184
264
  - spec/lib/interferon/host_sources/optica_services_spec.rb
185
265
  - spec/lib/interferon/host_sources/optica_spec.rb
186
266
  - spec/lib/interferon/loaders_spec.rb
187
267
  - spec/lib/interferon_spec.rb
268
+ - spec/lib/work_hours_helper_spec.rb
188
269
  - spec/spec_helper.rb