interferon 0.0.6 → 0.0.7
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 +7 -0
- data/lib/interferon/version.rb +1 -1
- data/lib/interferon.rb +44 -21
- metadata +13 -25
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cf3a434f94d6e961434e2d3011613ff875c07e83
|
4
|
+
data.tar.gz: 56ed577469d6d97ea2a7798e12e7d0ab3f4e59a8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: eb304b434ad6417a9d8184bea6292bbbb80cf45edba557f34df78f7a6376bc58079257fcaa1f3d04f4826dadf991a608fed508f514a7a68d49b41295be5c46b5
|
7
|
+
data.tar.gz: dcd28c67b74e92a5c2a43f470ed4845a292a1d2915eeb2d7d3710e5868a17f858eeb298b42139f85c41b14408ee2882039d51d5270f011bc2b35c9d57e0e5ab0
|
data/lib/interferon/version.rb
CHANGED
data/lib/interferon.rb
CHANGED
@@ -26,9 +26,14 @@ module Interferon
|
|
26
26
|
@groups_sources = groups_sources
|
27
27
|
@host_sources = host_sources
|
28
28
|
@destinations = destinations
|
29
|
+
@request_shutdown = false
|
29
30
|
end
|
30
31
|
|
31
32
|
def run(dry_run = false)
|
33
|
+
Signal.trap("TERM") do
|
34
|
+
log.info "SIGTERM received. shutting down gracefully..."
|
35
|
+
@request_shutdown = true
|
36
|
+
end
|
32
37
|
run_desc = dry_run ? 'dry run' : 'run'
|
33
38
|
log.info "beginning alerts #{run_desc}"
|
34
39
|
|
@@ -44,7 +49,11 @@ module Interferon
|
|
44
49
|
|
45
50
|
update_alerts(@destinations, hosts, alerts, groups)
|
46
51
|
|
47
|
-
|
52
|
+
if @request_shutdown
|
53
|
+
log.info "interferon #{run_desc} shut down by SIGTERM"
|
54
|
+
else
|
55
|
+
log.info "interferon #{run_desc} complete"
|
56
|
+
end
|
48
57
|
end
|
49
58
|
|
50
59
|
def read_alerts
|
@@ -57,6 +66,7 @@ module Interferon
|
|
57
66
|
unless Dir.exists?(path)
|
58
67
|
|
59
68
|
Dir.glob(File.join(path, '*.rb')) do |alert_file|
|
69
|
+
break if @request_shutdown
|
60
70
|
begin
|
61
71
|
alert = Alert.new(alert_file)
|
62
72
|
rescue StandardError => e
|
@@ -80,6 +90,7 @@ module Interferon
|
|
80
90
|
groups = {}
|
81
91
|
loader = GroupSourcesLoader.new([@alerts_repo_path])
|
82
92
|
loader.get_all(sources).each do |source|
|
93
|
+
break if @request_shutdown
|
83
94
|
source_groups = source.list_groups
|
84
95
|
|
85
96
|
# add all people to groups
|
@@ -108,6 +119,7 @@ module Interferon
|
|
108
119
|
hosts = []
|
109
120
|
loader = HostSourcesLoader.new([@alerts_repo_path])
|
110
121
|
loader.get_all(sources).each do |source|
|
122
|
+
break if @request_shutdown
|
111
123
|
source_hosts = source.list_hosts
|
112
124
|
hosts << source_hosts
|
113
125
|
|
@@ -124,6 +136,7 @@ module Interferon
|
|
124
136
|
def update_alerts(destinations, hosts, alerts, groups)
|
125
137
|
loader = DestinationsLoader.new([@alerts_repo_path])
|
126
138
|
loader.get_all(destinations).each do |dest|
|
139
|
+
break if @request_shutdown
|
127
140
|
log.info "updating alerts on #{dest.class.name}"
|
128
141
|
|
129
142
|
# track some counters/stats per destination
|
@@ -136,6 +149,7 @@ module Interferon
|
|
136
149
|
# create or update alerts; mark when we've done that
|
137
150
|
alerts_queue = Hash.new
|
138
151
|
alerts.each do |alert|
|
152
|
+
break if @request_shutdown
|
139
153
|
counters = {
|
140
154
|
:errors => 0,
|
141
155
|
:evals => 0,
|
@@ -207,34 +221,43 @@ module Interferon
|
|
207
221
|
# flush queue
|
208
222
|
alerts_to_create = alerts_queue.keys
|
209
223
|
concurrency = dest.concurrency || 10
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
224
|
+
unless @request_shutdown
|
225
|
+
threads = concurrency.times.map do |i|
|
226
|
+
log.info "thread #{i} created"
|
227
|
+
t = Thread.new do
|
228
|
+
while name = alerts_to_create.shift
|
229
|
+
break if @request_shutdown
|
230
|
+
cur_alert, people = alerts_queue[name]
|
231
|
+
|
232
|
+
log.debug "creating alert for #{cur_alert[:name]}"
|
233
|
+
alert_key = dest.create_alert(cur_alert, people)
|
234
|
+
|
235
|
+
# don't delete alerts we still have defined
|
236
|
+
existing_alerts[alert_key]['still_exists'] = true if existing_alerts.include?(alert_key)
|
237
|
+
end
|
220
238
|
end
|
239
|
+
t.abort_on_exception = true
|
240
|
+
t
|
221
241
|
end
|
222
|
-
|
223
|
-
t
|
242
|
+
threads.map(&:join)
|
224
243
|
end
|
225
|
-
threads.map(&:join)
|
226
244
|
|
227
245
|
# remove existing alerts that shouldn't exist
|
228
246
|
to_delete = existing_alerts.reject{ |key, existing_alert| existing_alert['still_exists'] }
|
229
|
-
to_delete.each
|
247
|
+
to_delete.each do |key, alert|
|
248
|
+
break if @request_shutdown
|
249
|
+
dest.remove_alert(alert)
|
250
|
+
end
|
230
251
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
252
|
+
unless @request_shutdown
|
253
|
+
# run time summary
|
254
|
+
run_time = Time.new.to_f - start_time
|
255
|
+
statsd.histogram('destinations.run_time', run_time, :tags => ["destination:#{dest.class.name}"])
|
256
|
+
log.info "#{dest.class.name} : run completed in %.2f seconds" % (run_time)
|
235
257
|
|
236
|
-
|
237
|
-
|
258
|
+
# report destination stats
|
259
|
+
dest.report_stats
|
260
|
+
end
|
238
261
|
end
|
239
262
|
end
|
240
263
|
end
|
metadata
CHANGED
@@ -1,86 +1,78 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: interferon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Igor Serebryany
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-01-28 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: dogapi
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '1.11'
|
22
|
-
- -
|
20
|
+
- - '>='
|
23
21
|
- !ruby/object:Gem::Version
|
24
22
|
version: 1.11.1
|
25
23
|
type: :runtime
|
26
24
|
prerelease: false
|
27
25
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
26
|
requirements:
|
30
27
|
- - ~>
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: '1.11'
|
33
|
-
- -
|
30
|
+
- - '>='
|
34
31
|
- !ruby/object:Gem::Version
|
35
32
|
version: 1.11.1
|
36
33
|
- !ruby/object:Gem::Dependency
|
37
34
|
name: aws-sdk
|
38
35
|
requirement: !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
36
|
requirements:
|
41
37
|
- - ~>
|
42
38
|
- !ruby/object:Gem::Version
|
43
39
|
version: '1.35'
|
44
|
-
- -
|
40
|
+
- - '>='
|
45
41
|
- !ruby/object:Gem::Version
|
46
42
|
version: 1.35.1
|
47
43
|
type: :runtime
|
48
44
|
prerelease: false
|
49
45
|
version_requirements: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
46
|
requirements:
|
52
47
|
- - ~>
|
53
48
|
- !ruby/object:Gem::Version
|
54
49
|
version: '1.35'
|
55
|
-
- -
|
50
|
+
- - '>='
|
56
51
|
- !ruby/object:Gem::Version
|
57
52
|
version: 1.35.1
|
58
53
|
- !ruby/object:Gem::Dependency
|
59
54
|
name: dogstatsd-ruby
|
60
55
|
requirement: !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
56
|
requirements:
|
63
57
|
- - ~>
|
64
58
|
- !ruby/object:Gem::Version
|
65
59
|
version: '1.4'
|
66
|
-
- -
|
60
|
+
- - '>='
|
67
61
|
- !ruby/object:Gem::Version
|
68
62
|
version: 1.4.1
|
69
63
|
type: :runtime
|
70
64
|
prerelease: false
|
71
65
|
version_requirements: !ruby/object:Gem::Requirement
|
72
|
-
none: false
|
73
66
|
requirements:
|
74
67
|
- - ~>
|
75
68
|
- !ruby/object:Gem::Version
|
76
69
|
version: '1.4'
|
77
|
-
- -
|
70
|
+
- - '>='
|
78
71
|
- !ruby/object:Gem::Version
|
79
72
|
version: 1.4.1
|
80
73
|
- !ruby/object:Gem::Dependency
|
81
74
|
name: rspec
|
82
75
|
requirement: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
76
|
requirements:
|
85
77
|
- - ~>
|
86
78
|
- !ruby/object:Gem::Version
|
@@ -88,7 +80,6 @@ dependencies:
|
|
88
80
|
type: :development
|
89
81
|
prerelease: false
|
90
82
|
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
83
|
requirements:
|
93
84
|
- - ~>
|
94
85
|
- !ruby/object:Gem::Version
|
@@ -96,7 +87,6 @@ dependencies:
|
|
96
87
|
- !ruby/object:Gem::Dependency
|
97
88
|
name: pry
|
98
89
|
requirement: !ruby/object:Gem::Requirement
|
99
|
-
none: false
|
100
90
|
requirements:
|
101
91
|
- - ~>
|
102
92
|
- !ruby/object:Gem::Version
|
@@ -104,7 +94,6 @@ dependencies:
|
|
104
94
|
type: :development
|
105
95
|
prerelease: false
|
106
96
|
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
97
|
requirements:
|
109
98
|
- - ~>
|
110
99
|
- !ruby/object:Gem::Version
|
@@ -156,27 +145,26 @@ files:
|
|
156
145
|
homepage: https://www.github.com/airbnb/interferon
|
157
146
|
licenses:
|
158
147
|
- MIT
|
148
|
+
metadata: {}
|
159
149
|
post_install_message:
|
160
150
|
rdoc_options: []
|
161
151
|
require_paths:
|
162
152
|
- lib
|
163
153
|
required_ruby_version: !ruby/object:Gem::Requirement
|
164
|
-
none: false
|
165
154
|
requirements:
|
166
|
-
- -
|
155
|
+
- - '>='
|
167
156
|
- !ruby/object:Gem::Version
|
168
157
|
version: '0'
|
169
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
|
-
none: false
|
171
159
|
requirements:
|
172
|
-
- -
|
160
|
+
- - '>='
|
173
161
|
- !ruby/object:Gem::Version
|
174
162
|
version: '0'
|
175
163
|
requirements: []
|
176
164
|
rubyforge_project:
|
177
|
-
rubygems_version:
|
165
|
+
rubygems_version: 2.0.14
|
178
166
|
signing_key:
|
179
|
-
specification_version:
|
167
|
+
specification_version: 4
|
180
168
|
summary: ': Store metrics alerts in code!'
|
181
169
|
test_files:
|
182
170
|
- spec/fixtures/loaders/host_sources/test_host_source.rb
|