From 2570a31fdf227a3a921496b4e1a3317b1300d9b4 Mon Sep 17 00:00:00 2001 From: Luca Kovacs Date: Fri, 30 Sep 2022 13:28:34 +0200 Subject: [PATCH 1/2] HBASE-27395 Adding description to Prometheus metrics Change-Id: I5f76b741c3419c4f2d355252d9a958ee48784257 --- .../http/prometheus/PrometheusHadoopServlet.java | 13 +++++++++++-- .../http/prometheus/TestPrometheusServlet.java | 3 ++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java index c6e13b37c66d..3715db25fede 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java @@ -41,7 +41,10 @@ public class PrometheusHadoopServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - writeMetrics(resp.getWriter()); + String tmpStr = req.getParameter("description"); + boolean description = tmpStr != null && tmpStr.equals("true"); + + writeMetrics(resp.getWriter(), description); } static String toPrometheusName(String metricRecordName, String metricName) { @@ -57,13 +60,19 @@ static String toPrometheusName(String metricRecordName, String metricName) { */ @RestrictedApi(explanation = "Should only be called in tests or self", link = "", allowedOnPath = ".*/src/test/.*|.*/PrometheusHadoopServlet\\.java") - void writeMetrics(Writer writer) throws IOException { + void writeMetrics(Writer writer, boolean desc) throws IOException { Collection metricRecords = MetricsExportHelper.export(); for (MetricsRecord metricsRecord : metricRecords) { for (AbstractMetric metrics : metricsRecord.metrics()) { if (metrics.type() == MetricType.COUNTER || metrics.type() == MetricType.GAUGE) { String key = toPrometheusName(metricsRecord.name(), metrics.name()); + + if (desc) { + String description = metrics.description(); + if (!description.isEmpty()) writer.append("# HELP ").append(description).append("\n"); + } + writer.append("# TYPE ").append(key).append(" ") .append(metrics.type().toString().toLowerCase()).append("\n").append(key).append("{"); diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/prometheus/TestPrometheusServlet.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/prometheus/TestPrometheusServlet.java index fcfde82ad41c..0ca021bc12bb 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/prometheus/TestPrometheusServlet.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/prometheus/TestPrometheusServlet.java @@ -60,7 +60,8 @@ public void testPublish() throws IOException { // WHEN PrometheusHadoopServlet prom2Servlet = new PrometheusHadoopServlet(); - prom2Servlet.writeMetrics(writer); + // Test with no description + prom2Servlet.writeMetrics(writer, false); // THEN String writtenMetrics = stream.toString(UTF_8.name()); From 8d392d434abd56dd15c98ce6745b385977a90a09 Mon Sep 17 00:00:00 2001 From: Luca Kovacs Date: Tue, 4 Oct 2022 23:46:55 +0200 Subject: [PATCH 2/2] HBASE-27395 Adding description to Prometheus metrics Notes: - Made some improvements in the code based on the review --- .../hbase/http/prometheus/PrometheusHadoopServlet.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java index 3715db25fede..db5952e2fa78 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java @@ -41,10 +41,7 @@ public class PrometheusHadoopServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String tmpStr = req.getParameter("description"); - boolean description = tmpStr != null && tmpStr.equals("true"); - - writeMetrics(resp.getWriter(), description); + writeMetrics(resp.getWriter(), "true".equals(req.getParameter("description"))); } static String toPrometheusName(String metricRecordName, String metricName) { @@ -70,11 +67,11 @@ void writeMetrics(Writer writer, boolean desc) throws IOException { if (desc) { String description = metrics.description(); - if (!description.isEmpty()) writer.append("# HELP ").append(description).append("\n"); + if (!description.isEmpty()) writer.append("# HELP ").append(description).append('\n'); } writer.append("# TYPE ").append(key).append(" ") - .append(metrics.type().toString().toLowerCase()).append("\n").append(key).append("{"); + .append(metrics.type().toString().toLowerCase()).append('\n').append(key).append("{"); /* add tags */ String sep = "";