From 11a22e84ba2bfa5d8c54a10323c1377016e0e98f Mon Sep 17 00:00:00 2001 From: Mark Nellemann Date: Wed, 15 Mar 2023 16:21:07 +0100 Subject: [PATCH] Initial work on power readings. --- gradle.properties | 2 +- .../plugins/base/BasePowerExtension.java | 112 ++++++++++++++++++ .../sysmon/plugins/power/PowerPlugin.java | 2 - 3 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 plugins/base/src/main/java/sysmon/plugins/base/BasePowerExtension.java diff --git a/gradle.properties b/gradle.properties index fb94756..9d8261e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version = 1.1.2 +version = 1.1.3 pf4jVersion = 3.7.0 slf4jVersion = 2.0.6 camelVersion = 3.14.7 diff --git a/plugins/base/src/main/java/sysmon/plugins/base/BasePowerExtension.java b/plugins/base/src/main/java/sysmon/plugins/base/BasePowerExtension.java new file mode 100644 index 0000000..071fd73 --- /dev/null +++ b/plugins/base/src/main/java/sysmon/plugins/base/BasePowerExtension.java @@ -0,0 +1,112 @@ +package sysmon.plugins.base; + +import org.pf4j.Extension; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import oshi.hardware.HardwareAbstractionLayer; +import oshi.hardware.PowerSource; +import sysmon.shared.Measurement; +import sysmon.shared.MetricExtension; +import sysmon.shared.MetricResult; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +@Extension +public class BasePowerExtension implements MetricExtension { + + private static final Logger log = LoggerFactory.getLogger(BasePowerExtension.class); + + // Extension details + private final String name = "base_power"; + private final String description = "Base Power Metrics"; + + // Configuration / Options + private boolean enabled = true; + private boolean threaded = false; + private String interval = "30s"; + + private HardwareAbstractionLayer hardwareAbstractionLayer; + private List powerSources; + + @Override + public boolean isEnabled() { + return enabled; + } + + @Override + public boolean isThreaded() { + return threaded; + } + + @Override + public boolean isSupported() { + hardwareAbstractionLayer = BasePlugin.getHardwareAbstractionLayer(); + return hardwareAbstractionLayer != null; + } + + @Override + public String getName() { + return name; + } + + @Override + public String getInterval() { + return interval; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public void setConfiguration(Map map) { + if (map.containsKey("enabled")) { + enabled = (boolean) map.get("enabled"); + } + if (map.containsKey("threaded")) { + threaded = (boolean) map.get("threaded"); + } + if (map.containsKey("interval")) { + interval = (String) map.get("interval"); + } + } + + @Override + public MetricResult getMetrics() { + + if(powerSources == null) { + powerSources = hardwareAbstractionLayer.getPowerSources(); + } + + ArrayList measurementList = new ArrayList<>(); + powerSources.forEach((source) -> { + log.info("name: {}", source.getName()); + log.info("amp: {}", source.getAmperage()); + log.info("voltage: {}", source.getVoltage()); + + TreeMap tagsMap = new TreeMap() { + { + put("name", source.getName()); + } + }; + + TreeMap fieldsMap = new TreeMap() { + { + put("amperage", source.getAmperage()); + put("voltage", source.getVoltage()); + } + }; + + log.debug("getMetrics() - tags: {}, fields: {}", tagsMap, fieldsMap); + measurementList.add(new Measurement(tagsMap, fieldsMap)); + + }); + + return new MetricResult(name, measurementList); + } + +} diff --git a/plugins/power/src/main/java/sysmon/plugins/power/PowerPlugin.java b/plugins/power/src/main/java/sysmon/plugins/power/PowerPlugin.java index 07d7e6f..0388784 100644 --- a/plugins/power/src/main/java/sysmon/plugins/power/PowerPlugin.java +++ b/plugins/power/src/main/java/sysmon/plugins/power/PowerPlugin.java @@ -14,5 +14,3 @@ public class PowerPlugin extends Plugin { } } - -