@@ -9,26 +9,56 @@ import {
9
9
CWidgetDropdown ,
10
10
} from "@coreui/react" ;
11
11
import useServiceFetcher from "../../hooks/ServiceFetcher" ;
12
- import { Service } from "../../types/ServiceTypes" ;
12
+ import { Service , ServiceState } from "../../types/ServiceTypes" ;
13
13
import CIcon from "@coreui/icons-react" ;
14
14
15
- const ws = new WebSocket ( "ws:/127.0.0.1:3000" ) ;
15
+ let ws : WebSocket ;
16
16
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
+ }
20
35
21
36
function send ( data : any ) {
22
37
ws . send ( JSON . stringify ( data ) ) ;
23
38
}
24
39
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
+
25
53
const Dashboard = ( ) => {
26
54
const [ services , setServices ] = useState < Service [ ] > ( [ ] ) ;
27
55
28
- useServiceFetcher ( setServices ) ;
56
+ // useServiceFetcher(setServices);
29
57
30
58
useEffect ( ( ) => {
59
+ connect ( ) ;
31
60
ws . onmessage = ( message ) => {
61
+ console . log ( message ) ;
32
62
let data = JSON . parse ( message . data ) ;
33
63
console . log ( data ) ;
34
64
if ( data && data . channel === "service-update" ) {
@@ -40,12 +70,12 @@ const Dashboard = () => {
40
70
return (
41
71
< CRow >
42
72
{ services
43
- . sort ( ( a , b ) => ( a . running === b . running ? 0 : a . running ? - 1 : 1 ) )
73
+ . sort ( ( a , b ) => a . state - b . state )
44
74
. map ( ( service ) => {
45
75
return (
46
76
< CCol sm = "6" lg = "3" >
47
77
< CWidgetDropdown
48
- color = { service . running ? "gradient-success" : "gradient-danger" }
78
+ color = { getStateStyle ( service ) }
49
79
header = { service . name }
50
80
text = { "Version: " + service . version }
51
81
key = { service . namespace }
@@ -59,21 +89,26 @@ const Dashboard = () => {
59
89
</ CDropdownToggle >
60
90
< CDropdownMenu className = "pt-0 dark" placement = "bottom-end" >
61
91
< CDropdownItem
62
- disabled = { service . required && service . running }
92
+ disabled = {
93
+ service . required &&
94
+ service . state !== ServiceState . STOPPED
95
+ }
63
96
onClick = { ( ) =>
64
97
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
+ } ,
70
102
} )
71
103
}
72
104
>
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
+ ) }
77
112
</ CDropdownItem >
78
113
</ CDropdownMenu >
79
114
</ CDropdown >
0 commit comments