/
page-data.ts
123 lines (108 loc) · 2.99 KB
/
page-data.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import {
CpuLoad,
GpuLoad,
NetworkLoad,
RamLoad,
ServerInfo,
StorageLoad,
} from '@dash/common';
import { useEffect, useState } from 'react';
import { io, Socket } from 'socket.io-client';
import { environment } from '../environments/environment';
export const usePageData = () => {
const [pageLoaded, setPageLoaded] = useState(false);
const [socketError, setSocketError] = useState(false);
const [serverInfo, setServerInfo] = useState<ServerInfo | undefined>();
const [cpuLoad, setCpuLoad] = useState<CpuLoad[]>([]);
const [ramLoad, setRamLoad] = useState<RamLoad[]>([]);
const [networkLoad, setNetworkLoad] = useState<NetworkLoad[]>([]);
const [gpuLoad, setGpuLoad] = useState<GpuLoad[]>([]);
const [storageLoad, setStorageLoad] = useState<StorageLoad>();
const config = serverInfo?.config;
useEffect(() => {
const socket = io(environment.backendUrl);
socket.on('static-info', data => {
setServerInfo(data);
});
socket.on('connect', () => {
setTimeout(() => setPageLoaded(true), 50);
setSocketError(false);
});
socket.on('connect_error', () => {
setSocketError(true);
});
return () => {
socket.close();
};
}, []);
useEffect(() => {
let socket: Socket | undefined;
if (config) {
socket = io(environment.backendUrl);
socket.on('cpu-load', data => {
setCpuLoad(oldData => {
if (oldData.length >= (config.cpu_shown_datapoints ?? 0)) {
return [...oldData.slice(1), data];
} else {
return [...oldData, data];
}
});
});
socket.on('ram-load', data => {
setRamLoad(oldData => {
if (oldData.length >= (config.ram_shown_datapoints ?? 0)) {
return [...oldData.slice(1), data];
} else {
return [...oldData, data];
}
});
});
socket.on('network-load', data => {
setNetworkLoad(oldData => {
if (oldData.length >= (config.network_shown_datapoints ?? 0)) {
return [...oldData.slice(1), data];
} else {
return [...oldData, data];
}
});
});
socket.on('gpu-load', data => {
setGpuLoad(oldData => {
if (oldData.length >= (config.gpu_shown_datapoints ?? 0)) {
return [...oldData.slice(1), data];
} else {
return [...oldData, data];
}
});
});
socket.on('storage-load', data => {
setStorageLoad(data);
});
}
return () => {
socket?.close();
};
}, [config]);
const errors = [
{
condition: !config,
text: 'Invalid or incomplete static data loaded!',
},
{
condition: socketError,
text: 'Unable to connect to backend!',
},
];
const error = errors.find(e => e.condition && pageLoaded === true);
return {
pageLoaded,
error,
serverInfo,
config,
cpuLoad,
ramLoad,
networkLoad,
gpuLoad,
storageLoad,
};
};