mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-12 14:49:56 +01:00
WorldPie Creator, removed some useless things & Todo markings
This commit is contained in:
parent
a2d7e6a3b2
commit
75843e16ed
@ -43,7 +43,6 @@ import main.java.com.djrapitops.plan.systems.info.server.ServerInfoManager;
|
||||
import main.java.com.djrapitops.plan.systems.listeners.*;
|
||||
import main.java.com.djrapitops.plan.systems.processing.Processor;
|
||||
import main.java.com.djrapitops.plan.systems.queue.ProcessingQueue;
|
||||
import main.java.com.djrapitops.plan.systems.tasks.PeriodicDBCommitTask;
|
||||
import main.java.com.djrapitops.plan.systems.tasks.TPSCountTimer;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.PageCache;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.WebServer;
|
||||
@ -214,10 +213,7 @@ public class Plan extends BukkitPlugin<Plan> implements IPlan {
|
||||
Benchmark.start("Task Registration");
|
||||
tpsCountTimer = new TPSCountTimer(this);
|
||||
|
||||
long period = TimeAmount.MINUTE.ticks() * 5L;
|
||||
|
||||
runnableFactory.createNew(tpsCountTimer).runTaskTimer(1000, TimeAmount.SECOND.ticks());
|
||||
runnableFactory.createNew(new PeriodicDBCommitTask(this)).runTaskTimerAsynchronously(period, period);
|
||||
// Analysis refresh settings
|
||||
int analysisRefreshMinutes = Settings.ANALYSIS_AUTO_REFRESH.getNumber();
|
||||
boolean analysisRefreshTaskIsEnabled = analysisRefreshMinutes > 0;
|
||||
|
@ -2,13 +2,14 @@ package main.java.com.djrapitops.plan.database;
|
||||
|
||||
import main.java.com.djrapitops.plan.api.IPlan;
|
||||
import main.java.com.djrapitops.plan.api.exceptions.DatabaseInitException;
|
||||
import main.java.com.djrapitops.plan.data.UserInfo;
|
||||
import main.java.com.djrapitops.plan.database.tables.*;
|
||||
import org.apache.commons.dbcp2.BasicDataSource;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Abstract class representing a Database.
|
||||
@ -124,17 +125,6 @@ public abstract class Database {
|
||||
public void init() throws DatabaseInitException {
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to get all UserInfo for multiple UUIDs.
|
||||
* <p>
|
||||
* Should only be called from async thread.
|
||||
*
|
||||
* @param uuids UUIDs to fetch data for.
|
||||
* @return Data for matching UUIDs.
|
||||
* @throws SQLException If database error occurs.
|
||||
*/
|
||||
public abstract List<UserInfo> getUserDataForUUIDS(Collection<UUID> uuids) throws SQLException;
|
||||
|
||||
/**
|
||||
* Check if the user is saved in the database.
|
||||
*
|
||||
|
@ -3,7 +3,6 @@ package main.java.com.djrapitops.plan.database.databases;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.api.IPlan;
|
||||
import main.java.com.djrapitops.plan.api.exceptions.DatabaseInitException;
|
||||
import main.java.com.djrapitops.plan.data.UserInfo;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.database.tables.*;
|
||||
import main.java.com.djrapitops.plan.utilities.Benchmark;
|
||||
@ -11,9 +10,6 @@ import org.apache.commons.dbcp2.BasicDataSource;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
@ -263,16 +259,6 @@ public abstract class SQLDB extends Database {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<UserInfo> getUserDataForUUIDS(Collection<UUID> uuidsCol) throws SQLException {
|
||||
if (uuidsCol == null || uuidsCol.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
// TODO REWRITE
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
private void setStatus(String status) {
|
||||
Log.debug("Database", status);
|
||||
}
|
||||
|
@ -16,8 +16,6 @@ import java.util.*;
|
||||
*/
|
||||
public class IPsTable extends UserIDTable {
|
||||
|
||||
// TODO Write tests
|
||||
|
||||
private final String columnIP = "ip";
|
||||
private final String columnGeolocation = "geolocation";
|
||||
|
||||
|
@ -147,6 +147,4 @@ public class KillsTable extends UserIDTable {
|
||||
close(set, statement);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO getPlayerKills (UUID)
|
||||
}
|
||||
|
@ -20,8 +20,6 @@ import java.util.stream.Collectors;
|
||||
*/
|
||||
public class SessionsTable extends UserIDTable {
|
||||
|
||||
// TODO getLastPlayed(UUID, UUID)
|
||||
|
||||
private final String columnID = "id";
|
||||
private final String columnSessionStart = "session_start";
|
||||
private final String columnSessionEnd = "session_end";
|
||||
|
@ -21,13 +21,14 @@ import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* //TODO Class Javadoc Comment
|
||||
* Server Specific user information table.
|
||||
*
|
||||
* Represents plan_user_info.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class UserInfoTable extends UserIDTable {
|
||||
|
||||
//TODO Server Specific Table
|
||||
private final String columnRegistered = "registered";
|
||||
private final String columnOP = "opped";
|
||||
private final String columnBanned = "banned";
|
||||
|
@ -4,7 +4,6 @@ import com.djrapitops.plugin.utilities.player.Fetch;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.Session;
|
||||
import main.java.com.djrapitops.plan.systems.cache.DataCache;
|
||||
import main.java.com.djrapitops.plan.systems.processing.DBCommitProcessor;
|
||||
import main.java.com.djrapitops.plan.systems.processing.player.*;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -98,8 +97,7 @@ public class PlanPlayerListener implements Listener {
|
||||
plugin.addToProcessQueue(
|
||||
new RegisterProcessor(uuid, player.getFirstPlayed(), time, playerName, playersOnline),
|
||||
new IPUpdateProcessor(uuid, ip),
|
||||
new NameProcessor(uuid, playerName, displayName),
|
||||
new DBCommitProcessor(plugin.getDB())
|
||||
new NameProcessor(uuid, playerName, displayName)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,9 @@
|
||||
package main.java.com.djrapitops.plan.systems.processing.player;
|
||||
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.data.Session;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
@ -22,6 +26,7 @@ public class DeathProcessor extends PlayerProcessor {
|
||||
@Override
|
||||
public void process() {
|
||||
UUID uuid = getUUID();
|
||||
// TODO DB Update Deaths +1
|
||||
Optional<Session> cachedSession = Plan.getInstance().getDataCache().getCachedSession(uuid);
|
||||
cachedSession.ifPresent(Session::died);
|
||||
}
|
||||
}
|
||||
|
@ -1,35 +0,0 @@
|
||||
/*
|
||||
* 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.systems.tasks;
|
||||
|
||||
import com.djrapitops.plugin.task.AbsRunnable;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.systems.processing.DBCommitProcessor;
|
||||
|
||||
/**
|
||||
* Periodically commits changes to the SQLite Database.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class PeriodicDBCommitTask extends AbsRunnable {
|
||||
|
||||
private Plan plugin;
|
||||
|
||||
public PeriodicDBCommitTask(Plan plugin) {
|
||||
super("PeriodicDBCommitTask");
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Database db = plugin.getDB();
|
||||
if ("mysql".equals(db.getConfigName())) {
|
||||
this.cancel();
|
||||
return;
|
||||
}
|
||||
plugin.addToProcessQueue(new DBCommitProcessor(db));
|
||||
}
|
||||
}
|
@ -1,34 +1,88 @@
|
||||
package main.java.com.djrapitops.plan.utilities.html.graphs;
|
||||
|
||||
import main.java.com.djrapitops.plan.data.time.GMTimes;
|
||||
import main.java.com.djrapitops.plan.data.time.WorldTimes;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class WorldPieCreator {
|
||||
|
||||
private WorldPieCreator() {
|
||||
throw new IllegalStateException("Utility Class");
|
||||
}
|
||||
|
||||
public static String createSeriesData(WorldTimes worldTimes) {
|
||||
// TODO Rewrite WorldPie
|
||||
// StringBuilder arrayBuilder = new StringBuilder("[");
|
||||
// int i = 0;
|
||||
// int size = worldTimes.size();
|
||||
// for (Map.Entry<String, Long> world : worldTimes.entrySet()) {
|
||||
// arrayBuilder.append("{name:'").append(world.getKey())
|
||||
// .append("',y:").append(world.getValue());
|
||||
//
|
||||
// if (i == 1) {
|
||||
// arrayBuilder.append(", sliced: true, selected: true");
|
||||
// }
|
||||
//
|
||||
// arrayBuilder.append("}");
|
||||
// if (i < size - 1) {
|
||||
// arrayBuilder.append(",");
|
||||
// }
|
||||
// i++;
|
||||
// }
|
||||
// arrayBuilder.append("]");
|
||||
// return arrayBuilder.toString();
|
||||
return "[]";
|
||||
/**
|
||||
* Used to create HighCharts series string for series & drilldown.
|
||||
*
|
||||
* @param worldTimes WorldTimes object.
|
||||
* @return String array, index 0: Series data, 1: drilldown data
|
||||
*/
|
||||
public static String[] createSeriesData(WorldTimes worldTimes) {
|
||||
StringBuilder seriesBuilder = new StringBuilder("[");
|
||||
int i = 0;
|
||||
Map<String, Long> playtimePerWorld = worldTimes.getWorldTimes().entrySet().stream()
|
||||
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getTotal()));
|
||||
|
||||
int size = playtimePerWorld.size();
|
||||
for (Map.Entry<String, Long> world : playtimePerWorld.entrySet()) {
|
||||
seriesBuilder.append("{name:'").append(world.getKey())
|
||||
.append("',y:").append(world.getValue());
|
||||
|
||||
seriesBuilder.append("}");
|
||||
if (i < size - 1) {
|
||||
seriesBuilder.append(",");
|
||||
}
|
||||
i++;
|
||||
}
|
||||
seriesBuilder.append("]");
|
||||
|
||||
String seriesData = seriesBuilder.toString();
|
||||
|
||||
String drilldownData = createDrilldownData(worldTimes);
|
||||
|
||||
return new String[]{seriesData, drilldownData};
|
||||
}
|
||||
|
||||
private static String createDrilldownData(WorldTimes worldTimes) {
|
||||
StringBuilder drilldownBuilder = new StringBuilder("[");
|
||||
int i = 0;
|
||||
|
||||
Map<String, GMTimes> gmTimesMap = worldTimes.getWorldTimes();
|
||||
int size = gmTimesMap.size();
|
||||
for (Map.Entry<String, GMTimes> world : gmTimesMap.entrySet()) {
|
||||
drilldownBuilder.append("{name:'").append(world.getKey())
|
||||
.append("', id:'").append(world.getKey())
|
||||
.append("',");
|
||||
drilldownBuilder.append("data: [");
|
||||
|
||||
appendGMTimesForWorld(drilldownBuilder, world);
|
||||
|
||||
if (i < size - 1) {
|
||||
drilldownBuilder.append(",");
|
||||
}
|
||||
i++;
|
||||
}
|
||||
drilldownBuilder.append("]");
|
||||
return drilldownBuilder.toString();
|
||||
}
|
||||
|
||||
private static void appendGMTimesForWorld(StringBuilder drilldownBuilder, Map.Entry<String, GMTimes> world) {
|
||||
Map<String, Long> gmTimes = world.getValue().getTimes();
|
||||
int smallSize = gmTimes.size();
|
||||
int j = 0;
|
||||
for (Map.Entry<String, Long> entry : gmTimes.entrySet()) {
|
||||
drilldownBuilder.append("['")
|
||||
.append(entry.getKey())
|
||||
.append("',")
|
||||
.append(entry.getValue())
|
||||
.append("]");
|
||||
|
||||
if (j < smallSize - 1) {
|
||||
drilldownBuilder.append(",");
|
||||
}
|
||||
j++;
|
||||
}
|
||||
drilldownBuilder.append("]}");
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
function worldPie(id, worldSeries, worldTotal) {
|
||||
function worldPie(id, worldSeries, gmSeries) {
|
||||
Highcharts.chart(id, {
|
||||
chart: {
|
||||
plotBackgroundColor: null,
|
||||
@ -6,20 +6,52 @@ function worldPie(id, worldSeries, worldTotal) {
|
||||
plotShadow: false,
|
||||
type: 'pie'
|
||||
},
|
||||
subtitle: {text: worldTotal},
|
||||
tooltip: {
|
||||
pointFormat: '{series.name}: <b>{point.percentage:.2f}%</b>'
|
||||
title: {text: ''},
|
||||
subtitle: {
|
||||
text: 'Click the slices to view used GameMode'
|
||||
},
|
||||
plotOptions: {
|
||||
pie: {
|
||||
allowPointSelect: true,
|
||||
cursor: 'pointer',
|
||||
dataLabels: {
|
||||
enabled: false
|
||||
},
|
||||
showInLegend: true
|
||||
allowPointSelect: true,
|
||||
cursor: 'pointer',
|
||||
dataLabels: {
|
||||
enabled: false
|
||||
},
|
||||
showInLegend: true
|
||||
}
|
||||
},
|
||||
tooltip: {
|
||||
formatter: function() {
|
||||
return '<b>'+this.point.name+':</b> ' + formatTimeAmount(this.y) + '<br>('+this.percentage.toFixed(2)+'%)';
|
||||
}
|
||||
},
|
||||
series: [worldSeries]
|
||||
drilldown: {series: [gmSeries]}
|
||||
});
|
||||
}
|
||||
|
||||
function formatTimeAmount(ms) {
|
||||
var out = "";
|
||||
|
||||
var seconds = Math.floor(ms / 1000);
|
||||
|
||||
var dd = Math.floor(seconds / 86400);
|
||||
seconds -= (dd * 86400);
|
||||
var dh = Math.floor(seconds / 3600);
|
||||
seconds -= (dh * 3600);
|
||||
var dm = Math.floor(seconds / 60);
|
||||
seconds -= (dm * 60);
|
||||
seconds = Math.floor(seconds);
|
||||
if (dd !== 0) {
|
||||
out += dd.toString() + "d ";
|
||||
}
|
||||
if (dh !== 0) {
|
||||
out += dh.toString() + "h ";
|
||||
}
|
||||
if (dm !== 0) {
|
||||
out += dm.toString() + "m ";
|
||||
}
|
||||
out += seconds.toString() + "s ";
|
||||
|
||||
return out;
|
||||
}
|
@ -160,6 +160,4 @@ public class WorldTimesTest {
|
||||
assertEquals(2000L, worldTwoGMTimes.getTime("CREATIVE"));
|
||||
assertEquals(2000L, worldOneGMTimes.getTime("ADVENTURE"));
|
||||
}
|
||||
|
||||
// TODO Test where Session is ended, check if worldTimes & session length add up.
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package test.java.main.java.com.djrapitops.plan.utilities;
|
||||
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
import org.powermock.modules.junit4.PowerMockRunner;
|
||||
|
||||
/**
|
||||
* @author Rsl1122
|
||||
*/
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest(JavaPlugin.class)
|
||||
public class NewPlayerCreatorTest {
|
||||
|
||||
public NewPlayerCreatorTest() {
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
// TODO Rewrite
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user