interferon 0.0.12 → 0.0.19

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.
@@ -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