import { Component, OnInit } from '@angular/core'; import {StatusService} from '../../services/status.service'; import {SiteViewModel} from '../../view-models/site.view-model'; import {HostStatusViewModel} from '../../view-models/host-status.view-model'; import {StatusEnumViewModel} from '../../view-models/status-enum.view-model'; @Component({ selector: 'app-status', templateUrl: './status.component.html', styleUrls: [ './status.component.css' ] }) export class StatusComponent implements OnInit { hostsStatus: SiteViewModel[] = []; promise = null; constructor(private statusService: StatusService) { } ngOnInit() { this.getStatus(); } getStatus(): void { this.promise = this.statusService.getHosts() .subscribe(hostsStatus => { const hostsStatusData = hostsStatus.data; this.hostsStatus = hostsStatusData.map(site => { const siteVm = new SiteViewModel(); siteVm.name = site.name; siteVm.hosts = site.hosts.map(host => { const hostVM = new HostStatusViewModel(); hostVM.ip = host.hostStatus.ip; hostVM.hostname = host.hostStatus.hostname; hostVM.times = host.hostStatus.times; let allNull = true; let oneNull = false; hostVM.timesMin = Number.MAX_SAFE_INTEGER; hostVM.timesAvg = 0; hostVM.timesMax = 0; hostVM.timesLost = 0; hostVM.times.forEach(p => { if (p == null) { ++hostVM.timesLost; oneNull = true; } else { allNull = false; if (p < hostVM.timesMin) { hostVM.timesMin = p; } if (p > hostVM.timesMax) { hostVM.timesMax = p; } hostVM.timesAvg += p; } }); if (hostVM.times.length - hostVM.timesLost !== 0) { hostVM.timesAvg = hostVM.timesAvg / (hostVM.times.length - hostVM.timesLost); } else { hostVM.timesMin = null; hostVM.timesAvg = null; hostVM.timesMax = null; } if (allNull) { hostVM.status = StatusEnumViewModel.Error; } else if (oneNull) { hostVM.status = StatusEnumViewModel.Warning; } else { hostVM.status = StatusEnumViewModel.Ok; } return hostVM; }); const status: {[id: number]: number} = {}; status[StatusEnumViewModel.Ok] = 0; status[StatusEnumViewModel.Warning] = 0; status[StatusEnumViewModel.Error] = 0; siteVm.hosts.forEach(host => { ++status[host.status]; }); if (status[StatusEnumViewModel.Error] === siteVm.hosts.length) { siteVm.status = StatusEnumViewModel.Error; } else if (status[StatusEnumViewModel.Error] !== 0 || status[StatusEnumViewModel.Warning] !== 0) { siteVm.status = StatusEnumViewModel.Warning; } else { siteVm.status = StatusEnumViewModel.Ok; } return siteVm; }); }); } onclick(): void { this.getStatus(); } }