Sha256: c329930b887152da9981fd6f5eee626804b731ec04dedec2a78853c10a7a9fef

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

require "thread"
require "json"
require 'fluent/input'
require 'fluent/process'

module Fluent
  class WebhookMackerelInput < Input
    include DetachProcessMixin

    Plugin.register_input('webhook_mackerel', self)

    config_param :tag, :string
    config_param :bind, :string, :default => "0.0.0.0"
    config_param :port, :integer, :default => 3838
    config_param :mount, :string, :default => "/"

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

    def shutdown
      super
      @server.shutdown
      Thread.kill(@thread)
    end

    def run
      @server = WEBrick::HTTPServer.new(
        :BindAddress => @bind,
        :Port => @port,
      )
      $log.debug "Listen on http://#{@bind}:#{@port}#{@mount}"
      @server.mount_proc(@mount) do |req, res|
        begin
          $log.debug req.header

          if req.request_method != "POST"
            res.status = 405
          else
            payload = JSON.parse(req.body)
            process(payload)
            res.status = 204
          end
        rescue => e
          $log.error e.inspect
          $log.error e.backtrace.join("\n")
          res.status = 400
        end
      end
      @server.start
    end

    def process(payload)
      event = payload.delete "event"
      payload[:event] = event
      $log.info "tag: #{@tag.dup}.#{event}, payload:#{payload}"
      router.emit("#{@tag.dup}.#{event}", Engine.now, payload)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fluent-plugin-webhook-mackerel-0.1.0 lib/fluent/plugin/in_webhook_mackerel.rb