diff --git a/pom.xml b/pom.xml index b8fe5cc..e145acb 100644 --- a/pom.xml +++ b/pom.xml @@ -77,6 +77,10 @@ io.quarkus quarkus-mutiny + + io.quarkus + quarkus-rest-client-jackson + diff --git a/src/main/java/dev/dinauer/inspect/log/LogWebsocket.java b/src/main/java/dev/dinauer/inspect/log/LogWebsocket.java index 64a7162..b2245d5 100644 --- a/src/main/java/dev/dinauer/inspect/log/LogWebsocket.java +++ b/src/main/java/dev/dinauer/inspect/log/LogWebsocket.java @@ -97,9 +97,9 @@ public class LogWebsocket if (indexFirstSpace != -1) { String timestampRaw = log.substring(0, indexFirstSpace); - String message = log.substring(indexFirstSpace).trim(); try { + String message = log.substring(indexFirstSpace + 1); result.add(new KubernetesLog(LocalDateTime.parse(timestampRaw, DateTimeFormatter.ISO_DATE_TIME), message)); } catch (Exception e) diff --git a/src/main/java/dev/dinauer/monitoring/TopNodesService.java b/src/main/java/dev/dinauer/monitoring/TopNodesService.java index 82fd964..78f1e69 100644 --- a/src/main/java/dev/dinauer/monitoring/TopNodesService.java +++ b/src/main/java/dev/dinauer/monitoring/TopNodesService.java @@ -2,6 +2,7 @@ package dev.dinauer.monitoring; import dev.dinauer.ProcessRunner; import dev.dinauer.monitoring.nodes.MonitoredNode; +import dev.dinauer.monitoring.nodes.NodeMetrics; import dev.dinauer.service.PodService; import dev.dinauer.utils.ClientProvider; import io.fabric8.kubernetes.api.model.Node; @@ -40,7 +41,11 @@ public class TopNodesService Integer relativeCpu = extractInteger(parts[2]); Integer absoluteMemory = extractMemory(parts[3]); Integer relativeMemory = extractInteger(parts[4]); - result.add(new MonitoredNode(node, absoluteCpu, relativeCpu, Integer.parseInt(node.getStatus().getAllocatable().get("cpu").getAmount()) * 1000, absoluteMemory, relativeMemory, extractMemory(node.getStatus().getAllocatable().get("memory").getAmount()), podsOnNodes.get(node.getMetadata().getName()))); + Integer totalCpu = Integer.parseInt(node.getStatus().getAllocatable().get("cpu").getAmount()) * 1000; + Integer totalMemory = extractMemory(node.getStatus().getAllocatable().get("memory").getAmount()); + Integer totalPods = podsOnNodes.get(node.getMetadata().getName()); + NodeMetrics metrics = new NodeMetrics(absoluteCpu, relativeCpu, totalCpu, absoluteMemory, relativeMemory, totalMemory, totalPods, null, null); + result.add(new MonitoredNode(node, metrics)); } } return result; diff --git a/src/main/java/dev/dinauer/monitoring/nodes/MonitoredNode.java b/src/main/java/dev/dinauer/monitoring/nodes/MonitoredNode.java index 2a58c16..dd4d166 100644 --- a/src/main/java/dev/dinauer/monitoring/nodes/MonitoredNode.java +++ b/src/main/java/dev/dinauer/monitoring/nodes/MonitoredNode.java @@ -4,58 +4,16 @@ import io.fabric8.kubernetes.api.model.Node; public class MonitoredNode extends Node { - public MonitoredNode(Node node, Integer absoluteCpuUsage, Integer relativeCpuUsage, Integer totalCpu, Integer absoluteMemory, Integer relativeMemory, Integer totalMemory, Integer runningPods) + public MonitoredNode(Node node, NodeMetrics metrics) { super(node.getApiVersion(), node.getKind(), node.getMetadata(), node.getSpec(), node.getStatus()); - this.absoluteCpuUsage = absoluteCpuUsage; - this.relativeCpuUsage = relativeCpuUsage; - this.totalCpu = totalCpu; - this.absoluteMemory = absoluteMemory; - this.relativeMemory = relativeMemory; - this.totalMemory = totalMemory; - this.runningPods = runningPods; + this.metrics = metrics; } - private final Integer absoluteCpuUsage; - private final Integer relativeCpuUsage; - private final Integer totalCpu; - private final Integer absoluteMemory; - private final Integer relativeMemory; - private final Integer totalMemory; - private final Integer runningPods; + private final NodeMetrics metrics; - public Integer getAbsoluteCpuUsage() + public NodeMetrics getMetrics() { - return absoluteCpuUsage; - } - - public Integer getRelativeCpuUsage() - { - return relativeCpuUsage; - } - - public Integer getTotalCpu() - { - return totalCpu; - } - - public Integer getAbsoluteMemory() - { - return absoluteMemory; - } - - public Integer getRelativeMemory() - { - return relativeMemory; - } - - public Integer getTotalMemory() - { - return totalMemory; - } - - public Integer getRunningPods() - { - return runningPods; + return metrics; } } \ No newline at end of file diff --git a/src/main/java/dev/dinauer/monitoring/nodes/NodeMetrics.java b/src/main/java/dev/dinauer/monitoring/nodes/NodeMetrics.java new file mode 100644 index 0000000..7438485 --- /dev/null +++ b/src/main/java/dev/dinauer/monitoring/nodes/NodeMetrics.java @@ -0,0 +1,5 @@ +package dev.dinauer.monitoring.nodes; + +public record NodeMetrics(Integer absoluteCpuUsage, Integer relativeCpuUsage, Integer totalCpu, Integer absoluteMemory, Integer relativeMemory, Integer totalMemory, Integer runningPods, Integer relativeDiskUsage, Integer totalDiskSpace) +{ +} diff --git a/src/main/java/dev/dinauer/monitoring/nodes/NodeMonitoringService.java b/src/main/java/dev/dinauer/monitoring/nodes/NodeMonitoringService.java index 92469f7..6d41fc1 100644 --- a/src/main/java/dev/dinauer/monitoring/nodes/NodeMonitoringService.java +++ b/src/main/java/dev/dinauer/monitoring/nodes/NodeMonitoringService.java @@ -22,12 +22,24 @@ public class NodeMonitoringService List nodes = topNodesService.findAll(); for (MonitoredNode node : nodes) { + NodeMetrics nodeMetrics = node.getMetrics(); Map metrics = Map.ofEntries( - Map.entry("RELATIVE_CPU", (long) node.getRelativeCpuUsage()), - Map.entry("RELATIVE_MEMORY", (long) node.getRelativeMemory()), - Map.entry("ABSOLUTE_MEMORY", (long) node.getAbsoluteMemory()), - Map.entry("ABSOLUTE_CPU", (long) node.getAbsoluteCpuUsage())); + Map.entry("RELATIVE_CPU", toLong(nodeMetrics.relativeCpuUsage())), + Map.entry("RELATIVE_MEMORY", toLong(nodeMetrics.relativeMemory())), + Map.entry("ABSOLUTE_MEMORY", toLong(nodeMetrics.absoluteMemory())), + Map.entry("ABSOLUTE_CPU", toLong(nodeMetrics.absoluteCpuUsage())), + Map.entry("RELATIVE_DISK_SPACE", toLong(nodeMetrics.relativeDiskUsage())), + Map.entry("TOTAL_DISK_SPACE", toLong(nodeMetrics.totalDiskSpace()))); indexingService.index(String.format("NODE-%s", node.getMetadata().getUid()), "NODE_METRICS", metrics); } } + + private Long toLong(Integer input) + { + if (input != null) + { + return Long.valueOf(input); + } + return null; + } } diff --git a/src/main/java/dev/dinauer/monitoring/nodes/client/NodeDiskService.java b/src/main/java/dev/dinauer/monitoring/nodes/client/NodeDiskService.java new file mode 100644 index 0000000..4d6b6d2 --- /dev/null +++ b/src/main/java/dev/dinauer/monitoring/nodes/client/NodeDiskService.java @@ -0,0 +1,18 @@ +package dev.dinauer.monitoring.nodes.client; + +import dev.dinauer.service.PodService; +import io.fabric8.kubernetes.api.model.Pod; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +import java.util.List; +import java.util.Map; + +@ApplicationScoped +public class NodeDiskService +{ + @Inject + PodService podService; + + +} diff --git a/src/main/java/dev/dinauer/service/PodService.java b/src/main/java/dev/dinauer/service/PodService.java index 752720d..8371a8a 100644 --- a/src/main/java/dev/dinauer/service/PodService.java +++ b/src/main/java/dev/dinauer/service/PodService.java @@ -2,13 +2,13 @@ package dev.dinauer.service; import dev.dinauer.utils.ClientProvider; import io.fabric8.kubernetes.api.model.Pod; +import io.fabric8.kubernetes.api.model.apps.DaemonSet; import io.fabric8.kubernetes.api.model.apps.StatefulSet; import io.fabric8.kubernetes.client.Watch; import io.fabric8.kubernetes.client.Watcher; import io.fabric8.kubernetes.client.dsl.AppsAPIGroupDSL; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; -import org.jboss.resteasy.reactive.common.NotImplementedYet; import java.util.List; import java.util.Map; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a39bd7a..6677d57 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -5,6 +5,7 @@ quarkus.http.root-path=/api dev.dinauer.kubooboo.work.dir=/var/lib/kubooboo/work %dev.dev.dinauer.kubooboo.work.dir=/home/andreas/Documents/dev/kubooboo/backend/src/main/resources/dev +dev.dinauer.kubooboo.current.namespace=${CURRENT_NAMESPACE} # Keys %prod.smallrye.jwt.sign.key.location=${PRIVATE_KEY_LOCATION}