From f8f0af9d7875ba426dfd2c2aa22fb1dffe71f501 Mon Sep 17 00:00:00 2001 From: Dave Rogers Date: Wed, 12 Jun 2013 23:51:30 -0700 Subject: [PATCH] adding a set to keep track of keys --- lib/profit/server.rb | 18 +++++++++++------- spec/lib/server_spec.rb | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/lib/profit/server.rb b/lib/profit/server.rb index 40dcf29..a538de4 100644 --- a/lib/profit/server.rb +++ b/lib/profit/server.rb @@ -36,13 +36,17 @@ def run # take a worker from the pool to save the metric to Redis redis_pool.perform do |conn| - message_hash = JSON.parse(message) - metric_type = message_hash.delete("metric_type") - - response = conn.rpush "profit:metric:#{metric_type}", message_hash.to_json - response.callback { |resp| logger.debug "callback: #{resp}"} - response.errback { |resp| logger.error "error: #{resp}"} - response + message_hash = JSON.parse(message) + metric_type = message_hash.delete("metric_type") + metric_key = "profit:metric:#{metric_type}" + add_key_response = conn.sadd("profit:keys", metric_key) + add_key_response.callback { |resp| logger.debug "adding key callback: #{resp}"} + add_key_response.errback { |resp| logger.error "adding key error: #{resp}"} + + push_metric_response = conn.rpush metric_key, message_hash.to_json + push_metric_response.callback { |resp| logger.debug "callback: #{resp}"} + push_metric_response.errback { |resp| logger.error "error: #{resp}"} + push_metric_response end end end diff --git a/spec/lib/server_spec.rb b/spec/lib/server_spec.rb index bbbab4d..bfdfc4b 100644 --- a/spec/lib/server_spec.rb +++ b/spec/lib/server_spec.rb @@ -8,6 +8,7 @@ after do redis.del("profit:metric:some_slow_piece_of_code") + redis.del("profit:keys") end it "stores metrics messages" do @@ -34,4 +35,38 @@ expect(metric["end_file"]).to eq "/foo/bar/biz.rb" expect(metric["recorded_time"]).to eq now.to_s end + + it "stores a set of all metric keys" do + pusher = server.ctx.connect(:PUSH, "tcp://127.0.0.1:5556") + + pusher.send({ recorded_time: (now = Time.now), + total_time: 12.012, + metric_type: "some_slow_piece_of_code", + start_line: 1, + end_line: 42, + start_file: "/foo/bar/baz.rb", + end_file: "/foo/bar/biz.rb" }.to_json) + + pusher.send({ recorded_time: (now = Time.now), + total_time: 14.316, + metric_type: "some_slow_piece_of_code", + start_line: 1, + end_line: 42, + start_file: "/foo/bar/baz.rb", + end_file: "/foo/bar/biz.rb" }.to_json) + + pusher.send({ recorded_time: (now = Time.now), + total_time: 1.455, + metric_type: "other_piece_of_code", + start_line: 12, + end_line: 23, + start_file: "/foo/bar/baz.rb", + end_file: "/foo/bar/biz.rb" }.to_json) + server_thread.join(0.1) + + set = redis.smembers("profit:keys") + expect(set.count).to eq 2 + expect(set.to_a).to eq ["profit:metric:other_piece_of_code", + "profit:metric:some_slow_piece_of_code"] + end end