diff options
author | lucko <git@lucko.me> | 2024-08-06 21:29:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-06 21:29:48 +0100 |
commit | 8017dbd288fca21dac3813409dec959ae6e6c822 (patch) | |
tree | bce438e9a7156dcf04f99194295c753702600f1c /spark-common/src/main/java/me/lucko/spark/common/command | |
parent | 613f702ddd8c1a7515298917a74464e6799df0c4 (diff) | |
download | spark-8017dbd288fca21dac3813409dec959ae6e6c822.tar.gz spark-8017dbd288fca21dac3813409dec959ae6e6c822.tar.bz2 spark-8017dbd288fca21dac3813409dec959ae6e6c822.zip |
Add uploadable health report (#436)
Diffstat (limited to 'spark-common/src/main/java/me/lucko/spark/common/command')
-rw-r--r-- | spark-common/src/main/java/me/lucko/spark/common/command/modules/HealthModule.java | 46 | ||||
-rw-r--r-- | spark-common/src/main/java/me/lucko/spark/common/command/sender/CommandSender.java | 4 |
2 files changed, 49 insertions, 1 deletions
diff --git a/spark-common/src/main/java/me/lucko/spark/common/command/modules/HealthModule.java b/spark-common/src/main/java/me/lucko/spark/common/command/modules/HealthModule.java index 15722d7..fbf79ef 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/command/modules/HealthModule.java +++ b/spark-common/src/main/java/me/lucko/spark/common/command/modules/HealthModule.java @@ -21,6 +21,7 @@ package me.lucko.spark.common.command.modules; import me.lucko.spark.common.SparkPlatform; +import me.lucko.spark.common.activitylog.Activity; import me.lucko.spark.common.command.Arguments; import me.lucko.spark.common.command.Command; import me.lucko.spark.common.command.CommandModule; @@ -35,10 +36,15 @@ import me.lucko.spark.common.monitor.net.NetworkMonitor; import me.lucko.spark.common.monitor.ping.PingStatistics; import me.lucko.spark.common.monitor.ping.PingSummary; import me.lucko.spark.common.monitor.tick.TickStatistics; +import me.lucko.spark.common.platform.SparkMetadata; +import me.lucko.spark.common.sampler.Sampler; import me.lucko.spark.common.util.FormatUtil; +import me.lucko.spark.common.util.MediaTypes; import me.lucko.spark.common.util.RollingAverage; import me.lucko.spark.common.util.StatisticFormatter; +import me.lucko.spark.proto.SparkProtos; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; @@ -84,10 +90,11 @@ public class HealthModule implements CommandModule { consumer.accept(Command.builder() .aliases("healthreport", "health", "ht") + .argumentUsage("upload", null) .argumentUsage("memory", null) .argumentUsage("network", null) .executor(HealthModule::healthReport) - .tabCompleter((platform, sender, arguments) -> TabCompleter.completeForOpts(arguments, "--memory", "--network")) + .tabCompleter((platform, sender, arguments) -> TabCompleter.completeForOpts(arguments, "--upload", "--memory", "--network")) .build() ); } @@ -185,6 +192,12 @@ public class HealthModule implements CommandModule { private static void healthReport(SparkPlatform platform, CommandSender sender, CommandResponseHandler resp, Arguments arguments) { resp.replyPrefixed(text("Generating server health report...")); + + if (arguments.boolFlag("upload")) { + uploadHealthReport(platform, sender, resp, arguments); + return; + } + List<Component> report = new LinkedList<>(); report.add(empty()); @@ -209,6 +222,37 @@ public class HealthModule implements CommandModule { resp.reply(report); } + private static void uploadHealthReport(SparkPlatform platform, CommandSender sender, CommandResponseHandler resp, Arguments arguments) { + SparkProtos.HealthMetadata.Builder metadata = SparkProtos.HealthMetadata.newBuilder(); + SparkMetadata.gather(platform, sender.toData(), platform.getStartupGcStatistics()).writeTo(metadata); + + SparkProtos.HealthData.Builder data = SparkProtos.HealthData.newBuilder() + .setMetadata(metadata); + + Sampler activeSampler = platform.getSamplerContainer().getActiveSampler(); + if (activeSampler != null) { + data.putAllTimeWindowStatistics(activeSampler.exportWindowStatistics()); + } + + try { + String key = platform.getBytebinClient().postContent(data.build(), MediaTypes.SPARK_HEALTH_MEDIA_TYPE).key(); + String url = platform.getViewerUrl() + key; + + resp.broadcastPrefixed(text("Health report:", GOLD)); + resp.broadcast(text() + .content(url) + .color(GRAY) + .clickEvent(ClickEvent.openUrl(url)) + .build() + ); + + platform.getActivityLog().addToLog(Activity.urlActivity(resp.senderData(), System.currentTimeMillis(), "Health report", url)); + } catch (Exception e) { + resp.broadcastPrefixed(text("An error occurred whilst uploading the data.", RED)); + e.printStackTrace(); + } + } + private static void addTickStats(List<Component> report, TickStatistics tickStatistics) { report.add(text() .append(text(">", DARK_GRAY, BOLD)) diff --git a/spark-common/src/main/java/me/lucko/spark/common/command/sender/CommandSender.java b/spark-common/src/main/java/me/lucko/spark/common/command/sender/CommandSender.java index a1df627..4dc53eb 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/command/sender/CommandSender.java +++ b/spark-common/src/main/java/me/lucko/spark/common/command/sender/CommandSender.java @@ -34,6 +34,10 @@ public interface CommandSender { UUID getUniqueId(); + default boolean isPlayer() { + return getUniqueId() != null; + } + void sendMessage(Component message); boolean hasPermission(String permission); |