]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/+admin/request-schedulers/request-schedulers-stats/request-schedulers-stats.component.ts
err.text -> err
[github/Chocobozzz/PeerTube.git] / client / src / app / +admin / request-schedulers / request-schedulers-stats / request-schedulers-stats.component.ts
CommitLineData
df98563e 1import { Component, OnInit, OnDestroy } from '@angular/core'
eb4f957e 2
df98563e 3import { NotificationsService } from 'angular2-notifications'
7ddd02c9 4
e636eb88
C
5import { RequestSchedulersService, RequestSchedulerStatsAttributes } from '../shared'
6import { RequestSchedulerStats } from '../../../../../../shared'
eb4f957e
C
7
8@Component({
e636eb88
C
9 selector: 'my-request-schedulers-stats',
10 templateUrl: './request-schedulers-stats.component.html',
11 styleUrls: [ './request-schedulers-stats.component.scss' ]
eb4f957e 12})
e636eb88 13export class RequestSchedulersStatsComponent 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
e636eb88 20 stats: RequestSchedulerStats
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 35 private notificationsService: NotificationsService,
e636eb88 36 private requestService: RequestSchedulersService
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
03b40f24 60 err => this.notificationsService.error('Error', err)
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}