Fix total videos stats

pull/2567/head
Chocobozzz 2020-03-13 13:43:26 +01:00
parent 8c966daab3
commit baab47ca81
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
3 changed files with 30 additions and 7 deletions

View 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
const strategies = CONFIG.REDUNDANCY.VIDEOS.STRATEGIES
.map(r => ({
strategy: r.strategy,
strategy: r.strategy as VideoRedundancyStrategyWithManual,
size: r.size
}))
strategies.push({ strategy: 'manual', size: null })
const videosRedundancyStats = await Promise.all(

View 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)

View 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)
})