From 51353d9a035fb6b81f903a8b5f391292841649fd Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 9 Nov 2021 10:11:20 +0100 Subject: Refactor video views Introduce viewers attribute for live videos Count views for live videos Reduce delay to see the viewer update for lives Add ability to configure video views buffer interval and view ip expiration --- shared/extra-utils/server/jobs.ts | 4 ++-- shared/models/activitypub/activity.ts | 4 ++-- shared/models/server/job.model.ts | 2 +- shared/models/videos/live/live-video-event-payload.model.ts | 4 ++++ shared/models/videos/video.model.ts | 3 +++ 5 files changed, 12 insertions(+), 5 deletions(-) (limited to 'shared') diff --git a/shared/extra-utils/server/jobs.ts b/shared/extra-utils/server/jobs.ts index 79b8c3183..afaaa5cd6 100644 --- a/shared/extra-utils/server/jobs.ts +++ b/shared/extra-utils/server/jobs.ts @@ -1,5 +1,5 @@ -import { JobState } from '../../models' +import { JobState, JobType } from '../../models' import { wait } from '../miscs' import { PeerTubeServer } from './server' @@ -16,7 +16,7 @@ async function waitJobs (serversArg: PeerTubeServer[] | PeerTubeServer, skipDela const states: JobState[] = [ 'waiting', 'active' ] if (!skipDelayed) states.push('delayed') - const repeatableJobs = [ 'videos-views', 'activitypub-cleaner' ] + const repeatableJobs: JobType[] = [ 'videos-views-stats', 'activitypub-cleaner' ] let pendingRequests: boolean function tasksBuilder () { diff --git a/shared/models/activitypub/activity.ts b/shared/models/activitypub/activity.ts index 548d8858e..d6284e283 100644 --- a/shared/models/activitypub/activity.ts +++ b/shared/models/activitypub/activity.ts @@ -6,7 +6,6 @@ import { DislikeObject } from './objects/dislike-object' import { APObject } from './objects/object.model' import { PlaylistObject } from './objects/playlist-object' import { VideoCommentObject } from './objects/video-comment-object' -import { ViewObject } from './objects/view-object' export type Activity = ActivityCreate | @@ -53,7 +52,7 @@ export interface BaseActivity { export interface ActivityCreate extends BaseActivity { type: 'Create' - object: VideoObject | AbuseObject | ViewObject | DislikeObject | VideoCommentObject | CacheFileObject | PlaylistObject + object: VideoObject | AbuseObject | DislikeObject | VideoCommentObject | CacheFileObject | PlaylistObject } export interface ActivityUpdate extends BaseActivity { @@ -100,6 +99,7 @@ export interface ActivityView extends BaseActivity { type: 'View' actor: string object: APObject + expires: string } export interface ActivityDislike extends BaseActivity { diff --git a/shared/models/server/job.model.ts b/shared/models/server/job.model.ts index 12e0fcf85..6da2753b3 100644 --- a/shared/models/server/job.model.ts +++ b/shared/models/server/job.model.ts @@ -14,7 +14,7 @@ export type JobType = | 'video-transcoding' | 'email' | 'video-import' - | 'videos-views' + | 'videos-views-stats' | 'activitypub-refresher' | 'video-redundancy' | 'video-live-ending' diff --git a/shared/models/videos/live/live-video-event-payload.model.ts b/shared/models/videos/live/live-video-event-payload.model.ts index 6cd7540e8..1a9ac512c 100644 --- a/shared/models/videos/live/live-video-event-payload.model.ts +++ b/shared/models/videos/live/live-video-event-payload.model.ts @@ -2,5 +2,9 @@ import { VideoState } from '../video-state.enum' export interface LiveVideoEventPayload { state?: VideoState + + // FIXME: deprecated in 4.0 in favour of viewers views?: number + + viewers?: number } diff --git a/shared/models/videos/video.model.ts b/shared/models/videos/video.model.ts index 26cb595e7..8d223cded 100644 --- a/shared/models/videos/video.model.ts +++ b/shared/models/videos/video.model.ts @@ -39,6 +39,9 @@ export interface Video { url: string views: number + // If live + viewers?: number + likes: number dislikes: number nsfw: boolean -- cgit v1.2.3