Sha256: e5736a23c499c415f6113282fb37955da70357d2018dc9f314b017b6b3d0cff5

Contents?: true

Size: 1.57 KB

Versions: 3

Compression:

Stored size: 1.57 KB

Contents

module ActiveMetrics
  class Collector

    PREFIX = 'com.active_metrics'.freeze

    class << self

      # Start subscribing to the metrics-related events.
      def attach
        ActiveSupport::Notifications.subscribe(/#{PREFIX}/i) do |name, _, _, _, data|
          deliver(name, data)
        end
      end

      # Deliver a metric to Librato
      #
      # According to the Heroku DevCenter there is already a tight integration
      # between Heroku logs and Librato so simply using `$stdout.puts` will be
      # enough, as long as a specific format is used.
      #
      # @param name [String] The name of the event being measured
      # @param data [Hash] a Hash with type of metric and the value to be recorded
      def deliver(name, data = {})
        key    = name.gsub(PREFIX, '')
        value  = data[:value]
        metric = data[:metric]

        $stdout.puts "#{metric}##{key}=#{value}"
      end

      # Record an event
      #
      # @param event [String] The name of the event
      # @param payload [Hash] A hash that contains the event-related data.
      def record(event, payload = {})
        # Add a prefix to all events so things broadcasted using this method
        # will not get picked up by possibly other `ActiveSupport::Notifications`
        # subscribers.
        name = "#{PREFIX}#{event}"

        if block_given?
          ActiveSupport::Notifications.instrument(name, payload) { yield }
        else
          ActiveSupport::Notifications.instrument(name, payload)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
active_metrics-0.1.0 lib/active_metrics/collector.rb
active_metrics-0.0.2 lib/active_metrics/collector.rb
active_metrics-0.0.1 lib/active_metrics/collector.rb