]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/videos/stats.ts
Support video views/viewers stats in server
[github/Chocobozzz/PeerTube.git] / server / controllers / api / videos / stats.ts
1 import express from 'express'
2 import { LocalVideoViewerModel } from '@server/models/view/local-video-viewer'
3 import { VideoStatsTimeserieMetric } from '@shared/models'
4 import {
5 asyncMiddleware,
6 authenticate,
7 videoOverallStatsValidator,
8 videoRetentionStatsValidator,
9 videoTimeserieStatsValidator
10 } from '../../../middlewares'
11
12 const statsRouter = express.Router()
13
14 statsRouter.get('/:videoId/stats/overall',
15 authenticate,
16 asyncMiddleware(videoOverallStatsValidator),
17 asyncMiddleware(getOverallStats)
18 )
19
20 statsRouter.get('/:videoId/stats/timeseries/:metric',
21 authenticate,
22 asyncMiddleware(videoTimeserieStatsValidator),
23 asyncMiddleware(getTimeserieStats)
24 )
25
26 statsRouter.get('/:videoId/stats/retention',
27 authenticate,
28 asyncMiddleware(videoRetentionStatsValidator),
29 asyncMiddleware(getRetentionStats)
30 )
31
32 // ---------------------------------------------------------------------------
33
34 export {
35 statsRouter
36 }
37
38 // ---------------------------------------------------------------------------
39
40 async function getOverallStats (req: express.Request, res: express.Response) {
41 const video = res.locals.videoAll
42
43 const stats = await LocalVideoViewerModel.getOverallStats(video)
44
45 return res.json(stats)
46 }
47
48 async function getRetentionStats (req: express.Request, res: express.Response) {
49 const video = res.locals.videoAll
50
51 const stats = await LocalVideoViewerModel.getRetentionStats(video)
52
53 return res.json(stats)
54 }
55
56 async function getTimeserieStats (req: express.Request, res: express.Response) {
57 const video = res.locals.videoAll
58 const metric = req.params.metric as VideoStatsTimeserieMetric
59
60 const stats = await LocalVideoViewerModel.getTimeserieStats({
61 video,
62 metric
63 })
64
65 return res.json(stats)
66 }