diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2017-02-05 03:19:04 +0100 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-02-05 03:19:04 +0100 |
commit | fb6aa7ad5ce79ae0738ebf1cada0e834c33b0ef2 (patch) | |
tree | c0835a1eecf0ba434eec8984d120d21ed8000c49 | |
parent | 6cdcac1396e60286284fd8cbfe5c859050c696af (diff) |
Add tracking of delay to streaming API
-rw-r--r-- | app/assets/javascripts/components/features/ui/containers/modal_container.jsx | 2 | ||||
-rw-r--r-- | app/lib/feed_manager.rb | 1 | ||||
-rw-r--r-- | streaming/index.js | 16 |
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() } }) |