From b211106695bb82f6c32e53306081b5262c3d109d Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 24 Mar 2022 13:36:47 +0100 Subject: Support video views/viewers stats in server * Add "currentTime" and "event" body params to view endpoint * Merge watching and view endpoints * Introduce WatchAction AP activity * Add tables to store viewer information of local videos * Add endpoints to fetch video views/viewers stats of local videos * Refactor views/viewers handlers * Support "views" and "viewers" counters for both VOD and live videos --- server/tests/api/views/videos-views-cleaner.ts | 101 +++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 server/tests/api/views/videos-views-cleaner.ts (limited to 'server/tests/api/views/videos-views-cleaner.ts') diff --git a/server/tests/api/views/videos-views-cleaner.ts b/server/tests/api/views/videos-views-cleaner.ts new file mode 100644 index 000000000..ef988837f --- /dev/null +++ b/server/tests/api/views/videos-views-cleaner.ts @@ -0,0 +1,101 @@ +/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ + +import 'mocha' +import * as chai from 'chai' +import { wait } from '@shared/core-utils' +import { + cleanupTests, + createMultipleServers, + doubleFollow, + killallServers, + PeerTubeServer, + setAccessTokensToServers, + waitJobs +} from '@shared/server-commands' + +const expect = chai.expect + +describe('Test video views cleaner', function () { + let servers: PeerTubeServer[] + + let videoIdServer1: string + let videoIdServer2: string + + before(async function () { + this.timeout(120000) + + servers = await createMultipleServers(2) + await setAccessTokensToServers(servers) + + await doubleFollow(servers[0], servers[1]) + + videoIdServer1 = (await servers[0].videos.quickUpload({ name: 'video server 1' })).uuid + videoIdServer2 = (await servers[1].videos.quickUpload({ name: 'video server 2' })).uuid + + await waitJobs(servers) + + await servers[0].views.simulateView({ id: videoIdServer1 }) + await servers[1].views.simulateView({ id: videoIdServer1 }) + await servers[0].views.simulateView({ id: videoIdServer2 }) + await servers[1].views.simulateView({ id: videoIdServer2 }) + + await waitJobs(servers) + }) + + it('Should not clean old video views', async function () { + this.timeout(50000) + + await killallServers([ servers[0] ]) + + await servers[0].run({ views: { videos: { remote: { max_age: '10 days' } } } }) + + await wait(6000) + + // Should still have views + + { + for (const server of servers) { + const total = await server.sql.countVideoViewsOf(videoIdServer1) + expect(total).to.equal(2, 'Server ' + server.serverNumber + ' does not have the correct amount of views') + } + } + + { + for (const server of servers) { + const total = await server.sql.countVideoViewsOf(videoIdServer2) + expect(total).to.equal(2, 'Server ' + server.serverNumber + ' does not have the correct amount of views') + } + } + }) + + it('Should clean old video views', async function () { + this.timeout(50000) + + await killallServers([ servers[0] ]) + + await servers[0].run({ views: { videos: { remote: { max_age: '5 seconds' } } } }) + + await wait(6000) + + // Should still have views + + { + for (const server of servers) { + const total = await server.sql.countVideoViewsOf(videoIdServer1) + expect(total).to.equal(2) + } + } + + { + const totalServer1 = await servers[0].sql.countVideoViewsOf(videoIdServer2) + expect(totalServer1).to.equal(0) + + const totalServer2 = await servers[1].sql.countVideoViewsOf(videoIdServer2) + expect(totalServer2).to.equal(2) + } + }) + + after(async function () { + await cleanupTests(servers) + }) +}) -- cgit v1.2.3