package net.buycraft.plugin.shared.util; import lombok.Builder; import lombok.NonNull; import net.buycraft.plugin.IBuycraftPlatform; import net.buycraft.plugin.data.responses.ServerInformation; import net.buycraft.plugin.execution.DuePlayerFetcher; import net.buycraft.plugin.shared.config.BuycraftConfiguration; import net.buycraft.plugin.shared.tasks.ListingUpdateTask; import okhttp3.CacheControl; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Date; @Builder public class ReportBuilder { @NonNull private final DuePlayerFetcher duePlayerFetcher; private final ListingUpdateTask listingUpdateTask; @NonNull private final String ip; private final int port; private final boolean serverOnlineMode; @NonNull private final IBuycraftPlatform platform; @NonNull private final BuycraftConfiguration configuration; @NonNull private final OkHttpClient client; public String generate() { final StringWriter out = new StringWriter(); final PrintWriter writer = new PrintWriter(out, true); String date = new Date().toString(); final String os = System.getProperty("os.name") + " | " + System.getProperty("os.version") + " | " + System.getProperty("os.arch"); String javaVersion = System.getProperty("java.version") + " | " + System.getProperty("java.vendor"); writer.println("### Server Information ###"); writer.println("Report generated on " + date); writer.println(); writer.println("Operating system: " + os); writer.println("Java version: " + javaVersion); writer.println("Server version: " + platform.getPlatformInformation().getType() + " / " + platform.getPlatformInformation().getVersion()); writer.println("Server IP and port: " + ip + " / " + port); writer.println("Online mode: " + serverOnlineMode); writer.println("Buycraft is-bungeecord setting: " + configuration.isBungeeCord()); writer.println(); writer.println("### Plugin Information ###"); writer.println("Plugin version: " + platform.getPluginVersion()); writer.println("Platform: " + platform.getPlatformInformation().getType() + " / " + platform.getPlatformInformation().getVersion()); writer.println(); writer.println("Connected to Buycraft? " + (platform.getApiClient() != null)); ServerInformation information = platform.getServerInformation(); writer.println("Web store information found? " + (information != null)); if (information != null) { writer.println("Web store ID: " +information.getAccount().getId()); writer.println("Web store URL: " + information.getAccount().getDomain()); writer.println("Web store name: " + information.getAccount().getName()); writer.println("Web store currency: " + information.getAccount().getCurrency().getIso4217()); writer.println("Web store in online mode? " + information.getAccount().isOnlineMode()); writer.println("Server name: " + information.getServer().getName()); writer.println("Server ID: " + information.getServer().getId()); } writer.println("Players in queue: " + duePlayerFetcher.getDuePlayers()); if (listingUpdateTask != null) { writer.println("Listing update last completed: " + listingUpdateTask.getLastUpdate()); } writer.println(); writer.println("### Service status ###"); // Try fetching test URLs tryGet("Buycraft plugin API", "https://plugin.buycraft.net", writer); tryGet("Google over HTTPS", "https://encrypted.google.com", writer); tryGet("Google over HTTP", "http://www.google.com", writer); return out.toString(); } private void tryGet(String type, String url, PrintWriter writer) { Request request = new Request.Builder() .get() .cacheControl(new CacheControl.Builder().noStore().build()) .url(url) .build(); try { Response response = client.newCall(request).execute(); writer.println("Can access " + type + " (" + url + ")"); // close the body! response.body().close(); } catch (IOException e) { writer.println("Can't access " + type + " (" + url + "):"); e.printStackTrace(writer); } } }