diff --git a/Cargo.lock b/Cargo.lock index 33c397176..134f769d2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1149,7 +1149,7 @@ dependencies = [ [[package]] name = "command" -version = "2.1.0" +version = "2.1.1" dependencies = [ "komodo_client", "shlex", @@ -1489,7 +1489,7 @@ checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "database" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "async-compression", @@ -1759,7 +1759,7 @@ dependencies = [ [[package]] name = "encoding" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "bytes", @@ -1801,7 +1801,7 @@ dependencies = [ [[package]] name = "environment" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "formatting", @@ -1930,7 +1930,7 @@ dependencies = [ [[package]] name = "formatting" -version = "2.1.0" +version = "2.1.1" dependencies = [ "mogh_error", ] @@ -2109,7 +2109,7 @@ dependencies = [ [[package]] name = "git" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "command", @@ -2709,7 +2709,7 @@ dependencies = [ [[package]] name = "interpolate" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "komodo_client", @@ -2835,7 +2835,7 @@ dependencies = [ [[package]] name = "komodo_cli" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "bcrypt", @@ -2865,7 +2865,7 @@ dependencies = [ [[package]] name = "komodo_client" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "async_timing_util", @@ -2904,7 +2904,7 @@ dependencies = [ [[package]] name = "komodo_core" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "arc-swap", @@ -2977,7 +2977,7 @@ dependencies = [ [[package]] name = "komodo_periphery" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "arc-swap", @@ -4032,7 +4032,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "periphery_client" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "encoding", @@ -5997,7 +5997,7 @@ dependencies = [ [[package]] name = "transport" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "axum", diff --git a/Cargo.toml b/Cargo.toml index 4d52ee6e6..c95420039 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ members = [ ] [workspace.package] -version = "2.1.0" +version = "2.1.1" edition = "2024" authors = ["mbecker20 "] license = "GPL-3.0-or-later" diff --git a/bin/core/src/monitor/resources.rs b/bin/core/src/monitor/resources.rs index 1a3c75008..49fe25209 100644 --- a/bin/core/src/monitor/resources.rs +++ b/bin/core/src/monitor/resources.rs @@ -46,8 +46,10 @@ pub async fn update_swarm_stack_cache( Some(SwarmState::Unknown) | None => StackState::Unknown, }) .unwrap_or(StackState::Down); + let services = extract_services_from_stack(&stack); let service_prefix = format!("{project_name}_"); + let mut services_with_swarm_services = services .iter() .map( @@ -74,27 +76,50 @@ pub async fn update_swarm_stack_cache( .unwrap_or_default() }) .cloned(); + + let (image, image_digests) = swarm_service + .as_ref() + .and_then(|swarm_service| swarm_service.image.as_ref()) + .map(|image| { + ( + image.clone(), + ImageDigest::parse(image).map(|d| vec![d]), + ) + }) + .unwrap_or(( + if image.contains(':') { + image.to_string() + } else { + format!("{image}:latest") + }, + None, + )); + StackService { service: service_name.clone(), - image: image.clone(), container: None, swarm_service, - image_digests: Default::default(), + image, + image_digests, } }, ) .collect::>(); + services_with_swarm_services .sort_by(|a, b| a.service.cmp(&b.service)); + let prev_state = stack_status_cache .get(&stack.id) .await .map(|s| s.curr.state); + let status = CachedStackStatus { id: stack.id.clone(), state: current_state, services: services_with_swarm_services, }; + stack_status_cache .insert( stack.id, @@ -207,10 +232,17 @@ pub async fn update_swarm_deployment_cache( .unwrap_or_default() }) .cloned(); + + let image_digests = service + .as_ref() + .and_then(|service| service.image.as_ref()) + .and_then(|image| ImageDigest::parse(image).map(|d| vec![d])); + let prev_state = deployment_status_cache .get(&deployment.id) .await .map(|s| s.curr.state); + let current_state = service .as_ref() .map(|service| match service.state { @@ -220,6 +252,7 @@ pub async fn update_swarm_deployment_cache( SwarmState::Unknown => DeploymentState::Unknown, }) .unwrap_or(DeploymentState::NotDeployed); + deployment_status_cache .insert( deployment.id.clone(), @@ -227,9 +260,9 @@ pub async fn update_swarm_deployment_cache( curr: CachedDeploymentStatus { id: deployment.id, state: current_state, - service, container: None, - image_digests: None, + service, + image_digests, }, prev: prev_state, } @@ -251,6 +284,7 @@ pub async fn update_server_deployment_cache( .iter() .find(|container| container.name == deployment.name) .cloned(); + let image_digests = container .as_ref() .and_then(|container| container.image_id.as_ref()) @@ -263,10 +297,12 @@ pub async fn update_server_deployment_cache( } }) }); + let prev_state = deployment_status_cache .get(&deployment.id) .await .map(|s| s.curr.state); + let current_state = container .as_ref() .map(|c| c.state.into()) diff --git a/client/core/ts/package.json b/client/core/ts/package.json index 8d2aabdb3..75fc8167b 100644 --- a/client/core/ts/package.json +++ b/client/core/ts/package.json @@ -1,6 +1,6 @@ { "name": "komodo_client", - "version": "2.1.0", + "version": "2.1.1", "description": "Komodo client package", "homepage": "https://komo.do", "main": "dist/lib.js",