From 6b6168606bc86430f6b7821c9d5f1c80d0425ebf Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 29 Aug 2018 16:26:25 +0200 Subject: Bufferize videos views in redis --- server/lib/job-queue/handlers/video-views.ts | 40 ++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 server/lib/job-queue/handlers/video-views.ts (limited to 'server/lib/job-queue/handlers/video-views.ts') diff --git a/server/lib/job-queue/handlers/video-views.ts b/server/lib/job-queue/handlers/video-views.ts new file mode 100644 index 000000000..875d8ab88 --- /dev/null +++ b/server/lib/job-queue/handlers/video-views.ts @@ -0,0 +1,40 @@ +import { Redis } from '../../redis' +import { logger } from '../../../helpers/logger' +import { VideoModel } from '../../../models/video/video' +import { VideoViewModel } from '../../../models/video/video-views' + +async function processVideosViewsViews () { + const hour = new Date().getHours() + const startDate = new Date().setMinutes(0, 0, 0) + const endDate = new Date().setMinutes(59, 59, 999) + + const videoIds = await Redis.Instance.getVideosIdViewed(hour) + if (videoIds.length === 0) return + + logger.info('Processing videos views in job for hour %d.', hour) + + for (const videoId of videoIds) { + const views = await Redis.Instance.getVideoViews(videoId, hour) + if (isNaN(views)) { + logger.error('Cannot process videos views of video %s in hour %d: views number is NaN.', videoId, hour) + } else { + logger.debug('Adding %d views to video %d in hour %d.', views, videoId, hour) + + await VideoModel.incrementViews(videoId, views) + await VideoViewModel.create({ + startDate, + endDate, + views, + videoId + }) + } + + await Redis.Instance.deleteVideoViews(videoId, hour) + } +} + +// --------------------------------------------------------------------------- + +export { + processVideosViewsViews +} -- cgit v1.2.3