about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-02-05 03:19:04 +0100
committerEugen Rochko <eugen@zeonfederated.com>2017-02-05 03:19:04 +0100
commitfb6aa7ad5ce79ae0738ebf1cada0e834c33b0ef2 (patch)
treec0835a1eecf0ba434eec8984d120d21ed8000c49
parent6cdcac1396e60286284fd8cbfe5c859050c696af (diff)
Add tracking of delay to streaming API
-rw-r--r--app/assets/javascripts/components/features/ui/containers/modal_container.jsx2
-rw-r--r--app/lib/feed_manager.rb1
-rw-r--r--streaming/index.js16
3 files changed, 13 insertions, 6 deletions
diff --git a/app/assets/javascripts/components/features/ui/containers/modal_container.jsx b/app/assets/javascripts/components/features/ui/containers/modal_container.jsx
index 1e69fc59c..334e5c199 100644
--- a/app/assets/javascripts/components/features/ui/containers/modal_container.jsx
+++ b/app/assets/javascripts/components/features/ui/containers/modal_container.jsx
@@ -123,7 +123,7 @@ const Modal = React.createClass({
     window.addEventListener('keyup', this._listener);
   },
 
-  componentDidUnmount () {
+  componentWillUnmount () {
     window.removeEventListener('keyup', this._listener);
   },
 
diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb
index 028fc5218..7069026e3 100644
--- a/app/lib/feed_manager.rb
+++ b/app/lib/feed_manager.rb
@@ -30,6 +30,7 @@ class FeedManager
   end
 
   def broadcast(timeline_id, options = {})
+    options[:queued_at] = (Time.now.to_f * 1000.0).to_i
     ActionCable.server.broadcast("timeline:#{timeline_id}", options)
   end
 
diff --git a/streaming/index.js b/streaming/index.js
index 16dda5c1e..4f0df1ea5 100644
--- a/streaming/index.js
+++ b/streaming/index.js
@@ -101,7 +101,15 @@ const streamFrom = (redisClient, id, req, output, needsFiltering = false) => {
   log.verbose(`Starting stream from ${id} for ${req.accountId}`)
 
   redisClient.on('message', (channel, message) => {
-    const { event, payload } = JSON.parse(message)
+    const { event, payload, queued_at } = JSON.parse(message)
+
+    const transmit = () => {
+      const now   = new Date().getTime()
+      const delta = now - queued_at;
+
+      log.silly(`Transmitting for ${req.accountId}: ${event} ${payload} Delay: ${delta}ms`)
+      output(event, payload)
+    }
 
     // Only messages that may require filtering are statuses, since notifications
     // are already personalized and deletes do not matter
@@ -127,13 +135,11 @@ const streamFrom = (redisClient, id, req, output, needsFiltering = false) => {
             return
           }
 
-          log.silly(`Transmitting for ${req.accountId}: ${event} ${payload}`)
-          output(event, payload)
+          transmit()
         })
       })
     } else {
-      log.silly(`Transmitting for ${req.accountId}: ${event} ${payload}`)
-      output(event, payload)
+      transmit()
     }
   })