mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-01-14 04:01:58 +01:00
Merge pull request #266 from Fuzzlemann/master
PR for 4.0.0 (Fuzzlemann) (4)
This commit is contained in:
commit
b8d2321584
@ -45,11 +45,11 @@ public enum Settings {
|
||||
LOCALE("Plugin.Locale"),
|
||||
WEBSERVER_IP("WebServer.InternalIP"),
|
||||
ANALYSIS_EXPORT_PATH("Analysis.Export.DestinationFolder"),
|
||||
WEBSERVER_CERTIFICATE_PATH("WebServer.Security.Certificate.KeyStorePath"),
|
||||
WEBSERVER_CERTIFICATE_KEYPASS("WebServer.Security.Certificate.KeyPass"),
|
||||
WEBSERVER_CERTIFICATE_STOREPASS("WebServer.Security.Certificate.StorePass"),
|
||||
WEBSERVER_CERTIFICATE_ALIAS("WebServer.Security.Certificate.Alias"),
|
||||
ETERNAL_WEBSERVER_LINK_PROTOCOL("Analysis.Export.ExternalWebServerLinkProtocol"),
|
||||
WEBSERVER_CERTIFICATE_PATH("WebServer.Security.SSL-Certificate.KeyStorePath"),
|
||||
WEBSERVER_CERTIFICATE_KEYPASS("WebServer.Security.SSL-Certificate.KeyPass"),
|
||||
WEBSERVER_CERTIFICATE_STOREPASS("WebServer.Security.SSL-Certificate.StorePass"),
|
||||
WEBSERVER_CERTIFICATE_ALIAS("WebServer.Security.SSL-Certificate.Alias"),
|
||||
EXTERNAL_WEBSERVER_LINK_PROTOCOL("Analysis.Export.ExternalWebServerLinkProtocol"),
|
||||
//
|
||||
SERVER_NAME("Server.ServerName"),
|
||||
//
|
||||
|
@ -211,15 +211,15 @@ public class API {
|
||||
* <p>
|
||||
* Check if the data is cached to AnalysisCache before calling this.
|
||||
*
|
||||
* @return analysis.html with all placeholders replaced.
|
||||
* @return server.html with all placeholders replaced.
|
||||
*/
|
||||
public String getAnalysisHtmlAsString() {
|
||||
WebServer server = plugin.getUiServer();
|
||||
if (Verify.notNull(server)) {
|
||||
return server.getDataReqHandler().getAnalysisHtml();
|
||||
return server.getDataReqHandler().getServerHtml();
|
||||
}
|
||||
DataRequestHandler reqH = new DataRequestHandler(plugin);
|
||||
return reqH.getAnalysisHtml();
|
||||
return reqH.getServerHtml();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -21,7 +21,7 @@ import java.util.Map;
|
||||
* analysed using the analysis method.
|
||||
* <p>
|
||||
* After being analysed the ReplaceMap can be retrieved for replacing
|
||||
* placeholders on the analysis.html file.
|
||||
* placeholders on the server.html file.
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @since 3.5.2
|
||||
|
@ -73,7 +73,7 @@ public class HookHandler {
|
||||
|
||||
/**
|
||||
* Used to get the Layout with PluginData placeholders to replace %plugins%
|
||||
* placeholder on analysis.html.
|
||||
* placeholder on server.html.
|
||||
*
|
||||
* @return html, getPluginsTabLayout-method
|
||||
* @see HtmlUtils
|
||||
@ -85,7 +85,7 @@ public class HookHandler {
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to get the Layout with PluginData placeholders to replace %plugins%
|
||||
* Used to get the Layout with PluginData placeholders to replace ${plugins}
|
||||
* placeholder on player.html.
|
||||
*
|
||||
* @return html, getPluginsTabLayout-method
|
||||
|
@ -83,7 +83,7 @@ public class ActivityPart extends RawData {
|
||||
private void playerActivityGraphs() {
|
||||
List<TPS> tpsData = tpsPart.getTpsData();
|
||||
addValue("playersonlineseries", PlayerActivityGraphCreator.buildSeriesDataString(tpsData));
|
||||
addValue("%playersgraphcolor%", Settings.HCOLOR_ACT_ONL.toString());
|
||||
addValue("playersgraphcolor", Settings.HCOLOR_ACT_ONL.toString());
|
||||
}
|
||||
|
||||
private void activityPiechart() {
|
||||
@ -93,24 +93,24 @@ public class ActivityPart extends RawData {
|
||||
final String colJoi = Settings.HCOLOR_ACTP_JON.toString();
|
||||
final String colBan = Settings.HCOLOR_ACTP_BAN.toString();
|
||||
|
||||
addValue("%activecol%", colAct);
|
||||
addValue("%inactivecol%", colIna);
|
||||
addValue("%joinleavecol%", colJoi);
|
||||
addValue("%bancol%", colBan);
|
||||
addValue("activecol", colAct);
|
||||
addValue("inactivecol", colIna);
|
||||
addValue("joinleavecol", colJoi);
|
||||
addValue("bancol", colBan);
|
||||
String activityColors = HtmlUtils.separateWithQuotes(
|
||||
"#" + colAct, "#" + colIna, "#" + colJoi, "#" + colBan
|
||||
);
|
||||
addValue("%activitycolors%", activityColors);
|
||||
addValue("activitycolors", activityColors);
|
||||
|
||||
String activityLabels = "[" + HtmlUtils.separateWithQuotes(
|
||||
"Active", "Inactive", "Unknown", "Banned") + "]";
|
||||
addValue("%labelsactivity%", activityLabels);
|
||||
addValue("labelsactivity", activityLabels);
|
||||
|
||||
addValue("activitydata", Arrays.toString(counts));
|
||||
addValue("%active%", counts[0]);
|
||||
addValue("%inactive%", counts[1]);
|
||||
addValue("%joinleaver%", counts[2]);
|
||||
addValue("%banned%", counts[3]);
|
||||
addValue("active", counts[0]);
|
||||
addValue("inactive", counts[1]);
|
||||
addValue("joinleaver", counts[2]);
|
||||
addValue("banned", counts[3]);
|
||||
}
|
||||
|
||||
public void addBan(UUID uuid) {
|
||||
|
@ -58,17 +58,17 @@ public class GamemodePart extends RawData {
|
||||
String col2 = Settings.HCOLOR_GMP_2.toString();
|
||||
String col3 = Settings.HCOLOR_GMP_3.toString();
|
||||
|
||||
addValue("%gm0col%", col0);
|
||||
addValue("%gm1col%", col1);
|
||||
addValue("%gm2col%", col2);
|
||||
addValue("%gm3col%", col3);
|
||||
addValue("gm0col", col0);
|
||||
addValue("gm1col", col1);
|
||||
addValue("gm2col", col2);
|
||||
addValue("gm3col", col3);
|
||||
String gmColors = HtmlUtils.separateWithQuotes(
|
||||
"#" + col0, "#" + col1, "#" + col2, "#" + col3
|
||||
);
|
||||
String gmLabels = "[" + HtmlUtils.separateWithQuotes(
|
||||
"Survival", "Creative", "Adventure", "Spectator") + "]";
|
||||
addValue("%gmcolors%", gmColors);
|
||||
addValue("%gmlabels%", gmLabels);
|
||||
addValue("gmcolors", gmColors);
|
||||
addValue("gmlabel", gmLabels);
|
||||
|
||||
// Adds Percentage indicators
|
||||
for (int i = 0; i < percentages.length; i++) {
|
||||
|
@ -68,7 +68,7 @@ public abstract class RawData {
|
||||
/**
|
||||
* Adds a placeholder to the replaceMap.
|
||||
*
|
||||
* @param placeholder placeholder, with or without % signs.
|
||||
* @param placeholder placeholder, without prefix and suffix
|
||||
* @param value Any value the placeholder should be replaced with.
|
||||
*/
|
||||
public void addValue(String placeholder, Serializable value) {
|
||||
|
@ -2,8 +2,6 @@ package main.java.com.djrapitops.plan.database.sql;
|
||||
|
||||
public class Insert extends SqlParser {
|
||||
|
||||
private int conditions = 0;
|
||||
|
||||
public Insert(String table) {
|
||||
super("INSERT INTO " + table);
|
||||
addSpace();
|
||||
|
@ -2,9 +2,7 @@ package main.java.com.djrapitops.plan.database.sql;
|
||||
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
|
||||
public class Select extends SqlParser {
|
||||
|
||||
private int conditions = 0;
|
||||
public class Select extends WhereParser {
|
||||
|
||||
public Select(String start) {
|
||||
super(start);
|
||||
@ -24,16 +22,4 @@ public class Select extends SqlParser {
|
||||
Log.debug(parser.toString());
|
||||
return parser;
|
||||
}
|
||||
|
||||
public Select where(String... conditions) {
|
||||
append(" WHERE ");
|
||||
for (String condition : conditions) {
|
||||
if (this.conditions > 0) {
|
||||
append(" AND ");
|
||||
}
|
||||
append("(").append(condition).append(")");
|
||||
this.conditions++;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Licence is provided in the jar as license.yml also here:
|
||||
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
|
||||
*/
|
||||
package main.java.com.djrapitops.plan.database.sql;
|
||||
|
||||
/**
|
||||
* @author Fuzzlemann
|
||||
*/
|
||||
public class Update extends WhereParser {
|
||||
|
||||
public Update(String table) {
|
||||
super("UPDATE " + table + " SET");
|
||||
addSpace();
|
||||
}
|
||||
|
||||
public static Update values(String table, String... values) {
|
||||
Update parser = new Update(table);
|
||||
|
||||
int size = values.length;
|
||||
for (int i = 0; i < size; i++) {
|
||||
if (size > 1 && i > 0) {
|
||||
parser.append(", ");
|
||||
}
|
||||
parser.append(values[i] + "=?");
|
||||
}
|
||||
|
||||
return parser;
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Licence is provided in the jar as license.yml also here:
|
||||
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
|
||||
*/
|
||||
package main.java.com.djrapitops.plan.database.sql;
|
||||
|
||||
/**
|
||||
* @author Fuzzlemann
|
||||
*/
|
||||
public abstract class WhereParser extends SqlParser {
|
||||
|
||||
public WhereParser() {
|
||||
super();
|
||||
}
|
||||
|
||||
public WhereParser(String start) {
|
||||
super(start);
|
||||
}
|
||||
|
||||
private int conditions = 0;
|
||||
|
||||
public WhereParser where(String... conditions) {
|
||||
return and(conditions);
|
||||
}
|
||||
|
||||
public WhereParser and(String... conditions) {
|
||||
return whereOperator("AND", conditions);
|
||||
}
|
||||
|
||||
public WhereParser or(String... conditions) {
|
||||
return whereOperator("OR", conditions);
|
||||
}
|
||||
|
||||
private WhereParser whereOperator(String operator, String... conditions) {
|
||||
append(" WHERE ");
|
||||
for (String condition : conditions) {
|
||||
if (this.conditions > 0) {
|
||||
addSpace().append(operator).addSpace();
|
||||
}
|
||||
|
||||
append("(").append(condition).append(")");
|
||||
this.conditions++;
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
@ -63,21 +63,20 @@ public class DataRequestHandler {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the analysis.html as string with replaced placeholders.
|
||||
* Returns the server.html as string with replaced placeholders.
|
||||
*
|
||||
* @return the html
|
||||
*/
|
||||
@Deprecated //analysis.html has been removed //TODO server.html
|
||||
public String getAnalysisHtml() {
|
||||
public String getServerHtml() {
|
||||
try {
|
||||
if (!analysisCache.isCached()) {
|
||||
return "<h1>404 Data was not found in cache</h1>";
|
||||
}
|
||||
return HtmlUtils.replacePlaceholders(
|
||||
HtmlUtils.getStringFromResource("analysis.html"),
|
||||
HtmlUtils.getStringFromResource("server.html"),
|
||||
PlaceholderUtils.getAnalysisReplaceRules(analysisCache.getData()));
|
||||
} catch (FileNotFoundException ex) {
|
||||
return "<h1>404 analysis.html was not found</h1>";
|
||||
return "<h1>404 server.html was not found</h1>";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,6 @@ public class AnalysisPageResponse extends Response {
|
||||
|
||||
public AnalysisPageResponse(DataRequestHandler h) {
|
||||
super.setHeader("HTTP/1.1 200 OK");
|
||||
super.setContent(h.getAnalysisHtml());
|
||||
super.setContent(h.getServerHtml());
|
||||
}
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ public class HtmlUtils {
|
||||
|
||||
public static String getProtocol() {
|
||||
WebServer uiServer = Plan.getInstance().getUiServer();
|
||||
return uiServer.isEnabled() ? uiServer.getProtocol() : Settings.ETERNAL_WEBSERVER_LINK_PROTOCOL.toString();
|
||||
return uiServer.isEnabled() ? uiServer.getProtocol() : Settings.EXTERNAL_WEBSERVER_LINK_PROTOCOL.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -141,7 +141,7 @@ public class ExportUtility {
|
||||
return;
|
||||
}
|
||||
serverFolder.mkdirs();
|
||||
String analysisHtml = HtmlUtils.replacePlaceholders(HtmlUtils.getStringFromResource("analysis.html"), //TODO server.html
|
||||
String analysisHtml = HtmlUtils.replacePlaceholders(HtmlUtils.getStringFromResource("server.html"),
|
||||
PlaceholderUtils.getAnalysisReplaceRules(analysisData))
|
||||
.replace(HtmlUtils.getInspectUrl(""), "../player/");
|
||||
File analysisHtmlFile = new File(serverFolder, "index.html");
|
||||
|
@ -22,7 +22,7 @@
|
||||
<div class="row">
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-bar-chart" aria-hidden="true"></i> Players Online</h2>
|
||||
<h2><i class="fa fa-bar-chart"></i> Players Online</h2>
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<div id="playersOnline" style="width: 100%; height: 500px;"></div>
|
||||
@ -30,7 +30,7 @@
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-info-circle" aria-hidden="true"></i> Information</h2>
|
||||
<h2><i class="fa fa-info-circle"></i> Information</h2>
|
||||
</div>
|
||||
<div class="box" style="height: 75%;">
|
||||
<p>${playersOnline}/${playersMax} Players Online</p>
|
||||
@ -45,15 +45,15 @@
|
||||
<script>
|
||||
var playersOnlineSeries = {
|
||||
name: 'Players Online',
|
||||
data: %playersonlineseries%,
|
||||
data: ${playersonlineseries},
|
||||
type: 'areaspline',
|
||||
color: '#%playersgraphcolor%',
|
||||
color: '#${playersgraphcolor}',
|
||||
tooltip: {
|
||||
valueDecimals: 0
|
||||
}
|
||||
};
|
||||
/*playersChart('playerChart', playersOnlineSeries, 3);*/
|
||||
|
||||
//playersChart('playerChart', playersOnlineSeries, 3);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -72,7 +72,7 @@
|
||||
</div>
|
||||
<div class="box-footer scrollbar" style="padding: 2px;">
|
||||
<div class="row">
|
||||
<div class="column" style="padding: 5px 0px 5px 10px;"><p>Times Kicked: ${kickCount}<br>
|
||||
<div class="column" style="padding: 5px 0 5px 10px;"><p>Times Kicked: ${kickCount}<br>
|
||||
</p></div>
|
||||
<div class="column"><img style="padding: 10px 100px; height: 100px; width: 100px;"
|
||||
src="https://cravatar.eu/avatar/${playerName}/100"></div>
|
||||
@ -192,14 +192,14 @@
|
||||
x.style.transform = "translate3d(0px,0px,0)";
|
||||
x.style.width = "" + navButtons.length * 100 + "%";
|
||||
for (var i = 0; i < navButtons.length; i++) {
|
||||
navButtons[i].onclick = openFunc(i)
|
||||
navButtons[i].onclick = openFunc(i);
|
||||
tabs[i].style.width = "" + 100 / navButtons.length + "%";
|
||||
}
|
||||
x.style.opacity = "1";
|
||||
openFunc(slideIndex)();
|
||||
|
||||
function openFunc(i) {
|
||||
return function() {
|
||||
return function() {
|
||||
var max = navButtons.length;
|
||||
for (var j = 0; j < max; j++) {
|
||||
if (j === i) {
|
||||
@ -210,12 +210,16 @@
|
||||
navButtons[j].classList.remove('active');
|
||||
}
|
||||
}
|
||||
var perc = - 100 / navButtons.length;
|
||||
var percent = - 100 / navButtons.length;
|
||||
slideIndex = i;
|
||||
if (slideIndex > max) {slideIndex = 0};
|
||||
if (slideIndex < 0) {slideIndex = max};
|
||||
if (slideIndex > max) {
|
||||
slideIndex = 0;
|
||||
}
|
||||
if (slideIndex < 0) {
|
||||
slideIndex = max;
|
||||
}
|
||||
window.sessionStorage.setItem("InspectSlideIndex", slideIndex);
|
||||
var value = slideIndex * perc;
|
||||
var value = slideIndex * percent;
|
||||
x.style.transition = "0.5s";
|
||||
x.style.transform = "translate3d(" + value + "%,0px,0)";
|
||||
};
|
||||
|
@ -21,28 +21,28 @@
|
||||
<div class="content-server">
|
||||
<div class="nav-bar row">
|
||||
<a href="javascript:void(0)" class="nav-button">
|
||||
<i class="fa fa-info-circle" aria-hidden="true"></i> Information
|
||||
<i class="fa fa-info-circle"></i> Information
|
||||
</a>
|
||||
<a href="javascript:void(0)" class="nav-button">
|
||||
<i class="fa fa-bar-chart" aria-hidden="true"></i> Online Activity
|
||||
<i class="fa fa-bar-chart"></i> Online Activity
|
||||
</a>
|
||||
<a href="javascript:void(0)" class="nav-button">
|
||||
<i class="fa fa-calendar" aria-hidden="true"></i> Sessions
|
||||
<i class="fa fa-calendar"></i> Sessions
|
||||
</a>
|
||||
<a href="javascript:void(0)" class="nav-button">
|
||||
<i class="fa fa-cogs" aria-hidden="true"></i> Performance
|
||||
<i class="fa fa-cogs"></i> Performance
|
||||
</a>
|
||||
<a href="javascript:void(0)" class="nav-button">
|
||||
<i class="fa fa-list-alt" aria-hidden="true"></i> Playerlist
|
||||
<i class="fa fa-list-alt"></i> Playerlist
|
||||
</a>
|
||||
<a href="javascript:void(0)" class="nav-button">
|
||||
<i class="fa fa-terminal" aria-hidden="true"></i> Command usage
|
||||
<i class="fa fa-terminal"></i> Command usage
|
||||
</a>
|
||||
<a href="javascript:void(0)" class="nav-button">
|
||||
<i class="fa fa-globe" aria-hidden="true"></i> Demographics
|
||||
<i class="fa fa-globe"></i> Demographics
|
||||
</a>
|
||||
<a href="javascript:void(0)" class="nav-button">
|
||||
<i class="fa fa-cubes" aria-hidden="true"></i> Plugins
|
||||
<i class="fa fa-cubes"></i> Plugins
|
||||
</a>
|
||||
</div>
|
||||
<div id="limiter" class="main-limiter">
|
||||
@ -51,7 +51,7 @@
|
||||
<div class="row">
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-bar-chart" aria-hidden="true"></i> Players Online</h2>
|
||||
<h2><i class="fa fa-bar-chart"></i> Players Online</h2>
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<div id="playersOnlineDay" style="width: 100%; height: 700px;"></div>
|
||||
@ -59,7 +59,7 @@
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-info-circle" aria-hidden="true"></i> Information</h2>
|
||||
<h2><i class="fa fa-info-circle"></i> Information</h2>
|
||||
</div>
|
||||
<div class="box" style="margin-bottom: 5px;">
|
||||
<div class="row">
|
||||
@ -91,7 +91,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-calendar-check-o" aria-hidden="true"></i> Recent Logins</h2>
|
||||
<h2><i class="fa fa-calendar-check-o"></i> Recent Logins</h2>
|
||||
</div>
|
||||
<div class="box-footer" style="padding: 2px;">
|
||||
<table>
|
||||
@ -113,7 +113,7 @@
|
||||
<div class="row">
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-bar-chart" aria-hidden="true"></i> Players Online</h2>
|
||||
<h2><i class="fa fa-bar-chart"></i> Players Online</h2>
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<div id="playersOnlineMonth" style="width: 100%; height: 700px;"></div>
|
||||
@ -121,7 +121,7 @@
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-braille" aria-hidden="true"></i> Player Join PunchCard</h2>
|
||||
<h2><i class="fa fa-braille"></i> Player Join PunchCard</h2>
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<div id="punchcard" style="width: 100%; height: 700px;"></div>
|
||||
@ -168,7 +168,7 @@
|
||||
<div class="row" style="flex-grow: 2; width: 140%;">
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-calendar" aria-hidden="true"></i> 50 Most Recent Sessions</h2>
|
||||
<h2><i class="fa fa-calendar"></i> 50 Most Recent Sessions</h2>
|
||||
</div>
|
||||
<div class="box-footer scrollbar" style="padding: 2px;">
|
||||
<table class="sortable table">
|
||||
@ -190,13 +190,13 @@
|
||||
<div class="row">
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-pie-chart" aria-hidden="true"></i> World Playtime</h2>
|
||||
<h2><i class="fa fa-pie-chart"></i> World Playtime</h2>
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<div id="worldPie" style="width: 100%; height: 450px;"></div>
|
||||
</div>
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-pie-chart" aria-hidden="true"></i> Playerbase</h2>
|
||||
<h2><i class="fa fa-pie-chart"></i> Playerbase</h2>
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<div id="activityPie" style="width: 100%; height: 450px;"></div>
|
||||
@ -209,7 +209,7 @@
|
||||
<div class="row"> <!--First row (horizontal)-->
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-bar-chart" aria-hidden="true"></i> Ticks Per Second</h2>
|
||||
<h2><i class="fa fa-bar-chart"></i> Ticks Per Second</h2>
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<div id="tpsGraph" style="width: 100%; height: 700px;"></div>
|
||||
@ -217,7 +217,7 @@
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-bar-chart" aria-hidden="true"></i> Resource Usage</h2>
|
||||
<h2><i class="fa fa-bar-chart"></i> Resource Usage</h2>
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<div id="resourceGraph" style="width: 100%; height: 700px;"></div>
|
||||
@ -227,7 +227,7 @@
|
||||
<div class="row">
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-bar-chart" aria-hidden="true"></i> World Load</h2>
|
||||
<h2><i class="fa fa-bar-chart"></i> World Load</h2>
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<div id="worldGraph" style="width: 100%; height: 700px;"></div>
|
||||
@ -236,7 +236,7 @@
|
||||
<div class="row">
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-cogs" aria-hidden="true"></i> Last 24 Hours</h2>
|
||||
<h2><i class="fa fa-cogs"></i> Last 24 Hours</h2>
|
||||
</div>
|
||||
<div class="box">
|
||||
<p><b>Averages:</b></p>
|
||||
@ -251,7 +251,7 @@
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-cogs" aria-hidden="true"></i> Last 7 Days</h2>
|
||||
<h2><i class="fa fa-cogs"></i> Last 7 Days</h2>
|
||||
</div>
|
||||
<div class="box">
|
||||
<p><b>Averages:</b></p>
|
||||
@ -271,19 +271,19 @@
|
||||
<div id="tab-playerlist" class="tab">
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-list" aria-hidden="true"></i> Playerlist</h2>
|
||||
<h2><i class="fa fa-list"></i> Playerlist</h2>
|
||||
</div>
|
||||
<div class="box-footer scrollbar" style="padding: 2px;">
|
||||
<table class="sortable table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><i class="fa fa-user" aria-hidden="true"></i> Player</th>
|
||||
<th><i class="fa fa-check" aria-hidden="true"></i> Active</th>
|
||||
<th><i class="fa fa-clock-o" aria-hidden="true"></i> Playtime</th>
|
||||
<th><i class="fa fa-calendar-plus-o" aria-hidden="true"></i> Login times</th>
|
||||
<th><i class="fa fa-user-plus" aria-hidden="true"></i> Registered</th>
|
||||
<th><i class="fa fa-calendar-check-o" aria-hidden="true"></i> Last seen</th>
|
||||
<th><i class="fa fa-globe" aria-hidden="true"></i> Geolocation</th>
|
||||
<th><i class="fa fa-user"></i> Player</th>
|
||||
<th><i class="fa fa-check"></i> Active</th>
|
||||
<th><i class="fa fa-clock-o"></i> Playtime</th>
|
||||
<th><i class="fa fa-calendar-plus-o"></i> Login times</th>
|
||||
<th><i class="fa fa-user-plus"></i> Registered</th>
|
||||
<th><i class="fa fa-calendar-check-o"></i> Last seen</th>
|
||||
<th><i class="fa fa-globe"></i> Geolocation</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -296,14 +296,14 @@
|
||||
<div id="tab-command-usage" class="tab">
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-terminal" aria-hidden="true"></i> Command Usage</h2>
|
||||
<h2><i class="fa fa-terminal"></i> Command Usage</h2>
|
||||
</div>
|
||||
<div class="box-footer scrollbar" style="padding: 2px;">
|
||||
<table class="sortable table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><i class="fa fa-chevron-right" aria-hidden="true"></i> Command</th>
|
||||
<th><i class="fa fa-list-ol" aria-hidden="true"></i> Times used</th>
|
||||
<th><i class="fa fa-chevron-right"></i> Command</th>
|
||||
<th><i class="fa fa-list-ol"></i> Times used</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -316,7 +316,7 @@
|
||||
<div id="tab-demographics" class="tab">
|
||||
<div class="column">
|
||||
<div class="box-header">
|
||||
<h2><i class="fa fa-globe" aria-hidden="true"></i> Geolocations</h2>
|
||||
<h2><i class="fa fa-globe"></i> Geolocations</h2>
|
||||
</div>
|
||||
<div class="box-footer" style="padding: 2px;">
|
||||
<div id="choropleth" style="width: 100%; height: 700px;"></div>
|
||||
@ -345,7 +345,7 @@
|
||||
<script>
|
||||
Highcharts.setOptions({
|
||||
global: {
|
||||
timezoneOffset: ${timeZone} * 60
|
||||
timezoneOffset: ${timeZone} * 60
|
||||
}
|
||||
});
|
||||
// Data Variables
|
||||
@ -489,7 +489,7 @@
|
||||
x.style.transform = "translate3d(0px,0px,0)";
|
||||
x.style.width = "" + navButtons.length * 100 + "%";
|
||||
for (var i = 0; i < navButtons.length; i++) {
|
||||
navButtons[i].onclick = openFunc(i)
|
||||
navButtons[i].onclick = openFunc(i);
|
||||
tabs[i].style.width = "" + 100 / navButtons.length + "%";
|
||||
}
|
||||
x.style.opacity = "1";
|
||||
@ -519,12 +519,16 @@
|
||||
navButtons[j].classList.remove('active');
|
||||
}
|
||||
}
|
||||
var perc = - 100 / navButtons.length;
|
||||
var percent = - 100 / navButtons.length;
|
||||
slideIndex = i;
|
||||
if (slideIndex > max) {slideIndex = 0};
|
||||
if (slideIndex < 0) {slideIndex = max};
|
||||
if (slideIndex > max) {
|
||||
slideIndex = 0
|
||||
}
|
||||
if (slideIndex < 0) {
|
||||
slideIndex = max
|
||||
}
|
||||
window.sessionStorage.setItem("AnalysisSlideIndex", slideIndex);
|
||||
var value = slideIndex * perc;
|
||||
var value = slideIndex * percent;
|
||||
x.style.transition = "0.5s";
|
||||
x.style.transform = "translate3d(" + value + "%,0px,0)";
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
function activityPie(id, activitySeries, activityTotal, activityColors) {
|
||||
var myChart = Highcharts.chart(id, {
|
||||
Highcharts.chart(id, {
|
||||
chart: {
|
||||
plotBackgroundColor: null,
|
||||
plotBorderWidth: null,
|
||||
|
@ -1,6 +1,6 @@
|
||||
$(".plugins-header").click(function () {
|
||||
$header = $(this);
|
||||
$content = $header.next();
|
||||
var $header = $(this);
|
||||
var $content = $header.next();
|
||||
$(this).parent().siblings().children().next().slideUp(500);
|
||||
$content.slideToggle(500, function () {
|
||||
//execute this after slideToggle is done
|
||||
|
@ -11,7 +11,7 @@ function punchCard(id, punchcardSeries) {
|
||||
tickInterval: 3600000
|
||||
},
|
||||
yAxis: {
|
||||
categories: ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'],
|
||||
categories: ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
|
||||
},
|
||||
tooltip: {
|
||||
pointFormat: 'Activity: {point.z}'
|
||||
|
@ -1,5 +1,5 @@
|
||||
function resourceChart(id, cpuSeries, ramSeries) {
|
||||
var myChart = Highcharts.stockChart(id, {
|
||||
Highcharts.stockChart(id, {
|
||||
rangeSelector: {
|
||||
selected: 1,
|
||||
buttons: [{
|
||||
|
@ -1,6 +1,6 @@
|
||||
$(".session-header").click(function () {
|
||||
$header = $(this);
|
||||
$content = $header.next();
|
||||
var $header = $(this);
|
||||
var $content = $header.next();
|
||||
$(this).parent().siblings().children().next().slideUp(500);
|
||||
$content.slideToggle(500, function () {
|
||||
//execute this after slideToggle is done
|
||||
|
@ -1,5 +1,5 @@
|
||||
function tpsChart(id, tpsSeries, playersOnlineSeries) {
|
||||
var myChart = Highcharts.stockChart(id, {
|
||||
Highcharts.stockChart(id, {
|
||||
rangeSelector: {
|
||||
selected: 1,
|
||||
buttons: [{
|
||||
@ -31,7 +31,7 @@ function tpsChart(id, tpsSeries, playersOnlineSeries) {
|
||||
title: {
|
||||
text: 'Players'
|
||||
},
|
||||
height: '30%',
|
||||
height: '30%'
|
||||
}, {
|
||||
lineWidth: 2,
|
||||
labels: {
|
||||
@ -43,8 +43,7 @@ function tpsChart(id, tpsSeries, playersOnlineSeries) {
|
||||
},
|
||||
height: '70%',
|
||||
top: '30%',
|
||||
offset: 0,
|
||||
lineWidth: 2
|
||||
offset: 0
|
||||
}],
|
||||
tooltip: {
|
||||
split: true
|
||||
|
@ -1,5 +1,5 @@
|
||||
function worldChart(id, entitySeries, chunkSeries) {
|
||||
var myChart = Highcharts.stockChart(id, {
|
||||
Highcharts.stockChart(id, {
|
||||
rangeSelector: {
|
||||
selected: 1,
|
||||
buttons: [{
|
||||
|
@ -1,5 +1,5 @@
|
||||
function worldMap(id, colorMin, colorMax, mapSeries) {
|
||||
var myChart = Highcharts.mapChart(id, {
|
||||
Highcharts.mapChart(id, {
|
||||
chart: {
|
||||
animation: true
|
||||
},
|
||||
|
@ -1,25 +1,25 @@
|
||||
function worldPie(id, worldSeries, worldTotal) {
|
||||
var myChart = Highcharts.chart(id, {
|
||||
chart: {
|
||||
plotBackgroundColor: null,
|
||||
plotBorderWidth: null,
|
||||
plotShadow: false,
|
||||
type: 'pie'
|
||||
},
|
||||
subtitle: {text: worldTotal},
|
||||
tooltip: {
|
||||
pointFormat: '{series.name}: <b>{point.percentage:.2f}%</b>'
|
||||
},
|
||||
plotOptions: {
|
||||
pie: {
|
||||
allowPointSelect: true,
|
||||
cursor: 'pointer',
|
||||
dataLabels: {
|
||||
enabled: false
|
||||
},
|
||||
showInLegend: true
|
||||
}
|
||||
},
|
||||
series: [worldSeries]
|
||||
});
|
||||
Highcharts.chart(id, {
|
||||
chart: {
|
||||
plotBackgroundColor: null,
|
||||
plotBorderWidth: null,
|
||||
plotShadow: false,
|
||||
type: 'pie'
|
||||
},
|
||||
subtitle: {text: worldTotal},
|
||||
tooltip: {
|
||||
pointFormat: '{series.name}: <b>{point.percentage:.2f}%</b>'
|
||||
},
|
||||
plotOptions: {
|
||||
pie: {
|
||||
allowPointSelect: true,
|
||||
cursor: 'pointer',
|
||||
dataLabels: {
|
||||
enabled: false
|
||||
},
|
||||
showInLegend: true
|
||||
}
|
||||
},
|
||||
series: [worldSeries]
|
||||
});
|
||||
}
|
@ -95,7 +95,7 @@ Html - OP || , Operator (Op)
|
||||
Html - Table No Kills || Keine Kills
|
||||
Manage FAIL - Confirm Action || §c[Plan] Füge -a hinzu um den Befehl zu bestätigen! ${0}
|
||||
Manage FAIL - Faulty DB Connection || §c[Plan] Eine der Datenbanken wurde nicht richtig initialisiert.
|
||||
Manage FAIL - Backup File Not Found || §c[Plan] Sicherheitskopie existiert nicht!
|
||||
Manage FAIL - Backup File Not Found || §c[Plan] Es existiert keine Sicherheitskopie!
|
||||
Manage FAIL - Incorrect DB || §c[Plan] Falsche Datenbank! (SQlite/MySQL wird unterstützt):
|
||||
Manage FAIL - Incorrect Plugin || §c[Plan] Plugin nicht unterstützt:
|
||||
Manage FAIL - Empty DB || §c[Plan] Datenbank hat keine Spieler Daten!
|
||||
@ -114,4 +114,4 @@ Manage NOTIFY - Overwrite || Daten in ${0}-Datenbank werden übe
|
||||
Manage NOTIFY - Partial Overwrite || Einige Daten in ${0}-Datenbank werden überschrieben!
|
||||
Manage NOTIFY - Remove || Daten in ${0}-Datenbank werden entfernt!
|
||||
Manage NOTIFY - Rewrite || Daten in ${0}-Datenbank werden neu geschrieben!
|
||||
WARN - Too Small Queue Size || Warteschlagengröße ist zu klein! (${0}), änder diese Einstellung zu einer höheren! (Derzeit ${1})
|
||||
WARN - Too Small Queue Size || Die Warteschlagengröße ist zu klein! (${0}), änder' diese Einstellung zu einer höheren! (Derzeit ${1})
|
||||
|
@ -42,11 +42,11 @@
|
||||
}
|
||||
.yellow {
|
||||
color: #FFFF55;
|
||||
text-shadow: 0px 0px 6px #000;
|
||||
text-shadow: 0 0 6px #000;
|
||||
}
|
||||
.white {
|
||||
color: #FFFFFF;
|
||||
text-shadow: 0px 0px 8px #000;
|
||||
text-shadow: 0 0 8px #000;
|
||||
}
|
||||
|
||||
body {
|
||||
@ -68,15 +68,15 @@ header {
|
||||
header h1 {
|
||||
font-weight: 500;
|
||||
font-size: 55px;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-left: 10px;
|
||||
}
|
||||
header p {
|
||||
font-weight: 400;
|
||||
}
|
||||
header div {
|
||||
padding: 5pxpx 20px;
|
||||
padding: 5px 20px;
|
||||
}
|
||||
|
||||
.right {
|
||||
@ -126,14 +126,14 @@ header div {
|
||||
background-color: #5da341;
|
||||
padding: 5px 20px;
|
||||
text-align: left;
|
||||
margin: 5px 5px 0px 5px;
|
||||
margin: 5px 5px 0 5px;
|
||||
}
|
||||
.box {
|
||||
background-color: #fff;
|
||||
padding: 5px 20px;
|
||||
color: #000;
|
||||
text-align: left;
|
||||
margin: 0px 5px;
|
||||
margin: 0 5px;
|
||||
}
|
||||
.box-footer {
|
||||
vertical-align: middle;
|
||||
@ -234,10 +234,10 @@ tr:nth-child(odd) {background: #eee}
|
||||
}
|
||||
|
||||
.session-header h3 {
|
||||
margin: 0px;
|
||||
margin: 0;
|
||||
}
|
||||
.session-header p {
|
||||
margin: 0px;
|
||||
margin: 0;
|
||||
}
|
||||
.session {
|
||||
|
||||
@ -249,14 +249,14 @@ tr:nth-child(odd) {background: #eee}
|
||||
margin: 1px 3px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
padding: 0px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.session-col {
|
||||
width: 100%;
|
||||
background: #fff;
|
||||
color: #000;
|
||||
margin: 0px 2px;
|
||||
margin: 0 2px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 10px 20px;
|
||||
@ -272,10 +272,10 @@ tr:nth-child(odd) {background: #eee}
|
||||
display: none;
|
||||
}
|
||||
.plugins-header h2 {
|
||||
margin: 0px;
|
||||
margin: 0;
|
||||
}
|
||||
.plugins-header p {
|
||||
margin: 0px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1680px) {
|
||||
@ -290,14 +290,14 @@ tr:nth-child(odd) {background: #eee}
|
||||
}
|
||||
.content {
|
||||
margin-top: 100px;
|
||||
margin-left: 0%;
|
||||
margin-right: 0%;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.content-server {
|
||||
margin-top: 100px;
|
||||
margin-left: 0%;
|
||||
margin-right: 0%;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.nav-bar {
|
||||
|
@ -7,8 +7,6 @@ package test.java.main.java.com.djrapitops.plan.database;
|
||||
|
||||
import main.java.com.djrapitops.plan.database.Container;
|
||||
import main.java.com.djrapitops.plan.database.DBUtils;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -23,17 +21,6 @@ import static org.junit.Assert.assertEquals;
|
||||
*/
|
||||
public class DBUtilsTest {
|
||||
|
||||
public DBUtilsTest() {
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSplitIntoBatches() {
|
||||
List<Integer> list = new ArrayList<>();
|
||||
|
@ -89,7 +89,7 @@ public class TestInit {
|
||||
|
||||
// Html Files
|
||||
File analysis = new File(getClass().getResource("/server.html").getPath());
|
||||
when(planMock.getResource("analysis.html")).thenReturn(new FileInputStream(analysis));
|
||||
when(planMock.getResource("server.html")).thenReturn(new FileInputStream(analysis));
|
||||
File player = new File(getClass().getResource("/player.html").getPath());
|
||||
when(planMock.getResource("player.html")).thenReturn(new FileInputStream(player));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user