aboutsummaryrefslogtreecommitdiffhomepage
path: root/shared/models/videos
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2022-03-24 13:36:47 +0100
committerChocobozzz <chocobozzz@cpy.re>2022-04-15 09:49:35 +0200
commitb211106695bb82f6c32e53306081b5262c3d109d (patch)
treefa187de1c33b0956665f5362e29af6b0f6d8bb57 /shared/models/videos
parent69d48ee30c9d47cddf0c3c047dc99a99dcb6e894 (diff)
downloadPeerTube-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.ts2
-rw-r--r--shared/models/videos/stats/index.ts4
-rw-r--r--shared/models/videos/stats/video-stats-overall.model.ts17
-rw-r--r--shared/models/videos/stats/video-stats-retention.model.ts6
-rw-r--r--shared/models/videos/stats/video-stats-timeserie-metric.type.ts1
-rw-r--r--shared/models/videos/stats/video-stats-timeserie.model.ts6
-rw-r--r--shared/models/videos/video-view.model.ts6
-rw-r--r--shared/models/videos/video.model.ts3
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'
9export * from './import' 9export * from './import'
10export * from './playlist' 10export * from './playlist'
11export * from './rate' 11export * from './rate'
12export * from './stats'
12export * from './transcoding' 13export * from './transcoding'
13 14
14export * from './nsfw-policy.type' 15export * from './nsfw-policy.type'
@@ -32,5 +33,6 @@ export * from './video-streaming-playlist.model'
32export * from './video-streaming-playlist.type' 33export * from './video-streaming-playlist.type'
33 34
34export * from './video-update.model' 35export * from './video-update.model'
36export * from './video-view.model'
35export * from './video.model' 37export * from './video.model'
36export * from './video-create-result.model' 38export * 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 @@
1export * from './video-stats-overall.model'
2export * from './video-stats-retention.model'
3export * from './video-stats-timeserie.model'
4export * 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 @@
1export 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 @@
1export 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 @@
1export 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 @@
1export type VideoViewEvent = 'seek'
2
3export 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