Class: Sensu::Handler
- Inherits:
-
Object
- Object
- Sensu::Handler
- Includes:
- Mixlib::CLI, Plugin::Utils
- Defined in:
- lib/sensu-handler.rb
Constant Summary collapse
- @@autorun =
This works just like Plugin::CLI’s autorun.
self
Instance Attribute Summary collapse
-
#argv ⇒ Object
Returns the value of attribute argv.
Class Method Summary collapse
Instance Method Summary collapse
- #bail(msg) ⇒ Object
-
#deprecated_filtering_enabled? ⇒ TrueClass, FalseClass
Evaluates whether the event should be processed by any of the filter methods in this library.
-
#deprecated_occurrence_filtering_enabled? ⇒ TrueClass, FalseClass
Evaluates whether the event should be processed by the filter_repeated method.
- #event_exists?(client, check) ⇒ Boolean
-
#event_summary(trim_at = 100) ⇒ Object
Helpers and filters.
-
#filter ⇒ Object
Filters exit the proccess if the event should not be handled.
- #filter_dependencies ⇒ Object
- #filter_disabled ⇒ Object
- #filter_repeated ⇒ Object
- #filter_silenced ⇒ Object
-
#handle ⇒ Object
Implementing classes should override this.
-
#initialize(argv = ARGV) ⇒ Handler
constructor
A new instance of Handler.
- #stash_exists?(path) ⇒ Boolean
Methods included from Plugin::Utils
#api_request, #api_settings, #api_settings=, #cast_bool_values_int, #config_files, #deep_merge, #event, #event=, #load_config, #map_go_event_into_ruby, #net_http_req_class, #paginated_get, #read_event, #settings
Constructor Details
#initialize(argv = ARGV) ⇒ Handler
Returns a new instance of Handler.
21 22 23 24 |
# File 'lib/sensu-handler.rb', line 21 def initialize(argv = ARGV) super() self.argv = (argv) end |
Instance Attribute Details
#argv ⇒ Object
Returns the value of attribute argv.
19 20 21 |
# File 'lib/sensu-handler.rb', line 19 def argv @argv end |
Class Method Details
.disable_autorun ⇒ Object
74 75 76 |
# File 'lib/sensu-handler.rb', line 74 def self.disable_autorun @@autorun = false end |
.method_added(name) ⇒ Object
69 70 71 |
# File 'lib/sensu-handler.rb', line 69 def method_added(name) @@autorun = self if name == :handle end |
Instance Method Details
#bail(msg) ⇒ Object
109 110 111 112 113 114 |
# File 'lib/sensu-handler.rb', line 109 def bail(msg) client_name = @event['client']['name'] || 'error:no-client-name' check_name = @event['check']['name'] || 'error:no-check-name' puts "#{msg}: #{client_name}/#{check_name}" exit 0 end |
#deprecated_filtering_enabled? ⇒ TrueClass, FalseClass
Evaluates whether the event should be processed by any of the filter methods in this library. Defaults to true, i.e. deprecated filters are run by default.
52 53 54 |
# File 'lib/sensu-handler.rb', line 52 def deprecated_filtering_enabled? @event['check'].fetch('enable_deprecated_filtering', false).to_s == 'true' end |
#deprecated_occurrence_filtering_enabled? ⇒ TrueClass, FalseClass
Evaluates whether the event should be processed by the filter_repeated method. Defaults to true, i.e. filter_repeated will filter events by default.
61 62 63 |
# File 'lib/sensu-handler.rb', line 61 def deprecated_occurrence_filtering_enabled? @event['check'].fetch('enable_deprecated_occurrence_filtering', false).to_s == 'true' end |
#event_exists?(client, check) ⇒ Boolean
168 169 170 |
# File 'lib/sensu-handler.rb', line 168 def event_exists?(client, check) api_request(:GET, '/events/' + client + '/' + check).code == '200' end |
#event_summary(trim_at = 100) ⇒ Object
Helpers and filters.
97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/sensu-handler.rb', line 97 def event_summary(trim_at = 100) summary = @event['check']['notification'] || @event['check']['description'] if summary.nil? source = @event['check']['source'] || @event['client']['name'] event_context = [source, @event['check']['name']].join('/') output = @event['check']['output'].chomp output = output.length > trim_at ? output[0..trim_at] + '...' : output summary = [event_context, output].join(' : ') end summary end |
#filter ⇒ Object
Filters exit the proccess if the event should not be handled.
Filtering events is deprecated and will be removed in a future release.
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/sensu-handler.rb', line 36 def filter return unless deprecated_filtering_enabled? puts 'warning: event filtering in sensu-plugin is deprecated, see http://bit.ly/sensu-plugin' filter_disabled filter_silenced filter_dependencies return unless deprecated_occurrence_filtering_enabled? puts 'warning: occurrence filtering in sensu-plugin is deprecated, see http://bit.ly/sensu-plugin' filter_repeated end |
#filter_dependencies ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/sensu-handler.rb', line 172 def filter_dependencies return unless @event['check'].key?('dependencies') return unless @event['check']['dependencies'].is_a?(Array) @event['check']['dependencies'].each do |dependency| begin next if dependency.to_s.empty? Timeout.timeout(2) do check, client = dependency.split('/').reverse if event_exists?(client || @event['client']['name'], check) bail 'check dependency event exists' end end rescue Errno::ECONNREFUSED puts 'connection refused attempting to query the sensu api for an event' rescue Timeout::Error puts 'timed out while attempting to query the sensu api for an event' end end end |
#filter_disabled ⇒ Object
116 117 118 |
# File 'lib/sensu-handler.rb', line 116 def filter_disabled bail 'alert disabled' if @event['check']['alert'] == false end |
#filter_repeated ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/sensu-handler.rb', line 120 def filter_repeated defaults = { 'occurrences' => 1, 'interval' => 30, 'refresh' => 1800 } if settings['sensu_plugin'].is_a?(Hash) defaults.merge!(settings['sensu_plugin']) end occurrences = (@event['check']['occurrences'] || defaults['occurrences']).to_i interval = (@event['check']['interval'] || defaults['interval']).to_i refresh = (@event['check']['refresh'] || defaults['refresh']).to_i if @event['occurrences'] < occurrences bail 'not enough occurrences' end return unless @event['occurrences'] > occurrences && @event['action'] == 'create' number = refresh.fdiv(interval).to_i return if number.zero? || ((@event['occurrences'] - occurrences) % number).zero? bail 'only handling every ' + number.to_s + ' occurrences' end |
#filter_silenced ⇒ Object
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/sensu-handler.rb', line 147 def filter_silenced stashes = [ ['client', '/silence/' + @event['client']['name']], ['check', '/silence/' + @event['client']['name'] + '/' + @event['check']['name']], ['check', '/silence/all/' + @event['check']['name']] ] stashes.each do |(scope, path)| begin Timeout.timeout(5) do if stash_exists?(path) bail scope + ' alerts silenced' end end rescue Errno::ECONNREFUSED puts 'connection refused attempting to query the sensu api for a stash' 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.
28 29 30 |
# File 'lib/sensu-handler.rb', line 28 def handle puts 'ignoring event -- no handler defined' end |
#stash_exists?(path) ⇒ Boolean
143 144 145 |
# File 'lib/sensu-handler.rb', line 143 def stash_exists?(path) api_request(:GET, '/stash' + path).code == '200' end |