diff options
author | Chocobozzz <me@florianbigard.com> | 2022-03-24 13:36:47 +0100 |
---|---|---|
committer | Chocobozzz <chocobozzz@cpy.re> | 2022-04-15 09:49:35 +0200 |
commit | b211106695bb82f6c32e53306081b5262c3d109d (patch) | |
tree | fa187de1c33b0956665f5362e29af6b0f6d8bb57 /shared/models/videos | |
parent | 69d48ee30c9d47cddf0c3c047dc99a99dcb6e894 (diff) | |
download | PeerTube-b211106695bb82f6c32e53306081b5262c3d109d.tar.gz PeerTube-b211106695bb82f6c32e53306081b5262c3d109d.tar.zst PeerTube-b211106695bb82f6c32e53306081b5262c3d109d.zip |
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
Diffstat (limited to 'shared/models/videos')
-rw-r--r-- | shared/models/videos/index.ts | 2 | ||||
-rw-r--r-- | shared/models/videos/stats/index.ts | 4 | ||||
-rw-r--r-- | shared/models/videos/stats/video-stats-overall.model.ts | 17 | ||||
-rw-r--r-- | shared/models/videos/stats/video-stats-retention.model.ts | 6 | ||||
-rw-r--r-- | shared/models/videos/stats/video-stats-timeserie-metric.type.ts | 1 | ||||
-rw-r--r-- | shared/models/videos/stats/video-stats-timeserie.model.ts | 6 | ||||
-rw-r--r-- | shared/models/videos/video-view.model.ts | 6 | ||||
-rw-r--r-- | shared/models/videos/video.model.ts | 3 |
8 files changed, 43 insertions, 2 deletions
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' | |||
9 | export * from './import' | 9 | export * from './import' |
10 | export * from './playlist' | 10 | export * from './playlist' |
11 | export * from './rate' | 11 | export * from './rate' |
12 | export * from './stats' | ||
12 | export * from './transcoding' | 13 | export * from './transcoding' |
13 | 14 | ||
14 | export * from './nsfw-policy.type' | 15 | export * from './nsfw-policy.type' |
@@ -32,5 +33,6 @@ export * from './video-streaming-playlist.model' | |||
32 | export * from './video-streaming-playlist.type' | 33 | export * from './video-streaming-playlist.type' |
33 | 34 | ||
34 | export * from './video-update.model' | 35 | export * from './video-update.model' |
36 | export * from './video-view.model' | ||
35 | export * from './video.model' | 37 | export * from './video.model' |
36 | export * from './video-create-result.model' | 38 | 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 @@ | |||
1 | export * from './video-stats-overall.model' | ||
2 | export * from './video-stats-retention.model' | ||
3 | export * from './video-stats-timeserie.model' | ||
4 | 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 @@ | |||
1 | export interface VideoStatsOverall { | ||
2 | averageWatchTime: number | ||
3 | totalWatchTime: number | ||
4 | |||
5 | viewersPeak: number | ||
6 | viewersPeakDate: string | ||
7 | |||
8 | views: number | ||
9 | likes: number | ||
10 | dislikes: number | ||
11 | comments: number | ||
12 | |||
13 | countries: { | ||
14 | isoCode: string | ||
15 | viewers: number | ||
16 | }[] | ||
17 | } | ||
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 @@ | |||
1 | export interface VideoStatsRetention { | ||
2 | data: { | ||
3 | second: number | ||
4 | retentionPercent: number | ||
5 | }[] | ||
6 | } | ||
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 @@ | |||
1 | export interface VideoStatsTimeserie { | ||
2 | data: { | ||
3 | date: string | ||
4 | value: number | ||
5 | }[] | ||
6 | } | ||
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 @@ | |||
1 | export type VideoViewEvent = 'seek' | ||
2 | |||
3 | export interface VideoView { | ||
4 | currentTime: number | ||
5 | viewEvent?: VideoViewEvent | ||
6 | } | ||
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 { | |||
39 | url: string | 39 | url: string |
40 | 40 | ||
41 | views: number | 41 | views: number |
42 | // If live | 42 | viewers: number |
43 | viewers?: number | ||
44 | 43 | ||
45 | likes: number | 44 | likes: number |
46 | dislikes: number | 45 | dislikes: number |