Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

vistahigherlearning / logstash   deb

Repository URL to install this package:

/ opt / logstash / spec / codecs / graphite.rb

require "logstash/codecs/graphite"
require "logstash/event"
require "insist"

describe LogStash::Codecs::Graphite do
  subject do
    next LogStash::Codecs::Graphite.new
  end

  context "#decode" do
    it "should return an event from single full graphite line" do
      name = Random.srand.to_s(36)
      value = Random.rand*1000
      timestamp = Time.now.gmtime.to_i
      subject.decode("#{name} #{value} #{timestamp}\n") do |event|
        insist { event.is_a? LogStash::Event }
        insist { event[name] } == value
      end
    end
    
    it "should return multiple events given multiple graphite formated lines" do
      total_count = Random.rand(20)
      names = Array.new(total_count) { Random.srand.to_s(36) }
      values = Array.new(total_count) { Random.rand*1000 }
      timestamps = Array.new(total_count) { Time.now.gmtime.to_i }
      data = Array.new(total_count) {|i| "#{names[i]} #{values[i]} #{timestamps[i]}\n"}
      counter = 0
      subject.decode(data.join('')) do |event|
        insist { event.is_a? LogStash::Event }
        insist { event[names[counter]] } == values[counter]
        counter = counter+1
      end
      insist { counter } == total_count
    end
    
    it "should not return an event until newline is hit" do
      name = Random.srand.to_s(36)
      value = Random.rand*1000
      timestamp = Time.now.gmtime.to_i
      event_returned = false
      subject.decode("#{name} #{value} #{timestamp}") do |event|
        event_returned = true
      end
      insist { !event_returned }
      subject.decode("\n") do |event|
        insist { event.is_a? LogStash::Event }
        insist { event[name] } == value
        event_returned = true
      end
      insist { event_returned }
    end
  end
  
  context "#encode" do
    it "should emit an graphite formatted line" do
      name = Random.srand.to_s(36)
      value = Random.rand*1000
      timestamp = Time.now.gmtime
      subject.metrics = {name => value}
      subject.on_event do |event|
        insist { event.is_a? String }
        insist { event } == "#{name} #{value} #{timestamp.to_i}\n"
      end
      subject.encode(LogStash::Event.new("@timestamp" => timestamp))
    end
    
    it "should treat fields as metrics if fields as metrics flag is set" do
      name = Random.srand.to_s(36)
      value = Random.rand*1000
      timestamp = Time.now.gmtime.to_i
      subject.fields_are_metrics = true
      subject.on_event do |event|
        insist { event.is_a? String }
        insist { event } == "#{name} #{value} #{timestamp.to_i}\n"
      end
      subject.encode(LogStash::Event.new({name => value, "@timestamp" => timestamp}))
      
      #even if metrics param is set
      subject.metrics = {"foo" => 4}
      subject.encode(LogStash::Event.new({name => value, "@timestamp" => timestamp}))
    end
    
    it "should change the metric name format when metrics_format is set" do
      name = Random.srand.to_s(36)
      value = Random.rand*1000
      timestamp = Time.now.gmtime
      subject.metrics = {name => value}
      subject.metrics_format = "foo.bar.*.baz"
      subject.on_event do |event|
        insist { event.is_a? String }
        insist { event } == "foo.bar.#{name}.baz #{value} #{timestamp.to_i}\n"
      end
      subject.encode(LogStash::Event.new("@timestamp" => timestamp))
    end
  end
end