From 31b494163d289329d52d6cb038edd3da5938d727 Mon Sep 17 00:00:00 2001 From: Mark Nellemann Date: Wed, 21 Dec 2022 17:12:15 +0100 Subject: [PATCH 1/4] Work on support for groovy scripts. --- CHANGELOG.md | 3 + client/build.gradle | 3 + client/doc/scripts/README.md | 3 + client/doc/scripts/example.groovy | 20 +++ client/doc/sysmon-client.toml | 3 + .../sysmon/client/ClientRouteBuilder.java | 128 +++++++++++--- .../java/sysmon/client/Configuration.java | 6 + .../java/sysmon/client/ScriptWrapper.java | 40 +++++ plugins/README.md | 5 +- plugins/{os-base => base}/README.md | 0 plugins/{os-base => base}/build.gradle | 0 plugins/{os-base => base}/gradle.properties | 2 +- .../plugins/base}/BaseDiskExtension.java | 8 +- .../base}/BaseFilesystemExtension.java | 8 +- .../plugins/base}/BaseInfoExtension.java | 8 +- .../plugins/base}/BaseLoadExtension.java | 9 +- .../plugins/base}/BaseMemoryExtension.java | 9 +- .../plugins/base}/BaseNetstatExtension.java | 9 +- .../plugins/base}/BaseNetworkExtension.java | 8 +- .../java/sysmon/plugins/base}/BasePlugin.java | 2 +- .../plugins/base}/BaseProcessExtension.java | 8 +- .../plugins/base}/BaseProcessorExtension.java | 9 +- .../src/test/resources/free.txt | 0 .../src/test/resources/meminfo.txt | 0 .../src/test/resources/proc_diskstats1.txt | 0 .../src/test/resources/proc_diskstats2.txt | 0 .../src/test/resources/proc_net_dev1.txt | 0 .../src/test/resources/proc_net_dev2.txt | 0 .../src/test/resources/proc_net_sockstat.txt | 0 .../src/test/resources/proc_stats1.txt | 0 .../src/test/resources/proc_stats2.txt | 0 plugins/os-aix/gradle.properties | 6 - .../java/sysmon/plugins/os_aix/AixPlugin.java | 18 -- plugins/os-ibmi/README.md | 4 - plugins/os-ibmi/build.gradle | 7 - plugins/os-ibmi/gradle.properties | 4 - .../sysmon/plugins/os_ibmi/IbmIPlugin.java | 97 ---------- .../sysmon/plugins/os_ibmi/TestExtension.java | 146 ---------------- plugins/os-linux/README.md | 7 - plugins/os-linux/build.gradle | 2 - plugins/os-linux/gradle.properties | 5 - .../os_linux/LinuxNetstatExtension.java | 109 ------------ .../plugins/os_linux/LinuxNetstatParser.java | 165 ------------------ .../sysmon/plugins/os_linux/LinuxPlugin.java | 17 -- .../os_linux/LinuxSocketExtension.java | 98 ----------- .../plugins/os_linux/LinuxSocketStat.java | 97 ---------- .../src/test/groovy/LinuxNetstatTest.groovy | 26 --- .../src/test/groovy/LinuxNetworkTest.groovy | 29 --- .../src/test/resources/netstat-linux.txt | 112 ------------ .../src/test/resources/proc_net_sockstat.txt | 6 - plugins/{os-aix => power}/README.md | 0 plugins/{os-aix => power}/build.gradle | 0 plugins/power/gradle.properties | 6 + .../sysmon/plugins/power/PowerPlugin.java | 18 ++ .../power/PowerProcessorExtension.java} | 23 +-- .../plugins/power/PowerProcessorStat.java} | 9 +- .../test/groovy/PowerProcessorTest.groovy} | 22 +-- .../lparstat-aix-dedicated-capped.txt | 0 .../lparstat-aix-dedicated-donating.txt | 0 .../test/resources/lparstat-aix-shared.txt | 0 .../src/test/resources/lparstat-linux.txt | 0 .../java/sysmon/shared/MetricExtension.java | 1 - .../main/java/sysmon/shared/MetricScript.java | 7 + 63 files changed, 246 insertions(+), 1086 deletions(-) create mode 100644 client/doc/scripts/README.md create mode 100644 client/doc/scripts/example.groovy create mode 100644 client/src/main/java/sysmon/client/ScriptWrapper.java rename plugins/{os-base => base}/README.md (100%) rename plugins/{os-base => base}/build.gradle (100%) rename plugins/{os-base => base}/gradle.properties (66%) rename plugins/{os-base/src/main/java/sysmon/plugins/os_base => base/src/main/java/sysmon/plugins/base}/BaseDiskExtension.java (95%) rename plugins/{os-base/src/main/java/sysmon/plugins/os_base => base/src/main/java/sysmon/plugins/base}/BaseFilesystemExtension.java (96%) rename plugins/{os-base/src/main/java/sysmon/plugins/os_base => base/src/main/java/sysmon/plugins/base}/BaseInfoExtension.java (94%) rename plugins/{os-base/src/main/java/sysmon/plugins/os_base => base/src/main/java/sysmon/plugins/base}/BaseLoadExtension.java (92%) rename plugins/{os-base/src/main/java/sysmon/plugins/os_base => base/src/main/java/sysmon/plugins/base}/BaseMemoryExtension.java (93%) rename plugins/{os-base/src/main/java/sysmon/plugins/os_base => base/src/main/java/sysmon/plugins/base}/BaseNetstatExtension.java (95%) rename plugins/{os-base/src/main/java/sysmon/plugins/os_base => base/src/main/java/sysmon/plugins/base}/BaseNetworkExtension.java (94%) rename plugins/{os-base/src/main/java/sysmon/plugins/os_base => base/src/main/java/sysmon/plugins/base}/BasePlugin.java (97%) rename plugins/{os-base/src/main/java/sysmon/plugins/os_base => base/src/main/java/sysmon/plugins/base}/BaseProcessExtension.java (96%) rename plugins/{os-base/src/main/java/sysmon/plugins/os_base => base/src/main/java/sysmon/plugins/base}/BaseProcessorExtension.java (95%) rename plugins/{os-base => base}/src/test/resources/free.txt (100%) rename plugins/{os-base => base}/src/test/resources/meminfo.txt (100%) rename plugins/{os-base => base}/src/test/resources/proc_diskstats1.txt (100%) rename plugins/{os-base => base}/src/test/resources/proc_diskstats2.txt (100%) rename plugins/{os-base => base}/src/test/resources/proc_net_dev1.txt (100%) rename plugins/{os-base => base}/src/test/resources/proc_net_dev2.txt (100%) rename plugins/{os-base => base}/src/test/resources/proc_net_sockstat.txt (100%) rename plugins/{os-base => base}/src/test/resources/proc_stats1.txt (100%) rename plugins/{os-base => base}/src/test/resources/proc_stats2.txt (100%) delete mode 100644 plugins/os-aix/gradle.properties delete mode 100644 plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixPlugin.java delete mode 100644 plugins/os-ibmi/README.md delete mode 100644 plugins/os-ibmi/build.gradle delete mode 100644 plugins/os-ibmi/gradle.properties delete mode 100644 plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/IbmIPlugin.java delete mode 100644 plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/TestExtension.java delete mode 100644 plugins/os-linux/README.md delete mode 100644 plugins/os-linux/build.gradle delete mode 100644 plugins/os-linux/gradle.properties delete mode 100644 plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatExtension.java delete mode 100644 plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatParser.java delete mode 100644 plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxPlugin.java delete mode 100644 plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketExtension.java delete mode 100644 plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketStat.java delete mode 100644 plugins/os-linux/src/test/groovy/LinuxNetstatTest.groovy delete mode 100644 plugins/os-linux/src/test/groovy/LinuxNetworkTest.groovy delete mode 100644 plugins/os-linux/src/test/resources/netstat-linux.txt delete mode 100644 plugins/os-linux/src/test/resources/proc_net_sockstat.txt rename plugins/{os-aix => power}/README.md (100%) rename plugins/{os-aix => power}/build.gradle (100%) create mode 100644 plugins/power/gradle.properties create mode 100644 plugins/power/src/main/java/sysmon/plugins/power/PowerPlugin.java rename plugins/{os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorExtension.java => power/src/main/java/sysmon/plugins/power/PowerProcessorExtension.java} (78%) rename plugins/{os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorStat.java => power/src/main/java/sysmon/plugins/power/PowerProcessorStat.java} (96%) rename plugins/{os-aix/src/test/groovy/AixProcessorTest.groovy => power/src/test/groovy/PowerProcessorTest.groovy} (73%) rename plugins/{os-aix => power}/src/test/resources/lparstat-aix-dedicated-capped.txt (100%) rename plugins/{os-aix => power}/src/test/resources/lparstat-aix-dedicated-donating.txt (100%) rename plugins/{os-aix => power}/src/test/resources/lparstat-aix-shared.txt (100%) rename plugins/{os-aix => power}/src/test/resources/lparstat-linux.txt (100%) create mode 100644 shared/src/main/java/sysmon/shared/MetricScript.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 77e7157..96f7cfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. +## [1.1.1] - 2022-12-xx +- Simplify plugin naming + ## [1.1.0] - 2022-12-17 - Lower influx time precision from milliseconds to seconds - requires you to update server and clients to this version. diff --git a/client/build.gradle b/client/build.gradle index 4f6b871..b118c81 100644 --- a/client/build.gradle +++ b/client/build.gradle @@ -23,6 +23,9 @@ dependencies { exclude(group: "org.slf4j") } + //implementation "org.apache.groovy:groovy-all:${groovyVersion}" // From version 4.+ + implementation "org.codehaus.groovy:groovy:${groovyVersion}" + implementation group: 'org.apache.camel', name: 'camel-core', version: camelVersion implementation group: 'org.apache.camel', name: 'camel-main', version: camelVersion implementation group: 'org.apache.camel', name: 'camel-http', version: camelVersion diff --git a/client/doc/scripts/README.md b/client/doc/scripts/README.md new file mode 100644 index 0000000..36fdb27 --- /dev/null +++ b/client/doc/scripts/README.md @@ -0,0 +1,3 @@ +# Example Scripts + +TODO. diff --git a/client/doc/scripts/example.groovy b/client/doc/scripts/example.groovy new file mode 100644 index 0000000..cdcbd01 --- /dev/null +++ b/client/doc/scripts/example.groovy @@ -0,0 +1,20 @@ +import sysmon.shared.MetricResult +import sysmon.shared.MetricScript +import sysmon.shared.Measurement + +class ExampleScript implements MetricScript { + + @Override + MetricResult getMetrics() { + Map tags = new TreeMap<>(); + Map fields = new TreeMap<>(); + + tags.put("location", "blabla"); + fields.put("temp1", 23); + fields.put("temp2", 25); + + Measurement measurement = new Measurement(tags, fields); + return new MetricResult("script_example", measurement); + } + +} diff --git a/client/doc/sysmon-client.toml b/client/doc/sysmon-client.toml index 803aa5b..c66d913 100644 --- a/client/doc/sysmon-client.toml +++ b/client/doc/sysmon-client.toml @@ -4,6 +4,9 @@ ### Example configuration with some default values. ### +# Local path for Groovy scripts +scripts = "/opt/sysmon/scripts" + [extension.base_info] enabled = true interval = '60m' diff --git a/client/src/main/java/sysmon/client/ClientRouteBuilder.java b/client/src/main/java/sysmon/client/ClientRouteBuilder.java index 033d0be..a6e1a54 100644 --- a/client/src/main/java/sysmon/client/ClientRouteBuilder.java +++ b/client/src/main/java/sysmon/client/ClientRouteBuilder.java @@ -14,15 +14,25 @@ import sysmon.shared.ComboResult; import sysmon.shared.MetricExtension; import sysmon.shared.MetricResult; +import javax.script.*; +import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class ClientRouteBuilder extends RouteBuilder { private static final Logger log = LoggerFactory.getLogger(ClientRouteBuilder.class); + private final Set scriptFiles = new HashSet<>(); + + @Override public void configure() { @@ -34,12 +44,9 @@ public class ClientRouteBuilder extends RouteBuilder { pluginManager.loadPlugins(); pluginManager.startPlugins(); - List providers = new ArrayList<>(); List metricExtensions = pluginManager.getExtensions(MetricExtension.class); for (MetricExtension ext : metricExtensions) { - final String name = ext.getName(); - final String provides = ext.getProvides(); // Load configuration if available if(configuration.isForExtension(name)) { @@ -48,33 +55,10 @@ public class ClientRouteBuilder extends RouteBuilder { } if(ext.isSupported() && ext.isEnabled()) { - - if(providers.contains(provides)) { - log.warn("Skipping extension (already provided): " + ext.getName()); - continue; - } - - log.info("Enabling extension: " + ext.getDescription()); - providers.add(provides); - - // Setup Camel route for this extension - // a unique timer name gives the timer it's own thread, otherwise it's a shared thread for other timers with same name. - String timerName = ext.isThreaded() ? ext.getProvides() : "default"; - String timerInterval = (ext.getInterval() != null) ? ext.getInterval() : "30s"; - from("timer:"+timerName+"?fixedRate=true&period="+timerInterval) - .bean(ext, "getMetrics") - .outputType(MetricResult.class) - .process(new MetricEnrichProcessor(registry)) - .choice().when(exchangeProperty("skip").isEqualTo(true)) - .log(LoggingLevel.WARN,"Skipping empty measurement.") - .stop() - .otherwise() - .log("${body}") - .to("seda:metrics?discardWhenFull=true"); + addExtensionRoute(ext); } else { log.info("Skipping extension (not supported or disabled): " + ext.getDescription()); } - } from("seda:metrics?purgeWhenStopping=true") @@ -97,7 +81,97 @@ public class ClientRouteBuilder extends RouteBuilder { .log(LoggingLevel.WARN,"Error: ${exception.message}.") .end(); + // Find all local scripts + String scriptsPath = configuration.getScriptPath(); + if(scriptsPath != null && Files.isDirectory(Paths.get(scriptsPath))) { + try { + scriptFiles.addAll(listFilesByExtension(scriptsPath, "groovy")); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + // Enable the local scripts + for (String scriptFile : scriptFiles) { + try { + ScriptWrapper scriptWrapper = new ScriptWrapper(scriptsPath, scriptFile); + addScriptRoute(scriptWrapper); + } catch(Exception e) { + log.error("configure() - script error: {}", e.getMessage()); + } + } + } + void addScriptRoute(ScriptWrapper script) { + Registry registry = getContext().getRegistry(); + + from("timer:scripts?fixedRate=true&period=30s") + .bean(script, "run") + .outputType(MetricResult.class) + .process(new MetricEnrichProcessor(registry)) + .choice().when(exchangeProperty("skip").isEqualTo(true)) + .log(LoggingLevel.WARN, "Skipping empty measurement.") + .stop() + .otherwise() + .log("${body}") + .to("seda:metrics?discardWhenFull=true"); + } + + + void addExtensionRoute(MetricExtension ext) { + + Registry registry = getContext().getRegistry(); + + // Setup Camel route for this extension + // a unique timer name gives the timer it's own thread, otherwise it's a shared thread for other timers with same name. + String timerName = ext.isThreaded() ? ext.getName() : "default"; + String timerInterval = (ext.getInterval() != null) ? ext.getInterval() : "30s"; + from("timer:" + timerName + "?fixedRate=true&period=" + timerInterval) + .bean(ext, "getMetrics") + .outputType(MetricResult.class) + .process(new MetricEnrichProcessor(registry)) + .choice().when(exchangeProperty("skip").isEqualTo(true)) + .log(LoggingLevel.WARN, "Skipping empty measurement.") + .stop() + .otherwise() + .log("${body}") + .to("seda:metrics?discardWhenFull=true"); + } + + + List findScripts(String location) { + log.info("Looking for scripts in: {}", location); + List scripts = new ArrayList<>(); + ScriptEngineManager manager = new ScriptEngineManager(); + List factoryList = manager.getEngineFactories(); + for (ScriptEngineFactory factory : factoryList) { + log.info("findScripts() - Supporting: {}", factory.getLanguageName()); + for(String ex : factory.getExtensions()) { + log.info("findScripts() - Extension: {}", ex); + try { + scripts.addAll(listFilesByExtension(location, ex)); + log.warn(scripts.toString()); + } catch (IOException e) { + throw new RuntimeException(e); + } + + } + } + return scripts; + } + + + Set listFilesByExtension(String dir, String ext) throws IOException { + try (Stream stream = Files.list(Paths.get(dir))) { + return stream + .filter(file -> !Files.isDirectory(file)) + .map(Path::getFileName) + .map(Path::toString) + .filter(s -> s.endsWith(ext)) + .collect(Collectors.toSet()); + } + } + } diff --git a/client/src/main/java/sysmon/client/Configuration.java b/client/src/main/java/sysmon/client/Configuration.java index bc07038..6f2899c 100644 --- a/client/src/main/java/sysmon/client/Configuration.java +++ b/client/src/main/java/sysmon/client/Configuration.java @@ -65,4 +65,10 @@ public final class Configuration { return map; } + + String getScriptPath() { + return result.getString("scripts"); + } + + } diff --git a/client/src/main/java/sysmon/client/ScriptWrapper.java b/client/src/main/java/sysmon/client/ScriptWrapper.java new file mode 100644 index 0000000..9b53a33 --- /dev/null +++ b/client/src/main/java/sysmon/client/ScriptWrapper.java @@ -0,0 +1,40 @@ +package sysmon.client; + +import groovy.lang.GroovyClassLoader; +import groovy.lang.GroovyObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import sysmon.shared.MetricResult; +import sysmon.shared.MetricScript; + +import java.io.File; +import java.io.IOException; + +public class ScriptWrapper { + + private static final Logger log = LoggerFactory.getLogger(ScriptWrapper.class); + + private final static GroovyClassLoader loader = new GroovyClassLoader(); + + private GroovyObject script; + + public ScriptWrapper(String scriptPath, String scriptFile) { + try { + Class scriptClass = loader.parseClass(new File(scriptPath, scriptFile)); + script = (GroovyObject) scriptClass.newInstance(); + } catch (IOException |InstantiationException | IllegalAccessException e) { + log.error("ScriptWrapper() - error: {}", e.getMessage()); + } + } + + + MetricResult run() { + MetricResult result = null; + if (script != null && script instanceof MetricScript) { + result = (MetricResult) script.invokeMethod("getMetrics", null); + } + return result; + } + + +} diff --git a/plugins/README.md b/plugins/README.md index 637c8db..9da9907 100644 --- a/plugins/README.md +++ b/plugins/README.md @@ -2,6 +2,5 @@ Collection of standard sysmon plugins for use with the client. -- [base](os-base/README.md) - Base OS metrics (uses [oshi](https://github.com/oshi/oshi)) -- [aix](os-aix/README.md) - AIX (and IBM Power) specific metrics -- [linux](os-linux/README.md) - Linux specific metrics +- [base](base/README.md) - Base OS metrics (uses [oshi](https://github.com/oshi/oshi)) +- [power](power/README.md) - IBM Power specific metrics diff --git a/plugins/os-base/README.md b/plugins/base/README.md similarity index 100% rename from plugins/os-base/README.md rename to plugins/base/README.md diff --git a/plugins/os-base/build.gradle b/plugins/base/build.gradle similarity index 100% rename from plugins/os-base/build.gradle rename to plugins/base/build.gradle diff --git a/plugins/os-base/gradle.properties b/plugins/base/gradle.properties similarity index 66% rename from plugins/os-base/gradle.properties rename to plugins/base/gradle.properties index db66d99..d7968e2 100644 --- a/plugins/os-base/gradle.properties +++ b/plugins/base/gradle.properties @@ -1,5 +1,5 @@ pluginId=sysmon-base -pluginClass=sysmon.plugins.os_base.BasePlugin +pluginClass=sysmon.plugins.base.BasePlugin pluginDependencies= pluginDescription=Base OS metrics where supported. diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseDiskExtension.java b/plugins/base/src/main/java/sysmon/plugins/base/BaseDiskExtension.java similarity index 95% rename from plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseDiskExtension.java rename to plugins/base/src/main/java/sysmon/plugins/base/BaseDiskExtension.java index 9703cd1..d847f2d 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseDiskExtension.java +++ b/plugins/base/src/main/java/sysmon/plugins/base/BaseDiskExtension.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_base; +package sysmon.plugins.base; import org.pf4j.Extension; import org.slf4j.Logger; @@ -18,7 +18,6 @@ public class BaseDiskExtension implements MetricExtension { // Extension details private final String name = "base_disk"; - private final String provides = "disk"; private final String description = "Base Disk Metrics"; // Configuration / Options @@ -57,11 +56,6 @@ public class BaseDiskExtension implements MetricExtension { return interval; } - @Override - public String getProvides() { - return provides; - } - @Override public String getDescription() { return description; diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseFilesystemExtension.java b/plugins/base/src/main/java/sysmon/plugins/base/BaseFilesystemExtension.java similarity index 96% rename from plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseFilesystemExtension.java rename to plugins/base/src/main/java/sysmon/plugins/base/BaseFilesystemExtension.java index f6c460b..a1495c4 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseFilesystemExtension.java +++ b/plugins/base/src/main/java/sysmon/plugins/base/BaseFilesystemExtension.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_base; +package sysmon.plugins.base; import org.pf4j.Extension; import org.slf4j.Logger; @@ -19,7 +19,6 @@ public class BaseFilesystemExtension implements MetricExtension { // Extension details private final String name = "base_filesystem"; - private final String provides = "filesystem"; private final String description = "Base Filesystem Metrics"; // Configuration / Options @@ -67,11 +66,6 @@ public class BaseFilesystemExtension implements MetricExtension { return interval; } - @Override - public String getProvides() { - return provides; - } - @Override public String getDescription() { return description; diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseInfoExtension.java b/plugins/base/src/main/java/sysmon/plugins/base/BaseInfoExtension.java similarity index 94% rename from plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseInfoExtension.java rename to plugins/base/src/main/java/sysmon/plugins/base/BaseInfoExtension.java index f9acbca..aa3fdd6 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseInfoExtension.java +++ b/plugins/base/src/main/java/sysmon/plugins/base/BaseInfoExtension.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_base; +package sysmon.plugins.base; import org.pf4j.Extension; import org.slf4j.Logger; @@ -19,7 +19,6 @@ public class BaseInfoExtension implements MetricExtension { // Extension details private final String name = "base_info"; - private final String provides = "info"; private final String description = "Base System Information"; // Configuration / Options @@ -52,11 +51,6 @@ public class BaseInfoExtension implements MetricExtension { return name; } - @Override - public String getProvides() { - return provides; - } - @Override public String getInterval() { return interval; } diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseLoadExtension.java b/plugins/base/src/main/java/sysmon/plugins/base/BaseLoadExtension.java similarity index 92% rename from plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseLoadExtension.java rename to plugins/base/src/main/java/sysmon/plugins/base/BaseLoadExtension.java index 038d7f1..7e61a77 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseLoadExtension.java +++ b/plugins/base/src/main/java/sysmon/plugins/base/BaseLoadExtension.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_base; +package sysmon.plugins.base; import org.pf4j.Extension; import org.slf4j.Logger; @@ -8,7 +8,6 @@ import sysmon.shared.Measurement; import sysmon.shared.MetricExtension; import sysmon.shared.MetricResult; -import java.util.HashMap; import java.util.Map; import java.util.TreeMap; @@ -19,7 +18,6 @@ public class BaseLoadExtension implements MetricExtension { // Extension details private final String name = "base_load"; - private final String provides = "load"; private final String description = "Base Load Average Metrics"; // Configuration / Options @@ -55,11 +53,6 @@ public class BaseLoadExtension implements MetricExtension { return interval; } - @Override - public String getProvides() { - return provides; - } - @Override public String getDescription() { return description; diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseMemoryExtension.java b/plugins/base/src/main/java/sysmon/plugins/base/BaseMemoryExtension.java similarity index 93% rename from plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseMemoryExtension.java rename to plugins/base/src/main/java/sysmon/plugins/base/BaseMemoryExtension.java index 81dc523..5a2f267 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseMemoryExtension.java +++ b/plugins/base/src/main/java/sysmon/plugins/base/BaseMemoryExtension.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_base; +package sysmon.plugins.base; import org.pf4j.Extension; import org.slf4j.Logger; @@ -8,7 +8,6 @@ import sysmon.shared.Measurement; import sysmon.shared.MetricExtension; import sysmon.shared.MetricResult; -import java.util.HashMap; import java.util.Map; import java.util.TreeMap; @@ -19,7 +18,6 @@ public class BaseMemoryExtension implements MetricExtension { // Extension details private final String name = "base_memory"; - private final String provides = "memory"; private final String description = "Base Memory Metrics"; // Configuration / Options @@ -56,11 +54,6 @@ public class BaseMemoryExtension implements MetricExtension { return interval; } - @Override - public String getProvides() { - return provides; - } - @Override public String getDescription() { return description; diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetstatExtension.java b/plugins/base/src/main/java/sysmon/plugins/base/BaseNetstatExtension.java similarity index 95% rename from plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetstatExtension.java rename to plugins/base/src/main/java/sysmon/plugins/base/BaseNetstatExtension.java index 1aea883..9c728cc 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetstatExtension.java +++ b/plugins/base/src/main/java/sysmon/plugins/base/BaseNetstatExtension.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_base; +package sysmon.plugins.base; import org.pf4j.Extension; import org.slf4j.Logger; @@ -8,7 +8,6 @@ import sysmon.shared.Measurement; import sysmon.shared.MetricExtension; import sysmon.shared.MetricResult; -import java.util.HashMap; import java.util.Map; import java.util.TreeMap; @@ -19,7 +18,6 @@ public class BaseNetstatExtension implements MetricExtension { // Extension details private final String name = "base_netstat"; - private final String provides = "netstat"; private final String description = "Base Netstat Metrics"; // Configuration / Options @@ -56,11 +54,6 @@ public class BaseNetstatExtension implements MetricExtension { return interval; } - @Override - public String getProvides() { - return provides; - } - @Override public String getDescription() { return description; diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetworkExtension.java b/plugins/base/src/main/java/sysmon/plugins/base/BaseNetworkExtension.java similarity index 94% rename from plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetworkExtension.java rename to plugins/base/src/main/java/sysmon/plugins/base/BaseNetworkExtension.java index d9b84c3..e52d628 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseNetworkExtension.java +++ b/plugins/base/src/main/java/sysmon/plugins/base/BaseNetworkExtension.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_base; +package sysmon.plugins.base; import org.pf4j.Extension; import org.slf4j.Logger; @@ -18,7 +18,6 @@ public class BaseNetworkExtension implements MetricExtension { // Extension details private final String name = "base_network"; - private final String provides = "network"; private final String description = "Base Network Metrics"; // Configuration / Options @@ -57,11 +56,6 @@ public class BaseNetworkExtension implements MetricExtension { return interval; } - @Override - public String getProvides() { - return provides; - } - @Override public String getDescription() { return description; diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BasePlugin.java b/plugins/base/src/main/java/sysmon/plugins/base/BasePlugin.java similarity index 97% rename from plugins/os-base/src/main/java/sysmon/plugins/os_base/BasePlugin.java rename to plugins/base/src/main/java/sysmon/plugins/base/BasePlugin.java index 864205e..c8a9c5d 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BasePlugin.java +++ b/plugins/base/src/main/java/sysmon/plugins/base/BasePlugin.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_base; +package sysmon.plugins.base; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessExtension.java b/plugins/base/src/main/java/sysmon/plugins/base/BaseProcessExtension.java similarity index 96% rename from plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessExtension.java rename to plugins/base/src/main/java/sysmon/plugins/base/BaseProcessExtension.java index 19fa71f..efdf0df 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessExtension.java +++ b/plugins/base/src/main/java/sysmon/plugins/base/BaseProcessExtension.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_base; +package sysmon.plugins.base; import org.pf4j.Extension; import org.slf4j.Logger; @@ -18,7 +18,6 @@ public class BaseProcessExtension implements MetricExtension { // Extension details private final String name = "base_process"; - private final String provides = "process"; private final String description = "Base Process Metrics"; // Configuration / Options @@ -75,11 +74,6 @@ public class BaseProcessExtension implements MetricExtension { return interval; } - @Override - public String getProvides() { - return provides; - } - @Override public String getDescription() { return description; diff --git a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessorExtension.java b/plugins/base/src/main/java/sysmon/plugins/base/BaseProcessorExtension.java similarity index 95% rename from plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessorExtension.java rename to plugins/base/src/main/java/sysmon/plugins/base/BaseProcessorExtension.java index 994d18b..545a053 100644 --- a/plugins/os-base/src/main/java/sysmon/plugins/os_base/BaseProcessorExtension.java +++ b/plugins/base/src/main/java/sysmon/plugins/base/BaseProcessorExtension.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_base; +package sysmon.plugins.base; import org.pf4j.Extension; import org.slf4j.Logger; @@ -10,7 +10,6 @@ import sysmon.shared.MetricExtension; import sysmon.shared.MetricResult; import sysmon.shared.PluginHelper; -import java.util.HashMap; import java.util.Map; import java.util.TreeMap; @@ -21,7 +20,6 @@ public class BaseProcessorExtension implements MetricExtension { // Extension details private final String name = "base_processor"; - private final String provides = "processor"; private final String description = "Base Processor Metrics"; // Configuration / Options @@ -58,11 +56,6 @@ public class BaseProcessorExtension implements MetricExtension { return interval; } - @Override - public String getProvides() { - return provides; - } - @Override public String getDescription() { return description; diff --git a/plugins/os-base/src/test/resources/free.txt b/plugins/base/src/test/resources/free.txt similarity index 100% rename from plugins/os-base/src/test/resources/free.txt rename to plugins/base/src/test/resources/free.txt diff --git a/plugins/os-base/src/test/resources/meminfo.txt b/plugins/base/src/test/resources/meminfo.txt similarity index 100% rename from plugins/os-base/src/test/resources/meminfo.txt rename to plugins/base/src/test/resources/meminfo.txt diff --git a/plugins/os-base/src/test/resources/proc_diskstats1.txt b/plugins/base/src/test/resources/proc_diskstats1.txt similarity index 100% rename from plugins/os-base/src/test/resources/proc_diskstats1.txt rename to plugins/base/src/test/resources/proc_diskstats1.txt diff --git a/plugins/os-base/src/test/resources/proc_diskstats2.txt b/plugins/base/src/test/resources/proc_diskstats2.txt similarity index 100% rename from plugins/os-base/src/test/resources/proc_diskstats2.txt rename to plugins/base/src/test/resources/proc_diskstats2.txt diff --git a/plugins/os-base/src/test/resources/proc_net_dev1.txt b/plugins/base/src/test/resources/proc_net_dev1.txt similarity index 100% rename from plugins/os-base/src/test/resources/proc_net_dev1.txt rename to plugins/base/src/test/resources/proc_net_dev1.txt diff --git a/plugins/os-base/src/test/resources/proc_net_dev2.txt b/plugins/base/src/test/resources/proc_net_dev2.txt similarity index 100% rename from plugins/os-base/src/test/resources/proc_net_dev2.txt rename to plugins/base/src/test/resources/proc_net_dev2.txt diff --git a/plugins/os-base/src/test/resources/proc_net_sockstat.txt b/plugins/base/src/test/resources/proc_net_sockstat.txt similarity index 100% rename from plugins/os-base/src/test/resources/proc_net_sockstat.txt rename to plugins/base/src/test/resources/proc_net_sockstat.txt diff --git a/plugins/os-base/src/test/resources/proc_stats1.txt b/plugins/base/src/test/resources/proc_stats1.txt similarity index 100% rename from plugins/os-base/src/test/resources/proc_stats1.txt rename to plugins/base/src/test/resources/proc_stats1.txt diff --git a/plugins/os-base/src/test/resources/proc_stats2.txt b/plugins/base/src/test/resources/proc_stats2.txt similarity index 100% rename from plugins/os-base/src/test/resources/proc_stats2.txt rename to plugins/base/src/test/resources/proc_stats2.txt diff --git a/plugins/os-aix/gradle.properties b/plugins/os-aix/gradle.properties deleted file mode 100644 index 300c5af..0000000 --- a/plugins/os-aix/gradle.properties +++ /dev/null @@ -1,6 +0,0 @@ -pluginId=sysmon-aix -pluginClass=sysmon.plugins.os_aix.AixPlugin -pluginVersion=0.0.1 -pluginProvider=System Monitor -pluginDependencies= -pluginDescription=Collects AIX OS metrics. \ No newline at end of file diff --git a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixPlugin.java b/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixPlugin.java deleted file mode 100644 index 1469eb3..0000000 --- a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixPlugin.java +++ /dev/null @@ -1,18 +0,0 @@ -package sysmon.plugins.os_aix; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.pf4j.Plugin; -import org.pf4j.PluginWrapper; - -public class AixPlugin extends Plugin { - - private static final Logger log = LoggerFactory.getLogger(AixPlugin.class); - - public AixPlugin(PluginWrapper wrapper) { - super(wrapper); - } - -} - - diff --git a/plugins/os-ibmi/README.md b/plugins/os-ibmi/README.md deleted file mode 100644 index c191c34..0000000 --- a/plugins/os-ibmi/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# IBM i Plugin - -This is just for testing purposes. - diff --git a/plugins/os-ibmi/build.gradle b/plugins/os-ibmi/build.gradle deleted file mode 100644 index 5cc4451..0000000 --- a/plugins/os-ibmi/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -plugins { -} - -dependencies { - // https://sourceforge.net/projects/jt400/ and http://jt400.sourceforge.net/ - implementation group: 'net.sf.jt400', name: 'jt400', version: '11.0' -} diff --git a/plugins/os-ibmi/gradle.properties b/plugins/os-ibmi/gradle.properties deleted file mode 100644 index 18a185f..0000000 --- a/plugins/os-ibmi/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -pluginId=sysmon-ibmi -pluginClass=sysmon.plugins.os_ibmi.IbmIPlugin -pluginDependencies= -pluginDescription=Collects IBM-i OS metrics. \ No newline at end of file diff --git a/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/IbmIPlugin.java b/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/IbmIPlugin.java deleted file mode 100644 index 74cf25f..0000000 --- a/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/IbmIPlugin.java +++ /dev/null @@ -1,97 +0,0 @@ -package sysmon.plugins.os_ibmi; - -import com.ibm.as400.access.AS400; -import com.ibm.as400.access.SystemStatus; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.pf4j.Plugin; -import org.pf4j.PluginWrapper; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; - -public class IbmIPlugin extends Plugin { - - private static final Logger log = LoggerFactory.getLogger(IbmIPlugin.class); - - private static AS400 as400; - private static SystemStatus systemStatus; - private static Connection connection; - - - public IbmIPlugin(PluginWrapper wrapper) { - super(wrapper); - } - - public static AS400 getAS400() { - - if(as400 != null) { - return as400; - } - - // Check platform - String osArch = System.getProperty("os.arch").toLowerCase(); - String osName = System.getProperty("os.name").toLowerCase(); - if(!osArch.equals("ppc64") && !osName.equals("os/400")) { - log.info("getAS400() - OS Arch: {}", osArch); - log.info("getAS400() - OS Name: {}", osName); - return null; - } - - try { - as400 = new AS400("localhost", "*CURRENT"); - //as400 = new AS400("localhost", "*LOCAL"); - //as400 = new AS400("10.32.64.142"); - return as400; - } catch (Exception exception) { - log.error("getAS400() - {}", exception.getMessage()); - } - - return null; - } - - - public static SystemStatus getSystemStatus() { - - if(systemStatus != null) { - return systemStatus; - } - - try { - if (as400 == null) { - as400 = IbmIPlugin.getAS400(); - } - if(systemStatus == null && as400 != null) { - systemStatus = new SystemStatus(as400); - return systemStatus; - } - } catch (Exception exception) { - log.error("getSystemStatus() - {}", exception.getMessage()); - } - - return null; - } - - - public static Connection getConnection() { - - if(connection != null) { - return connection; - } - - try { - DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver()); - connection = DriverManager.getConnection("jdbc:as400://localhost"); - return connection; - } catch (SQLException exception) { - log.error("getConnection() - {}", exception.getMessage()); - } - - return null; - } - - -} - - diff --git a/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/TestExtension.java b/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/TestExtension.java deleted file mode 100644 index 8a7b7fd..0000000 --- a/plugins/os-ibmi/src/main/java/sysmon/plugins/os_ibmi/TestExtension.java +++ /dev/null @@ -1,146 +0,0 @@ -package sysmon.plugins.os_ibmi; - -import com.ibm.as400.access.*; -import org.pf4j.Extension; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import sysmon.shared.Measurement; -import sysmon.shared.MetricExtension; -import sysmon.shared.MetricResult; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.TreeMap; - -//@Extension -public class TestExtension implements MetricExtension { - - private static final Logger log = LoggerFactory.getLogger(TestExtension.class); - - // Extension details - private final String name = "ibmi_test"; - private final String provides = "ibmi_test"; - private final String description = "IBM i Test Metrics"; - - // Configuration / Options - private boolean enabled = true; - private boolean threaded = false; - private String interval = "10s"; - - private SystemStatus systemStatus; - - - @Override - public boolean isEnabled() { - return enabled; - } - - @Override - public boolean isThreaded() { - return threaded; - } - - @Override - public boolean isSupported() { - systemStatus = IbmIPlugin.getSystemStatus(); - return systemStatus != null; - } - - @Override - public String getName() { - return name; - } - - @Override - public String getInterval() { - return interval; - } - - @Override - public String getProvides() { - return provides; - } - - @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(systemStatus == null) { - log.warn("getMetrics() - no system or status"); - return null; - } - - /* const hSql = "select - SERVER_NAME, - HTTP_FUNCTION, - SERVER_NORMAL_CONNECTIONS, - SERVER_ACTIVE_THREADS, - SERVER_IDLE_THREADS, - BYTES_RECEIVED, - BYTES_SENT, - NONCACHE_PROCESSING_TIME, - CACHE_PROCESSING_TIME - from - QSYS2.HTTP_SERVER_INFO"; - */ - - try { - int jobsInSystem = systemStatus.getJobsInSystem(); - log.info("Jobs In System: {}", jobsInSystem); - - int batchJobsRunning = systemStatus.getBatchJobsRunning(); - log.info("Batch Jobs Running: {}", batchJobsRunning); - - int activeThreads = systemStatus.getActiveThreadsInSystem(); - log.info("Active Threads: {}", activeThreads); - - int activeJobs = systemStatus.getActiveJobsInSystem(); - log.info("Active Jobs: {}", activeJobs); - - int onlineUsers = systemStatus.getUsersCurrentSignedOn(); - log.info("Online Users: {}", onlineUsers); - - // The storage capacity of the system auxiliary storage pool (ASP1) in MBytes. - long systemAsp = systemStatus.getSystemASP(); - - System.out.println("Current Processing Capacity :" + systemStatus.getCurrentProcessingCapacity()); - System.out.println("ASPUsed:" + systemStatus.getPercentSystemASPUsed()); - System.out.println("Temp Addresses Used:" + systemStatus.getPercentTemporaryAddresses()); - - - TreeMap fieldsMap = new TreeMap() {{ - put("jobs_total", jobsInSystem); - put("jobs_running", batchJobsRunning); - put("jobs_active", activeJobs); - put("threads", activeThreads); - put("users", onlineUsers); - - }}; - return new MetricResult(name, new Measurement(new TreeMap<>(), fieldsMap)); - - } catch (AS400SecurityException | ErrorCompletingRequestException | InterruptedException | IOException | ObjectDoesNotExistException e) { - log.error("getMetrics() {}", e.getMessage()); - e.printStackTrace(); - } - - return null; - } -} diff --git a/plugins/os-linux/README.md b/plugins/os-linux/README.md deleted file mode 100644 index 1b6412a..0000000 --- a/plugins/os-linux/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Linux Plugins - -## Components - -### Network Sockets - -Collects statistics from */proc/net/sockstats*. diff --git a/plugins/os-linux/build.gradle b/plugins/os-linux/build.gradle deleted file mode 100644 index d18c3d3..0000000 --- a/plugins/os-linux/build.gradle +++ /dev/null @@ -1,2 +0,0 @@ -plugins { -} \ No newline at end of file diff --git a/plugins/os-linux/gradle.properties b/plugins/os-linux/gradle.properties deleted file mode 100644 index 8f02aac..0000000 --- a/plugins/os-linux/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -pluginId=sysmon-linux -pluginClass=sysmon.plugins.os_linux.LinuxPlugin -pluginDependencies= -pluginDescription=Linux OS Metrics. - diff --git a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatExtension.java b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatExtension.java deleted file mode 100644 index a1bf049..0000000 --- a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatExtension.java +++ /dev/null @@ -1,109 +0,0 @@ -package sysmon.plugins.os_linux; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import sysmon.shared.Measurement; -import sysmon.shared.MetricExtension; -import sysmon.shared.MetricResult; -import sysmon.shared.PluginHelper; - -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; -import java.util.TreeMap; - -// Disabled -//@Extension -public class LinuxNetstatExtension implements MetricExtension { - - private static final Logger log = LoggerFactory.getLogger(LinuxNetstatExtension.class); - - // Extension details - private final String name = "linux_network_netstat"; - private final String provides = "network_netstat"; - private final String description = "Linux Netstat Metrics"; - - // Configuration / Options - private boolean enabled = true; - private boolean threaded = false; - - - @Override - public boolean isEnabled() { - return enabled; - } - - @Override - public boolean isThreaded() { - return threaded; - } - - @Override - public boolean isSupported() { - - if(!System.getProperty("os.name").toLowerCase().contains("linux")) { - log.warn("Requires Linux."); - return false; - } - - if(PluginHelper.notExecutable("netstat")) { - log.warn("Requires the 'netstat' command."); - return false; - } - - return true; - } - - @Override - public String getName() { - return name; - } - - @Override - public String getInterval() { - return null; - } - - @Override - public String getProvides() { - return provides; - } - - @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"); - } - } - - @Override - public MetricResult getMetrics() throws Exception { - - TreeMap tagsMap; - TreeMap fieldsMap; - - try (InputStream inputStream = PluginHelper.executeCommand("netstat -s")) { - LinuxNetstatParser parser = processCommandOutput(inputStream); - tagsMap = parser.getTags(); - fieldsMap = parser.getFields(); - } - - return new MetricResult(name, new Measurement(tagsMap, fieldsMap)); - } - - - protected LinuxNetstatParser processCommandOutput(InputStream input) throws IOException { - return new LinuxNetstatParser(input); - } - -} - diff --git a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatParser.java b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatParser.java deleted file mode 100644 index f351a67..0000000 --- a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxNetstatParser.java +++ /dev/null @@ -1,165 +0,0 @@ -package sysmon.plugins.os_linux; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.HashMap; -import java.util.TreeMap; - -public class LinuxNetstatParser { - - private static final Logger log = LoggerFactory.getLogger(LinuxNetstatParser.class); - - private long ipTotalPacketsReceived; - private long ipForwarded; - private long ipIncomingPacketsDiscarded; - private long ipOutgoingPacketsDropped; - - private long tcpConnectionsEstablished; - private long tcpSegmentsReceived; - private long tcpSegmentsSent; - - private long udpPacketsReceived; - private long udpPacketsSent; - - - public LinuxNetstatParser(InputStream inputStream) throws IOException { - - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - while (reader.ready()) { - String line = reader.readLine(); - log.debug("LinuxNetstatParser() - Line: " + line); - - if(line.startsWith("Ip:")) { - parseIp(reader); - } - - if(line.startsWith("Tcp:")) { - parseTcp(reader); - } - - if(line.startsWith("Udp:")) { - parseUdp(reader); - } - - } - - inputStream.close(); - } - - - protected void parseIp(BufferedReader reader) throws IOException { - - while (reader.ready()) { - reader.mark(64); - String line = reader.readLine(); - - if(!line.startsWith(" ")) { - reader.reset(); - return; - } - - line = line.trim(); - - if(line.matches("(\\d+) total packets received")) { - ipTotalPacketsReceived = getFirstLong(line); - } - - if(line.matches("(\\d+) forwarded")) { - ipForwarded = getFirstLong(line); - } - - if(line.matches("(\\d+) incoming packets discarded")) { - ipIncomingPacketsDiscarded = getFirstLong(line); - } - - if(line.matches("(\\d+) outgoing packets dropped")) { - ipOutgoingPacketsDropped = getFirstLong(line); - } - - } - - } - - - protected void parseTcp(BufferedReader reader) throws IOException { - - while (reader.ready()) { - reader.mark(64); - String line = reader.readLine(); - - if(!line.startsWith(" ")) { - reader.reset(); - return; - } - - line = line.trim(); - - if(line.matches("(\\d+) connections established")) { - tcpConnectionsEstablished = getFirstLong(line); - } - - if(line.matches("(\\d+) segments received")) { - tcpSegmentsReceived = getFirstLong(line); - } - - if(line.matches("(\\d+) segments sent out")) { - tcpSegmentsSent = getFirstLong(line); - } - - } - - } - - protected void parseUdp(BufferedReader reader) throws IOException { - - while (reader.ready()) { - reader.mark(64); - String line = reader.readLine(); - - if(!line.startsWith(" ")) { - reader.reset(); - return; - } - - line = line.trim(); - - if(line.matches("(\\d+) packets received")) { - udpPacketsReceived = getFirstLong(line); - } - - if(line.matches("(\\d+) packets sent")) { - udpPacketsSent = getFirstLong(line); - } - } - - } - - - public TreeMap getTags() { - return new TreeMap<>(); - } - - public TreeMap getFields() { - return new TreeMap() {{ - put("ip_forwarded", ipForwarded); - put("ip_received", ipTotalPacketsReceived); - put("ip_dropped", ipOutgoingPacketsDropped); - put("ip_discarded", ipIncomingPacketsDiscarded); - put("tcp_connections", tcpConnectionsEstablished); - put("tcp_pkts_recv", tcpSegmentsReceived); - put("tcp_pkts_sent", tcpSegmentsSent); - put("udp_pkts_recv", udpPacketsReceived); - put("udp_pkts_sent", udpPacketsSent); - }}; - } - - private Long getFirstLong(String line) { - return Long.parseLong(line.substring(0, line.indexOf(" "))); - } - -} diff --git a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxPlugin.java b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxPlugin.java deleted file mode 100644 index d124e00..0000000 --- a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxPlugin.java +++ /dev/null @@ -1,17 +0,0 @@ -package sysmon.plugins.os_linux; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.pf4j.Plugin; -import org.pf4j.PluginWrapper; - - -public class LinuxPlugin extends Plugin { - - private static final Logger log = LoggerFactory.getLogger(LinuxPlugin.class); - - public LinuxPlugin(PluginWrapper wrapper) { - super(wrapper); - } - -} diff --git a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketExtension.java b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketExtension.java deleted file mode 100644 index 3428ff7..0000000 --- a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketExtension.java +++ /dev/null @@ -1,98 +0,0 @@ -package sysmon.plugins.os_linux; - -import org.pf4j.Extension; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import sysmon.shared.Measurement; -import sysmon.shared.MetricExtension; -import sysmon.shared.MetricResult; -import sysmon.shared.PluginHelper; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -@Extension -public class LinuxSocketExtension implements MetricExtension { - - private static final Logger log = LoggerFactory.getLogger(LinuxSocketExtension.class); - - // Extension details - private final String name = "linux_network_sockets"; - private final String provides = "network_sockets"; - private final String description = "Linux Network Socket Metrics"; - - // Configuration / Options - private boolean enabled = true; - private boolean threaded = false; - - - @Override - public boolean isEnabled() { - return enabled; - } - - @Override - public boolean isThreaded() { - return threaded; - } - - @Override - public boolean isSupported() { - - if(!System.getProperty("os.name").toLowerCase().contains("linux")) { - log.debug("Requires Linux."); - return false; - } - - return true; - } - - @Override - public String getName() { - return name; - } - - @Override - public String getInterval() { - return null; - } - - @Override - public String getProvides() { - return provides; - } - - @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"); - } - } - - @Override - public MetricResult getMetrics() { - - LinuxSocketStat sockStat = processSockOutput(PluginHelper.readFile("/proc/net/sockstat")); - - TreeMap tagsMap = sockStat.getTags(); - TreeMap fieldsMap = sockStat.getFields(); - - log.debug("getMetrics() - tags: {}, fields: {}", tagsMap, fieldsMap); - return new MetricResult(name, new Measurement(tagsMap, fieldsMap)); - } - - protected LinuxSocketStat processSockOutput(List inputLines) { - return new LinuxSocketStat(inputLines); - } - -} diff --git a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketStat.java b/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketStat.java deleted file mode 100644 index eb7326c..0000000 --- a/plugins/os-linux/src/main/java/sysmon/plugins/os_linux/LinuxSocketStat.java +++ /dev/null @@ -1,97 +0,0 @@ -package sysmon.plugins.os_linux; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashMap; -import java.util.List; -import java.util.TreeMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class LinuxSocketStat { - - private static final Logger log = LoggerFactory.getLogger(LinuxSocketStat.class); - - private static final Pattern pattern1 = Pattern.compile("^sockets: used (\\d+)"); - private static final Pattern pattern2 = Pattern.compile("^TCP: inuse (\\d+) orphan (\\d+) tw (\\d+) alloc (\\d+) mem (\\d+)"); - private static final Pattern pattern3 = Pattern.compile("^UDP: inuse (\\d+) mem (\\d+)"); - - private long sockets; - private long tcp_inuse; - private long tcp_orphan; - private long tcp_tw; - private long tcp_alloc; - private long tcp_mem; - private long udp_inuse; - private long udp_mem; - - /* - sockets: used 1238 - TCP: inuse 52 orphan 0 tw 18 alloc 55 mem 7 - UDP: inuse 11 mem 10 - UDPLITE: inuse 0 - RAW: inuse 0 - FRAG: inuse 0 memory 0 - */ - - - LinuxSocketStat(List lines) { - - Matcher matcher; - for(String line : lines) { - String proto = line.substring(0, line.indexOf(':')); - - switch (proto) { - case "sockets": - matcher = pattern1.matcher(line); - if (matcher.matches() && matcher.groupCount() == 1) { - sockets = Long.parseLong(matcher.group(1)); - } - break; - - case "TCP": - matcher = pattern2.matcher(line); - if (matcher.matches() && matcher.groupCount() == 5) { - tcp_inuse = Long.parseLong(matcher.group(1)); - tcp_orphan = Long.parseLong(matcher.group(2)); - tcp_tw = Long.parseLong(matcher.group(3)); - tcp_alloc = Long.parseLong(matcher.group(4)); - tcp_mem = Long.parseLong(matcher.group(5)); - } - break; - - case "UDP": - matcher = pattern3.matcher(line); - if (matcher.matches() && matcher.groupCount() == 2) { - udp_inuse = Long.parseLong(matcher.group(1)); - udp_mem = Long.parseLong(matcher.group(2)); - } - break; - - } - - } - - } - - - public TreeMap getTags() { - return new TreeMap<>(); - } - - - public TreeMap getFields() { - return new TreeMap() {{ - put("sockets", sockets); - put("tcp_inuse", tcp_inuse); - put("tcp_alloc", tcp_alloc); - put("tcp_orphan", tcp_orphan); - put("tcp_mem", tcp_mem); - put("tcp_tw", tcp_tw); - put("udp_inuse", udp_inuse); - put("udp_mem", udp_mem); - }}; - } - -} diff --git a/plugins/os-linux/src/test/groovy/LinuxNetstatTest.groovy b/plugins/os-linux/src/test/groovy/LinuxNetstatTest.groovy deleted file mode 100644 index 4f0e416..0000000 --- a/plugins/os-linux/src/test/groovy/LinuxNetstatTest.groovy +++ /dev/null @@ -1,26 +0,0 @@ -import spock.lang.Specification -import sysmon.plugins.os_linux.LinuxNetstatParser - -class LinuxNetstatTest extends Specification { - - void "test netstat parsing"() { - - setup: - InputStream inputStream = getClass().getResourceAsStream('/netstat-linux.txt') - - when: - LinuxNetstatParser parser = new LinuxNetstatParser(inputStream) - - then: - parser.getFields().size() > 0 - parser.getFields().get('ip_received') == 109772L - parser.getFields().get('ip_dropped') == 70L - parser.getFields().get('ip_discarded') == 0L - parser.getFields().get('tcp_pkts_sent') == 89891L - parser.getFields().get('tcp_pkts_recv') == 86167L - parser.getFields().get('udp_pkts_sent') == 10682L - parser.getFields().get('udp_pkts_recv') == 31928L - - } - -} diff --git a/plugins/os-linux/src/test/groovy/LinuxNetworkTest.groovy b/plugins/os-linux/src/test/groovy/LinuxNetworkTest.groovy deleted file mode 100644 index ae697ce..0000000 --- a/plugins/os-linux/src/test/groovy/LinuxNetworkTest.groovy +++ /dev/null @@ -1,29 +0,0 @@ -import spock.lang.Specification -import sysmon.plugins.os_linux.LinuxSocketExtension -import sysmon.plugins.os_linux.LinuxSocketStat - -class LinuxNetworkTest extends Specification { - - void "test /proc/net/sockstat parsing"() { - - setup: - def testFile = new File(getClass().getResource('/proc_net_sockstat.txt').toURI()) - List lines = testFile.readLines("UTF-8") - - when: - LinuxSocketExtension extension = new LinuxSocketExtension() - LinuxSocketStat stats = extension.processSockOutput(lines) - - then: - stats.getFields().get("sockets") == 1238L - stats.getFields().get("tcp_inuse") == 52L - stats.getFields().get("tcp_orphan") == 0L - stats.getFields().get("tcp_alloc") == 55L - stats.getFields().get("tcp_mem") == 7l - stats.getFields().get("tcp_tw") == 18L - stats.getFields().get("udp_inuse") == 11L - stats.getFields().get("udp_mem") == 10L - - } - -} diff --git a/plugins/os-linux/src/test/resources/netstat-linux.txt b/plugins/os-linux/src/test/resources/netstat-linux.txt deleted file mode 100644 index 68674bc..0000000 --- a/plugins/os-linux/src/test/resources/netstat-linux.txt +++ /dev/null @@ -1,112 +0,0 @@ -Ip: - Forwarding: 1 - 109772 total packets received - 1 with invalid addresses - 0 forwarded - 0 incoming packets discarded - 109769 incoming packets delivered - 103916 requests sent out - 70 outgoing packets dropped - 1 dropped because of missing route -Icmp: - 52 ICMP messages received - 0 input ICMP message failed - ICMP input histogram: - destination unreachable: 40 - echo requests: 12 - 108 ICMP messages sent - 0 ICMP messages failed - ICMP output histogram: - destination unreachable: 96 - echo replies: 12 -IcmpMsg: - InType3: 40 - InType8: 12 - OutType0: 12 - OutType3: 96 -Tcp: - 3142 active connection openings - 5 passive connection openings - 2105 failed connection attempts - 193 connection resets received - 70 connections established - 86167 segments received - 89891 segments sent out - 184 segments retransmitted - 3 bad segments received - 2735 resets sent -Udp: - 31928 packets received - 96 packets to unknown port received - 0 packet receive errors - 10682 packets sent - 0 receive buffer errors - 0 send buffer errors - IgnoredMulti: 22 -UdpLite: -TcpExt: - 30 packets pruned from receive queue because of socket buffer overrun - 178 TCP sockets finished time wait in fast timer - 426 delayed acks sent - 1 delayed acks further delayed because of locked socket - Quick ack mode was activated 1059 times - 45809 packet headers predicted - 7293 acknowledgments not containing data payload received - 7659 predicted acknowledgments - TCPSackRecovery: 3 - Detected reordering 4 times using SACK - TCPDSACKUndo: 1 - 1 congestion windows recovered without slow start after partial ack - TCPLostRetransmit: 82 - 3 timeouts after reno fast retransmit - 1 timeouts in loss state - 3 fast retransmits - 3 retransmits in slow start - TCPTimeouts: 129 - TCPLossProbes: 69 - TCPLossProbeRecovery: 10 - TCPBacklogCoalesce: 450 - TCPDSACKOldSent: 991 - TCPDSACKOfoSent: 6 - TCPDSACKRecv: 45 - 202 connections reset due to unexpected data - 147 connections reset due to early user close - 13 connections aborted due to timeout - TCPDSACKIgnoredNoUndo: 10 - TCPSackShifted: 1 - TCPSackMerged: 1 - TCPSackShiftFallback: 9 - TCPRcvCoalesce: 5338 - TCPOFOQueue: 793 - TCPOFOMerge: 6 - TCPChallengeACK: 3 - TCPSYNChallenge: 3 - TCPSpuriousRtxHostQueues: 6 - TCPAutoCorking: 710 - TCPFromZeroWindowAdv: 1 - TCPToZeroWindowAdv: 1 - TCPWantZeroWindowAdv: 4 - TCPSynRetrans: 98 - TCPOrigDataSent: 19048 - TCPHystartTrainDetect: 3 - TCPHystartTrainCwnd: 54 - TCPHystartDelayDetect: 1 - TCPHystartDelayCwnd: 24 - TCPACKSkippedSeq: 1 - TCPKeepAlive: 2595 - TCPDelivered: 20025 - TCPAckCompressed: 260 - TcpTimeoutRehash: 116 -IpExt: - InMcastPkts: 2257 - OutMcastPkts: 480 - InBcastPkts: 98 - OutBcastPkts: 78 - InOctets: 147193028 - OutOctets: 14723163 - InMcastOctets: 478599 - OutMcastOctets: 73462 - InBcastOctets: 10094 - OutBcastOctets: 5580 - InNoECTPkts: 177661 -MPTcpExt: diff --git a/plugins/os-linux/src/test/resources/proc_net_sockstat.txt b/plugins/os-linux/src/test/resources/proc_net_sockstat.txt deleted file mode 100644 index f0c0afc..0000000 --- a/plugins/os-linux/src/test/resources/proc_net_sockstat.txt +++ /dev/null @@ -1,6 +0,0 @@ -sockets: used 1238 -TCP: inuse 52 orphan 0 tw 18 alloc 55 mem 7 -UDP: inuse 11 mem 10 -UDPLITE: inuse 0 -RAW: inuse 0 -FRAG: inuse 0 memory 0 diff --git a/plugins/os-aix/README.md b/plugins/power/README.md similarity index 100% rename from plugins/os-aix/README.md rename to plugins/power/README.md diff --git a/plugins/os-aix/build.gradle b/plugins/power/build.gradle similarity index 100% rename from plugins/os-aix/build.gradle rename to plugins/power/build.gradle diff --git a/plugins/power/gradle.properties b/plugins/power/gradle.properties new file mode 100644 index 0000000..f130b6f --- /dev/null +++ b/plugins/power/gradle.properties @@ -0,0 +1,6 @@ +pluginId=sysmon-power +pluginClass=sysmon.plugins.power.PowerPlugin +pluginVersion=0.0.1 +pluginProvider=System Monitor +pluginDependencies= +pluginDescription=Collects IBM Power specific metrics. diff --git a/plugins/power/src/main/java/sysmon/plugins/power/PowerPlugin.java b/plugins/power/src/main/java/sysmon/plugins/power/PowerPlugin.java new file mode 100644 index 0000000..07d7e6f --- /dev/null +++ b/plugins/power/src/main/java/sysmon/plugins/power/PowerPlugin.java @@ -0,0 +1,18 @@ +package sysmon.plugins.power; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.pf4j.Plugin; +import org.pf4j.PluginWrapper; + +public class PowerPlugin extends Plugin { + + private static final Logger log = LoggerFactory.getLogger(PowerPlugin.class); + + public PowerPlugin(PluginWrapper wrapper) { + super(wrapper); + } + +} + + diff --git a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorExtension.java b/plugins/power/src/main/java/sysmon/plugins/power/PowerProcessorExtension.java similarity index 78% rename from plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorExtension.java rename to plugins/power/src/main/java/sysmon/plugins/power/PowerProcessorExtension.java index a20f7bd..ebe22b0 100644 --- a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorExtension.java +++ b/plugins/power/src/main/java/sysmon/plugins/power/PowerProcessorExtension.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_aix; +package sysmon.plugins.power; import org.pf4j.Extension; import org.slf4j.Logger; @@ -10,19 +10,17 @@ import sysmon.shared.PluginHelper; import java.io.IOException; import java.io.InputStream; -import java.util.HashMap; import java.util.Map; import java.util.TreeMap; @Extension -public class AixProcessorExtension implements MetricExtension { +public class PowerProcessorExtension implements MetricExtension { - private static final Logger log = LoggerFactory.getLogger(AixProcessorExtension.class); + private static final Logger log = LoggerFactory.getLogger(PowerProcessorExtension.class); // Extension details - private final String name = "aix_processor"; - private final String provides = "lpar_processor"; - private final String description = "AIX Processor Metrics"; + private final String name = "power_processor"; + private final String description = "IBM Power Processor Metrics"; // Configuration / Options private boolean enabled = true; @@ -66,11 +64,6 @@ public class AixProcessorExtension implements MetricExtension { return interval; } - @Override - public String getProvides() { - return provides; - } - @Override public String getDescription() { return description; @@ -96,7 +89,7 @@ public class AixProcessorExtension implements MetricExtension { TreeMap fieldsMap = null; try (InputStream buf = PluginHelper.executeCommand("lparstat 3 1")) { - AixProcessorStat processorStat = processCommandOutput(buf); + PowerProcessorStat processorStat = processCommandOutput(buf); tagsMap = processorStat.getTags(); fieldsMap = processorStat.getFields(); } catch (IOException e) { @@ -108,8 +101,8 @@ public class AixProcessorExtension implements MetricExtension { } - protected AixProcessorStat processCommandOutput(InputStream input) throws IOException { - return new AixProcessorStat(input); + protected PowerProcessorStat processCommandOutput(InputStream input) throws IOException { + return new PowerProcessorStat(input); } } diff --git a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorStat.java b/plugins/power/src/main/java/sysmon/plugins/power/PowerProcessorStat.java similarity index 96% rename from plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorStat.java rename to plugins/power/src/main/java/sysmon/plugins/power/PowerProcessorStat.java index a636c4d..3d694ba 100644 --- a/plugins/os-aix/src/main/java/sysmon/plugins/os_aix/AixProcessorStat.java +++ b/plugins/power/src/main/java/sysmon/plugins/power/PowerProcessorStat.java @@ -1,4 +1,4 @@ -package sysmon.plugins.os_aix; +package sysmon.plugins.power; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -8,15 +8,14 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Arrays; -import java.util.HashMap; import java.util.Objects; import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class AixProcessorStat { +public class PowerProcessorStat { - private static final Logger log = LoggerFactory.getLogger(AixProcessorStat.class); + private static final Logger log = LoggerFactory.getLogger(PowerProcessorStat.class); // System configuration: type=Shared mode=Uncapped smt=8 lcpu=8 mem=4096MB psize=19 ent=0.50 private static final Pattern patternAixShared = Pattern.compile("^System configuration: type=(\\S+) mode=(\\S+) smt=(\\d+) lcpu=(\\d+) mem=(\\d+)MB psize=(\\d+) ent=(\\d+\\.?\\d*)"); @@ -47,7 +46,7 @@ public class AixProcessorStat { private final float lbusy; // Indicates the percentage of logical processor(s) utilization that occurred while executing at the user and system level. - public AixProcessorStat(InputStream inputStream) throws IOException { + public PowerProcessorStat(InputStream inputStream) throws IOException { String lastLine = null; BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); diff --git a/plugins/os-aix/src/test/groovy/AixProcessorTest.groovy b/plugins/power/src/test/groovy/PowerProcessorTest.groovy similarity index 73% rename from plugins/os-aix/src/test/groovy/AixProcessorTest.groovy rename to plugins/power/src/test/groovy/PowerProcessorTest.groovy index 21cb090..79cf2d7 100644 --- a/plugins/os-aix/src/test/groovy/AixProcessorTest.groovy +++ b/plugins/power/src/test/groovy/PowerProcessorTest.groovy @@ -1,8 +1,8 @@ -import sysmon.plugins.os_aix.AixProcessorExtension -import sysmon.plugins.os_aix.AixProcessorStat +import sysmon.plugins.power.PowerProcessorExtension +import sysmon.plugins.power.PowerProcessorStat import spock.lang.Specification -class AixProcessorTest extends Specification { +class PowerProcessorTest extends Specification { void "test AIX lparstat shared output processing"() { @@ -10,8 +10,8 @@ class AixProcessorTest extends Specification { InputStream inputStream = getClass().getResourceAsStream('/lparstat-aix-shared.txt') when: - AixProcessorExtension extension = new AixProcessorExtension() - AixProcessorStat stats = extension.processCommandOutput(inputStream) + PowerProcessorExtension extension = new PowerProcessorExtension() + PowerProcessorStat stats = extension.processCommandOutput(inputStream) then: stats.getUser() == 83.7f @@ -30,8 +30,8 @@ class AixProcessorTest extends Specification { InputStream inputStream = getClass().getResourceAsStream('/lparstat-aix-dedicated-donating.txt') when: - AixProcessorExtension extension = new AixProcessorExtension() - AixProcessorStat stats = extension.processCommandOutput(inputStream) + PowerProcessorExtension extension = new PowerProcessorExtension() + PowerProcessorStat stats = extension.processCommandOutput(inputStream) then: stats.getUser() == 0.1f @@ -51,8 +51,8 @@ class AixProcessorTest extends Specification { InputStream inputStream = getClass().getResourceAsStream('/lparstat-aix-dedicated-capped.txt') when: - AixProcessorExtension extension = new AixProcessorExtension() - AixProcessorStat stats = extension.processCommandOutput(inputStream) + PowerProcessorExtension extension = new PowerProcessorExtension() + PowerProcessorStat stats = extension.processCommandOutput(inputStream) then: stats.getUser() == 0.0f @@ -71,8 +71,8 @@ class AixProcessorTest extends Specification { InputStream inputStream = getClass().getResourceAsStream('/lparstat-linux.txt') when: - AixProcessorExtension extension = new AixProcessorExtension() - AixProcessorStat stats = extension.processCommandOutput(inputStream) + PowerProcessorExtension extension = new PowerProcessorExtension() + PowerProcessorStat stats = extension.processCommandOutput(inputStream) then: stats.getUser() == 0.03f diff --git a/plugins/os-aix/src/test/resources/lparstat-aix-dedicated-capped.txt b/plugins/power/src/test/resources/lparstat-aix-dedicated-capped.txt similarity index 100% rename from plugins/os-aix/src/test/resources/lparstat-aix-dedicated-capped.txt rename to plugins/power/src/test/resources/lparstat-aix-dedicated-capped.txt diff --git a/plugins/os-aix/src/test/resources/lparstat-aix-dedicated-donating.txt b/plugins/power/src/test/resources/lparstat-aix-dedicated-donating.txt similarity index 100% rename from plugins/os-aix/src/test/resources/lparstat-aix-dedicated-donating.txt rename to plugins/power/src/test/resources/lparstat-aix-dedicated-donating.txt diff --git a/plugins/os-aix/src/test/resources/lparstat-aix-shared.txt b/plugins/power/src/test/resources/lparstat-aix-shared.txt similarity index 100% rename from plugins/os-aix/src/test/resources/lparstat-aix-shared.txt rename to plugins/power/src/test/resources/lparstat-aix-shared.txt diff --git a/plugins/os-aix/src/test/resources/lparstat-linux.txt b/plugins/power/src/test/resources/lparstat-linux.txt similarity index 100% rename from plugins/os-aix/src/test/resources/lparstat-linux.txt rename to plugins/power/src/test/resources/lparstat-linux.txt diff --git a/shared/src/main/java/sysmon/shared/MetricExtension.java b/shared/src/main/java/sysmon/shared/MetricExtension.java index 9cfce61..580c65b 100644 --- a/shared/src/main/java/sysmon/shared/MetricExtension.java +++ b/shared/src/main/java/sysmon/shared/MetricExtension.java @@ -12,7 +12,6 @@ public interface MetricExtension extends ExtensionPoint { String getName(); String getInterval(); - String getProvides(); String getDescription(); void setConfiguration(Map map); diff --git a/shared/src/main/java/sysmon/shared/MetricScript.java b/shared/src/main/java/sysmon/shared/MetricScript.java new file mode 100644 index 0000000..3ec1851 --- /dev/null +++ b/shared/src/main/java/sysmon/shared/MetricScript.java @@ -0,0 +1,7 @@ +package sysmon.shared; + +public interface MetricScript { + + MetricResult getMetrics(); + +} From 79f3b3a81dce0e101968d445362c65e9d3ffdd92 Mon Sep 17 00:00:00 2001 From: Mark Nellemann Date: Sun, 25 Dec 2022 11:29:45 +0100 Subject: [PATCH 2/4] Initial work on script support --- client/doc/scripts/ExampleScript.groovy | 19 +++++++++ client/doc/scripts/example.groovy | 20 ---------- .../linux/src/test/resources/sensors-1.json | 39 +++++++++++++++++++ .../linux/src/test/resources/sensors-2.json | 39 +++++++++++++++++++ plugins/power/README.md | 4 +- shared/build.gradle | 19 +++++++++ 6 files changed, 118 insertions(+), 22 deletions(-) create mode 100755 client/doc/scripts/ExampleScript.groovy delete mode 100644 client/doc/scripts/example.groovy create mode 100644 plugins/linux/src/test/resources/sensors-1.json create mode 100644 plugins/linux/src/test/resources/sensors-2.json diff --git a/client/doc/scripts/ExampleScript.groovy b/client/doc/scripts/ExampleScript.groovy new file mode 100755 index 0000000..6864705 --- /dev/null +++ b/client/doc/scripts/ExampleScript.groovy @@ -0,0 +1,19 @@ + +class ExampleScript implements MetricScript { + + MetricResult getMetrics() { + Map tags = new TreeMap<>(); + Map fields = new TreeMap<>(); + + tags.put("type", "temp"); + fields.put("sensor1", 23.2); + fields.put("sensor2", 25.8); + + Measurement measurement = new Measurement(tags, fields); + return new MetricResult("script_sensors", measurement); + } + +} + + + diff --git a/client/doc/scripts/example.groovy b/client/doc/scripts/example.groovy deleted file mode 100644 index cdcbd01..0000000 --- a/client/doc/scripts/example.groovy +++ /dev/null @@ -1,20 +0,0 @@ -import sysmon.shared.MetricResult -import sysmon.shared.MetricScript -import sysmon.shared.Measurement - -class ExampleScript implements MetricScript { - - @Override - MetricResult getMetrics() { - Map tags = new TreeMap<>(); - Map fields = new TreeMap<>(); - - tags.put("location", "blabla"); - fields.put("temp1", 23); - fields.put("temp2", 25); - - Measurement measurement = new Measurement(tags, fields); - return new MetricResult("script_example", measurement); - } - -} diff --git a/plugins/linux/src/test/resources/sensors-1.json b/plugins/linux/src/test/resources/sensors-1.json new file mode 100644 index 0000000..d07babe --- /dev/null +++ b/plugins/linux/src/test/resources/sensors-1.json @@ -0,0 +1,39 @@ +{ + "k10temp-pci-00c3":{ + "Adapter": "PCI adapter", + "Tctl":{ + "temp1_input": 56.250 + } + }, + "nvme-pci-0400":{ + "Adapter": "PCI adapter", + "Composite":{ + "temp1_input": 35.850, + "temp1_max": 74.850, + "temp1_min": -20.150, + "temp1_crit": 79.850, + "temp1_alarm": 0.000 + } + }, + "iwlwifi_1-virtual-0":{ + "Adapter": "Virtual device", + "temp1":{ + "temp1_input": 37.000 + } + }, + "amdgpu-pci-0500":{ + "Adapter": "PCI adapter", + "vddgfx":{ + "in0_input": 0.681 + }, + "vddnb":{ + "in1_input": 0.712 + }, + "edge":{ + "temp1_input": 37.000 + }, + "PPT":{ + "power1_average": 0.000 + } + } +} diff --git a/plugins/linux/src/test/resources/sensors-2.json b/plugins/linux/src/test/resources/sensors-2.json new file mode 100644 index 0000000..7b21ed3 --- /dev/null +++ b/plugins/linux/src/test/resources/sensors-2.json @@ -0,0 +1,39 @@ +{ + "k10temp-pci-00c3":{ + "Adapter": "PCI adapter", + "Tctl":{ + "temp1_input": 53.875 + } + }, + "nvme-pci-0400":{ + "Adapter": "PCI adapter", + "Composite":{ + "temp1_input": 36.850, + "temp1_max": 74.850, + "temp1_min": -20.150, + "temp1_crit": 79.850, + "temp1_alarm": 0.000 + } + }, + "iwlwifi_1-virtual-0":{ + "Adapter": "Virtual device", + "temp1":{ + "temp1_input": 41.000 + } + }, + "amdgpu-pci-0500":{ + "Adapter": "PCI adapter", + "vddgfx":{ + "in0_input": 1.281 + }, + "vddnb":{ + "in1_input": 0.712 + }, + "edge":{ + "temp1_input": 42.000 + }, + "PPT":{ + "power1_average": 0.000 + } + } +} diff --git a/plugins/power/README.md b/plugins/power/README.md index 2170b88..0ff997c 100644 --- a/plugins/power/README.md +++ b/plugins/power/README.md @@ -1,6 +1,6 @@ -# AIX Plugin +# IBM Power Plugin -## LPAR Processor Extension +## Power LPAR Processor Extension The processor extension works for both AIX and Linux on the Power ppc64/ppc64le architecture. diff --git a/shared/build.gradle b/shared/build.gradle index b115439..2a8e4e7 100644 --- a/shared/build.gradle +++ b/shared/build.gradle @@ -9,6 +9,7 @@ plugins { id 'groovy' id 'java-library' + id 'maven-publish' } repositories { @@ -33,3 +34,21 @@ tasks.named('test') { // Use junit platform for unit tests. useJUnitPlatform() } + +publishing { + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/Danish-Sensor-Engineering/libsensor") + credentials { + username = project.findProperty("gpr.user") ?: System.getenv("USERNAME") + password = project.findProperty("gpr.key") ?: System.getenv("TOKEN") + } + } + } + publications { + gpr(MavenPublication) { + from(components.java) + } + } +} From fd43bee35ddb6bae2b62d969394ea9cd9f59955c Mon Sep 17 00:00:00 2001 From: Mark Nellemann Date: Wed, 4 Jan 2023 12:35:00 +0100 Subject: [PATCH 3/4] Update dependencies. --- gradle.properties | 6 +++--- gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 60756 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 6 ++++++ gradlew.bat | 14 ++++++++------ 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/gradle.properties b/gradle.properties index 3ae92d7..af0d6be 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ version = 1.1.0 pf4jVersion = 3.7.0 -slf4jVersion = 2.0.5 -camelVersion = 3.14.5 -groovyVersion = 3.0.13 +slf4jVersion = 2.0.6 +camelVersion = 3.14.7 +groovyVersion = 3.0.14 picocliVersion = 4.7.0 oshiVersion = 6.4.0 spockVersion = 2.3-groovy-3.0 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927a4d4fb3f96a785543079b8df6723c946b..249e5832f090a2944b7473328c07c9755baa3196 100644 GIT binary patch delta 10197 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661..070cb70 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787..a69d9cb 100755 --- a/gradlew +++ b/gradlew @@ -205,6 +205,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd3..f127cfd 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +75,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal From 529d73890ed71488b16a67a96666dc7420ce4f56 Mon Sep 17 00:00:00 2001 From: Mark Nellemann Date: Wed, 4 Jan 2023 14:44:42 +0100 Subject: [PATCH 4/4] Build updates. --- .drone.yml | 26 ++++++++++++++++++++++++++ .editorconfig | 5 ++++- CHANGELOG.md | 3 ++- build.gradle | 9 ++++++--- client/build.gradle | 5 ++--- plugins/build.gradle | 3 +-- server/build.gradle | 5 ++--- shared/build.gradle | 21 ++++++++++++--------- 8 files changed, 55 insertions(+), 22 deletions(-) create mode 100644 .drone.yml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..6377d8b --- /dev/null +++ b/.drone.yml @@ -0,0 +1,26 @@ +--- +kind: pipeline +name: default +type: docker + +steps: +- name: test + image: eclipse-temurin:8-jdk + commands: + - ./gradlew test +- name: build + image: eclipse-temurin:8-jdk + environment: + AUTH_TOKEN: # Gitea access token ENV variable + from_secret: auth # Name of DroneCI secret exposed above + commands: + - ./gradlew build packages shared:publishLibraryPublicationToGiteaRepository + - for file in server/build/distributions/*.deb ; do curl --user "$${AUTH_TOKEN}" --upload-file "$${file}" "https://git.data.coop/api/packages/${DRONE_REPO_OWNER}/generic/${DRONE_REPO_NAME}/${DRONE_TAG}/$(basename $file)" ; done + - for file in server/build/distributions/*.rpm ; do curl --user "$${AUTH_TOKEN}" --upload-file "$${file}" "https://git.data.coop/api/packages/${DRONE_REPO_OWNER}/generic/${DRONE_REPO_NAME}/${DRONE_TAG}/$(basename $file)" ; done + - for file in client/build/distributions/*.deb ; do curl --user "$${AUTH_TOKEN}" --upload-file "$${file}" "https://git.data.coop/api/packages/${DRONE_REPO_OWNER}/generic/${DRONE_REPO_NAME}/${DRONE_TAG}/$(basename $file)" ; done + - for file in client/build/distributions/*.rpm ; do curl --user "$${AUTH_TOKEN}" --upload-file "$${file}" "https://git.data.coop/api/packages/${DRONE_REPO_OWNER}/generic/${DRONE_REPO_NAME}/${DRONE_TAG}/$(basename $file)" ; done + - for file in plugins/build/distributions/*.deb ; do curl --user "$${AUTH_TOKEN}" --upload-file "$${file}" "https://git.data.coop/api/packages/${DRONE_REPO_OWNER}/generic/${DRONE_REPO_NAME}/${DRONE_TAG}/$(basename $file)" ; done + - for file in plugins/build/distributions/*.rpm ; do curl --user "$${AUTH_TOKEN}" --upload-file "$${file}" "https://git.data.coop/api/packages/${DRONE_REPO_OWNER}/generic/${DRONE_REPO_NAME}/${DRONE_TAG}/$(basename $file)" ; done + when: + event: + - tag diff --git a/.editorconfig b/.editorconfig index a44e3a4..9ec542f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -5,4 +5,7 @@ end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true indent_style = space -indent_size = 4 \ No newline at end of file +indent_size = 4 + +[*.yml] +indent_size = 2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 96f7cfe..b832495 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,9 @@ All notable changes to this project will be documented in this file. -## [1.1.1] - 2022-12-xx +## [1.1.1] - 2023-01-xx - Simplify plugin naming +- Initial support for calling (groovy) scripts ## [1.1.0] - 2022-12-17 - Lower influx time precision from milliseconds to seconds diff --git a/build.gradle b/build.gradle index 54c513a..0e06668 100644 --- a/build.gradle +++ b/build.gradle @@ -27,11 +27,14 @@ subprojects { mavenCentral() } - sourceCompatibility = 1.8 - targetCompatibility = 1.8 + java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + } -tasks.create("packages") { +tasks.register("packages") { group "build" dependsOn ":client:buildDeb" diff --git a/client/build.gradle b/client/build.gradle index b118c81..4a21d5e 100644 --- a/client/build.gradle +++ b/client/build.gradle @@ -3,9 +3,9 @@ import org.redline_rpm.header.Os plugins { id 'application' - id "com.github.johnrengelman.shadow" version "7.1.2" id "net.nemerosa.versioning" version "2.15.1" - id "nebula.ospackage" version "9.1.1" + id "com.github.johnrengelman.shadow" version "7.1.2" + id "com.netflix.nebula.ospackage" version "10.0.0" } dependencies { @@ -76,7 +76,6 @@ shadowJar { mergeServiceFiles() // Tell plugin to merge duplicate service files } -apply plugin: 'nebula.ospackage' ospackage { packageName = projectName release = '1' diff --git a/plugins/build.gradle b/plugins/build.gradle index b2d4f24..ae6e599 100644 --- a/plugins/build.gradle +++ b/plugins/build.gradle @@ -1,7 +1,7 @@ import org.redline_rpm.header.Os plugins { - id "nebula.ospackage" version "9.1.1" + id "com.netflix.nebula.ospackage" version "10.0.0" } @@ -82,7 +82,6 @@ tasks.clean.dependsOn(tasks.customCleanUp) def projectName = "sysmon-plugins" -apply plugin: 'nebula.ospackage' ospackage { packageName = projectName release = '1' diff --git a/server/build.gradle b/server/build.gradle index d63cdbb..c50c2bf 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -3,9 +3,9 @@ import org.redline_rpm.header.Os plugins { id 'application' - id "com.github.johnrengelman.shadow" version "7.1.2" id "net.nemerosa.versioning" version "2.15.1" - id "nebula.ospackage" version "9.1.1" + id "com.github.johnrengelman.shadow" version "7.1.2" + id "com.netflix.nebula.ospackage" version "10.0.0" } dependencies { @@ -40,7 +40,6 @@ tasks.named('test') { useJUnitPlatform() } -apply plugin: 'nebula.ospackage' ospackage { packageName = projectName release = '1' diff --git a/shared/build.gradle b/shared/build.gradle index 2a8e4e7..d1abc9c 100644 --- a/shared/build.gradle +++ b/shared/build.gradle @@ -36,19 +36,22 @@ tasks.named('test') { } publishing { + publications { + library(MavenPublication) { + groupId = 'sysmon' + artifactId = 'shared' + + from components.java + } + } repositories { maven { - name = "GitHubPackages" - url = uri("https://maven.pkg.github.com/Danish-Sensor-Engineering/libsensor") + name = "gitea" + url = uri("https://git.data.coop/api/packages/$System.env.DRONE_REPO_OWNER/maven") credentials { - username = project.findProperty("gpr.user") ?: System.getenv("USERNAME") - password = project.findProperty("gpr.key") ?: System.getenv("TOKEN") + username = "$System.env.DRONE_REPO_OWNER" + password = "$System.env.AUTH_TOKEN" } } } - publications { - gpr(MavenPublication) { - from(components.java) - } - } }