From 15ac0721a6449ab6ac052e67ce8859a782de6c25 Mon Sep 17 00:00:00 2001 From: "Michael N. Lipp" Date: Tue, 14 Jan 2025 10:22:56 +0100 Subject: [PATCH] Minor refactoring. --- .../jdrupes/vmoperator/common/VmDefinition.java | 15 +++++++++++++++ .../org/jdrupes/vmoperator/manager/VmMonitor.java | 15 +-------------- .../src/org/jdrupes/vmoperator/vmmgmt/VmMgmt.java | 13 +++---------- 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/org.jdrupes.vmoperator.common/src/org/jdrupes/vmoperator/common/VmDefinition.java b/org.jdrupes.vmoperator.common/src/org/jdrupes/vmoperator/common/VmDefinition.java index 7545405..b807e8c 100644 --- a/org.jdrupes.vmoperator.common/src/org/jdrupes/vmoperator/common/VmDefinition.java +++ b/org.jdrupes.vmoperator.common/src/org/jdrupes/vmoperator/common/VmDefinition.java @@ -268,6 +268,21 @@ public class VmDefinition { this.status = status; } + /** + * Return a condition's status. + * + * @param name the condition's name + * @return the status, if the condition is defined + */ + public Optional conditionStatus(String name) { + return this.>> fromStatus("conditions") + .orElse(Collections.emptyList()).stream() + .filter(cond -> DataPath.get(cond, "type") + .map(name::equals).orElse(false)) + .findFirst().map(cond -> DataPath.get(cond, "status") + .map("True"::equals).orElse(false)); + } + /** * Set extra data (locally used, unknown to kubernetes). * diff --git a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/VmMonitor.java b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/VmMonitor.java index 315aee2..6c769d2 100644 --- a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/VmMonitor.java +++ b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/VmMonitor.java @@ -24,9 +24,6 @@ import io.kubernetes.client.util.Watch; import io.kubernetes.client.util.generic.options.ListOptions; import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.logging.Level; @@ -49,7 +46,6 @@ import static org.jdrupes.vmoperator.manager.Constants.VM_OP_NAME; import org.jdrupes.vmoperator.manager.events.ChannelManager; import org.jdrupes.vmoperator.manager.events.VmChannel; import org.jdrupes.vmoperator.manager.events.VmDefChanged; -import org.jdrupes.vmoperator.util.DataPath; import org.jgrapes.core.Channel; import org.jgrapes.core.Event; @@ -184,16 +180,7 @@ public class VmMonitor extends // VM definition status changes before the pod terminates. // This results in pod information being shown for a stopped // VM which is irritating. So check condition first. - @SuppressWarnings("PMD.LambdaCanBeMethodReference") - var isRunning - = vmDef.>> fromStatus("conditions") - .orElse(Collections.emptyList()).stream() - .filter(cond -> DataPath.get(cond, "type") - .map(t -> "Running".equals(t)).orElse(false)) - .findFirst().map(cond -> DataPath.get(cond, "status") - .map(s -> "True".equals(s)).orElse(false)) - .orElse(false); - if (!isRunning) { + if (!vmDef.conditionStatus("Running").orElse(false)) { return; } var podSearch = new ListOptions(); diff --git a/org.jdrupes.vmoperator.vmmgmt/src/org/jdrupes/vmoperator/vmmgmt/VmMgmt.java b/org.jdrupes.vmoperator.vmmgmt/src/org/jdrupes/vmoperator/vmmgmt/VmMgmt.java index 8395b4c..dbe17ca 100644 --- a/org.jdrupes.vmoperator.vmmgmt/src/org/jdrupes/vmoperator/vmmgmt/VmMgmt.java +++ b/org.jdrupes.vmoperator.vmmgmt/src/org/jdrupes/vmoperator/vmmgmt/VmMgmt.java @@ -29,9 +29,7 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.time.Duration; import java.time.Instant; -import java.util.Collections; import java.util.EnumSet; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -328,14 +326,9 @@ public class VmMgmt extends FreeMarkerConlet { .add(vmDef. fromStatus("ram") .map(r -> Quantity.fromString(r).getNumber().toBigInteger()) .orElse(BigInteger.ZERO)); - summary.runningVms - += vmDef.>> fromStatus("conditions") - .orElse(Collections.emptyList()).stream() - .filter(cond -> DataPath.get(cond, "type") - .map(t -> "Running".equals(t)).orElse(false) - && DataPath.get(cond, "status") - .map(s -> "True".equals(s)).orElse(false)) - .count(); + if (vmDef.conditionStatus("Running").orElse(false)) { + summary.runningVms += 1; + } } cachedSummary = summary; return summary;