Add tracking of delay to streaming API

main
Eugen Rochko 2017-02-05 03:19:04 +01:00
parent 6cdcac1396
commit fb6aa7ad5c
3 changed files with 13 additions and 6 deletions

View File

@ -123,7 +123,7 @@ const Modal = React.createClass({
window.addEventListener('keyup', this._listener); window.addEventListener('keyup', this._listener);
}, },
componentDidUnmount () { componentWillUnmount () {
window.removeEventListener('keyup', this._listener); window.removeEventListener('keyup', this._listener);
}, },

View File

@ -30,6 +30,7 @@ class FeedManager
end end
def broadcast(timeline_id, options = {}) def broadcast(timeline_id, options = {})
options[:queued_at] = (Time.now.to_f * 1000.0).to_i
ActionCable.server.broadcast("timeline:#{timeline_id}", options) ActionCable.server.broadcast("timeline:#{timeline_id}", options)
end end

View File

@ -101,7 +101,15 @@ const streamFrom = (redisClient, id, req, output, needsFiltering = false) => {
log.verbose(`Starting stream from ${id} for ${req.accountId}`) log.verbose(`Starting stream from ${id} for ${req.accountId}`)
redisClient.on('message', (channel, message) => { 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 // Only messages that may require filtering are statuses, since notifications
// are already personalized and deletes do not matter // are already personalized and deletes do not matter
@ -127,13 +135,11 @@ const streamFrom = (redisClient, id, req, output, needsFiltering = false) => {
return return
} }
log.silly(`Transmitting for ${req.accountId}: ${event} ${payload}`) transmit()
output(event, payload)
}) })
}) })
} else { } else {
log.silly(`Transmitting for ${req.accountId}: ${event} ${payload}`) transmit()
output(event, payload)
} }
}) })