Wrapped channel callback in exception handler.
authorPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 24 Apr 2014 20:04:59 +0000 (16:04 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 24 Apr 2014 20:04:59 +0000 (16:04 -0400)
services/api/lib/eventbus.rb

index c93f2e5f4b2e55caf0860106b4dfe93dbd0bc264..0865567b3a58b78d562f1d73cf681e43df3a5cbd 100644 (file)
@@ -52,49 +52,48 @@ class EventBus
 
     sub = @channel.subscribe do |msg|
       begin
-      puts "Waking up"
-
-      # Must have at least one filter set up to receive events
-      if ws.filters.length > 0
-
-        # Start with log rows readable by user, sorted in ascending order
-        logs = Log.readable_by(ws.user).order("id asc")
-
-        if ws.last_log_id
-          # Only get log rows that are new
-          logs = logs.where("logs.id > ? and logs.id <= ?", ws.last_log_id, msg.to_i)
-        else
-          # No last log id, so only look at the most recently changed row
-          logs = logs.where("logs.id = ?", msg.to_i)
-        end
+        # Must have at least one filter set up to receive events
+        if ws.filters.length > 0
+
+          # Start with log rows readable by user, sorted in ascending order
+          logs = Log.readable_by(ws.user).order("id asc")
+
+          if ws.last_log_id
+            # Only get log rows that are new
+            logs = logs.where("logs.id > ? and logs.id <= ?", ws.last_log_id, msg.to_i)
+          else
+            # No last log id, so only look at the most recently changed row
+            logs = logs.where("logs.id = ?", msg.to_i)
+          end
 
-        # Record the most recent row
-        ws.last_log_id = msg.to_i
+          # Record the most recent row
+          ws.last_log_id = msg.to_i
 
-        # Now process filters provided by client
-        cond_out = []
-        param_out = []
-        ws.filters.each do |filter|
-          ft = record_filters filter.filters
-          cond_out += ft[:cond_out]
-          param_out += ft[:param_out]
-        end
+          # Now process filters provided by client
+          cond_out = []
+          param_out = []
+          ws.filters.each do |filter|
+            ft = record_filters filter.filters
+            cond_out += ft[:cond_out]
+            param_out += ft[:param_out]
+          end
 
-        # Add filters to query
-        if cond_out.any?
-          logs = logs.where(cond_out.join(' OR '), *param_out)
-        end
+          # Add filters to query
+          if cond_out.any?
+            logs = logs.where(cond_out.join(' OR '), *param_out)
+          end
 
-        # Finally execute query and send matching rows
-        logs.each do |l|
-          ws.send(l.as_api_response.to_json)
+          # Finally execute query and send matching rows
+          logs.each do |l|
+            ws.send(l.as_api_response.to_json)
+          end
+        else
+          # No filters set up, so just record the sequence number
+          ws.last_log_id.nil = msg.to_i
         end
-      else
-        # No filters set up, so just record the sequence number
-        ws.last_log_id.nil = msg.to_i
-      end
       rescue Exception => e
         puts "#{e}"
+        ws.close
       end
     end