Class: Sensu::Handler
Constant Summary
collapse
- @@autorun =
This works just like Plugin::CLI’s autorun.
self
Class Method Summary
collapse
Instance Method Summary
collapse
#config_files, #load_config, #net_http_req_class, #read_event, #settings
Class Method Details
.method_added(name) ⇒ Object
30
31
32
33
34
|
# File 'lib/sensu-handler.rb', line 30
def method_added(name)
if name == :handle
@@autorun = self
end
end
|
Instance Method Details
#api_request(method, path) {|req| ... } ⇒ Object
51
52
53
54
55
56
57
58
59
|
# File 'lib/sensu-handler.rb', line 51
def api_request(method, path, &blk)
http = Net::HTTP.new(settings['api']['host'], settings['api']['port'])
req = net_http_req_class(method).new(path)
if settings['api']['user'] && settings['api']['password']
req.basic_auth(settings['api']['user'], settings['api']['password'])
end
yield(req) if block_given?
http.request(req)
end
|
#bail(msg) ⇒ Object
46
47
48
49
|
# File 'lib/sensu-handler.rb', line 46
def bail(msg)
puts msg + ': ' + @event['client']['name'] + '/' + @event['check']['name']
exit 0
end
|
#event_exists?(client, check) ⇒ Boolean
104
105
106
|
# File 'lib/sensu-handler.rb', line 104
def event_exists?(client, check)
api_request(:GET, '/event/' + client + '/' + check).code == '200'
end
|
#filter ⇒ Object
Filters exit the proccess if the event should not be handled. Implementation of the default filters is below.
19
20
21
22
23
24
|
# File 'lib/sensu-handler.rb', line 19
def filter
filter_disabled
filter_repeated
filter_silenced
filter_dependencies
end
|
#filter_dependencies ⇒ Object
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/sensu-handler.rb', line 108
def filter_dependencies
if @event['check'].has_key?('dependencies')
if @event['check']['dependencies'].is_a?(Array)
@event['check']['dependencies'].each do |check|
begin
timeout(2) do
if event_exists?(@event['client']['name'], check)
bail 'check dependency event exists'
end
end
rescue Timeout::Error
puts 'timed out while attempting to query the sensu api for an event'
end
end
end
end
end
|
#filter_disabled ⇒ Object
61
62
63
64
65
|
# File 'lib/sensu-handler.rb', line 61
def filter_disabled
if @event['check']['alert'] == false
bail 'alert disabled'
end
end
|
#filter_repeated ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/sensu-handler.rb', line 67
def filter_repeated
occurrences = @event['check']['occurrences'] || 1
interval = @event['check']['interval'] || 30
refresh = @event['check']['refresh'] || 1800
if @event['occurrences'] < occurrences
bail 'not enough occurrences'
end
if @event['occurrences'] > occurrences && @event['action'] == 'create'
number = refresh.fdiv(interval).to_i
unless @event['occurrences'] % number == 0
bail 'only handling every ' + number.to_s + ' occurrences'
end
end
end
|
#filter_silenced ⇒ Object
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/sensu-handler.rb', line 86
def filter_silenced
stashes = {
'client' => '/silence/' + @event['client']['name'],
'check' => '/silence/' + @event['client']['name'] + '/' + @event['check']['name']
}
stashes.each do |scope, path|
begin
timeout(2) do
if stash_exists?(path)
bail scope + ' alerts silenced'
end
end
rescue Timeout::Error
puts 'timed out while attempting to query the sensu api for a stash'
end
end
end
|
#handle ⇒ Object
Implementing classes should override this.
12
13
14
|
# File 'lib/sensu-handler.rb', line 12
def handle
puts 'ignoring event -- no handler defined'
end
|
#stash_exists?(path) ⇒ Boolean
82
83
84
|
# File 'lib/sensu-handler.rb', line 82
def stash_exists?(path)
api_request(:GET, '/stash' + path).code == '200'
end
|