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.
- checksums.yaml +13 -5
- data/interferon.gemspec +6 -2
- data/lib/interferon/alert.rb +8 -0
- data/lib/interferon/alert_dsl.rb +10 -0
- data/lib/interferon/destinations/datadog.rb +127 -55
- data/lib/interferon/group_sources/filesystem.rb +18 -2
- data/lib/interferon/version.rb +1 -1
- data/lib/interferon/work_hours_helper.rb +21 -0
- data/lib/interferon.rb +134 -45
- data/spec/helpers/dsl_helper.rb +10 -1
- data/spec/helpers/mock_alert.rb +1 -0
- data/spec/lib/interferon/group_sources/filesystem_spec.rb +57 -0
- data/spec/lib/interferon_spec.rb +190 -43
- data/spec/lib/work_hours_helper_spec.rb +41 -0
- metadata +106 -25
data/spec/lib/interferon_spec.rb
CHANGED
@@ -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
|
-
|
14
|
-
|
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
|
-
|
17
|
-
|
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
|
-
|
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(:
|
25
|
-
|
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 '
|
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']], {}
|
64
|
+
|
65
|
+
interferon.update_alerts_on_destination(dest, ['host'], [alerts['name1'], alerts['name2']], {})
|
39
66
|
end
|
40
67
|
|
41
|
-
it '
|
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('
|
47
|
-
|
48
|
-
interferon.update_alerts_on_destination(dest, ['host'], [alerts['name1'], alerts['name2'], added], {}
|
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 '
|
136
|
+
it 'does not re-run existing alerts' do
|
52
137
|
alerts = mock_existing_alerts
|
53
|
-
|
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).
|
57
|
-
|
58
|
-
interferon.update_alerts_on_destination(dest, ['host'], [added], {}
|
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
|
-
|
62
|
-
|
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
|
-
|
68
|
-
|
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
|
-
|
71
|
-
|
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
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
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
|
-
|
80
|
-
|
81
|
-
|
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,
|
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.
|
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:
|
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:
|
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
|
-
-
|
110
|
-
-
|
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.
|
247
|
+
rubygems_version: 2.6.6
|
169
248
|
signing_key:
|
170
249
|
specification_version: 4
|
171
|
-
summary:
|
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
|