From 1624271edcaa708f486b9d02748600f3b3610019 Mon Sep 17 00:00:00 2001 From: ME1312 Date: Fri, 18 Aug 2017 08:48:14 -0400 Subject: [PATCH] Add extra charts --- Artifacts/SubServers.Bungee.jar | Bin 463547 -> 467797 bytes .../SubServers/Bungee/Library/Metrics.java | 88 ++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/Artifacts/SubServers.Bungee.jar b/Artifacts/SubServers.Bungee.jar index 4a1ec1155273674bac438202aa52123d108a66bb..8c6376662019f064415f564e9b0e325d98456a86 100644 GIT binary patch delta 13080 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 delta 9423 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 { + @Override + public Integer call() throws Exception { + return plugin.api.getHosts().size(); + } + }).getRequestJsonObject(plugin.getLogger(), logFailedRequests)); + customCharts.add(new SingleLineChart("subdata_connected", new Callable() { + @Override + public Integer call() throws Exception { + return (plugin.subdata != null)?plugin.subdata.getClients().size():0; + } + }).getRequestJsonObject(plugin.getLogger(), logFailedRequests)); data.add("customCharts", customCharts); return data; @@ -365,5 +380,78 @@ public class Metrics { gzip.close(); return outputStream.toByteArray(); } + /** + * Represents a custom chart. + */ + private static abstract class CustomChart { + // The id of the chart + private final String chartId; + + /** + * Class constructor. + * + * @param chartId The id of the chart. + */ + CustomChart(String chartId) { + if (chartId == null || chartId.isEmpty()) { + throw new IllegalArgumentException("ChartId cannot be null or empty!"); + } + this.chartId = chartId; + } + + JsonObject getRequestJsonObject(Logger logger, boolean logFailedRequests) { + JsonObject chart = new JsonObject(); + chart.addProperty("chartId", chartId); + try { + JsonObject data = getChartData(); + if (data == null) { + // If the data is null we don't send the chart. + return null; + } + chart.add("data", data); + } catch (Throwable t) { + if (logFailedRequests) { + logger.log(Level.WARNING, "Failed to get data for custom chart with id " + chartId, t); + } + return null; + } + return chart; + } + + protected abstract JsonObject getChartData() throws Exception; + + } + + /** + * Represents a custom single line chart. + */ + private static class SingleLineChart extends CustomChart { + + private final Callable callable; + + /** + * Class constructor. + * + * @param chartId The id of the chart. + * @param callable The callable which is used to request the chart data. + */ + public SingleLineChart(String chartId, Callable callable) { + super(chartId); + this.callable = callable; + } + + @Override + protected JsonObject getChartData() throws Exception { + JsonObject data = new JsonObject(); + int value = callable.call(); + if (value == 0) { + // Null = skip the chart + return null; + } + data.addProperty("value", value); + return data; + } + + } } \ No newline at end of file