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 --- shared/models/videos/index.ts | 2 ++ shared/models/videos/stats/index.ts | 4 ++++ shared/models/videos/stats/video-stats-overall.model.ts | 17 +++++++++++++++++ .../models/videos/stats/video-stats-retention.model.ts | 6 ++++++ .../videos/stats/video-stats-timeserie-metric.type.ts | 1 + .../models/videos/stats/video-stats-timeserie.model.ts | 6 ++++++ shared/models/videos/video-view.model.ts | 6 ++++++ shared/models/videos/video.model.ts | 3 +-- 8 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 shared/models/videos/stats/index.ts create mode 100644 shared/models/videos/stats/video-stats-overall.model.ts create mode 100644 shared/models/videos/stats/video-stats-retention.model.ts create mode 100644 shared/models/videos/stats/video-stats-timeserie-metric.type.ts create mode 100644 shared/models/videos/stats/video-stats-timeserie.model.ts create mode 100644 shared/models/videos/video-view.model.ts (limited to 'shared/models/videos') diff --git a/shared/models/videos/index.ts b/shared/models/videos/index.ts index 705e8d0ff..05497bda1 100644 --- a/shared/models/videos/index.ts +++ b/shared/models/videos/index.ts @@ -9,6 +9,7 @@ export * from './file' export * from './import' export * from './playlist' export * from './rate' +export * from './stats' export * from './transcoding' export * from './nsfw-policy.type' @@ -32,5 +33,6 @@ export * from './video-streaming-playlist.model' export * from './video-streaming-playlist.type' export * from './video-update.model' +export * from './video-view.model' export * from './video.model' export * from './video-create-result.model' diff --git a/shared/models/videos/stats/index.ts b/shared/models/videos/stats/index.ts new file mode 100644 index 000000000..d1e9c167c --- /dev/null +++ b/shared/models/videos/stats/index.ts @@ -0,0 +1,4 @@ +export * from './video-stats-overall.model' +export * from './video-stats-retention.model' +export * from './video-stats-timeserie.model' +export * from './video-stats-timeserie-metric.type' diff --git a/shared/models/videos/stats/video-stats-overall.model.ts b/shared/models/videos/stats/video-stats-overall.model.ts new file mode 100644 index 000000000..f2a0470ef --- /dev/null +++ b/shared/models/videos/stats/video-stats-overall.model.ts @@ -0,0 +1,17 @@ +export interface VideoStatsOverall { + averageWatchTime: number + totalWatchTime: number + + viewersPeak: number + viewersPeakDate: string + + views: number + likes: number + dislikes: number + comments: number + + countries: { + isoCode: string + viewers: number + }[] +} diff --git a/shared/models/videos/stats/video-stats-retention.model.ts b/shared/models/videos/stats/video-stats-retention.model.ts new file mode 100644 index 000000000..e494888ed --- /dev/null +++ b/shared/models/videos/stats/video-stats-retention.model.ts @@ -0,0 +1,6 @@ +export interface VideoStatsRetention { + data: { + second: number + retentionPercent: number + }[] +} diff --git a/shared/models/videos/stats/video-stats-timeserie-metric.type.ts b/shared/models/videos/stats/video-stats-timeserie-metric.type.ts new file mode 100644 index 000000000..fc268d083 --- /dev/null +++ b/shared/models/videos/stats/video-stats-timeserie-metric.type.ts @@ -0,0 +1 @@ +export type VideoStatsTimeserieMetric = 'viewers' | 'aggregateWatchTime' diff --git a/shared/models/videos/stats/video-stats-timeserie.model.ts b/shared/models/videos/stats/video-stats-timeserie.model.ts new file mode 100644 index 000000000..d95e34f1d --- /dev/null +++ b/shared/models/videos/stats/video-stats-timeserie.model.ts @@ -0,0 +1,6 @@ +export interface VideoStatsTimeserie { + data: { + date: string + value: number + }[] +} diff --git a/shared/models/videos/video-view.model.ts b/shared/models/videos/video-view.model.ts new file mode 100644 index 000000000..f61211104 --- /dev/null +++ b/shared/models/videos/video-view.model.ts @@ -0,0 +1,6 @@ +export type VideoViewEvent = 'seek' + +export interface VideoView { + currentTime: number + viewEvent?: VideoViewEvent +} diff --git a/shared/models/videos/video.model.ts b/shared/models/videos/video.model.ts index f98eed012..d9765dbd6 100644 --- a/shared/models/videos/video.model.ts +++ b/shared/models/videos/video.model.ts @@ -39,8 +39,7 @@ export interface Video { url: string views: number - // If live - viewers?: number + viewers: number likes: number dislikes: number -- cgit v1.2.3