From 880a5fd872fcff7e729e00b8b9a28eba2b2653f7 Mon Sep 17 00:00:00 2001 From: Gu Jiawei Date: Wed, 11 Dec 2024 22:34:22 +0800 Subject: [PATCH 1/2] 1. get plugin variables from env var; if not found, fall back to system properties, and finally use default values. 2. make demo plugin to reside in a single directory. --- .../assembly/assembly-standalone-windows.xml | 2 +- .../assembly/assembly-standalone.xml | 2 +- build/build-plugin-demo/pom.xml | 3 ++ .../com/baidu/demo/plugin/DemoPlugin.java | 32 ++++++------------- .../baidu/demo/plugin/util/VariableUtil.java | 29 +++++++++++++++++ 5 files changed, 43 insertions(+), 25 deletions(-) create mode 100644 build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/util/VariableUtil.java diff --git a/build/build-bifromq-starters/assembly/assembly-standalone-windows.xml b/build/build-bifromq-starters/assembly/assembly-standalone-windows.xml index 466585e81..7ce19238d 100644 --- a/build/build-bifromq-starters/assembly/assembly-standalone-windows.xml +++ b/build/build-bifromq-starters/assembly/assembly-standalone-windows.xml @@ -19,7 +19,7 @@ - ../build-plugin-demo/target/demo-plugin-${project.parent.version}.jar + ../build-plugin-demo/target/pluginDir/demo-plugin-${project.parent.version}.jar plugins diff --git a/build/build-bifromq-starters/assembly/assembly-standalone.xml b/build/build-bifromq-starters/assembly/assembly-standalone.xml index e0ccfb853..40793b36a 100644 --- a/build/build-bifromq-starters/assembly/assembly-standalone.xml +++ b/build/build-bifromq-starters/assembly/assembly-standalone.xml @@ -19,7 +19,7 @@ - ../build-plugin-demo/target/demo-plugin-${project.parent.version}.jar + ../build-plugin-demo/target/pluginDir/demo-plugin-${project.parent.version}.jar plugins diff --git a/build/build-plugin-demo/pom.xml b/build/build-plugin-demo/pom.xml index b524d5b18..acde744c7 100644 --- a/build/build-plugin-demo/pom.xml +++ b/build/build-plugin-demo/pom.xml @@ -121,6 +121,9 @@ single + + ${project.build.directory}/pluginDir + diff --git a/build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/DemoPlugin.java b/build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/DemoPlugin.java index e67dc05cb..dd96ca267 100644 --- a/build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/DemoPlugin.java +++ b/build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/DemoPlugin.java @@ -28,13 +28,15 @@ import java.time.Duration; import lombok.extern.slf4j.Slf4j; +import static com.baidu.demo.plugin.util.VariableUtil.getContext; +import static com.baidu.demo.plugin.util.VariableUtil.getPort; + @Slf4j public class DemoPlugin extends BifroMQPlugin { - private static final String PLUGIN_PROMETHEUS_PORT = "plugin.prometheus.port"; - private static final String PLUGIN_PROMETHEUS_CONTEXT = "plugin.prometheus.context"; private final PrometheusMeterRegistry registry; private final HttpServer prometheusExportServer; private final Thread serverThread; + private final int exportPort; /** * Constructor to be used by plugin manager for plugin instantiation. Your plugins have to provide constructor with @@ -44,6 +46,7 @@ public class DemoPlugin extends BifroMQPlugin { */ public DemoPlugin(BifroMQPluginDescriptor context) { super(context); + exportPort = getPort(); registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT); registry.config().meterFilter(new MeterFilter() { @Override @@ -68,8 +71,8 @@ public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticC }); Metrics.addRegistry(registry); try { - prometheusExportServer = HttpServer.create(new InetSocketAddress(port()), 0); - prometheusExportServer.createContext(contextPath(), httpExchange -> { + prometheusExportServer = HttpServer.create(new InetSocketAddress(exportPort), 0); + prometheusExportServer.createContext(getContext(), httpExchange -> { String response = registry.scrape(); httpExchange.sendResponseHeaders(200, response.getBytes().length); try (OutputStream os = httpExchange.getResponseBody()) { @@ -85,30 +88,13 @@ public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticC @Override protected void doStart() { serverThread.start(); - log.debug("Prometheus exporter started"); + log.info("Prometheus exporter started on port {}", exportPort); } @Override protected void doStop() { prometheusExportServer.stop(0); Metrics.removeRegistry(registry); - log.debug("Prometheus exporter stopped"); - } - - private int port() { - String prometheusPort = System.getProperty(PLUGIN_PROMETHEUS_PORT, "9090"); - try { - return Integer.parseUnsignedInt(prometheusPort); - } catch (Throwable e) { - return 9090; - } - } - - private String contextPath() { - String ctx = System.getProperty(PLUGIN_PROMETHEUS_CONTEXT, "/metrics"); - if (ctx.startsWith("/")) { - return ctx; - } - return "/" + ctx; + log.info("Prometheus exporter stopped"); } } diff --git a/build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/util/VariableUtil.java b/build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/util/VariableUtil.java new file mode 100644 index 000000000..e43a50673 --- /dev/null +++ b/build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/util/VariableUtil.java @@ -0,0 +1,29 @@ +package com.baidu.demo.plugin.util; + +public class VariableUtil { + private static final String PLUGIN_PROMETHEUS_PORT = "PLUGIN_PROMETHEUS_PORT"; + private static final String PLUGIN_PROMETHEUS_CONTEXT = "PLUGIN_PROMETHEUS_CONTEXT"; + + private static final int DEFAULT_PORT = 9090; + private static final String DEFAULT_CONTEXT = "/metrics"; + + public static int getPort() { + String prometheusPort = System.getenv(PLUGIN_PROMETHEUS_PORT); + if (prometheusPort == null) { + prometheusPort = System.getProperty(PLUGIN_PROMETHEUS_PORT, "9090"); + } + try { + return Integer.parseUnsignedInt(prometheusPort); + } catch (Throwable e) { + return DEFAULT_PORT; + } + } + + public static String getContext() { + String ctx = System.getenv(PLUGIN_PROMETHEUS_CONTEXT); + if (ctx == null) { + ctx = System.getProperty(PLUGIN_PROMETHEUS_CONTEXT, DEFAULT_CONTEXT); + } + return ctx.startsWith("/") ? ctx : "/" + ctx; + } +} From e7ab0a067d8585641fc4d5362bd492d5a7874507 Mon Sep 17 00:00:00 2001 From: Gu Jiawei Date: Thu, 12 Dec 2024 21:49:14 +0800 Subject: [PATCH 2/2] 1. add an error log if parse prom port failed. --- .../main/java/com/baidu/demo/plugin/util/VariableUtil.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/util/VariableUtil.java b/build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/util/VariableUtil.java index e43a50673..313e6acd3 100644 --- a/build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/util/VariableUtil.java +++ b/build/build-plugin-demo/src/main/java/com/baidu/demo/plugin/util/VariableUtil.java @@ -1,5 +1,8 @@ package com.baidu.demo.plugin.util; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class VariableUtil { private static final String PLUGIN_PROMETHEUS_PORT = "PLUGIN_PROMETHEUS_PORT"; private static final String PLUGIN_PROMETHEUS_CONTEXT = "PLUGIN_PROMETHEUS_CONTEXT"; @@ -15,6 +18,7 @@ public static int getPort() { try { return Integer.parseUnsignedInt(prometheusPort); } catch (Throwable e) { + log.error("Parse prometheus port: {} error, use default port", prometheusPort, e); return DEFAULT_PORT; } }