diff options
Diffstat (limited to 'app/assets/javascripts/diffs/utils/queue_events.js')
-rw-r--r-- | app/assets/javascripts/diffs/utils/queue_events.js | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/app/assets/javascripts/diffs/utils/queue_events.js b/app/assets/javascripts/diffs/utils/queue_events.js index 08fcc98d45f..cc7141df622 100644 --- a/app/assets/javascripts/diffs/utils/queue_events.js +++ b/app/assets/javascripts/diffs/utils/queue_events.js @@ -1,13 +1,31 @@ import { delay } from 'lodash'; import api from '~/api'; -import { DEFER_DURATION } from '../constants'; +import { DEFER_DURATION, TRACKING_CAP_KEY, TRACKING_CAP_LENGTH } from '../constants'; -function trackRedisHllUserEvent(event, deferDuration = 0) { +function shouldDispatchEvent() { + const timestamp = parseInt(localStorage.getItem(TRACKING_CAP_KEY), 10); + + if (Number.isNaN(timestamp)) { + return true; + } + + return timestamp + TRACKING_CAP_LENGTH < Date.now(); +} + +export function dispatchRedisHllUserEvent(event, deferDuration = 0) { delay(() => api.trackRedisHllUserEvent(event), deferDuration); } -export function queueRedisHllEvents(events) { +export function queueRedisHllEvents(events, { verifyCap = false } = {}) { + if (verifyCap) { + if (!shouldDispatchEvent()) { + return; + } + + localStorage.setItem(TRACKING_CAP_KEY, Date.now()); + } + events.forEach((event, index) => { - trackRedisHllUserEvent(event, DEFER_DURATION * (index + 1)); + dispatchRedisHllUserEvent(event, DEFER_DURATION * (index + 1)); }); } |