Sha256: 43a28073ec1ef3b8872b67ec1741dbf99dbcc058ba6944ace2849bb24086b619

Contents?: true

Size: 1.48 KB

Versions: 1

Compression:

Stored size: 1.48 KB

Contents

require 'statsd'
require 'faraday'




module Saddle::Middleware
  module Logging

    # Public: Wraps request with statsd logging
    # Expects statsd_path in request options.  However, if using saddle and no statsd_path is specified
    # will read call_chain and action and use them to construct a statsd_path
    class StatsdLogger < Faraday::Middleware
      attr_accessor :graphite_host, :graphite_port, :namespace

      def initialize(app, graphite_host, graphite_port=nil, namespace=nil)
        super(app)
        @graphite_host = graphite_host
        @graphite_port = graphite_port
        @namespace = namespace
      end

      def statsd
        @statsd ||= begin
          client = ::Statsd.new(@graphite_host, @graphite_port)
          client.namespace = @namespace if @namespace
        end
      end

      def call(env)
        # Try to build up a path for the STATSD logging
        statsd_path = nil
        if env[:request][:statsd_path]
          statsd_path = env[:request][:statsd_path]
        elsif env[:request][:saddle] && env[:request][:saddle][:call_chain] && env[:request][:saddle][:action]
          statsd_path = (['saddle'] + env[:request][:saddle][:call_chain] + [env[:request][:saddle][:action]]).join('.')
        end

        # If we have a path, wrap the ensuing app call in STATSD timing
        if statsd_path
          self.statsd.time(statsd_path) do
            @app.call(env)
          end
        else
          @app.call(env)
        end
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
saddle-0.0.12 lib/saddle/middleware/logging/statsd.rb