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_v2_event_into_v1, #net_http_req_class, #paginated_get, #read_event, #settings
Constructor Details
#initialize(argv = ARGV) ⇒ Handler
Returns a new instance of Handler.
19 20 21 22 |
# File 'lib/sensu-handler.rb', line 19 def initialize(argv = ARGV) super() self.argv = (argv) end |
Instance Attribute Details
#argv ⇒ Object
Returns the value of attribute argv.
17 18 19 |
# File 'lib/sensu-handler.rb', line 17 def argv @argv end |
Class Method Details
.disable_autorun ⇒ Object
72 73 74 |
# File 'lib/sensu-handler.rb', line 72 def self.disable_autorun @@autorun = false end |
.method_added(name) ⇒ Object
67 68 69 |
# File 'lib/sensu-handler.rb', line 67 def method_added(name) @@autorun = self if name == :handle end |
Instance Method Details
#bail(msg) ⇒ Object
107 108 109 110 111 112 |
# File 'lib/sensu-handler.rb', line 107 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.
50 51 52 |
# File 'lib/sensu-handler.rb', line 50 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.
59 60 61 |
# File 'lib/sensu-handler.rb', line 59 def deprecated_occurrence_filtering_enabled? @event['check'].fetch('enable_deprecated_occurrence_filtering', false).to_s == 'true' end |
#event_exists?(client, check) ⇒ Boolean
166 167 168 |
# File 'lib/sensu-handler.rb', line 166 def event_exists?(client, check) api_request(:GET, '/events/' + client + '/' + check).code == '200' end |
#event_summary(trim_at = 100) ⇒ Object
Helpers and filters.
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/sensu-handler.rb', line 95 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.
34 35 36 37 38 39 40 41 42 43 |
# File 'lib/sensu-handler.rb', line 34 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
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/sensu-handler.rb', line 170 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
114 115 116 |
# File 'lib/sensu-handler.rb', line 114 def filter_disabled bail 'alert disabled' if @event['check']['alert'] == false end |
#filter_repeated ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/sensu-handler.rb', line 118 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
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/sensu-handler.rb', line 145 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.
26 27 28 |
# File 'lib/sensu-handler.rb', line 26 def handle puts 'ignoring event -- no handler defined' end |
#stash_exists?(path) ⇒ Boolean
141 142 143 |
# File 'lib/sensu-handler.rb', line 141 def stash_exists?(path) api_request(:GET, '/stash' + path).code == '200' end |