aboutsummaryrefslogtreecommitdiff
path: root/spark-common/src/main/java/me/lucko/spark/common/command
diff options
context:
space:
mode:
authorlucko <git@lucko.me>2024-08-06 21:29:48 +0100
committerGitHub <noreply@github.com>2024-08-06 21:29:48 +0100
commit8017dbd288fca21dac3813409dec959ae6e6c822 (patch)
treebce438e9a7156dcf04f99194295c753702600f1c /spark-common/src/main/java/me/lucko/spark/common/command
parent613f702ddd8c1a7515298917a74464e6799df0c4 (diff)
downloadspark-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.java46
-rw-r--r--spark-common/src/main/java/me/lucko/spark/common/command/sender/CommandSender.java4
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);