mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-22 15:23:14 +01:00
Network page parsing, Fixed error pages in WebAPI mode
This commit is contained in:
parent
6137eca560
commit
8ccd9854ba
@ -4,6 +4,7 @@
|
||||
*/
|
||||
package main.java.com.djrapitops.plan.database.tables;
|
||||
|
||||
import com.djrapitops.plugin.api.utility.log.Log;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.api.exceptions.DBCreateTableException;
|
||||
@ -314,4 +315,31 @@ public class UserInfoTable extends UserIDTable {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public int getServerUserCount(UUID serverUUID) {
|
||||
try {
|
||||
String sql = "SELECT " +
|
||||
" COUNT(" + columnRegistered + ") as c" +
|
||||
" FROM " + tableName +
|
||||
" WHERE " + columnServerID + "=" + serverTable.statementSelectServerID;
|
||||
|
||||
return query(new QueryStatement<Integer>(sql, 20000) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, serverUUID.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer processResults(ResultSet set) throws SQLException {
|
||||
if (set.next()) {
|
||||
return set.getInt("c");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
} catch (SQLException e) {
|
||||
Log.toLog(this.getClass().getName(), e);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -56,7 +56,7 @@ public class NetworkPageParser extends PageParser {
|
||||
addValue("playersNewWeek", AnalysisUtils.getNewPlayers(registerDates, TimeAmount.WEEK.ms(), now));
|
||||
|
||||
Map<UUID, String> networkPageContents = ((BungeeInformationManager) plugin.getInfoManager()).getNetworkPageContent();
|
||||
addValue("contentServers", HtmlStructure.createNetworkPageContent(networkPageContents));
|
||||
addValue("tabContentServers", HtmlStructure.createNetworkPageContent(networkPageContents));
|
||||
|
||||
return HtmlUtils.replacePlaceholders(FileUtil.getStringFromResource("web/network.html"), placeHolders);
|
||||
} catch (Exception e) {
|
||||
|
@ -48,6 +48,10 @@ public class APIResponseHandler {
|
||||
return PageCache.loadPage(target + "css", () -> new CSSResponse(target));
|
||||
}
|
||||
|
||||
if (target.endsWith(".js")) {
|
||||
return PageCache.loadPage(target + "js", () -> new JavaScriptResponse(target));
|
||||
}
|
||||
|
||||
if (args.length < 2 || !"api".equals(args[1])) {
|
||||
String address = MiscUtils.getIPlan().getInfoManager().getWebServerAddress() + target;
|
||||
String link = Html.LINK.parse(address, address);
|
||||
|
@ -106,12 +106,11 @@ public class DebugPageResponse extends ErrorResponse {
|
||||
Collection<ServerInfo> bukkitServers = serverInfoManager.getBukkitServers();
|
||||
|
||||
if (!bukkitServers.isEmpty()) {
|
||||
content.append("<p>If your issue is about Bungee-Bukkit connection relations, please include the following debug information of available servers as well: ");
|
||||
content.append("<p>If your issue is about Bungee-Bukkit connection relations, please include the following debug information of available servers as well:</p>");
|
||||
for (ServerInfo info : bukkitServers) {
|
||||
String link = Html.LINK.parse(info.getWebAddress() + "/debug", info.getWebAddress() + "/debug");
|
||||
content.append(link).append("<br>");
|
||||
content.append("<p>").append(link).append("</p>");
|
||||
}
|
||||
content.append("</p>");
|
||||
}
|
||||
|
||||
content.append("<pre>### Bungee Configuration<br>");
|
||||
|
@ -4,20 +4,25 @@
|
||||
*/
|
||||
package main.java.com.djrapitops.plan.utilities.html;
|
||||
|
||||
import com.djrapitops.plugin.api.utility.log.Log;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.ServerVariableHolder;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.data.Session;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.systems.info.BukkitInformationManager;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.html.graphs.PlayerActivityGraphCreator;
|
||||
import main.java.com.djrapitops.plan.utilities.html.structure.SessionTabStructureCreator;
|
||||
import main.java.com.djrapitops.plan.utilities.html.tables.SessionsTableCreator;
|
||||
import org.apache.commons.lang3.text.StrSubstitutor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
@ -312,16 +317,12 @@ public class HtmlStructure {
|
||||
List<String> values = new ArrayList<>(networkPageContents.values());
|
||||
Collections.sort(values);
|
||||
int size = values.size();
|
||||
int extra = size % 3;
|
||||
for (int j = 0; j < extra; j++) {
|
||||
values.add("<div class=\"column\"></div>");
|
||||
}
|
||||
for (String server : values) {
|
||||
if (i % 3 == 0) {
|
||||
b.append("<div class=\"row\">");
|
||||
if (i % 2 == 0) {
|
||||
b.append("<div class=\"row clearfix\">");
|
||||
}
|
||||
b.append(server);
|
||||
if ((i + 1) % 3 == 0 || i + 1 == size) {
|
||||
if ((i + 1) % 2 == 0 || i + 1 == size) {
|
||||
b.append("</div>");
|
||||
}
|
||||
i++;
|
||||
@ -330,23 +331,72 @@ public class HtmlStructure {
|
||||
}
|
||||
|
||||
public static String createServerContainer(Plan plugin) {
|
||||
int maxPlayers = plugin.getVariable().getMaxPlayers();
|
||||
ServerVariableHolder variable = plugin.getVariable();
|
||||
int maxPlayers = variable.getMaxPlayers();
|
||||
int online = plugin.getServer().getOnlinePlayers().size();
|
||||
Optional<Long> analysisRefreshDate = ((BukkitInformationManager) plugin.getInfoManager()).getAnalysisRefreshDate();
|
||||
String refresh = analysisRefreshDate.map(FormatUtils::formatTimeStamp).orElse("-");
|
||||
|
||||
String serverName = plugin.getServerInfoManager().getServerName();
|
||||
String serverType = variable.getVersion();
|
||||
String address = "../server/" + serverName;
|
||||
|
||||
|
||||
return "<div class=\"column\">" + "<div class=\"box-header\"><h2><i class=\"fa fa-server\" aria-hidden=\"true\"></i> " +
|
||||
serverName +
|
||||
"</h2></div>" +
|
||||
"<div class=\"box\"><p>" + online + "/" + maxPlayers +
|
||||
" Players Online</p></div>" +
|
||||
"<div class=\"box-footer\"><p>Last Refresh: " + refresh + "</p>" +
|
||||
"<a href=\"" + address + "\" class=\"button right\">Analysis</a>" +
|
||||
"</div></div>";
|
||||
Database db = plugin.getDB();
|
||||
UUID serverUUID = plugin.getServerUuid();
|
||||
String id = serverUUID.toString().replace("-", "");
|
||||
|
||||
int playerCount = db.getUserInfoTable().getServerUserCount(serverUUID);
|
||||
String playerData = "[]";
|
||||
try {
|
||||
playerData = PlayerActivityGraphCreator.buildSeriesDataString(db.getTpsTable().getTPSData(serverUUID));
|
||||
} catch (SQLException e) {
|
||||
Log.toLog(HtmlStructure.class.getClass().getName(), e);
|
||||
}
|
||||
|
||||
return "<div class=\"col-xs-12 col-sm-12 col-md-6 col-lg-6\">" +
|
||||
"<div class=\"card\">" +
|
||||
"<div class=\"header\">" +
|
||||
"<div class=\"row clearfix\">" +
|
||||
"<div class=\"col-xs-12 col-sm-12\">" +
|
||||
"<h2><i class=\"col-light-green fa fa-server\"></i> " + serverName + "</h2>" +
|
||||
"</div></div></div>" +
|
||||
"<div class=\"panel panel-default\">" +
|
||||
"<div class=\"panel-heading\">" +
|
||||
"<div class=\"row\">" +
|
||||
"<div id=\"playerChart" + id + "\" style=\"height: 200px;\"></div>" +
|
||||
"</div></div>" +
|
||||
"<div class=\"panel-body\">" +
|
||||
"<div class=\"row\">" +
|
||||
"<div class=\"col-md-8\">" +
|
||||
"<p><i class=\"fa fa-users\"></i> Registered Players " +
|
||||
"<span class=\"pull-right\">" + playerCount + "</span></p>" +
|
||||
"<p><i class=\"col-blue fa fa-user\"></i> Players Online " +
|
||||
"<span class=\"pull-right\">" + online + " / " + maxPlayers + "</span></p>" +
|
||||
"<p><i class=\"col-deep-orange fa fa-compass\"></i> Type " +
|
||||
"<span class=\"pull-right\">" + serverType + "</span></p></div>" +
|
||||
"<div class=\"col-md-4\">" +
|
||||
"<p><i class=\"fa fa-clock-o\"></i> Last Refresh" +
|
||||
"<span class=\"pull-right\"><b>" + refresh + "</b></span></p>" +
|
||||
"<br>" +
|
||||
"<button href=\"" + address + "\" type=\"button\" class=\"pull-right btn bg-light-green waves-effect\">" +
|
||||
"<i class=\"material-icons\">trending_up</i>" +
|
||||
"<span>ANALYSIS</span>" +
|
||||
"</button></div></div></div></div></div></div>" +
|
||||
"<script>" +
|
||||
"var playersOnlineSeries" + id + " = {" +
|
||||
"name: 'Players Online'," +
|
||||
"data: " + playerData + "," +
|
||||
"type: 'areaspline'," +
|
||||
"color: '${playersGraphColor}'," +
|
||||
"tooltip: {" +
|
||||
"valueDecimals: 0" +
|
||||
"}" +
|
||||
"};" +
|
||||
"</script>" +
|
||||
"<script>$(function () {" +
|
||||
"playersChartNoNav(playerChart" + id + ", playersOnlineSeries" + id +
|
||||
"}</script>";
|
||||
}
|
||||
|
||||
public static String parseOfflineServerContainer(String oldContent) {
|
||||
|
37
Plan/src/main/resources/web/js/charts/playerGraphNoNav.js
Normal file
37
Plan/src/main/resources/web/js/charts/playerGraphNoNav.js
Normal file
@ -0,0 +1,37 @@
|
||||
function playersChartNoNav(id, playersOnlineSeries) {
|
||||
Highcharts.stockChart(id, {
|
||||
rangeSelector: {
|
||||
selected: 3,
|
||||
buttons: [{
|
||||
type: 'hour',
|
||||
count: 12,
|
||||
text: '12h'
|
||||
}, {
|
||||
type: 'hour',
|
||||
count: 24,
|
||||
text: '24h'
|
||||
}, {
|
||||
type: 'day',
|
||||
count: 7,
|
||||
text: '7d'
|
||||
}, {
|
||||
type: 'month',
|
||||
count: 1,
|
||||
text: '30d'
|
||||
}, {
|
||||
type: 'all',
|
||||
text: 'All'
|
||||
}]
|
||||
},
|
||||
navigator: {
|
||||
enabled: false
|
||||
},
|
||||
title: {text: ''},
|
||||
plotOptions: {
|
||||
areaspline: {
|
||||
fillOpacity: 0.4
|
||||
}
|
||||
},
|
||||
series: [playersOnlineSeries]
|
||||
});
|
||||
}
|
@ -233,14 +233,8 @@
|
||||
<span class="pull-right"><b>${playersTotal}</b></span>
|
||||
</li>
|
||||
<li>
|
||||
<i class="col-blue fa fa-user"></i> Unique Players / Day
|
||||
<small>(AVG.)</small>
|
||||
<span class="pull-right"><b>${playersAverage}</b></span>
|
||||
</li>
|
||||
<li>
|
||||
<i class="col-light-green fa fa-user-plus"></i> New Players / Day
|
||||
<small>(AVG.)</small>
|
||||
<span class="pull-right"><b>${playersNewAverage}</b></span>
|
||||
<i class="col-blue fa fa-user"></i> Players Online
|
||||
<span class="pull-right"><b>${playersOnline}</b></span>
|
||||
</li>
|
||||
<li></li>
|
||||
<li><i class="col-green fa fa-line-chart"></i> Last Peak: ${lastPeakTime}<span
|
||||
|
@ -34,6 +34,7 @@
|
||||
</head>
|
||||
|
||||
<body class="theme-red">
|
||||
<script src="js/charts/playerGraphNoNav.js"></script>
|
||||
<!-- Page Loader -->
|
||||
<div class="page-loader-wrapper">
|
||||
<div class="loader">
|
||||
@ -233,14 +234,8 @@
|
||||
<span class="pull-right"><b>${playersTotal}</b></span>
|
||||
</li>
|
||||
<li>
|
||||
<i class="col-blue fa fa-user"></i> Unique Players / Day
|
||||
<small>(AVG.)</small>
|
||||
<span class="pull-right"><b>${playersAverage}</b></span>
|
||||
</li>
|
||||
<li>
|
||||
<i class="col-light-green fa fa-user-plus"></i> New Players / Day
|
||||
<small>(AVG.)</small>
|
||||
<span class="pull-right"><b>${playersNewAverage}</b></span>
|
||||
<i class="col-blue fa fa-user"></i> Players Online
|
||||
<span class="pull-right"><b>${playersOnline}</b></span>
|
||||
</li>
|
||||
<li></li>
|
||||
<li><i class="col-green fa fa-line-chart"></i> Last Peak: ${lastPeakTime}<span
|
||||
@ -316,7 +311,7 @@
|
||||
<script src="js/admin.js"></script>
|
||||
|
||||
<!-- Plan Charts -->
|
||||
<script src="./js/playerGraph.js"></script>
|
||||
<script src="./js/charts/playerGraph.js"></script>
|
||||
|
||||
<!-- Chart Data -->
|
||||
<script>
|
||||
|
@ -466,6 +466,7 @@ public class DatabaseTest {
|
||||
assertEquals(uuid, userInfo.getUuid());
|
||||
assertEquals(123456789L, (long) usersTable.getRegisterDates().get(0));
|
||||
assertEquals(123456789L, userInfo.getRegistered());
|
||||
assertEquals(1, userInfoTable.getServerUserCount(Plan.getServerUUID()));
|
||||
assertEquals("Waiting for Update..", userInfo.getName());
|
||||
assertFalse(userInfo.isBanned());
|
||||
assertFalse(userInfo.isOpped());
|
||||
|
Loading…
Reference in New Issue
Block a user