From 8d2521208bf3b3f146b44d9291b1575ae4e646a4 Mon Sep 17 00:00:00 2001 From: "Umar M. Sheikh" Date: Tue, 14 Jan 2014 15:09:05 +0500 Subject: [PATCH] use strings in hash keys, cleanup old memory --- app/models/agents/public_transport_agent.rb | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/app/models/agents/public_transport_agent.rb b/app/models/agents/public_transport_agent.rb index 92946b6c..7f40e509 100644 --- a/app/models/agents/public_transport_agent.rb +++ b/app/models/agents/public_transport_agent.rb @@ -76,7 +76,7 @@ module Agents vals = vals.merge Hash.from_xml(pr.to_xml) if not_already_in_memory?(vals) create_event(:payload => vals) - add_to_memory(vals) + update_memory(vals) else end end @@ -85,15 +85,23 @@ module Agents hydra.queue request hydra.run end + def update_memory(vals) + add_to_memory(vals) + cleanup_old_memory + end + def cleanup_old_memory + self.memory["existing_routes"] ||= [] + self.memory["existing_routes"].reject!{|h| h["currentTime"] <= (Time.now - 2.hours)} + end def add_to_memory(vals) self.memory["existing_routes"] ||= [] self.memory["existing_routes"] << {stopTag: vals["stopTag"], tripTag: vals["prediction"]["tripTag"], epochTime: vals["prediction"]["epochTime"], currentTime: Time.now} end def not_already_in_memory?(vals) m = self.memory["existing_routes"] - m.select{|h| h[:stopTag] == vals["stopTag"] && - h[:tripTag] == vals["prediction"]["tripTag"] && - h[:epochTime] == vals["prediction"]["epochTime"] + m.select{|h| h['stopTag'] == vals["stopTag"] && + h['tripTag'] == vals["prediction"]["tripTag"] && + h['epochTime'] == vals["prediction"]["epochTime"] }.count == 0 end def default_options