class Fluent::SendGridEventInput

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/fluent/plugin/in_sendgrid_event.rb, line 26
def initialize
  super
end

Public Instance Methods

configure(conf) click to toggle source
Calls superclass method
# File lib/fluent/plugin/in_sendgrid_event.rb, line 30
def configure(conf)
  log.trace "in_sendgrid_event: configure"
  super

  if @tag.nil?
    raise Fluent::ConfigError, "sendgrid_event: 'tag' parameter is required"
  end
end
emit_event(event) click to toggle source
# File lib/fluent/plugin/in_sendgrid_event.rb, line 106
def emit_event(event)
  log.trace "in_sendgrid_event: emit_event"
  router.emit("#{tag}", Fluent::EventTime.now, event)
end
run() click to toggle source
# File lib/fluent/plugin/in_sendgrid_event.rb, line 54
def run
  log.trace "in_sendgrid_event: run"
  listen = {
    :BindAddress => @host,
    :Port => @port
  }
  if @ssl
    if File.exists?(@certificate) && File.exists?(@private_key)
      listen[:SSLEnable] = @ssl
      listen[:SSLCertificate] = OpenSSL::X509::Certificate.new(open(@certificate).read)
      listen[:SSLPrivateKey] = OpenSSL::PKey::RSA.new(open(@private_key).read)
    else
      log.error "in_sendgrid_event: couldn't find certificate: '#{@certificate}' or ssl key: '#{@private_key}'"
    end
  end
  if @username && @password
    listen[:RequestCallback] = lambda do |req, res|
      WEBrick::HTTPAuth.basic_auth(req, res, "fluent-plugin-sendgrid-event") do |username, password|
        username == @username && password == @password
      end
    end
  end

  @server = WEBrick::HTTPServer.new(listen)
  @server.mount_proc(@request_uri) do |req, res|
    begin
      if req.request_method == "POST" && req.body
        events = JSON.parse(req.body)
        events.each do |event|
          emit_event(event)
        end
        log.trace "in_sendgrid_event: success"
        res.status = 200
      else
        log.error "in_sendgrid_event: invalid request"
        res.status = 400
      end
    rescue JSON::ParserError => e
      log.error "in_sendgrid_event: #{e}"
      res.status = 400
    rescue WEBrick::HTTPStatus::LengthRequired => e
      log.error "in_sendgrid_event: #{e}"
      res.status = 411
    rescue Exception => e
      log.warn "in_sendgrid_event: Retry: Reason: #{e}"
      log.warn "#{e.backtrace.join('\n')}"
      res.status = 503
    end
  end
  @server.start
end
shutdown() click to toggle source
Calls superclass method
# File lib/fluent/plugin/in_sendgrid_event.rb, line 46
def shutdown
  log.trace "in_sendgrid_event: shutdown"
  super

  @server.shutdown
  Thread.kill(@thread)
end
start() click to toggle source
Calls superclass method
# File lib/fluent/plugin/in_sendgrid_event.rb, line 39
def start
  log.trace "in_sendgrid_event: start"
  super

  @thread = Thread.new(&method(:run))
end