mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import express from 'express'
 | |
| import { LocalVideoViewerModel } from '@server/models/view/local-video-viewer'
 | |
| import { VideoStatsOverallQuery, VideoStatsTimeserieMetric, VideoStatsTimeserieQuery } from '@shared/models'
 | |
| import {
 | |
|   asyncMiddleware,
 | |
|   authenticate,
 | |
|   videoOverallStatsValidator,
 | |
|   videoRetentionStatsValidator,
 | |
|   videoTimeserieStatsValidator
 | |
| } from '../../../middlewares'
 | |
| 
 | |
| const statsRouter = express.Router()
 | |
| 
 | |
| statsRouter.get('/:videoId/stats/overall',
 | |
|   authenticate,
 | |
|   asyncMiddleware(videoOverallStatsValidator),
 | |
|   asyncMiddleware(getOverallStats)
 | |
| )
 | |
| 
 | |
| statsRouter.get('/:videoId/stats/timeseries/:metric',
 | |
|   authenticate,
 | |
|   asyncMiddleware(videoTimeserieStatsValidator),
 | |
|   asyncMiddleware(getTimeserieStats)
 | |
| )
 | |
| 
 | |
| statsRouter.get('/:videoId/stats/retention',
 | |
|   authenticate,
 | |
|   asyncMiddleware(videoRetentionStatsValidator),
 | |
|   asyncMiddleware(getRetentionStats)
 | |
| )
 | |
| 
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| export {
 | |
|   statsRouter
 | |
| }
 | |
| 
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| async function getOverallStats (req: express.Request, res: express.Response) {
 | |
|   const video = res.locals.videoAll
 | |
|   const query = req.query as VideoStatsOverallQuery
 | |
| 
 | |
|   const stats = await LocalVideoViewerModel.getOverallStats({
 | |
|     video,
 | |
|     startDate: query.startDate,
 | |
|     endDate: query.endDate
 | |
|   })
 | |
| 
 | |
|   return res.json(stats)
 | |
| }
 | |
| 
 | |
| async function getRetentionStats (req: express.Request, res: express.Response) {
 | |
|   const video = res.locals.videoAll
 | |
| 
 | |
|   const stats = await LocalVideoViewerModel.getRetentionStats(video)
 | |
| 
 | |
|   return res.json(stats)
 | |
| }
 | |
| 
 | |
| async function getTimeserieStats (req: express.Request, res: express.Response) {
 | |
|   const video = res.locals.videoAll
 | |
|   const metric = req.params.metric as VideoStatsTimeserieMetric
 | |
| 
 | |
|   const query = req.query as VideoStatsTimeserieQuery
 | |
| 
 | |
|   const stats = await LocalVideoViewerModel.getTimeserieStats({
 | |
|     video,
 | |
|     metric,
 | |
|     startDate: query.startDate ?? video.createdAt.toISOString(),
 | |
|     endDate: query.endDate ?? new Date().toISOString()
 | |
|   })
 | |
| 
 | |
|   return res.json(stats)
 | |
| }
 |