✨ New Metrics
This commit is contained in:
parent
62d939e267
commit
14c78e167b
4
pom.xml
4
pom.xml
@ -77,6 +77,10 @@
|
|||||||
<groupId>io.quarkus</groupId>
|
<groupId>io.quarkus</groupId>
|
||||||
<artifactId>quarkus-mutiny</artifactId>
|
<artifactId>quarkus-mutiny</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.quarkus</groupId>
|
||||||
|
<artifactId>quarkus-rest-client-jackson</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- Hibernate ORM specific dependencies -->
|
<!-- Hibernate ORM specific dependencies -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@ -97,9 +97,9 @@ public class LogWebsocket
|
|||||||
if (indexFirstSpace != -1)
|
if (indexFirstSpace != -1)
|
||||||
{
|
{
|
||||||
String timestampRaw = log.substring(0, indexFirstSpace);
|
String timestampRaw = log.substring(0, indexFirstSpace);
|
||||||
String message = log.substring(indexFirstSpace).trim();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
String message = log.substring(indexFirstSpace + 1);
|
||||||
result.add(new KubernetesLog(LocalDateTime.parse(timestampRaw, DateTimeFormatter.ISO_DATE_TIME), message));
|
result.add(new KubernetesLog(LocalDateTime.parse(timestampRaw, DateTimeFormatter.ISO_DATE_TIME), message));
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package dev.dinauer.monitoring;
|
|||||||
|
|
||||||
import dev.dinauer.ProcessRunner;
|
import dev.dinauer.ProcessRunner;
|
||||||
import dev.dinauer.monitoring.nodes.MonitoredNode;
|
import dev.dinauer.monitoring.nodes.MonitoredNode;
|
||||||
|
import dev.dinauer.monitoring.nodes.NodeMetrics;
|
||||||
import dev.dinauer.service.PodService;
|
import dev.dinauer.service.PodService;
|
||||||
import dev.dinauer.utils.ClientProvider;
|
import dev.dinauer.utils.ClientProvider;
|
||||||
import io.fabric8.kubernetes.api.model.Node;
|
import io.fabric8.kubernetes.api.model.Node;
|
||||||
@ -40,7 +41,11 @@ public class TopNodesService
|
|||||||
Integer relativeCpu = extractInteger(parts[2]);
|
Integer relativeCpu = extractInteger(parts[2]);
|
||||||
Integer absoluteMemory = extractMemory(parts[3]);
|
Integer absoluteMemory = extractMemory(parts[3]);
|
||||||
Integer relativeMemory = extractInteger(parts[4]);
|
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;
|
return result;
|
||||||
|
|||||||
@ -4,58 +4,16 @@ import io.fabric8.kubernetes.api.model.Node;
|
|||||||
|
|
||||||
public class MonitoredNode extends 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());
|
super(node.getApiVersion(), node.getKind(), node.getMetadata(), node.getSpec(), node.getStatus());
|
||||||
this.absoluteCpuUsage = absoluteCpuUsage;
|
this.metrics = metrics;
|
||||||
this.relativeCpuUsage = relativeCpuUsage;
|
|
||||||
this.totalCpu = totalCpu;
|
|
||||||
this.absoluteMemory = absoluteMemory;
|
|
||||||
this.relativeMemory = relativeMemory;
|
|
||||||
this.totalMemory = totalMemory;
|
|
||||||
this.runningPods = runningPods;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Integer absoluteCpuUsage;
|
private final NodeMetrics metrics;
|
||||||
private final Integer relativeCpuUsage;
|
|
||||||
private final Integer totalCpu;
|
|
||||||
private final Integer absoluteMemory;
|
|
||||||
private final Integer relativeMemory;
|
|
||||||
private final Integer totalMemory;
|
|
||||||
private final Integer runningPods;
|
|
||||||
|
|
||||||
public Integer getAbsoluteCpuUsage()
|
public NodeMetrics getMetrics()
|
||||||
{
|
{
|
||||||
return absoluteCpuUsage;
|
return metrics;
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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)
|
||||||
|
{
|
||||||
|
}
|
||||||
@ -22,12 +22,24 @@ public class NodeMonitoringService
|
|||||||
List<MonitoredNode> nodes = topNodesService.findAll();
|
List<MonitoredNode> nodes = topNodesService.findAll();
|
||||||
for (MonitoredNode node : nodes)
|
for (MonitoredNode node : nodes)
|
||||||
{
|
{
|
||||||
|
NodeMetrics nodeMetrics = node.getMetrics();
|
||||||
Map<String, Long> metrics = Map.ofEntries(
|
Map<String, Long> metrics = Map.ofEntries(
|
||||||
Map.entry("RELATIVE_CPU", (long) node.getRelativeCpuUsage()),
|
Map.entry("RELATIVE_CPU", toLong(nodeMetrics.relativeCpuUsage())),
|
||||||
Map.entry("RELATIVE_MEMORY", (long) node.getRelativeMemory()),
|
Map.entry("RELATIVE_MEMORY", toLong(nodeMetrics.relativeMemory())),
|
||||||
Map.entry("ABSOLUTE_MEMORY", (long) node.getAbsoluteMemory()),
|
Map.entry("ABSOLUTE_MEMORY", toLong(nodeMetrics.absoluteMemory())),
|
||||||
Map.entry("ABSOLUTE_CPU", (long) node.getAbsoluteCpuUsage()));
|
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);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -2,13 +2,13 @@ package dev.dinauer.service;
|
|||||||
|
|
||||||
import dev.dinauer.utils.ClientProvider;
|
import dev.dinauer.utils.ClientProvider;
|
||||||
import io.fabric8.kubernetes.api.model.Pod;
|
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.api.model.apps.StatefulSet;
|
||||||
import io.fabric8.kubernetes.client.Watch;
|
import io.fabric8.kubernetes.client.Watch;
|
||||||
import io.fabric8.kubernetes.client.Watcher;
|
import io.fabric8.kubernetes.client.Watcher;
|
||||||
import io.fabric8.kubernetes.client.dsl.AppsAPIGroupDSL;
|
import io.fabric8.kubernetes.client.dsl.AppsAPIGroupDSL;
|
||||||
import jakarta.enterprise.context.ApplicationScoped;
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import org.jboss.resteasy.reactive.common.NotImplementedYet;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|||||||
@ -5,6 +5,7 @@ quarkus.http.root-path=/api
|
|||||||
|
|
||||||
dev.dinauer.kubooboo.work.dir=/var/lib/kubooboo/work
|
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.dev.dinauer.kubooboo.work.dir=/home/andreas/Documents/dev/kubooboo/backend/src/main/resources/dev
|
||||||
|
dev.dinauer.kubooboo.current.namespace=${CURRENT_NAMESPACE}
|
||||||
|
|
||||||
# Keys
|
# Keys
|
||||||
%prod.smallrye.jwt.sign.key.location=${PRIVATE_KEY_LOCATION}
|
%prod.smallrye.jwt.sign.key.location=${PRIVATE_KEY_LOCATION}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user