class LogStash::Codecs::Graphite

This codec will encode and decode Graphite formated lines.

Constants

DEFAULT_METRICS_FORMAT
EXCLUDE_ALWAYS
METRIC_PLACEHOLDER

Public Class Methods

new(params={}) click to toggle source
Calls superclass method LogStash::Codecs::Base::new
# File lib/logstash/codecs/graphite.rb, line 57
def initialize(params={})
  super(params)
  @lines = LogStash::Codecs::Line.new
end

Public Instance Methods

decode(data) { |event(name => to_f, "timestamp" => at.gmtime)| ... } click to toggle source
# File lib/logstash/codecs/graphite.rb, line 63
def decode(data)
  @lines.decode(data) do |event|
    name, value, time = event["message"].split(" ")
    yield LogStash::Event.new(name => value.to_f, "@timestamp" => Time.at(time.to_i).gmtime)
  end # @lines.decode
end
encode(event) click to toggle source
# File lib/logstash/codecs/graphite.rb, line 80
def encode(event)
  # Graphite message format: metric value timestamp\n

  messages = []
  timestamp = event.sprintf("%{+%s}")

  if @fields_are_metrics
    @logger.debug("got metrics event", :metrics => event.to_hash)
    event.to_hash.each do |metric,value|
      next if EXCLUDE_ALWAYS.include?(metric)
      next unless @include_metrics.empty? || @include_metrics.any? { |regexp| metric.match(regexp) }
      next if @exclude_metrics.any? {|regexp| metric.match(regexp)}
      messages << "#{construct_metric_name(metric)} #{event.sprintf(value.to_s).to_f} #{timestamp}"
    end # data.to_hash.each
  else
    @metrics.each do |metric, value|
      @logger.debug("processing", :metric => metric, :value => value)
      metric = event.sprintf(metric)
      next unless @include_metrics.any? {|regexp| metric.match(regexp)}
      next if @exclude_metrics.any? {|regexp| metric.match(regexp)}
      messages << "#{construct_metric_name(event.sprintf(metric))} #{event.sprintf(value).to_f} #{timestamp}"
    end # @metrics.each
  end # if @fields_are_metrics

  if messages.empty?
    @logger.debug("Message is empty, not emiting anything.", :messages => messages)
  else
    message = messages.join("\n") + "\n"
    @logger.debug("Emiting carbon messages", :messages => messages)

    @on_event.call(message)
  end # if messages.empty?
end

Private Instance Methods

construct_metric_name(metric) click to toggle source
# File lib/logstash/codecs/graphite.rb, line 71
def construct_metric_name(metric)
  if @metrics_format
    return @metrics_format.gsub(METRIC_PLACEHOLDER, metric)
  end

  return metric
end