MCPcopy Create free account
hub / github.com/codename-co/stack / docker_events

Function docker_events

packages/app/src-tauri/src/docker.rs:105–149  ·  view source on GitHub ↗
(app_handle: tauri::AppHandle)

Source from the content-addressed store, hash-verified

103
104#[command]
105pub async fn docker_events(app_handle: tauri::AppHandle) -> Result<(), String> {
106 let docker = get_docker().await?;
107 let mut last_hash = String::new();
108
109 tokio::spawn(async move {
110 let mut interval = tokio::time::interval(Duration::from_millis(REFRESH_INTERVAL));
111
112 loop {
113 interval.tick().await;
114 // Handle containers
115 match get_containers(&docker).await {
116 Ok(containers) => {
117 // Only emit if data changed
118 let new_hash = format!("{:?}", containers);
119 if new_hash != last_hash {
120 last_hash = new_hash;
121 let payload = (String::from("docker:containers"), &containers);
122 if let Err(e) = app_handle.emit("docker:containers", payload) {
123 eprintln!("Failed to emit containers event: {}", e);
124 }
125 // Extract and emit stacks with event name
126 let stacks: Vec<String> =
127 extract_projects(&containers).into_iter().collect();
128 let payload = (String::from("docker:stacks"), stacks);
129 if let Err(e) = app_handle.emit("docker:stacks", payload) {
130 eprintln!("Failed to emit stacks event: {}", e);
131 }
132
133 // Emit networks
134 let payload = (
135 String::from("docker:networks"),
136 list_networks().await.unwrap(),
137 );
138 if let Err(e) = app_handle.emit("docker:networks", payload) {
139 eprintln!("Failed to emit networks event: {}", e);
140 }
141 }
142 }
143 Err(e) => eprintln!("Failed to connect to Docker: {}", e),
144 }
145 }
146 });
147
148 Ok(())
149}

Callers

nothing calls this directly

Calls 4

get_dockerFunction · 0.85
get_containersFunction · 0.85
extract_projectsFunction · 0.85
list_networksFunction · 0.85

Tested by

no test coverage detected