From b1c1a2a36a6f8d74ca642bfdc3e484525e6ea372 Mon Sep 17 00:00:00 2001 From: Mark Nellemann Date: Mon, 10 May 2021 21:12:52 +0200 Subject: [PATCH] More work on Linux plugin. --- .../sysmon_linux/LinuxProcessorStat.java | 40 ++++++++++++------- .../src/test/groovy/LinuxProcessorTest.groovy | 4 ++ .../org/sysmon/server/ServerRouteBuilder.java | 2 - .../org/sysmon/shared/MetricExtension.java | 1 - 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/plugins/sysmon-linux/src/main/java/org/sysmon/plugins/sysmon_linux/LinuxProcessorStat.java b/plugins/sysmon-linux/src/main/java/org/sysmon/plugins/sysmon_linux/LinuxProcessorStat.java index 37f3c6e..63c7d28 100644 --- a/plugins/sysmon-linux/src/main/java/org/sysmon/plugins/sysmon_linux/LinuxProcessorStat.java +++ b/plugins/sysmon-linux/src/main/java/org/sysmon/plugins/sysmon_linux/LinuxProcessorStat.java @@ -5,28 +5,36 @@ import java.util.Map; public class LinuxProcessorStat { - private final String cpuName; - //private final float user; - //private final float sys; - //private final float wait; - //private final float idle; + private final float user; + private final float sys; + private final float wait; + private final float idle; private final float busy; public LinuxProcessorStat(LinuxProcessorProcLine current, LinuxProcessorProcLine previous) { - cpuName = current.getCpuName(); - long workTimeDiff = current.getCombinedTime() - previous.getCombinedTime(); - long idleTimeDiff = current.getCombinedIdleTime() - previous.getCombinedIdleTime(); + long workTime = current.getCombinedTime() - previous.getCombinedTime(); - float utilization = (float) (workTimeDiff - idleTimeDiff) / workTimeDiff; - busy = (utilization * 100); + long busyTime = current.getCombinedIdleTime() - previous.getCombinedIdleTime(); + float busyDiff = (float) (workTime - busyTime) / workTime; + busy = (busyDiff * 100); - // TODO: Calculate user, system, idle and wait diff times into percentage. - } + long userTime = current.getUserTime() - previous.getUserTime(); + float userDiff = (float) (workTime - userTime) / workTime; + user = 100 - (userDiff * 100); + long sysTime = current.getSystemTime() - previous.getSystemTime(); + float sysDiff = (float) (workTime - sysTime) / workTime; + sys = 100 - (sysDiff * 100); + + long waitTime = current.getIoWaitTime() - previous.getIoWaitTime(); + float waitDiff = (float) (workTime - waitTime) / workTime; + wait = 100 - (waitDiff * 100); + + long idleTime = current.getIdleTime() - previous.getIdleTime(); + float idleDiff = (float) (workTime - idleTime) / workTime; + idle = 100 - (idleDiff * 100); - public String getName() { - return cpuName; } @@ -40,6 +48,10 @@ public class LinuxProcessorStat { public Map getFields() { Map fields = new HashMap<>(); + fields.put("user", user); + fields.put("sys", sys); + fields.put("wait", wait); + fields.put("idle", idle); fields.put("busy", busy); return fields; } diff --git a/plugins/sysmon-linux/src/test/groovy/LinuxProcessorTest.groovy b/plugins/sysmon-linux/src/test/groovy/LinuxProcessorTest.groovy index 4627c2c..7e1c06d 100644 --- a/plugins/sysmon-linux/src/test/groovy/LinuxProcessorTest.groovy +++ b/plugins/sysmon-linux/src/test/groovy/LinuxProcessorTest.groovy @@ -37,6 +37,10 @@ class LinuxProcessorTest extends Specification { then: processorStat.getBusy() == 38.001614f + processorStat.getFields().get("user") == 35.6989f + processorStat.getFields().get("sys") == 2.2623215f + processorStat.getFields().get("idle") == 61.823322f + processorStat.getFields().get("wait") == 0.17505646f } diff --git a/server/src/main/java/org/sysmon/server/ServerRouteBuilder.java b/server/src/main/java/org/sysmon/server/ServerRouteBuilder.java index 39e3a46..c0b1dd3 100644 --- a/server/src/main/java/org/sysmon/server/ServerRouteBuilder.java +++ b/server/src/main/java/org/sysmon/server/ServerRouteBuilder.java @@ -44,9 +44,7 @@ public class ServerRouteBuilder extends RouteBuilder { .log("Error storing metric to InfluxDB: ${exception}") .end(); - } - } diff --git a/shared/src/main/java/org/sysmon/shared/MetricExtension.java b/shared/src/main/java/org/sysmon/shared/MetricExtension.java index 95a2081..f618a29 100644 --- a/shared/src/main/java/org/sysmon/shared/MetricExtension.java +++ b/shared/src/main/java/org/sysmon/shared/MetricExtension.java @@ -10,5 +10,4 @@ public interface MetricExtension extends ExtensionPoint { String getDescription(); MetricResult getMetrics(); - }