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/live/index.ts | 1 - server/tests/api/live/live-socket-messages.ts | 4 +- server/tests/api/live/live-views.ts | 132 -------------------------- 3 files changed, 2 insertions(+), 135 deletions(-) delete mode 100644 server/tests/api/live/live-views.ts (limited to 'server/tests/api/live') diff --git a/server/tests/api/live/index.ts b/server/tests/api/live/index.ts index 105416b8d..71bc150d8 100644 --- a/server/tests/api/live/index.ts +++ b/server/tests/api/live/index.ts @@ -3,5 +3,4 @@ import './live-socket-messages' import './live-permanent' import './live-rtmps' import './live-save-replay' -import './live-views' import './live' diff --git a/server/tests/api/live/live-socket-messages.ts b/server/tests/api/live/live-socket-messages.ts index 50b16443e..7668ed5b9 100644 --- a/server/tests/api/live/live-socket-messages.ts +++ b/server/tests/api/live/live-socket-messages.ts @@ -140,8 +140,8 @@ describe('Test live', function () { expect(localLastVideoViews).to.equal(0) expect(remoteLastVideoViews).to.equal(0) - await servers[0].videos.view({ id: liveVideoUUID }) - await servers[1].videos.view({ id: liveVideoUUID }) + await servers[0].views.simulateView({ id: liveVideoUUID }) + await servers[1].views.simulateView({ id: liveVideoUUID }) await waitJobs(servers) diff --git a/server/tests/api/live/live-views.ts b/server/tests/api/live/live-views.ts deleted file mode 100644 index 446d0913c..000000000 --- a/server/tests/api/live/live-views.ts +++ /dev/null @@ -1,132 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ - -import 'mocha' -import * as chai from 'chai' -import { FfmpegCommand } from 'fluent-ffmpeg' -import { wait } from '@shared/core-utils' -import { VideoPrivacy } from '@shared/models' -import { - cleanupTests, - createMultipleServers, - doubleFollow, - PeerTubeServer, - setAccessTokensToServers, - setDefaultVideoChannel, - stopFfmpeg, - waitJobs, - waitUntilLivePublishedOnAllServers -} from '@shared/server-commands' - -const expect = chai.expect - -describe('Live views', function () { - let servers: PeerTubeServer[] = [] - - before(async function () { - this.timeout(120000) - - servers = await createMultipleServers(2) - - // Get the access tokens - await setAccessTokensToServers(servers) - await setDefaultVideoChannel(servers) - - await servers[0].config.updateCustomSubConfig({ - newConfig: { - live: { - enabled: true, - allowReplay: true, - transcoding: { - enabled: false - } - } - } - }) - - // Server 1 and server 2 follow each other - await doubleFollow(servers[0], servers[1]) - }) - - let liveVideoId: string - let command: FfmpegCommand - - async function countViewers (expectedViewers: number) { - for (const server of servers) { - const video = await server.videos.get({ id: liveVideoId }) - expect(video.viewers).to.equal(expectedViewers) - } - } - - async function countViews (expectedViews: number) { - for (const server of servers) { - const video = await server.videos.get({ id: liveVideoId }) - expect(video.views).to.equal(expectedViews) - } - } - - before(async function () { - this.timeout(30000) - - const liveAttributes = { - name: 'live video', - channelId: servers[0].store.channel.id, - privacy: VideoPrivacy.PUBLIC - } - - const live = await servers[0].live.create({ fields: liveAttributes }) - liveVideoId = live.uuid - - command = await servers[0].live.sendRTMPStreamInVideo({ videoId: liveVideoId }) - await waitUntilLivePublishedOnAllServers(servers, liveVideoId) - await waitJobs(servers) - }) - - it('Should display no views and viewers for a live', async function () { - await countViews(0) - await countViewers(0) - }) - - it('Should view a live twice and display 1 view/viewer', async function () { - this.timeout(30000) - - await servers[0].videos.view({ id: liveVideoId }) - await servers[0].videos.view({ id: liveVideoId }) - - await waitJobs(servers) - await countViewers(1) - - await wait(7000) - await countViews(1) - }) - - it('Should wait and display 0 viewers while still have 1 view', async function () { - this.timeout(30000) - - await wait(12000) - await waitJobs(servers) - - await countViews(1) - await countViewers(0) - }) - - it('Should view a live on a remote and on local and display 2 viewers and 3 views', async function () { - this.timeout(30000) - - await servers[0].videos.view({ id: liveVideoId }) - await servers[1].videos.view({ id: liveVideoId }) - await servers[1].videos.view({ id: liveVideoId }) - await waitJobs(servers) - - await countViewers(2) - - await wait(7000) - await waitJobs(servers) - - await countViews(3) - }) - - after(async function () { - await stopFfmpeg(command) - await cleanupTests(servers) - }) -}) -- cgit v1.2.3