mirror of
https://github.com/PlaceholderAPI/PlaceholderAPI
synced 2026-02-26 18:01:13 +01:00
Add metrics
This commit is contained in:
@@ -4,8 +4,10 @@ import at.helpch.placeholderapi.commands.PlaceholderCommandRouter;
|
||||
import at.helpch.placeholderapi.configuration.ConfigManager;
|
||||
import at.helpch.placeholderapi.expansion.manager.CloudExpansionManager;
|
||||
import at.helpch.placeholderapi.expansion.manager.LocalExpansionManager;
|
||||
import at.helpch.placeholderapi.metrics.MetricsManager;
|
||||
import at.helpch.placeholderapi.updatechecker.UpdateChecker;
|
||||
import com.hypixel.hytale.event.EventPriority;
|
||||
import com.hypixel.hytale.server.core.HytaleServer;
|
||||
import com.hypixel.hytale.server.core.command.system.CommandSender;
|
||||
import com.hypixel.hytale.server.core.console.ConsoleSender;
|
||||
import com.hypixel.hytale.server.core.event.events.BootEvent;
|
||||
@@ -13,8 +15,12 @@ import com.hypixel.hytale.server.core.event.events.PrepareUniverseEvent;
|
||||
import com.hypixel.hytale.server.core.event.events.player.PlayerDisconnectEvent;
|
||||
import com.hypixel.hytale.server.core.plugin.JavaPlugin;
|
||||
import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
|
||||
import com.hypixel.hytale.server.core.task.TaskRegistration;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class PlaceholderAPIPlugin extends JavaPlugin {
|
||||
private final ConfigManager configManager = new ConfigManager(this);
|
||||
private final LocalExpansionManager localExpansionManager = new LocalExpansionManager(this);
|
||||
@@ -36,6 +42,14 @@ public class PlaceholderAPIPlugin extends JavaPlugin {
|
||||
protected void setup() {
|
||||
configManager.setup();
|
||||
|
||||
if (configManager.config().metrics()) {
|
||||
final MetricsManager metricsManager = new MetricsManager(this);
|
||||
final ScheduledFuture<Void> task = (ScheduledFuture<Void>) HytaleServer.SCHEDULED_EXECUTOR.scheduleAtFixedRate(() -> {
|
||||
metricsManager.send();
|
||||
}, 30, 30, TimeUnit.SECONDS);
|
||||
getTaskRegistry().registerTask(task);
|
||||
}
|
||||
|
||||
getEventRegistry().register(PlayerDisconnectEvent.class, localExpansionManager::onQuit);
|
||||
getEventRegistry().register(EventPriority.LAST, BootEvent.class, this::onServerLoad);
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.nio.file.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -66,6 +67,15 @@ public final class ConfigManager {
|
||||
|
||||
final Map<String, Object> data = YAML.load(content);
|
||||
config = GSON.fromJson(GSON.toJsonTree(data), PlaceholderAPIConfig.class);
|
||||
|
||||
if (config.metricsUuid() == null && config.metrics() == null) {
|
||||
config.metricsUuid(UUID.randomUUID());
|
||||
config.metrics(true);
|
||||
save();
|
||||
} else if (config.metricsUuid() == null && config.metrics()) {
|
||||
config.metricsUuid(UUID.randomUUID());
|
||||
save();
|
||||
}
|
||||
}
|
||||
|
||||
public PlaceholderAPIConfig config() {
|
||||
|
||||
@@ -24,36 +24,21 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public final class PlaceholderAPIConfig {
|
||||
private boolean checkUpdates;
|
||||
private boolean cloudEnabled;
|
||||
private boolean debugMode;
|
||||
private Boolean metrics;
|
||||
private ExpansionSort cloudSorting;
|
||||
private BooleanValue booleanValue;
|
||||
private String dateFormat;
|
||||
private Map<String, Object> expansions;
|
||||
private UUID metricsUuid;
|
||||
|
||||
public PlaceholderAPIConfig(boolean checkUpdates, boolean cloudEnabled, boolean debugMode, @NotNull ExpansionSort cloudSorting,
|
||||
@NotNull BooleanValue booleanValue, @NotNull String dateFormat) {
|
||||
this.checkUpdates = checkUpdates;
|
||||
this.cloudEnabled = cloudEnabled;
|
||||
this.debugMode = debugMode;
|
||||
this.cloudSorting = cloudSorting;
|
||||
this.booleanValue = booleanValue;
|
||||
this.dateFormat = dateFormat;
|
||||
this.expansions = new HashMap<>();
|
||||
}
|
||||
public PlaceholderAPIConfig() {
|
||||
|
||||
public PlaceholderAPIConfig(boolean checkUpdates, boolean cloudEnabled, boolean debugMode, @NotNull ExpansionSort cloudSorting,
|
||||
@NotNull BooleanValue booleanValue, @NotNull String dateFormat, Map<String, Object> expansions) {
|
||||
this.checkUpdates = checkUpdates;
|
||||
this.cloudEnabled = cloudEnabled;
|
||||
this.debugMode = debugMode;
|
||||
this.cloudSorting = cloudSorting;
|
||||
this.booleanValue = booleanValue;
|
||||
this.dateFormat = dateFormat;
|
||||
this.expansions = expansions;
|
||||
}
|
||||
|
||||
public boolean checkUpdates() {
|
||||
@@ -76,6 +61,14 @@ public final class PlaceholderAPIConfig {
|
||||
debugMode = value;
|
||||
}
|
||||
|
||||
public Boolean metrics() {
|
||||
return metrics;
|
||||
}
|
||||
|
||||
public void metrics(final boolean value) {
|
||||
metrics = value;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ExpansionSort cloudSorting() {
|
||||
return cloudSorting;
|
||||
@@ -111,4 +104,12 @@ public final class PlaceholderAPIConfig {
|
||||
public void expansions(@NotNull final Map<String, Object> value) {
|
||||
expansions = value;
|
||||
}
|
||||
|
||||
public UUID metricsUuid() {
|
||||
return metricsUuid;
|
||||
}
|
||||
|
||||
public void metricsUuid(@NotNull final UUID metricsUuid) {
|
||||
this.metricsUuid = metricsUuid;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
package at.helpch.placeholderapi.metrics;
|
||||
|
||||
import at.helpch.placeholderapi.PlaceholderAPIPlugin;
|
||||
import at.helpch.placeholderapi.expansion.PlaceholderExpansion;
|
||||
import at.helpch.placeholderapi.expansion.manager.CloudExpansionManager;
|
||||
import com.google.gson.FieldNamingPolicy;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.hypixel.hytale.common.util.java.ManifestUtil;
|
||||
import com.hypixel.hytale.server.core.HytaleServer;
|
||||
import com.hypixel.hytale.server.core.universe.Universe;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class MetricsManager {
|
||||
private static final String METRICS_URL = "https://ecloud.placeholderapi.com/api/metrics/";
|
||||
private static final Gson GSON = new GsonBuilder()
|
||||
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
|
||||
.create();
|
||||
private static final HttpClient CLIENT = HttpClient.newHttpClient();
|
||||
|
||||
private final PlaceholderAPIPlugin main;
|
||||
|
||||
public MetricsManager(@NotNull final PlaceholderAPIPlugin main) {
|
||||
this.main = main;
|
||||
}
|
||||
|
||||
public void send() {
|
||||
final String pluginVersion = main.getManifest().getVersion().toString();
|
||||
final String serverVersion = ManifestUtil.getImplementationVersion();
|
||||
final boolean usingEcloud = main.configManager().config().cloudEnabled();
|
||||
final List<String> expansionsUsed = main.localExpansionManager().getExpansions().stream()
|
||||
.map(PlaceholderExpansion::getName)
|
||||
.toList();
|
||||
final Map<String, String> expansionVersions = main.localExpansionManager().getExpansions().stream()
|
||||
.collect(Collectors.toUnmodifiableMap(PlaceholderExpansion::getName, PlaceholderExpansion::getVersion));
|
||||
final String javaVersion = System.getProperty("java.version");
|
||||
final String serverOs = System.getProperty("os.name");
|
||||
final int playerCount = Universe.get().getPlayerCount();
|
||||
final UUID serverUuid = main.configManager().config().metricsUuid();
|
||||
|
||||
final MetricsPayload payload = new MetricsPayload(pluginVersion, serverVersion, usingEcloud, expansionsUsed,
|
||||
expansionVersions, javaVersion, serverOs, playerCount, serverUuid);
|
||||
|
||||
final String json = GSON.toJson(payload);
|
||||
|
||||
final HttpRequest request = HttpRequest.newBuilder(URI.create(METRICS_URL))
|
||||
.POST(HttpRequest.BodyPublishers.ofString(json))
|
||||
.header("Content-Type", "application/json")
|
||||
.header("User-Agent", CloudExpansionManager.USER_AGENT)
|
||||
.build();
|
||||
|
||||
CLIENT.sendAsync(request, HttpResponse.BodyHandlers.discarding());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package at.helpch.placeholderapi.metrics;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public final class MetricsPayload {
|
||||
private final String pluginVersion;
|
||||
private final String serverVersion;
|
||||
private final String platform = "HYTALE";
|
||||
private final boolean usingEcloud;
|
||||
private final List<String> expansionsUsed;
|
||||
private final Map<String, String> expansionVersions;
|
||||
private final String javaVersion;
|
||||
private final String serverOs;
|
||||
private final int playerCount;
|
||||
private final UUID serverUuid;
|
||||
private final String pluginName = "PlaceholderAPI";
|
||||
|
||||
public MetricsPayload(final String pluginVersion, final String serverVersion, final boolean usingEcloud,
|
||||
final List<String> expansionsUsed, final Map<String, String> expansionVersions,
|
||||
final String javaVersion, final String serverOs, final int playerCount,
|
||||
final UUID serverUuid) {
|
||||
this.pluginVersion = pluginVersion;
|
||||
this.serverVersion = serverVersion;
|
||||
this.usingEcloud = usingEcloud;
|
||||
this.expansionsUsed = expansionsUsed;
|
||||
this.expansionVersions = expansionVersions;
|
||||
this.javaVersion = javaVersion;
|
||||
this.serverOs = serverOs;
|
||||
this.playerCount = playerCount;
|
||||
this.serverUuid = serverUuid;
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@
|
||||
check_updates: true
|
||||
cloud_enabled: true
|
||||
cloud_sorting: "NAME"
|
||||
metrics: true
|
||||
boolean_value:
|
||||
true_value: 'yes'
|
||||
false_value: 'no'
|
||||
|
||||
Reference in New Issue
Block a user