Skip to content

Commit 2dbc9bc

Browse files
author
jan hof
committed
finished websocket implementation
1 parent 392becf commit 2dbc9bc

File tree

3 files changed

+67
-19
lines changed

3 files changed

+67
-19
lines changed

src/scss/_variables.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,8 @@ $info-gradient: (
2727
"start": #39f,
2828
"stop": #2982cc,
2929
);
30+
31+
$secondary-gradient: (
32+
"start": #c8d2dcb2,
33+
"stop": #4c4f54,
34+
);

src/types/ServiceTypes.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,20 @@ interface Service {
33
name: string;
44
description: string;
55
version: string;
6-
running: boolean;
6+
state: ServiceState;
77
required: boolean;
88
}
99

10+
enum ServiceState {
11+
RUNNNING = 0,
12+
IDLE = 1,
13+
STARTING = 2,
14+
STOPPED = 3,
15+
}
16+
1017
interface SocketMessage{
1118
channel: string;
1219
}
1320

21+
export {ServiceState}
1422
export type { Service, SocketMessage };

src/views/dashboard/Dashboard.tsx

Lines changed: 53 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,56 @@ import {
99
CWidgetDropdown,
1010
} from "@coreui/react";
1111
import useServiceFetcher from "../../hooks/ServiceFetcher";
12-
import { Service } from "../../types/ServiceTypes";
12+
import { Service, ServiceState } from "../../types/ServiceTypes";
1313
import CIcon from "@coreui/icons-react";
1414

15-
const ws = new WebSocket("ws:/127.0.0.1:3000");
15+
let ws: WebSocket;
1616

17-
ws.onopen = () => {
18-
console.log("WebSocket Client Connected");
19-
};
17+
function connect() {
18+
ws = new WebSocket("ws:/127.0.0.1:3000");
19+
ws.onopen = () => {
20+
console.log("WebSocket Client Connected");
21+
};
22+
23+
ws.onerror = function(error) {
24+
console.log(error);
25+
};
26+
27+
ws.onclose = function(close) {
28+
if (close.code !== 1000) {
29+
//1000 = Normal Closure
30+
console.log("reconnecting in 3 seconds...");
31+
setTimeout(() => connect(), 3000);
32+
}
33+
};
34+
}
2035

2136
function send(data: any) {
2237
ws.send(JSON.stringify(data));
2338
}
2439

40+
function getStateStyle(service: Service) {
41+
switch (service.state) {
42+
case ServiceState.STARTING:
43+
return "gradient-warning";
44+
case ServiceState.RUNNNING:
45+
return "gradient-success";
46+
case ServiceState.IDLE:
47+
return "gradient-secondary";
48+
case ServiceState.STOPPED:
49+
return "gradient-danger";
50+
}
51+
}
52+
2553
const Dashboard = () => {
2654
const [services, setServices] = useState<Service[]>([]);
2755

28-
useServiceFetcher(setServices);
56+
//useServiceFetcher(setServices);
2957

3058
useEffect(() => {
59+
connect();
3160
ws.onmessage = (message) => {
61+
console.log(message);
3262
let data = JSON.parse(message.data);
3363
console.log(data);
3464
if (data && data.channel === "service-update") {
@@ -40,12 +70,12 @@ const Dashboard = () => {
4070
return (
4171
<CRow>
4272
{services
43-
.sort((a, b) => (a.running === b.running ? 0 : a.running ? -1 : 1))
73+
.sort((a, b) => a.state - b.state)
4474
.map((service) => {
4575
return (
4676
<CCol sm="6" lg="3">
4777
<CWidgetDropdown
48-
color={service.running ? "gradient-success" : "gradient-danger"}
78+
color={getStateStyle(service)}
4979
header={service.name}
5080
text={"Version: " + service.version}
5181
key={service.namespace}
@@ -59,21 +89,26 @@ const Dashboard = () => {
5989
</CDropdownToggle>
6090
<CDropdownMenu className="pt-0 dark" placement="bottom-end">
6191
<CDropdownItem
62-
disabled={service.required && service.running}
92+
disabled={
93+
service.required &&
94+
service.state !== ServiceState.STOPPED
95+
}
6396
onClick={() =>
6497
send({
65-
channel: "service-interact",
66-
namespace: service.namespace,
67-
activeState: service.running
68-
? "DEACTIVATE"
69-
: "ACTIVATE",
98+
channel: "service-toggle",
99+
data: {
100+
namespace: service.namespace,
101+
},
70102
})
71103
}
72104
>
73-
{service.running ? "Disable" : "Enable"}
74-
{service.required && service.running && (
75-
<CIcon name="cil-ban" className="pull-right" />
76-
)}
105+
{service.state === ServiceState.STOPPED
106+
? "Enable"
107+
: "Disable"}
108+
{service.required &&
109+
service.state !== ServiceState.STOPPED && (
110+
<CIcon name="cil-ban" className="pull-right" />
111+
)}
77112
</CDropdownItem>
78113
</CDropdownMenu>
79114
</CDropdown>

0 commit comments

Comments
 (0)