From 347c4a2fe3444bcf62b62d1644c3a77eab42964f Mon Sep 17 00:00:00 2001 From: Larry Marburger Date: Mon, 6 Aug 2012 21:35:26 -0400 Subject: [PATCH] Optionally filter data reported to Librato Metrics --- lib/metriks/reporter/librato_metrics.rb | 15 ++++++++ test/librato_metrics_reporter_test.rb | 47 ++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/lib/metriks/reporter/librato_metrics.rb b/lib/metriks/reporter/librato_metrics.rb index 3299e8e..23f0309 100644 --- a/lib/metriks/reporter/librato_metrics.rb +++ b/lib/metriks/reporter/librato_metrics.rb @@ -15,6 +15,9 @@ def initialize(email, token, options = {}) @registry = options[:registry] || Metriks::Registry.default @time_tracker = Metriks::TimeTracker.new(options[:interval] || 60) @on_error = options[:on_error] || proc { |ex| } + + @only = options[:only] || :all + @except = options[:except] || :none end def start @@ -86,6 +89,18 @@ def write gauges.flatten! unless gauges.empty? + unless @only == :all + gauges.select! do |gauge| + @only.include? gauge[:name] + end + end + + unless @except == :none + gauges.reject! do |gauge| + @except.include? gauge[:name] + end + end + submit(form_data(gauges.flatten)) end end diff --git a/test/librato_metrics_reporter_test.rb b/test/librato_metrics_reporter_test.rb index 2553ba1..91ed0fa 100644 --- a/test/librato_metrics_reporter_test.rb +++ b/test/librato_metrics_reporter_test.rb @@ -31,4 +31,49 @@ def test_write @reporter.write end -end \ No newline at end of file + + def test_report_specific_gauges + reports = %w( meter.testing.one_minute_rate counter.testing.count ) + @reporter = build_reporter :only => reports + + @registry.meter('meter.testing').mark + @registry.counter('counter.testing').increment + + actual_reports = [] + @reporter.expects(:submit).with do |data| + data.inject(actual_reports) do |actual_reports, (key, value)| + actual_reports << value if key.end_with?('[name]') + actual_reports + end + end + + @reporter.write + + assert_equal reports, actual_reports + end + + def test_omit_specific_gauges + @reporter = build_reporter :except => %w( meter.testing.one_minute_rate + counter.testing.count ) + + @registry.meter('meter.testing').mark + @registry.counter('counter.testing').increment + + actual_reports = [] + @reporter.expects(:submit).with do |data| + data.inject(actual_reports) do |actual_reports, (key, value)| + actual_reports << value if key.end_with?('[name]') + actual_reports + end + end + + @reporter.write + + expected_reports = %w( meter.testing.five_minute_rate + meter.testing.fifteen_minute_rate + meter.testing.mean_rate + meter.testing.count ) + + assert_equal expected_reports, actual_reports + end +end