Fix video views
authorChocobozzz <me@florianbigard.com>
Tue, 21 May 2019 11:14:27 +0000 (13:14 +0200)
committerChocobozzz <me@florianbigard.com>
Tue, 21 May 2019 11:14:27 +0000 (13:14 +0200)
server/initializers/constants.ts
server/initializers/migrations/0380-cleanup-timestamps.ts [new file with mode: 0644]
server/lib/job-queue/handlers/video-views.ts

index 62778ae58443c137cae02503f148336f49026735..b5f8fc0bc751919ed71275d362fae7f570b9de75 100644 (file)
@@ -14,7 +14,7 @@ import { CONFIG, registerConfigChangedHandler } from './config'
 
 // ---------------------------------------------------------------------------
 
-const LAST_MIGRATION_VERSION = 375
+const LAST_MIGRATION_VERSION = 380
 
 // ---------------------------------------------------------------------------
 
diff --git a/server/initializers/migrations/0380-cleanup-timestamps.ts b/server/initializers/migrations/0380-cleanup-timestamps.ts
new file mode 100644 (file)
index 0000000..2a9fd6f
--- /dev/null
@@ -0,0 +1,29 @@
+import * as Sequelize from 'sequelize'
+
+async function up (utils: {
+  transaction: Sequelize.Transaction,
+  queryInterface: Sequelize.QueryInterface,
+  sequelize: Sequelize.Sequelize,
+  db: any
+}): Promise<void> {
+  try {
+    await utils.queryInterface.removeColumn('application', 'createdAt')
+  } catch { /* the column could not exist */ }
+
+  try {
+    await utils.queryInterface.removeColumn('application', 'updatedAt')
+  } catch { /* the column could not exist */ }
+
+  try {
+    await utils.queryInterface.removeColumn('videoView', 'updatedAt')
+  } catch { /* the column could not exist */ }
+}
+
+function down (options) {
+  throw new Error('Not implemented.')
+}
+
+export {
+  up,
+  down
+}
index fa1fd13b38da28b6080487b35f416120497fb976..73fa5ed041df8f937f67c572f3b97f6f1b0f3883 100644 (file)
@@ -27,6 +27,12 @@ async function processVideosViews () {
         logger.debug('Adding %d views to video %d in hour %d.', views, videoId, hour)
 
         try {
+          const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoId)
+          if (!video) {
+            logger.debug('Video %d does not exist anymore, skipping videos view addition.', videoId)
+            continue
+          }
+
           await VideoViewModel.create({
             startDate,
             endDate,
@@ -34,7 +40,6 @@ async function processVideosViews () {
             videoId
           })
 
-          const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoId)
           if (video.isOwned()) {
             // If this is a remote video, the origin instance will send us an update
             await VideoModel.incrementViews(videoId, views)
@@ -44,13 +49,13 @@ async function processVideosViews () {
             await federateVideoIfNeeded(video, false)
           }
         } catch (err) {
-          logger.debug('Cannot create video views for video %d in hour %d. Maybe the video does not exist anymore?', videoId, hour)
+          logger.error('Cannot create video views for video %d in hour %d.', videoId, hour, { err })
         }
       }
 
       await Redis.Instance.deleteVideoViews(videoId, hour)
     } catch (err) {
-      logger.error('Cannot update video views of video %d in hour %d.', videoId, hour)
+      logger.error('Cannot update video views of video %d in hour %d.', videoId, hour, { err })
     }
   }
 }