1 import { Component, OnInit, OnDestroy } from '@angular/core'
3 import { NotificationsService } from 'angular2-notifications'
5 import { RequestService, RequestStats } from '../shared'
8 selector: 'my-request-stats',
9 templateUrl: './request-stats.component.html',
10 styleUrls: [ './request-stats.component.scss' ]
12 export class RequestStatsComponent implements OnInit, OnDestroy {
14 requestScheduler: 'Basic request scheduler',
15 requestVideoEventScheduler: 'Video events request scheduler',
16 requestVideoQaduScheduler: 'Quick and dirty video updates request scheduler'
19 stats: { [ id: string ]: RequestStats } = {
20 requestScheduler: null,
21 requestVideoEventScheduler: null,
22 requestVideoQaduScheduler: null
25 private intervals: { [ id: string ]: number } = {
26 requestScheduler: null,
27 requestVideoEventScheduler: null,
28 requestVideoQaduScheduler: null
31 private timeouts: { [ id: string ]: number } = {
32 requestScheduler: null,
33 requestVideoEventScheduler: null,
34 requestVideoQaduScheduler: null
38 private notificationsService: NotificationsService,
39 private requestService: RequestService
48 Object.keys(this.stats).forEach(requestSchedulerName => {
49 if (this.intervals[requestSchedulerName] !== null) {
50 window.clearInterval(this.intervals[requestSchedulerName])
53 if (this.timeouts[requestSchedulerName] !== null) {
54 window.clearTimeout(this.timeouts[requestSchedulerName])
60 this.requestService.getStats().subscribe(
61 stats => this.stats = stats,
63 err => this.notificationsService.error('Error', err.text)
67 private runIntervals () {
68 Object.keys(this.intervals).forEach(requestSchedulerName => {
69 this.intervals[requestSchedulerName] = window.setInterval(() => {
70 const stats = this.stats[requestSchedulerName]
72 stats.remainingMilliSeconds -= 1000
74 if (stats.remainingMilliSeconds <= 0) {
75 this.timeouts[requestSchedulerName] = window.setTimeout(() => this.getStats(), stats.remainingMilliSeconds + 100)