]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/+admin/requests/request-stats/request-stats.component.ts
Rename 'npm run upgrade' to 'npm run upgrade-peertube'
[github/Chocobozzz/PeerTube.git] / client / src / app / +admin / requests / request-stats / request-stats.component.ts
CommitLineData
df98563e 1import { Component, OnInit, OnDestroy } from '@angular/core'
eb4f957e 2
df98563e 3import { NotificationsService } from 'angular2-notifications'
7ddd02c9 4
154898b0
C
5import { RequestService, RequestSchedulerStatsAttributes } from '../shared'
6import { RequestScheduler } from '../../../../../../shared'
eb4f957e
C
7
8@Component({
df98563e
C
9 selector: 'my-request-stats',
10 templateUrl: './request-stats.component.html',
eb4f957e
C
11 styleUrls: [ './request-stats.component.scss' ]
12})
13export class RequestStatsComponent implements OnInit, OnDestroy {
99fdec46
C
14 statsTitles = {
15 requestScheduler: 'Basic request scheduler',
16 requestVideoEventScheduler: 'Video events request scheduler',
17 requestVideoQaduScheduler: 'Quick and dirty video updates request scheduler'
df98563e 18 }
99fdec46 19
154898b0 20 stats: RequestScheduler
99fdec46
C
21
22 private intervals: { [ id: string ]: number } = {
23 requestScheduler: null,
24 requestVideoEventScheduler: null,
25 requestVideoQaduScheduler: null
df98563e 26 }
99fdec46
C
27
28 private timeouts: { [ id: string ]: number } = {
29 requestScheduler: null,
30 requestVideoEventScheduler: null,
31 requestVideoQaduScheduler: null
df98563e 32 }
eb4f957e 33
df98563e 34 constructor (
7ddd02c9
C
35 private notificationsService: NotificationsService,
36 private requestService: RequestService
df98563e 37 ) { }
eb4f957e 38
df98563e
C
39 ngOnInit () {
40 this.getStats()
41 this.runIntervals()
eb4f957e
C
42 }
43
df98563e 44 ngOnDestroy () {
99fdec46
C
45 Object.keys(this.stats).forEach(requestSchedulerName => {
46 if (this.intervals[requestSchedulerName] !== null) {
df98563e 47 window.clearInterval(this.intervals[requestSchedulerName])
99fdec46 48 }
7ddd02c9 49
99fdec46 50 if (this.timeouts[requestSchedulerName] !== null) {
df98563e 51 window.clearTimeout(this.timeouts[requestSchedulerName])
99fdec46 52 }
df98563e 53 })
eb4f957e
C
54 }
55
df98563e 56 getStats () {
eb4f957e 57 this.requestService.getStats().subscribe(
872a4c7c 58 stats => this.stats = stats,
eb4f957e 59
7ddd02c9 60 err => this.notificationsService.error('Error', err.text)
df98563e 61 )
eb4f957e
C
62 }
63
df98563e 64 private runIntervals () {
99fdec46
C
65 Object.keys(this.intervals).forEach(requestSchedulerName => {
66 this.intervals[requestSchedulerName] = window.setInterval(() => {
154898b0 67 const stats: RequestSchedulerStatsAttributes = this.stats[requestSchedulerName]
eb4f957e 68
df98563e 69 stats.remainingMilliSeconds -= 1000
99fdec46
C
70
71 if (stats.remainingMilliSeconds <= 0) {
df98563e 72 this.timeouts[requestSchedulerName] = window.setTimeout(() => this.getStats(), stats.remainingMilliSeconds + 100)
99fdec46 73 }
df98563e
C
74 }, 1000)
75 })
eb4f957e 76 }
eb4f957e 77}