From 15078df7d30756f55e56e662ace93af024bd69fd Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 11 Jan 2017 12:48:11 +0200 Subject: [PATCH] Inspect Requests Handled correctly, begun work on analysis Added player.html template. Added analysis.html template --- Plan Advanced/src/analysis.html | 40 ++++++++++++ .../djrapitops/plan/data/AnalysisData.java | 11 ++++ .../com/djrapitops/plan/data/UserData.java | 12 ++++ .../plan/ui/DataRequestHandler.java | 33 +++++++++- .../plan/ui/webserver/Response.java | 4 +- .../djrapitops/plan/utilities/Analysis.java | 63 +++++++++++++++++++ .../plan/utilities/AnalysisUtils.java | 10 +++ .../plan/utilities/FormatUtils.java | 5 ++ Plan Advanced/src/player.html | 41 ++++++++++++ 9 files changed, 216 insertions(+), 3 deletions(-) create mode 100644 Plan Advanced/src/analysis.html create mode 100644 Plan Advanced/src/com/djrapitops/plan/data/AnalysisData.java create mode 100644 Plan Advanced/src/com/djrapitops/plan/utilities/AnalysisUtils.java create mode 100644 Plan Advanced/src/player.html diff --git a/Plan Advanced/src/analysis.html b/Plan Advanced/src/analysis.html new file mode 100644 index 000000000..b78c3d99c --- /dev/null +++ b/Plan Advanced/src/analysis.html @@ -0,0 +1,40 @@ + + + + + + + Plan | Server Analysis + + + + + + + +
+

Plan | Server Analysis

+ + + + + +
+

%activitygraph%

+
+

%activitypiegraph%

+
+
+

Averages

+
+
+ + \ No newline at end of file diff --git a/Plan Advanced/src/com/djrapitops/plan/data/AnalysisData.java b/Plan Advanced/src/com/djrapitops/plan/data/AnalysisData.java new file mode 100644 index 000000000..6b10eca52 --- /dev/null +++ b/Plan Advanced/src/com/djrapitops/plan/data/AnalysisData.java @@ -0,0 +1,11 @@ + +package com.djrapitops.plan.data; + +/** + * + * @author Rsl1122 + */ +public class AnalysisData { + private long averagePlayTime; + +} diff --git a/Plan Advanced/src/com/djrapitops/plan/data/UserData.java b/Plan Advanced/src/com/djrapitops/plan/data/UserData.java index f0b904a14..7e6eea316 100644 --- a/Plan Advanced/src/com/djrapitops/plan/data/UserData.java +++ b/Plan Advanced/src/com/djrapitops/plan/data/UserData.java @@ -35,6 +35,8 @@ public class UserData { private boolean isOp; private boolean isBanned; private DemographicsData demData; + + private String name; public UserData(Player player, DemographicsData demData, Database db) { uuid = player.getUniqueId(); @@ -57,6 +59,7 @@ public class UserData { lastGamemode = player.getGameMode(); this.demData = demData; isBanned = player.isBanned(); + name = player.getName(); } public UserData(OfflinePlayer player, DemographicsData demData, Database db) { @@ -78,6 +81,7 @@ public class UserData { gmTimes.put(GameMode.SPECTATOR, zero); this.demData = demData; isBanned = player.isBanned(); + name = player.getName(); } public void addIpAddress(InetAddress ip) { @@ -210,6 +214,10 @@ public class UserData { return demData; } + public String getName() { + return name; + } + // Setters ------------------------------------------------------------- public void setUuid(UUID uuid) { this.uuid = uuid; @@ -274,4 +282,8 @@ public class UserData { public void setDemData(DemographicsData demData) { this.demData = demData; } + + public void setName(String name) { + this.name = name; + } } diff --git a/Plan Advanced/src/com/djrapitops/plan/ui/DataRequestHandler.java b/Plan Advanced/src/com/djrapitops/plan/ui/DataRequestHandler.java index 9e7af7dda..73fdb27e6 100644 --- a/Plan Advanced/src/com/djrapitops/plan/ui/DataRequestHandler.java +++ b/Plan Advanced/src/com/djrapitops/plan/ui/DataRequestHandler.java @@ -5,6 +5,9 @@ import com.djrapitops.plan.Plan; import com.djrapitops.plan.data.UserData; import com.djrapitops.plan.data.cache.AnalysisCacheHandler; import com.djrapitops.plan.data.cache.InspectCacheHandler; +import com.djrapitops.plan.utilities.FormatUtils; +import java.util.HashMap; +import java.util.Scanner; import java.util.UUID; /** @@ -31,7 +34,35 @@ public class DataRequestHandler { if (data == null) { return "

404 Data was not found in cache

"; } - return "Test Successful"; + Scanner scanner = new Scanner(plugin.getResource("player.html")); + String html = ""; + while (scanner.hasNextLine()) { + String line = scanner.nextLine(); + html += line + "\r\n"; + } + HashMap replaceMap = new HashMap<>(); + replaceMap.put("%uuid%", ""+data.getUuid()); + replaceMap.put("%logintimes%", ""+data.getLoginTimes()); + replaceMap.put("%bed%", FormatUtils.formatLocation(data.getBedLocation())); + replaceMap.put("%geoloc%", data.getDemData().getGeoLocation()); + int age = data.getDemData().getAge(); + replaceMap.put("%age%", (age != -1) ? ""+age:"Not known"); + replaceMap.put("%gender%", ""+data.getDemData().getGender().name().toLowerCase()); + replaceMap.put("%gmpiechart%", "Piechart soon"); + replaceMap.put("%ips%", data.getIps().toString()); + replaceMap.put("%nicknames%", data.getNicknames().toString()); + replaceMap.put("%name%", data.getName()); + replaceMap.put("%registered%", FormatUtils.formatTimeStamp(""+data.getRegistered())); + replaceMap.put("%timeskicked%", ""+data.getTimesKicked()); + replaceMap.put("%playtime%", FormatUtils.formatTimeAmount(""+data.getPlayTime())); + replaceMap.put("%banned%", data.isBanned() ? "Banned":"Not Banned"); + replaceMap.put("%op%", data.isOp() ? ", Operator (Op)":""); + + for (String key : replaceMap.keySet()) { + html = html.replaceAll(key, replaceMap.get(key)); + } + + return html; } public String getAnalysisHtml() { diff --git a/Plan Advanced/src/com/djrapitops/plan/ui/webserver/Response.java b/Plan Advanced/src/com/djrapitops/plan/ui/webserver/Response.java index 2b671ed43..99c61a6d4 100644 --- a/Plan Advanced/src/com/djrapitops/plan/ui/webserver/Response.java +++ b/Plan Advanced/src/com/djrapitops/plan/ui/webserver/Response.java @@ -58,11 +58,11 @@ public class Response { } if (handler.checkIfCached(uuid)) { String dataHtml = handler.getDataHtml(uuid); - String htmlDef = "HTTP/1.1 Analysis\r\n" + String htmlDef = "HTTP/1.1 Inspect\r\n" + "Content-Type: text/html\r\n" + "Content-Length: " + dataHtml.length() + "\r\n" + "\r\n"; - output.write((htmlDef + dataHtml).getBytes()); + output.write((htmlDef+dataHtml).getBytes()); return; } } diff --git a/Plan Advanced/src/com/djrapitops/plan/utilities/Analysis.java b/Plan Advanced/src/com/djrapitops/plan/utilities/Analysis.java index 060ac0458..94d82f5f6 100644 --- a/Plan Advanced/src/com/djrapitops/plan/utilities/Analysis.java +++ b/Plan Advanced/src/com/djrapitops/plan/utilities/Analysis.java @@ -1,5 +1,68 @@ package com.djrapitops.plan.utilities; +import com.djrapitops.plan.Plan; +import com.djrapitops.plan.data.AnalysisData; +import com.djrapitops.plan.data.UserData; +import com.djrapitops.plan.data.cache.InspectCacheHandler; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.scheduler.BukkitRunnable; + public class Analysis { + private Plan plugin; + private AnalysisData data; + private InspectCacheHandler inspectCache; + private final List rawData; + private final List added; + + public Analysis(Plan plugin) { + this.plugin = plugin; + this.inspectCache = plugin.getInspectCache(); + rawData = new ArrayList<>(); + added = new ArrayList<>(); + } + + public void analyze() { + rawData.clear(); + added.clear(); + plugin.log("Analysis | Beginning analysis of user data.."); + OfflinePlayer[] offlinePlayers = Bukkit.getServer().getOfflinePlayers(); + List uuids = new ArrayList<>(); + for (OfflinePlayer p : offlinePlayers) { + UUID uuid = p.getUniqueId(); + if (plugin.getDB().wasSeenBefore(uuid)) { + uuids.add(uuid); + } + } + (new BukkitRunnable() { + @Override + public void run() { + uuids.stream().forEach((uuid) -> { + inspectCache.cache(uuid); + }); + plugin.log("Analysis | Fetching Data.."); + while (rawData.size() != uuids.size()) { + try { + this.wait(1); + } catch (InterruptedException ex) { + } + uuids.stream() + .filter((uuid) -> (!added.contains(uuid))) + .forEach((uuid) -> { + UserData userData = inspectCache.getFromCache(uuid); + if (userData != null) { + rawData.add(userData); + added.add(uuid); + } + }); + } + plugin.log("Analysis | Data Fetched, beginning Analysis of data.."); + + } + }).runTaskAsynchronously(plugin); + } } diff --git a/Plan Advanced/src/com/djrapitops/plan/utilities/AnalysisUtils.java b/Plan Advanced/src/com/djrapitops/plan/utilities/AnalysisUtils.java new file mode 100644 index 000000000..38cd3b719 --- /dev/null +++ b/Plan Advanced/src/com/djrapitops/plan/utilities/AnalysisUtils.java @@ -0,0 +1,10 @@ + +package com.djrapitops.plan.utilities; + +/** + * + * @author Rsl1122 + */ +public class AnalysisUtils { + +} diff --git a/Plan Advanced/src/com/djrapitops/plan/utilities/FormatUtils.java b/Plan Advanced/src/com/djrapitops/plan/utilities/FormatUtils.java index 60230a2b4..08158be01 100644 --- a/Plan Advanced/src/com/djrapitops/plan/utilities/FormatUtils.java +++ b/Plan Advanced/src/com/djrapitops/plan/utilities/FormatUtils.java @@ -4,6 +4,7 @@ package com.djrapitops.plan.utilities; import java.util.ArrayList; import java.util.Date; import java.util.List; +import org.bukkit.Location; /** * @@ -118,5 +119,9 @@ public class FormatUtils { } return result; } + + public static String formatLocation(Location loc) { + return "x "+loc.getBlockX()+" z " + loc.getBlockZ() +" in "+loc.getWorld(); + } } diff --git a/Plan Advanced/src/player.html b/Plan Advanced/src/player.html new file mode 100644 index 000000000..5c41c6031 --- /dev/null +++ b/Plan Advanced/src/player.html @@ -0,0 +1,41 @@ + + + + + + + Plan | Inspect %name% + + + + + + + +
+

Plan | Inspect Player %name%

+

UUID: %uuid%

+

Registered: %registered% - %banned%%op%

+ + + + + +
+

Nicknames: %nicknames% | Has connected from ips: %ips%

+

Geolocation: %geoloc%

+

Playtime: %playtime%

+

Has logged in %logintimes% times.

+

Age: %age% | Gender: %gender%

+
+

%gmpiechart%

+
+
+ + \ No newline at end of file