abstruse
Version:
Abstruse CI
50 lines (39 loc) • 1.46 kB
text/typescript
import { Injectable, Provider, EventEmitter } from '@angular/core';
import { SocketService } from './socket.service';
import { ApiService } from './api.service';
import { Subscription } from 'rxjs';
import { filter } from 'rxjs/operators';
()
export class StatsService {
stats: EventEmitter<any>;
sub: Subscription;
constructor(private socketService: SocketService, private apiService: ApiService) {
this.stats = new EventEmitter<any>();
}
start(): void {
if (!this.sub) {
this.sub = this.socketService.outputEvents
.pipe(filter(e => e.type === 'memory' || e.type === 'cpu' || e.type === 'containersStats'))
.subscribe(e => this.stats.emit(e));
}
this.socketService.emit({ type: 'subscribeToStats' });
}
stop(): void {
this.socketService.emit({ type: 'unsubscribeFromStats' });
}
getJobRuns(): Promise<any[]> {
return this.apiService.statsJobRuns().toPromise();
}
getJobRunsBetween(dateFrom: Date, dateTo: Date): Promise<any[]> {
return this.apiService.statsJobRunsBetween(dateFrom.toISOString(), dateTo.toISOString()).toPromise();
}
humanizeBytes(bytes: number): string {
if (bytes === 0) {
return '0 Byte';
}
const k = 1024;
const sizes: string[] = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
const i: number = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
}
}