aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/lib/opentelemetry/metric-helpers/playback-metrics.ts
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2023-07-31 14:34:36 +0200
committerChocobozzz <me@florianbigard.com>2023-08-11 15:02:33 +0200
commit3a4992633ee62d5edfbb484d9c6bcb3cf158489d (patch)
treee4510b39bdac9c318fdb4b47018d08f15368b8f0 /server/lib/opentelemetry/metric-helpers/playback-metrics.ts
parent04d1da5621d25d59bd5fa1543b725c497bf5d9a8 (diff)
downloadPeerTube-3a4992633ee62d5edfbb484d9c6bcb3cf158489d.tar.gz
PeerTube-3a4992633ee62d5edfbb484d9c6bcb3cf158489d.tar.zst
PeerTube-3a4992633ee62d5edfbb484d9c6bcb3cf158489d.zip
Migrate server to ESM
Sorry for the very big commit that may lead to git log issues and merge conflicts, but it's a major step forward: * Server can be faster at startup because imports() are async and we can easily lazy import big modules * Angular doesn't seem to support ES import (with .js extension), so we had to correctly organize peertube into a monorepo: * Use yarn workspace feature * Use typescript reference projects for dependencies * Shared projects have been moved into "packages", each one is now a node module (with a dedicated package.json/tsconfig.json) * server/tools have been moved into apps/ and is now a dedicated app bundled and published on NPM so users don't have to build peertube cli tools manually * server/tests have been moved into packages/ so we don't compile them every time we want to run the server * Use isolatedModule option: * Had to move from const enum to const (https://www.typescriptlang.org/docs/handbook/enums.html#objects-vs-enums) * Had to explictely specify "type" imports when used in decorators * Prefer tsx (that uses esbuild under the hood) instead of ts-node to load typescript files (tests with mocha or scripts): * To reduce test complexity as esbuild doesn't support decorator metadata, we only test server files that do not import server models * We still build tests files into js files for a faster CI * Remove unmaintained peertube CLI import script * Removed some barrels to speed up execution (less imports)
Diffstat (limited to 'server/lib/opentelemetry/metric-helpers/playback-metrics.ts')
-rw-r--r--server/lib/opentelemetry/metric-helpers/playback-metrics.ts85
1 files changed, 0 insertions, 85 deletions
diff --git a/server/lib/opentelemetry/metric-helpers/playback-metrics.ts b/server/lib/opentelemetry/metric-helpers/playback-metrics.ts
deleted file mode 100644
index 1eb08b5a6..000000000
--- a/server/lib/opentelemetry/metric-helpers/playback-metrics.ts
+++ /dev/null
@@ -1,85 +0,0 @@
1import { Counter, Meter } from '@opentelemetry/api'
2import { MVideoImmutable } from '@server/types/models'
3import { PlaybackMetricCreate } from '@shared/models'
4
5export class PlaybackMetrics {
6 private errorsCounter: Counter
7 private resolutionChangesCounter: Counter
8
9 private downloadedBytesP2PCounter: Counter
10 private uploadedBytesP2PCounter: Counter
11
12 private downloadedBytesHTTPCounter: Counter
13
14 private peersP2PPeersGaugeBuffer: {
15 value: number
16 attributes: any
17 }[] = []
18
19 constructor (private readonly meter: Meter) {
20
21 }
22
23 buildCounters () {
24 this.errorsCounter = this.meter.createCounter('peertube_playback_errors_count', {
25 description: 'Errors collected from PeerTube player.'
26 })
27
28 this.resolutionChangesCounter = this.meter.createCounter('peertube_playback_resolution_changes_count', {
29 description: 'Resolution changes collected from PeerTube player.'
30 })
31
32 this.downloadedBytesHTTPCounter = this.meter.createCounter('peertube_playback_http_downloaded_bytes', {
33 description: 'Downloaded bytes with HTTP by PeerTube player.'
34 })
35 this.downloadedBytesP2PCounter = this.meter.createCounter('peertube_playback_p2p_downloaded_bytes', {
36 description: 'Downloaded bytes with P2P by PeerTube player.'
37 })
38
39 this.uploadedBytesP2PCounter = this.meter.createCounter('peertube_playback_p2p_uploaded_bytes', {
40 description: 'Uploaded bytes with P2P by PeerTube player.'
41 })
42
43 this.meter.createObservableGauge('peertube_playback_p2p_peers', {
44 description: 'Total P2P peers connected to the PeerTube player.'
45 }).addCallback(observableResult => {
46 for (const gauge of this.peersP2PPeersGaugeBuffer) {
47 observableResult.observe(gauge.value, gauge.attributes)
48 }
49
50 this.peersP2PPeersGaugeBuffer = []
51 })
52 }
53
54 observe (video: MVideoImmutable, metrics: PlaybackMetricCreate) {
55 const attributes = {
56 videoOrigin: video.remote
57 ? 'remote'
58 : 'local',
59
60 playerMode: metrics.playerMode,
61
62 resolution: metrics.resolution + '',
63 fps: metrics.fps + '',
64
65 p2pEnabled: metrics.p2pEnabled,
66
67 videoUUID: video.uuid
68 }
69
70 this.errorsCounter.add(metrics.errors, attributes)
71 this.resolutionChangesCounter.add(metrics.resolutionChanges, attributes)
72
73 this.downloadedBytesHTTPCounter.add(metrics.downloadedBytesHTTP, attributes)
74 this.downloadedBytesP2PCounter.add(metrics.downloadedBytesP2P, attributes)
75
76 this.uploadedBytesP2PCounter.add(metrics.uploadedBytesP2P, attributes)
77
78 if (metrics.p2pPeers) {
79 this.peersP2PPeersGaugeBuffer.push({
80 value: metrics.p2pPeers,
81 attributes
82 })
83 }
84 }
85}