Network page parsing, Fixed error pages in WebAPI mode

This commit is contained in:
Rsl1122 2017-11-23 22:12:45 +02:00
parent 6137eca560
commit 8ccd9854ba
9 changed files with 145 additions and 37 deletions

View File

@ -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;
}
}
}

View File

@ -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) {

View File

@ -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);

View File

@ -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>");

View File

@ -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) {

View 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]
});
}

View File

@ -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

View File

@ -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>

View File

@ -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());