Last active
March 24, 2018 23:02
-
-
Save busseyl/2b476b356f4868e1686aece5b6058c17 to your computer and use it in GitHub Desktop.
Sensu extension bridge
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# coding: utf-8 | |
# Send state events of all severity to RabbitMQ (Transport) | |
# | |
# This extension requires Sensu >= 1.2.0 | |
# | |
# Here is an example of what the Sensu configuration should look like: | |
# | |
# { | |
# "state_events": { | |
# "exchange": "state_events" | |
# } | |
# } | |
# | |
# Copyright 2018 Team Of Monkeys Inc | |
# (Based on https://gist.github.com/Buzer/262da357c24907a1d05d#file-gistfile1-txt-L67) | |
# | |
# Released under the same terms as Sensu (the MIT license); see LICENSE for details. | |
require "sensu/json" | |
require "sensu/extension" | |
require "sensu/transport" | |
module Sensu | |
module Extension | |
class StateEvents < Bridge | |
def name | |
'state_events' | |
end | |
def description | |
'sends all sensu events to the configured transport' | |
end | |
def post_init | |
transport_name = @settings[:transport][:name] | |
transport_settings = @settings[transport_name] | |
@logger.debug("connecting to state events transport", { | |
:name => transport_name, | |
:settings => transport_settings | |
}) | |
Transport.logger = @logger | |
Transport.connect(transport_name, transport_settings) do |connection| | |
@transport = connection | |
@transport.on_error do |error| | |
@logger.error("state events transport connection error", :error => error.to_s) | |
if @settings[:transport][:reconnect_on_error] | |
@transport.reconnect | |
end | |
end | |
@transport.before_reconnect do | |
@logger.warn("reconnecting to state events transport") | |
end | |
@transport.after_reconnect do | |
@logger.info("reconnected to state events transport") | |
end | |
end | |
end | |
def run(event) | |
event_json = Sensu::JSON.dump(event) | |
@logger.info("publishing state event", { | |
:payload => event_json | |
}) | |
@transport.publish(:direct, 'state_events', event_json) do |info| | |
if info[:error] | |
@logger.error("failed to publish state event", { | |
:payload => event_json, | |
:error => info[:error].to_s | |
}) | |
end | |
end | |
yield ["state event published to default transport", 0] | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment