|
@@ -1,6 +1,10 @@
|
|
|
import { HttpClient } from '@angular/common/http';
|
|
import { HttpClient } from '@angular/common/http';
|
|
|
import { Injectable } from '@angular/core';
|
|
import { Injectable } from '@angular/core';
|
|
|
-import { firstValueFrom, map } from 'rxjs';
|
|
|
|
|
|
|
+import { firstValueFrom, map, ReplaySubject } from 'rxjs';
|
|
|
|
|
+import { environment } from 'src/environments/environment';
|
|
|
|
|
+import { IndexedReplaySubject } from '../lib/indexed-subject.class';
|
|
|
|
|
+
|
|
|
|
|
+type ServerDataTypesSubject = ReplaySubject<ServerDataTypeWithData[]>;
|
|
|
|
|
|
|
|
@Injectable({
|
|
@Injectable({
|
|
|
providedIn: 'root'
|
|
providedIn: 'root'
|
|
@@ -8,18 +12,33 @@ import { firstValueFrom, map } from 'rxjs';
|
|
|
export class ServerApiService {
|
|
export class ServerApiService {
|
|
|
constructor(private http: HttpClient) {}
|
|
constructor(private http: HttpClient) {}
|
|
|
|
|
|
|
|
- public getAllServerConfigs() {
|
|
|
|
|
- return firstValueFrom(this.http.get<Server[]>('/server'));
|
|
|
|
|
|
|
+ private servers: ServerConfig[] = [];
|
|
|
|
|
+
|
|
|
|
|
+ public serverConfigs$ = new ReplaySubject<ServerConfig[]>(1);
|
|
|
|
|
+ public serverDataTypes$ = new IndexedReplaySubject<number, ServerDataTypeWithData[]>();
|
|
|
|
|
+
|
|
|
|
|
+ public async getAllServerConfigs() {
|
|
|
|
|
+ this.servers = await firstValueFrom(this.http.get<Server[]>(environment.apiBaseUrl + 'server'));
|
|
|
|
|
+ this.serverConfigs$.next(this.servers);
|
|
|
|
|
+ return this.servers;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public getServerDataTypes(serverID: number) {
|
|
|
|
|
- return firstValueFrom(this.http.get<ServerDataTypesConfig[]>(`/server/${serverID}/data/types`));
|
|
|
|
|
|
|
+ public async getServerDataTypes(serverID: number) {
|
|
|
|
|
+ const types = await firstValueFrom(this.http.get<ServerDataTypesConfig[]>(`${environment.apiBaseUrl}server/${serverID}/data/types`));
|
|
|
|
|
+ const server = this.servers.find(s => s.id === serverID);
|
|
|
|
|
+ if (server) server.types = types;
|
|
|
|
|
+
|
|
|
|
|
+ this.serverDataTypes$.get(serverID).next(types);
|
|
|
|
|
+
|
|
|
|
|
+ return types;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public queryServerData(serverID: number, type: string, start: Date, end: Date) {
|
|
public queryServerData(serverID: number, type: string, start: Date, end: Date) {
|
|
|
return firstValueFrom(
|
|
return firstValueFrom(
|
|
|
this.http
|
|
this.http
|
|
|
- .get<QueryResponse<ServerData>>(`/server/${serverID}/data`, { params: { type, start: start.toString(), end: end.toString() } })
|
|
|
|
|
|
|
+ .get<QueryResponse<ServerData>>(`${environment.apiBaseUrl}server/${serverID}/data`, {
|
|
|
|
|
+ params: { type, start: start.toString(), end: end.toString() }
|
|
|
|
|
+ })
|
|
|
.pipe(map(resp => resp.data.map(data => ({ ...data, time: new Date(data.time) }))))
|
|
.pipe(map(resp => resp.data.map(data => ({ ...data, time: new Date(data.time) }))))
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|