1- use crate :: { datas :: SendEvent , events:: { docker:: { DockerContainersRestartData , DockerEvent , DockerStatusData } , Event } , services:: docker} ;
1+ use crate :: { events:: { docker:: { DockerContainerInspectData , DockerContainerListData , DockerContainerRestartData , DockerEvent , DockerStatusData } , Event } , serializers :: SendEvent , services:: docker} ;
22
33pub async fn handle_message ( send_stream : & mut wtransport:: SendStream , event : & DockerEvent ) {
44 match event {
@@ -8,14 +8,90 @@ pub async fn handle_message(send_stream: &mut wtransport::SendStream, event: &Do
88 status : Some ( docker:: ping ( ) . await )
99 }
1010 } ) ) . await ;
11- log:: info!( "{:?}" , Event :: Docker ( DockerEvent :: DockerContainersRestart {
12- data: DockerContainersRestartData {
11+ log:: info!( "{:?}" , Event :: Docker ( DockerEvent :: DockerContainerRestart {
12+ data: DockerContainerRestartData {
1313 container_id: Some ( "container_id" . to_string( ) ) ,
1414 }
1515 } ) ) ;
1616 } ,
17- DockerEvent :: DockerContainersRestart { data } => {
18- log:: info!( "Restarting containers: {:?}" , data) ;
19- }
17+ DockerEvent :: DockerContainerList { .. } => {
18+ let containers = match docker:: get_containers ( ) . await {
19+ Ok ( containers) => containers,
20+ Err ( error) => {
21+ log:: error!( "Failed to get containers: {:?}" , error) ;
22+ send_stream. send_event ( Event :: Docker ( DockerEvent :: DockerStatus {
23+ data : DockerStatusData {
24+ status : Some ( docker:: ping ( ) . await )
25+ }
26+ } ) ) . await ;
27+ Vec :: new ( )
28+ }
29+ } ;
30+
31+ send_stream. send_event ( Event :: Docker ( DockerEvent :: DockerContainerList {
32+ data : DockerContainerListData {
33+ containers : Some ( containers)
34+ }
35+ } ) ) . await ;
36+ } ,
37+ DockerEvent :: DockerContainerInspect { data } => {
38+ match & data. container_id {
39+ Some ( container_id) => {
40+ let container = match docker:: get_container ( & container_id) . await {
41+ Ok ( container) => container,
42+ Err ( error) => {
43+ log:: error!( "Failed to inspect container: {:?}" , error) ;
44+ return ;
45+ }
46+ } ;
47+
48+ send_stream. send_event ( Event :: Docker ( DockerEvent :: DockerContainerInspect {
49+ data : DockerContainerInspectData {
50+ container_id : Some ( container_id. clone ( ) ) ,
51+ container : Some ( container)
52+ }
53+ } ) ) . await ;
54+ } ,
55+ None => {
56+ log:: error!( "No container ID provided" ) ;
57+ }
58+ }
59+ } ,
60+ DockerEvent :: DockerContainerStart { data } => {
61+ match & data. container_id {
62+ Some ( container_id) => {
63+ if let Err ( error) = docker:: start_container ( & container_id) . await {
64+ log:: error!( "Failed to start container: {:?}" , error) ;
65+ }
66+ } ,
67+ None => {
68+ log:: error!( "No container ID provided" ) ;
69+ }
70+ }
71+ } ,
72+ DockerEvent :: DockerContainerRestart { data } => {
73+ match & data. container_id {
74+ Some ( container_id) => {
75+ if let Err ( error) = docker:: restart_container ( & container_id) . await {
76+ log:: error!( "Failed to restart container: {:?}" , error) ;
77+ }
78+ } ,
79+ None => {
80+ log:: error!( "No container ID provided" ) ;
81+ }
82+ }
83+ } ,
84+ DockerEvent :: DockerContainerStop { data } => {
85+ match & data. container_id {
86+ Some ( container_id) => {
87+ if let Err ( error) = docker:: stop_container ( & container_id) . await {
88+ log:: error!( "Failed to stop container: {:?}" , error) ;
89+ }
90+ } ,
91+ None => {
92+ log:: error!( "No container ID provided" ) ;
93+ }
94+ }
95+ } ,
2096 }
2197}
0 commit comments