A simple, universal public Statuspage.
https://status.sp-codes.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.9 KiB
62 lines
1.9 KiB
import {Component, Inject, OnDestroy, OnInit, PLATFORM_ID} from '@angular/core'; |
|
import {ApiService} from '../_service/api.service'; |
|
import {Group} from '../_data/data'; |
|
import {interval, Subject} from 'rxjs'; |
|
import {takeUntil} from 'rxjs/operators'; |
|
import {DOCUMENT, isPlatformBrowser} from '@angular/common'; |
|
import {StorageService} from '../_service/storage.service'; |
|
|
|
@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; |
|
expandedCache: { [id: string]: boolean }; |
|
|
|
constructor(private api: ApiService, private storage: StorageService, |
|
@Inject(PLATFORM_ID) private platformId: Object, |
|
@Inject(DOCUMENT) private document: Document) { |
|
let cache = this.storage.getValue('expanded'); |
|
if (typeof cache !== 'object') { |
|
cache = null; |
|
} |
|
this.expandedCache = cache || {}; |
|
} |
|
|
|
ngOnInit(): void { |
|
this.update(); |
|
if (isPlatformBrowser(this.platformId)) { |
|
interval(30000).pipe(takeUntil(this.destroyed$)).subscribe(() => this.update()); |
|
} |
|
} |
|
|
|
private update() { |
|
this.api.getServiceStates().subscribe(response => { |
|
if (isPlatformBrowser(this.platformId)) { |
|
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(); |
|
} |
|
|
|
saveExpandedCache() { |
|
this.storage.setValue('expanded', this.expandedCache); |
|
} |
|
}
|
|
|