]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/controllers/api/videos/stats.ts
Add filter by start/end date overall stats in api
[github/Chocobozzz/PeerTube.git] / server / controllers / api / videos / stats.ts
CommitLineData
b2111066
C
1import express from 'express'
2import { LocalVideoViewerModel } from '@server/models/view/local-video-viewer'
49f0468d 3import { VideoStatsOverallQuery, VideoStatsTimeserieMetric, VideoStatsTimeserieQuery } from '@shared/models'
b2111066
C
4import {
5 asyncMiddleware,
6 authenticate,
7 videoOverallStatsValidator,
8 videoRetentionStatsValidator,
9 videoTimeserieStatsValidator
10} from '../../../middlewares'
11
12const statsRouter = express.Router()
13
14statsRouter.get('/:videoId/stats/overall',
15 authenticate,
16 asyncMiddleware(videoOverallStatsValidator),
17 asyncMiddleware(getOverallStats)
18)
19
20statsRouter.get('/:videoId/stats/timeseries/:metric',
21 authenticate,
22 asyncMiddleware(videoTimeserieStatsValidator),
23 asyncMiddleware(getTimeserieStats)
24)
25
26statsRouter.get('/:videoId/stats/retention',
27 authenticate,
28 asyncMiddleware(videoRetentionStatsValidator),
29 asyncMiddleware(getRetentionStats)
30)
31
32// ---------------------------------------------------------------------------
33
34export {
35 statsRouter
36}
37
38// ---------------------------------------------------------------------------
39
40async function getOverallStats (req: express.Request, res: express.Response) {
41 const video = res.locals.videoAll
49f0468d 42 const query = req.query as VideoStatsOverallQuery
b2111066 43
49f0468d
C
44 const stats = await LocalVideoViewerModel.getOverallStats({
45 video,
46 startDate: query.startDate,
47 endDate: query.endDate
48 })
b2111066
C
49
50 return res.json(stats)
51}
52
53async function getRetentionStats (req: express.Request, res: express.Response) {
54 const video = res.locals.videoAll
55
56 const stats = await LocalVideoViewerModel.getRetentionStats(video)
57
58 return res.json(stats)
59}
60
61async function getTimeserieStats (req: express.Request, res: express.Response) {
62 const video = res.locals.videoAll
63 const metric = req.params.metric as VideoStatsTimeserieMetric
64
901bcf5c
C
65 const query = req.query as VideoStatsTimeserieQuery
66
b2111066
C
67 const stats = await LocalVideoViewerModel.getTimeserieStats({
68 video,
901bcf5c
C
69 metric,
70 startDate: query.startDate ?? buildOneMonthAgo().toISOString(),
71 endDate: query.endDate ?? new Date().toISOString()
b2111066
C
72 })
73
74 return res.json(stats)
75}
901bcf5c
C
76
77function buildOneMonthAgo () {
78 const monthAgo = new Date()
79 monthAgo.setHours(0, 0, 0, 0)
80
81 monthAgo.setDate(monthAgo.getDate() - 29)
82
83 return monthAgo
84}