[2.8.0-SNAPSHOT] Improved data visualization on analysis page

- Added icon library
- Changed default color of adventure slice
- Added boxes, lots of boxes.
- Added total number of unique commands
This commit is contained in:
Rsl1122 2017-03-05 00:12:32 +02:00
parent 87a3a93f25
commit 09a3de2535
5 changed files with 344 additions and 25 deletions

View File

@ -13,7 +13,8 @@ public class AnalysisData {
private long averagePlayTime;
private long totalPlayTime;
private double averageAge;
private String top50CommandsListHtml;
private String commandUseTableHtml;
private long totalCommands;
private String top20ActivePlayers;
private String recentPlayers;
private String sortablePlayersTable;
@ -49,7 +50,7 @@ public class AnalysisData {
*/
public AnalysisData() {
sortablePlayersTable = Html.ERROR_NOT_SET+"";
top50CommandsListHtml = Html.ERROR_NOT_SET+"";
commandUseTableHtml = Html.ERROR_NOT_SET+"";
top20ActivePlayers = Html.ERROR_NOT_SET+"";
recentPlayers = Html.ERROR_NOT_SET+"";
playersDataArray = new String[]{"[0]","[\"No data\"]","[0]","[\"No data\"]","[0]","[\"No data\"]"};
@ -82,14 +83,14 @@ public class AnalysisData {
* @return HTML String of the Top50CommandsList
*/
public String getTop50CommandsListHtml() {
return top50CommandsListHtml;
return commandUseTableHtml;
}
/**
* @param top50CommandsListHtml HTML String of the Top50CommandsList
*/
public void setTop50CommandsListHtml(String top50CommandsListHtml) {
this.top50CommandsListHtml = top50CommandsListHtml;
public void setCommandUseTableHtml(String top50CommandsListHtml) {
this.commandUseTableHtml = top50CommandsListHtml;
}
/**
@ -381,4 +382,12 @@ public class AnalysisData {
public void setPlayersDataArray(String[] playersDataArray) {
this.playersDataArray = playersDataArray;
}
public void setTotalCommands(long totalCommands) {
this.totalCommands = totalCommands;
}
public long getTotalCommands() {
return totalCommands;
}
}

View File

@ -21,6 +21,9 @@ import org.bukkit.GameMode;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import static org.bukkit.Bukkit.getOfflinePlayer;
import static org.bukkit.Bukkit.getOfflinePlayer;
import static org.bukkit.Bukkit.getOfflinePlayer;
import static org.bukkit.Bukkit.getOfflinePlayer;
/**
*
@ -170,10 +173,13 @@ public class Analysis {
}
private void createCommandUseTable(final RawAnalysisData raw, AnalysisData data) {
if (!raw.getCommandUse().isEmpty()) {
data.setTop50CommandsListHtml(AnalysisUtils.createTableOutOfHashMap(raw.getCommandUse()));
HashMap<String, Integer> commandUse = raw.getCommandUse();
if (!commandUse.isEmpty()) {
data.setCommandUseTableHtml(AnalysisUtils.createTableOutOfHashMap(commandUse));
data.setTotalCommands(commandUse.size());
} else {
data.setTop50CommandsListHtml(Html.ERROR_TABLE_2.parse());
data.setCommandUseTableHtml(Html.ERROR_TABLE_2.parse());
data.setTotalCommands(0);
}
}

View File

@ -44,6 +44,7 @@ public class PlaceholderUtils {
replaceMap.put("%npweek%", data.getNewPlayersWeek() + "");
replaceMap.put("%npmonth%", data.getNewPlayersMonth() + "");
replaceMap.put("%commanduse%", data.getTop50CommandsListHtml());
replaceMap.put("%totalcommands%", data.getTotalCommands()+"");
replaceMap.put("%avgage%", (data.getAverageAge() != -1) ? "" + data.getAverageAge() : Phrase.DEM_UNKNOWN + "");
replaceMap.put("%avgplaytime%", FormatUtils.formatTimeAmount("" + data.getAveragePlayTime()));
replaceMap.put("%totalplaytime%", FormatUtils.formatTimeAmount("" + data.getTotalPlayTime()));
@ -78,6 +79,14 @@ public class PlaceholderUtils {
replaceMap.put("%activitydata%", Arrays.toString(activityData));
replaceMap.put("%activitycolors%", "\"#" + Settings.HCOLOR_ACTP_ACT
+ "\",\"#" + Settings.HCOLOR_ACTP_INA + "\",\"#" + Settings.HCOLOR_ACTP_JON + "\",\"#" + Settings.HCOLOR_ACTP_BAN + "\"");
replaceMap.put("%activecol%", Settings.HCOLOR_ACTP_ACT+"");
replaceMap.put("%inactivecol%", Settings.HCOLOR_ACTP_INA+"");
replaceMap.put("%joinleavecol%", Settings.HCOLOR_ACTP_JON+"");
replaceMap.put("%bancol%", Settings.HCOLOR_ACTP_BAN+"");
replaceMap.put("%gm0col%", Settings.HCOLOR_GMP_0+"");
replaceMap.put("%gm1col%", Settings.HCOLOR_GMP_1+"");
replaceMap.put("%gm2col%", Settings.HCOLOR_GMP_2+"");
replaceMap.put("%gm3col%", Settings.HCOLOR_GMP_3+"");
String[] gmData = new String[]{
(data.getGm0Perc() * 100) + "",
(data.getGm1Perc() * 100) + "",

View File

@ -135,21 +135,73 @@
outline-width: 7px;
}
.itemLinks {}
.box-area {
width: 100%;
text-align: center;
margin: 0px;
padding: 0px;
}
.infobox {
color: white;
display: inline-block;
background-color: #267F00;
padding: 8px 14px;
border-radius: 10px;
}
.info-text {
float: right;
width: 70%;
text-align: right;
}
.info-number {
font-size: x-large;
float: right;
}
.info-label {
float: right;
font-size: medium;
}
.info-icon {
font-size: xx-large;
float: left;
width: 20%;
}
.headerbox {
color: #267F00;
display: inline-block;
border-style: solid;
border-color: #267F00;
padding: 8px 14px;
border-radius: 10px;
width: 100%;
}
.header-icon {
font-size: xx-large;
float: left;
width: 60%;
}
.header-text {
font-size: x-large;
}
.header-label {
padding: 0px;
margin: 0px;
border: 0px;
}
</style>
</head>
<body>
<header>
<img style="float: right; padding: 5px" src="http://puu.sh/tJZUb/c2e0ab220f.png" alt="Player Analytics | Analysis">
<p style="float: right; text-align: right;">Player Analytics v.%version%</p>
<h1>Plan | Server Analysis</h1>
<h4>Analysis refreshed %refresh% ago</h4>
</header>
<div class="clearfix">
<div class="clearfix">
<div id="navLinks">
<ul>
<li class="itemLinks" data-pos="0px"><i class="fa fa-info" aria-hidden="true"></i> Information</li>
<li class="itemLinks" data-pos="-25%"><i class="fa fa-pie-chart" aria-hidden="true"></i> Online Activity</li>
<li class="itemLinks" data-pos="-25%"><i class="fa fa-bar-chart" aria-hidden="true"></i> Online Activity</li>
<li class="itemLinks" data-pos="-50%"><i class="fa fa-list-alt" aria-hidden="true"></i> Playerlist</li>
<li class="itemLinks" data-pos="-75%"><i class="fa fa-terminal" aria-hidden="true"></i> Command usage</li>
</ul>
@ -158,7 +210,24 @@
<div id="wrapper">
<div class="content">
<div class="column" style="width: 60%;">
<h4>Player Activity | Last 24h - New Players: %npday%</h4>
<div class="headerbox">
<div class="header-icon">
<div class="header-label"><i class="fa fa-bar-chart" aria-hidden="true"></i><span class="header-text"> Player Activity - Last 24h</span></div>
</div>
<div class="infobox" style="float: right;">
<div class="info-icon">
<i class="fa fa-user-plus" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%npday%
</div>
<div class="info-label">
New Players
</div>
</div>
</div>
</div>
<canvas id="playerChartDay" width="1000" height="350" style="width: 95%;"></canvas>
<div class="buttons">
<p><b>Most recent logins</b>: %recentlogins%</p>
@ -167,31 +236,221 @@
%factionstable%
</div>
<div class="column" style="width: 40%;">
<h4>Information</h4>
<p>%activitytotal% players have played on this server.<br/>
A Total of %totalplaytime% has been played with the average of %avgplaytime%<br/>
<div class="headerbox">
<div class="header-icon">
<div class="header-label"><i class="fa fa-info" aria-hidden="true"></i><span class="header-text"> Information</span></div>
</div>
<div class="infobox" style="float: right;">
<div class="info-icon">
<i class="fa fa-users" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%activitytotal%
</div>
<div class="info-label">
Total Players
</div>
</div>
</div>
</div>
<p>A Total of %totalplaytime% has been played with the average of %avgplaytime%<br/>
Players have joined %totallogins% times.<br/>
Players have died %deaths% times, of which %playerkills% were caused by another Player.<br/>
A Total of %mobkills% mobs have been slain.<br/>
The average of known player ages is %avgage%.
%essentialswarps%</p>
<h4>Gamemode Usage</h4>
<p class="header-label" style="color: #267F00; "><i class="fa fa-pie-chart" aria-hidden="true"></i><span class="header-text"> Gamemode Usage</span></p><br/>
<div class="box-area">
<div class="infobox" style="background-color: #%gm0col%; width: 23%;">
<div class="info-icon">
<i class="fa fa-fire" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%gm0%
</div>
<div class="info-label">
Survival
</div>
</div>
</div>
<div class="infobox" style="background-color: #%gm1col%; width: 23%;">
<div class="info-icon">
<i class="fa fa-cube" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%gm1%
</div>
<div class="info-label">
Creative
</div>
</div>
</div>
<div class="infobox" style="background-color: #%gm2col%; width: 23%;">
<div class="info-icon">
<i class="fa fa-chevron-right" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%gm2%
</div>
<div class="info-label">
Adventure
</div>
</div>
</div>
<div class="infobox" style="background-color: #%gm3col%; width: 23%;">
<div class="info-icon">
<i class="fa fa-binoculars" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%gm3%
</div>
<div class="info-label">
Spectator
</div>
</div>
</div>
</div><br/>
<canvas id="gmPie" width="1000" height="600" style="width: 95%;"></canvas>
<p>Survival: %gm0% | Creative: %gm1% | Adventure: %gm2% | Spectator: %gm3%</p>
</div>
</div>
<div class="content">
<div class="column" style="width: 60%;">
<h4>Player Activity | Last 24h - New Players: %npday%</h4>
<canvas id="playerChartDay2" width="1000" height="350" style="width: 95%;"></canvas>
<h4>Player Activity | Last 7 days - New Players: %npweek%</h4>
<canvas id="playerChartWeek" width="1000" height="350" style="width: 95%;"></canvas>
<h4>Player Activity | Last 30 days - New Players: %npmonth%</h4>
<div class="headerbox">
<div class="header-icon">
<div class="header-label"><i class="fa fa-bar-chart" aria-hidden="true"></i><span class="header-text"> Player Activity - Last 24h</span></div>
</div>
<div class="infobox" style="float: right;">
<div class="info-icon">
<i class="fa fa-user-plus" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%npday%
</div>
<div class="info-label">
New Players
</div>
</div>
</div>
</div>
<canvas id="playerChartDay2" width="1000" height="350" style="width: 95%;"></canvas><br/>
<div class="headerbox">
<div class="header-icon">
<div class="header-label"><i class="fa fa-bar-chart" aria-hidden="true"></i><span class="header-text"> Player Activity - Last 7d</span></div>
</div>
<div class="infobox" style="float: right;">
<div class="info-icon">
<i class="fa fa-user-plus" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%npweek%
</div>
<div class="info-label">
New Players
</div>
</div>
</div>
</div>
<canvas id="playerChartWeek" width="1000" height="350" style="width: 95%;"></canvas><br/>
<div class="headerbox">
<div class="header-icon">
<div class="header-label"><i class="fa fa-bar-chart" aria-hidden="true"></i><span class="header-text"> Player Activity - Last 30d</span></div>
</div>
<div class="infobox" style="float: right;">
<div class="info-icon">
<i class="fa fa-user-plus" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%npmonth%
</div>
<div class="info-label">
New Players
</div>
</div>
</div>
</div>
<canvas id="playerChartMonth" width="1000" height="350" style="width: 95%;"></canvas>
</div>
<div class="column" style="width: 40%;">
<h4>Playerbase composition - Total: %activitytotal%</h4>
<p>Active %active% | Inactive %inactive% | Banned %banned% | Joined once %joinleaver%</p>
<div class="headerbox">
<div class="header-icon">
<div class="header-label"><i class="fa fa-pie-chart" aria-hidden="true"></i><span class="header-text"> Playerbase Composition</span></div>
</div>
<div class="infobox" style="float: right;">
<div class="info-icon">
<i class="fa fa-users" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%activitytotal%
</div>
<div class="info-label">
Total Players
</div>
</div>
</div>
</div>
<div class="box-area">
<div class="infobox" style="background-color: #%activecol%;">
<div class="info-icon">
<i class="fa fa-user" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%active%
</div>
<div class="info-label">
<span style="color: #%activecol%;">__</span>Active
</div>
</div>
</div>
<div class="infobox" style="background-color: #%inactivecol%;">
<div class="info-icon">
<i class="fa fa-user-o" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%inactive%
</div>
<div class="info-label">
Inactive
</div>
</div>
</div>
<div class="infobox" style="background-color: #%joinleavecol%;">
<div class="info-icon">
<i class="fa fa-user-secret" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%joinleaver%
</div>
<div class="info-label">
Single join
</div>
</div>
</div>
<div class="infobox" style="background-color: #%bancol%;">
<div class="info-icon">
<i class="fa fa-ban" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%banned%
</div>
<div class="info-label">
Banned
</div>
</div>
</div>
</div><br/>
<canvas id="activityPie" width="1000" height="600" style="width: 95%;"></canvas>
<div class="buttons">
<p><b>Most recent logins</b>: %recentlogins%</p>
@ -199,6 +458,24 @@
</div>
</div>
<div class="content column">
<div class="headerbox">
<div class="header-icon">
<div class="header-label"><i class="fa fa-list-alt" aria-hidden="true"></i><span class="header-text"> Playerlist</span></div>
</div>
<div class="infobox" style="float: right;">
<div class="info-icon">
<i class="fa fa-users" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%activitytotal%
</div>
<div class="info-label">
Total Players
</div>
</div>
</div>
</div>
<table class="sortable table">
<thead>
<tr>
@ -217,6 +494,24 @@
</table>
</div>
<div class="content column">
<div class="headerbox">
<div class="header-icon">
<div class="header-label"><i class="fa fa-terminal" aria-hidden="true"></i><span class="header-text"> Command usage</span></div>
</div>
<div class="infobox" style="float: right;">
<div class="info-icon">
<i class="fa fa-terminal" aria-hidden="true"></i>
</div>
<div class="info-text">
<div class="info-number">
%totalcommands%
</div>
<div class="info-label">
Commands
</div>
</div>
</div>
</div>
<table class="sortable table">
<thead>
<tr>

View File

@ -38,7 +38,7 @@ Customization:
GamemodePie:
Survival: '951800'
Creative: '01A1DB'
Adventure: 'FFFF33'
Adventure: '769316'
Spectator: '228B22'
ActivityPie:
Active: '228B22'