]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/middlewares/validators/metrics.ts
Merge branch 'release/5.0.0' into develop
[github/Chocobozzz/PeerTube.git] / server / middlewares / validators / metrics.ts
CommitLineData
fd3c2e87
C
1import express from 'express'
2import { body } from 'express-validator'
3import { isValidPlayerMode } from '@server/helpers/custom-validators/metrics'
4import { isIdOrUUIDValid, toCompleteUUID } from '@server/helpers/custom-validators/misc'
5import { CONFIG } from '@server/initializers/config'
6import { HttpStatusCode, PlaybackMetricCreate } from '@shared/models'
fd3c2e87
C
7import { areValidationErrors, doesVideoExist } from './shared'
8
9const addPlaybackMetricValidator = [
10 body('resolution')
396f6f01 11 .isInt({ min: 0 }),
fd3c2e87
C
12 body('fps')
13 .optional()
396f6f01 14 .isInt({ min: 0 }),
fd3c2e87 15 body('playerMode')
396f6f01 16 .custom(isValidPlayerMode),
fd3c2e87
C
17
18 body('resolutionChanges')
396f6f01 19 .isInt({ min: 0 }),
fd3c2e87
C
20
21 body('errors')
396f6f01 22 .isInt({ min: 0 }),
fd3c2e87
C
23
24 body('downloadedBytesP2P')
396f6f01 25 .isInt({ min: 0 }),
fd3c2e87 26 body('downloadedBytesHTTP')
396f6f01 27 .isInt({ min: 0 }),
fd3c2e87
C
28
29 body('uploadedBytesP2P')
396f6f01 30 .isInt({ min: 0 }),
fd3c2e87
C
31
32 body('videoId')
33 .customSanitizer(toCompleteUUID)
fd3c2e87
C
34 .custom(isIdOrUUIDValid),
35
36 async (req: express.Request, res: express.Response, next: express.NextFunction) => {
fd3c2e87
C
37 if (!CONFIG.OPEN_TELEMETRY.METRICS.ENABLED) return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
38
39 const body: PlaybackMetricCreate = req.body
40
41 if (areValidationErrors(req, res)) return
42 if (!await doesVideoExist(body.videoId, res, 'only-immutable-attributes')) return
43
44 return next()
45 }
46]
47
48// ---------------------------------------------------------------------------
49
50export {
51 addPlaybackMetricValidator
52}