Fix total videos stats
authorChocobozzz <me@florianbigard.com>
Fri, 13 Mar 2020 12:43:26 +0000 (13:43 +0100)
committerChocobozzz <me@florianbigard.com>
Fri, 13 Mar 2020 13:54:00 +0000 (14:54 +0100)
server/controllers/api/server/stats.ts
server/models/video/video.ts
server/tests/api/server/stats.ts

index 6d508a481d7beb67024bb15ce688341309823745..f6a85d0c066d3cebcdd4cb209586ece23e853890 100644 (file)
@@ -26,11 +26,12 @@ async function getStats (req: express.Request, res: express.Response) {
   const { totalInstanceFollowers, totalInstanceFollowing } = await ActorFollowModel.getStats()
   const { totalLocalVideoFilesSize } = await VideoFileModel.getStats()
 
-  const strategies: { strategy: VideoRedundancyStrategyWithManual, size: number }[] = CONFIG.REDUNDANCY.VIDEOS.STRATEGIES
-                                                                                            .map(r => ({
-                                                                                              strategy: r.strategy,
-                                                                                              size: r.size
-                                                                                            }))
+  const strategies = CONFIG.REDUNDANCY.VIDEOS.STRATEGIES
+                          .map(r => ({
+                            strategy: r.strategy as VideoRedundancyStrategyWithManual,
+                            size: r.size
+                          }))
+
   strategies.push({ strategy: 'manual', size: null })
 
   const videosRedundancyStats = await Promise.all(
index 958a49e6586ccdbf6af1b77e3da7e74d3f95a006..0e7505af5099052f835662902a4152ad973e8dc9 100644 (file)
@@ -125,6 +125,7 @@ import { VideoFile } from '@shared/models/videos/video-file.model'
 import { getHLSDirectory, getTorrentFileName, getTorrentFilePath, getVideoFilename, getVideoFilePath } from '@server/lib/video-paths'
 import { ModelCache } from '@server/models/model-cache'
 import { buildListQuery, BuildVideosQueryOptions, wrapForAPIResults } from './video-query-builder'
+import { buildNSFWFilter } from '@server/helpers/express-utils'
 
 export enum ScopeNames {
   AVAILABLE_FOR_LIST_IDS = 'AVAILABLE_FOR_LIST_IDS',
@@ -1301,16 +1302,25 @@ export class VideoModel extends Model<VideoModel> {
         remote: false
       }
     })
-    const totalVideos = await VideoModel.count()
 
     let totalLocalVideoViews = await VideoModel.sum('views', {
       where: {
         remote: false
       }
     })
+
     // Sequelize could return null...
     if (!totalLocalVideoViews) totalLocalVideoViews = 0
 
+    const { total: totalVideos } = await VideoModel.listForApi({
+      start: 0,
+      count: 0,
+      sort: '-publishedAt',
+      nsfw: buildNSFWFilter(),
+      includeLocalVideos: true,
+      withFiles: false
+    })
+
     return {
       totalLocalVideos,
       totalLocalVideoViews,
@@ -1419,6 +1429,8 @@ export class VideoModel extends Model<VideoModel> {
     }
 
     function getModels () {
+      if (options.count === 0) return Promise.resolve([])
+
       const { query, replacements, order } = buildListQuery(VideoModel, options)
       const queryModels = wrapForAPIResults(query, replacements, options, order)
 
index c207bb5f00196e649e163458c62766e06d2cbab9..fe956413c088e177db42bb484166981db8d40d71 100644 (file)
@@ -9,7 +9,7 @@ import {
   doubleFollow,
   flushAndRunMultipleServers,
   follow,
-  ServerInfo,
+  ServerInfo, unfollow,
   uploadVideo,
   viewVideo,
   wait
@@ -95,6 +95,16 @@ describe('Test stats (excluding redundancy)', function () {
     expect(data.totalInstanceFollowers).to.equal(0)
   })
 
+  it('Should have the correct total videos stats after an unfollow', async function () {
+    await unfollow(servers[2].url, servers[2].accessToken, servers[0])
+    await waitJobs(servers)
+
+    const res = await getStats(servers[2].url)
+    const data: ServerStats = res.body
+
+    expect(data.totalVideos).to.equal(0)
+  })
+
   after(async function () {
     await cleanupTests(servers)
   })