]>
Commit | Line | Data |
---|---|---|
077600e0 | 1 | import { Counter, Meter } from '@opentelemetry/api' |
fd3c2e87 C |
2 | import { MVideoImmutable } from '@server/types/models' |
3 | import { PlaybackMetricCreate } from '@shared/models' | |
4 | ||
5 | export 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 | constructor (private readonly meter: Meter) { | |
15 | ||
16 | } | |
17 | ||
18 | buildCounters () { | |
19 | this.errorsCounter = this.meter.createCounter('peertube_playback_errors_count', { | |
20 | description: 'Errors collected from PeerTube player.' | |
21 | }) | |
22 | ||
23 | this.resolutionChangesCounter = this.meter.createCounter('peertube_playback_resolution_changes_count', { | |
24 | description: 'Resolution changes collected from PeerTube player.' | |
25 | }) | |
26 | ||
27 | this.downloadedBytesHTTPCounter = this.meter.createCounter('peertube_playback_http_downloaded_bytes', { | |
28 | description: 'Downloaded bytes with HTTP by PeerTube player.' | |
29 | }) | |
30 | this.downloadedBytesP2PCounter = this.meter.createCounter('peertube_playback_p2p_downloaded_bytes', { | |
31 | description: 'Downloaded bytes with P2P by PeerTube player.' | |
32 | }) | |
33 | ||
34 | this.uploadedBytesP2PCounter = this.meter.createCounter('peertube_playback_p2p_uploaded_bytes', { | |
35 | description: 'Uploaded bytes with P2P by PeerTube player.' | |
36 | }) | |
37 | } | |
38 | ||
39 | observe (video: MVideoImmutable, metrics: PlaybackMetricCreate) { | |
40 | const attributes = { | |
41 | videoOrigin: video.remote | |
42 | ? 'remote' | |
43 | : 'local', | |
44 | ||
45 | playerMode: metrics.playerMode, | |
46 | ||
47 | resolution: metrics.resolution + '', | |
0b684daa C |
48 | fps: metrics.fps + '', |
49 | ||
50 | videoUUID: video.uuid | |
fd3c2e87 C |
51 | } |
52 | ||
53 | this.errorsCounter.add(metrics.errors, attributes) | |
54 | this.resolutionChangesCounter.add(metrics.resolutionChanges, attributes) | |
55 | ||
56 | this.downloadedBytesHTTPCounter.add(metrics.downloadedBytesHTTP, attributes) | |
57 | this.downloadedBytesP2PCounter.add(metrics.downloadedBytesP2P, attributes) | |
58 | ||
59 | this.uploadedBytesP2PCounter.add(metrics.uploadedBytesP2P, attributes) | |
60 | } | |
61 | } |