mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-06 03:50:26 +02:00
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
This commit is contained in:
parent
69d48ee30c
commit
b211106695
108 changed files with 2834 additions and 655 deletions
|
@ -1,6 +1,7 @@
|
|||
import { isBlockedByServerOrAccount } from '@server/lib/blocklist'
|
||||
import { isRedundancyAccepted } from '@server/lib/redundancy'
|
||||
import { ActivityCreate, CacheFileObject, PlaylistObject, VideoCommentObject, VideoObject } from '@shared/models'
|
||||
import { VideoModel } from '@server/models/video/video'
|
||||
import { ActivityCreate, CacheFileObject, PlaylistObject, VideoCommentObject, VideoObject, WatchActionObject } from '@shared/models'
|
||||
import { retryTransactionWrapper } from '../../../helpers/database-utils'
|
||||
import { logger } from '../../../helpers/logger'
|
||||
import { sequelizeTypescript } from '../../../initializers/database'
|
||||
|
@ -8,6 +9,7 @@ import { APProcessorOptions } from '../../../types/activitypub-processor.model'
|
|||
import { MActorSignature, MCommentOwnerVideo, MVideoAccountLightBlacklistAllFiles } from '../../../types/models'
|
||||
import { Notifier } from '../../notifier'
|
||||
import { createOrUpdateCacheFile } from '../cache-file'
|
||||
import { createOrUpdateLocalVideoViewer } from '../local-video-viewer'
|
||||
import { createOrUpdateVideoPlaylist } from '../playlists'
|
||||
import { forwardVideoRelatedActivity } from '../send/shared/send-utils'
|
||||
import { resolveThread } from '../video-comments'
|
||||
|
@ -32,6 +34,10 @@ async function processCreateActivity (options: APProcessorOptions<ActivityCreate
|
|||
return retryTransactionWrapper(processCreateVideoComment, activity, byActor, notify)
|
||||
}
|
||||
|
||||
if (activityType === 'WatchAction') {
|
||||
return retryTransactionWrapper(processCreateWatchAction, activity)
|
||||
}
|
||||
|
||||
if (activityType === 'CacheFile') {
|
||||
return retryTransactionWrapper(processCreateCacheFile, activity, byActor)
|
||||
}
|
||||
|
@ -81,6 +87,19 @@ async function processCreateCacheFile (activity: ActivityCreate, byActor: MActor
|
|||
}
|
||||
}
|
||||
|
||||
async function processCreateWatchAction (activity: ActivityCreate) {
|
||||
const watchAction = activity.object as WatchActionObject
|
||||
|
||||
if (watchAction.actionStatus !== 'CompletedActionStatus') return
|
||||
|
||||
const video = await VideoModel.loadByUrl(watchAction.object)
|
||||
if (video.remote) return
|
||||
|
||||
await sequelizeTypescript.transaction(async t => {
|
||||
return createOrUpdateLocalVideoViewer(watchAction, video, t)
|
||||
})
|
||||
}
|
||||
|
||||
async function processCreateVideoComment (activity: ActivityCreate, byActor: MActorSignature, notify: boolean) {
|
||||
const commentObject = activity.object as VideoCommentObject
|
||||
const byAccount = byActor.Account
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue