|
|
@@ -0,0 +1,81 @@
|
|
|
+import { Component, OnDestroy, OnInit } from '@angular/core';
|
|
|
+import { ActivationEnd, Router } from '@angular/router';
|
|
|
+import { filter, map, Subscription } from 'rxjs';
|
|
|
+
|
|
|
+import { ServerApiService } from 'src/app/services/server-api.service';
|
|
|
+
|
|
|
+@Component({
|
|
|
+ selector: 'app-server-data-page',
|
|
|
+ templateUrl: './server-data-page.component.html',
|
|
|
+ styleUrls: ['./server-data-page.component.scss']
|
|
|
+})
|
|
|
+export class ServerDataPageComponent implements OnInit, OnDestroy {
|
|
|
+ private subscriptions: Subscription[] = [];
|
|
|
+
|
|
|
+ public server?: ServerConfig;
|
|
|
+ public types?: ServerDataTypeWithData[];
|
|
|
+
|
|
|
+ constructor(private apiService: ServerApiService, router: Router) {
|
|
|
+ router.events.subscribe({
|
|
|
+ next: event => {
|
|
|
+ if (event instanceof ActivationEnd) {
|
|
|
+ this.clearSubscriptions();
|
|
|
+
|
|
|
+ const serverID = Number(event.snapshot.params['id']);
|
|
|
+ this.subscriptions.push(
|
|
|
+ apiService.serverConfigs$.pipe(map(servers => servers.find(s => s.id === serverID))).subscribe(this.onServerConfig.bind(this)),
|
|
|
+ apiService.serverDataTypes$
|
|
|
+ .get(serverID)
|
|
|
+ .pipe(filter(types => !!types))
|
|
|
+ .subscribe(this.onServerDataTypes.bind(this))
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ ngOnInit(): void {}
|
|
|
+
|
|
|
+ onServerConfig(server?: ServerConfig) {
|
|
|
+ if (server) {
|
|
|
+ this.server = server;
|
|
|
+ } else {
|
|
|
+ this.server = undefined;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ onServerDataTypes(types: ServerDataTypeWithData[]) {
|
|
|
+ if (this.server) {
|
|
|
+ this.types = types.map(type => {
|
|
|
+ if (!type.subtypes) this.updateData(this.server as ServerConfig, type);
|
|
|
+ else {
|
|
|
+ type.subtypes.forEach(sub => {
|
|
|
+ this.updateData(this.server as ServerConfig, type, sub);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return type;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async updateData(server: ServerConfig, type: ServerDataTypeWithData, subType?: ServerDataTypeWithData) {
|
|
|
+ try {
|
|
|
+ const end = new Date();
|
|
|
+ const start = new Date(end.getTime() - 1000 * 60 * 60 * 4);
|
|
|
+ const data = await this.apiService.queryServerData(server.id, `${type.type}${subType ? `:${subType.type}` : ''}`, start, end);
|
|
|
+ if (subType) subType.data = data;
|
|
|
+ else type.data = data;
|
|
|
+ } catch (err) {
|
|
|
+ console.error(err);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ngOnDestroy(): void {
|
|
|
+ this.clearSubscriptions();
|
|
|
+ }
|
|
|
+
|
|
|
+ clearSubscriptions() {
|
|
|
+ this.subscriptions.forEach(s => s.unsubscribe());
|
|
|
+ this.subscriptions = [];
|
|
|
+ }
|
|
|
+}
|