46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
|
import {Component, Inject, OnDestroy, OnInit} from '@angular/core';
|
||
|
import {ApiService} from "../_service/api.service";
|
||
|
import {Group} from "../_data/data";
|
||
|
import {interval, Subject} from "rxjs";
|
||
|
import {flatMap, startWith, takeUntil} from "rxjs/operators";
|
||
|
import {Meta} from "@angular/platform-browser";
|
||
|
import {DOCUMENT} from "@angular/common";
|
||
|
|
||
|
@Component({
|
||
|
selector: 'app-status',
|
||
|
templateUrl: './status.component.html',
|
||
|
styleUrls: ['./status.component.scss']
|
||
|
})
|
||
|
export class StatusComponent implements OnInit, OnDestroy {
|
||
|
readonly stateClasses = {
|
||
|
"operational": 'fas fa-fw fa-heart operational mr-2',
|
||
|
"outage": 'fas fa-fw fa-heart-broken outage mr-2',
|
||
|
"maintenance": 'fas fa-fw fa-heartbeat maintenance mr-2'
|
||
|
};
|
||
|
|
||
|
destroyed$ = new Subject();
|
||
|
groups: Group[];
|
||
|
lastUpdated: Date;
|
||
|
|
||
|
constructor(private api: ApiService, @Inject(DOCUMENT) private document: Document) {
|
||
|
}
|
||
|
|
||
|
ngOnInit(): void {
|
||
|
interval(30000).pipe(
|
||
|
startWith(0),
|
||
|
takeUntil(this.destroyed$),
|
||
|
flatMap(() => this.api.getServiceStates())
|
||
|
).subscribe(response => {
|
||
|
const favicon: HTMLLinkElement = document.getElementById('favicon') as HTMLLinkElement;
|
||
|
favicon.href = `favicon-${response.state}.ico`;
|
||
|
this.groups = response.groups;
|
||
|
this.lastUpdated = new Date();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
ngOnDestroy(): void {
|
||
|
this.destroyed$.next();
|
||
|
this.destroyed$.complete();
|
||
|
}
|
||
|
}
|