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