mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-10 13:49:17 +01:00
Refactored PingTable#getAllPings to a query
This commit is contained in:
parent
7c45564fa9
commit
ad6cb62e61
@ -17,6 +17,7 @@
|
||||
package com.djrapitops.plan.db.sql.queries.batch;
|
||||
|
||||
import com.djrapitops.plan.data.container.GeoInfo;
|
||||
import com.djrapitops.plan.data.container.Ping;
|
||||
import com.djrapitops.plan.data.container.PlayerKill;
|
||||
import com.djrapitops.plan.data.store.objects.Nickname;
|
||||
import com.djrapitops.plan.db.access.Query;
|
||||
@ -215,4 +216,44 @@ public class LargeFetchQueries {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Query database for all Ping data.
|
||||
*
|
||||
* @return Map: Player UUID - List of ping data.
|
||||
*/
|
||||
public static Query<Map<UUID, List<Ping>>> fetchAllPingData() {
|
||||
String sql = "SELECT " +
|
||||
PingTable.Col.DATE + ", " +
|
||||
PingTable.Col.MAX_PING + ", " +
|
||||
PingTable.Col.MIN_PING + ", " +
|
||||
PingTable.Col.AVG_PING + ", " +
|
||||
PingTable.Col.UUID + ", " +
|
||||
PingTable.Col.SERVER_UUID +
|
||||
" FROM " + PingTable.TABLE_NAME;
|
||||
return new QueryAllStatement<Map<UUID, List<Ping>>>(sql, 100000) {
|
||||
@Override
|
||||
public Map<UUID, List<Ping>> processResults(ResultSet set) throws SQLException {
|
||||
Map<UUID, List<Ping>> userPings = new HashMap<>();
|
||||
|
||||
while (set.next()) {
|
||||
UUID uuid = UUID.fromString(set.getString(PingTable.Col.UUID.get()));
|
||||
UUID serverUUID = UUID.fromString(set.getString(PingTable.Col.SERVER_UUID.get()));
|
||||
long date = set.getLong(PingTable.Col.DATE.get());
|
||||
double avgPing = set.getDouble(PingTable.Col.AVG_PING.get());
|
||||
int minPing = set.getInt(PingTable.Col.MIN_PING.get());
|
||||
int maxPing = set.getInt(PingTable.Col.MAX_PING.get());
|
||||
|
||||
List<Ping> pings = userPings.getOrDefault(uuid, new ArrayList<>());
|
||||
pings.add(new Ping(date, serverUUID,
|
||||
minPing,
|
||||
maxPing,
|
||||
avgPing));
|
||||
userPings.put(uuid, pings);
|
||||
}
|
||||
|
||||
return userPings;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
@ -20,7 +20,6 @@ import com.djrapitops.plan.api.exceptions.database.DBInitException;
|
||||
import com.djrapitops.plan.data.container.Ping;
|
||||
import com.djrapitops.plan.db.SQLDB;
|
||||
import com.djrapitops.plan.db.access.ExecStatement;
|
||||
import com.djrapitops.plan.db.access.QueryAllStatement;
|
||||
import com.djrapitops.plan.db.access.QueryStatement;
|
||||
import com.djrapitops.plan.db.patches.PingOptimizationPatch;
|
||||
import com.djrapitops.plan.db.sql.parsing.Column;
|
||||
@ -31,7 +30,10 @@ import com.djrapitops.plugin.api.TimeAmount;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Table that represents plan_ping in the database.
|
||||
@ -130,41 +132,6 @@ public class PingTable extends UserUUIDTable {
|
||||
});
|
||||
}
|
||||
|
||||
public Map<UUID, List<Ping>> getAllPings() {
|
||||
String sql = "SELECT " +
|
||||
Col.DATE + ", " +
|
||||
Col.MAX_PING + ", " +
|
||||
Col.MIN_PING + ", " +
|
||||
Col.AVG_PING + ", " +
|
||||
Col.UUID + ", " +
|
||||
Col.SERVER_UUID +
|
||||
" FROM " + tableName;
|
||||
return query(new QueryAllStatement<Map<UUID, List<Ping>>>(sql, 100000) {
|
||||
@Override
|
||||
public Map<UUID, List<Ping>> processResults(ResultSet set) throws SQLException {
|
||||
Map<UUID, List<Ping>> userPings = new HashMap<>();
|
||||
|
||||
while (set.next()) {
|
||||
UUID uuid = UUID.fromString(set.getString(Col.UUID.get()));
|
||||
UUID serverUUID = UUID.fromString(set.getString(Col.SERVER_UUID.get()));
|
||||
long date = set.getLong(Col.DATE.get());
|
||||
double avgPing = set.getDouble(Col.AVG_PING.get());
|
||||
int minPing = set.getInt(Col.MIN_PING.get());
|
||||
int maxPing = set.getInt(Col.MAX_PING.get());
|
||||
|
||||
List<Ping> pings = userPings.getOrDefault(uuid, new ArrayList<>());
|
||||
pings.add(new Ping(date, serverUUID,
|
||||
minPing,
|
||||
maxPing,
|
||||
avgPing));
|
||||
userPings.put(uuid, pings);
|
||||
}
|
||||
|
||||
return userPings;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void insertAllPings(Map<UUID, List<Ping>> userPings) {
|
||||
executeBatch(new ExecStatement(insertStatement) {
|
||||
@Override
|
||||
|
@ -101,7 +101,7 @@ public class BatchOperationTable extends Table {
|
||||
if (toDB.equals(this)) {
|
||||
return;
|
||||
}
|
||||
toDB.db.getPingTable().insertAllPings(db.getPingTable().getAllPings());
|
||||
toDB.db.getPingTable().insertAllPings(db.query(LargeFetchQueries.fetchAllPingData()));
|
||||
}
|
||||
|
||||
public void copyCommandUse(BatchOperationTable toDB) {
|
||||
|
@ -125,7 +125,7 @@ public class SQLFetchOps extends SQLOps implements FetchOperations {
|
||||
List<UserInfo> serverUserInfo = userInfoTable.getServerUserInfo(serverUUID);
|
||||
Map<UUID, Integer> timesKicked = usersTable.getAllTimesKicked();
|
||||
Map<UUID, List<GeoInfo>> geoInfo = db.query(LargeFetchQueries.fetchAllGeoInfoData()); // TODO Optimize
|
||||
Map<UUID, List<Ping>> allPings = pingTable.getAllPings();
|
||||
Map<UUID, List<Ping>> allPings = db.query(LargeFetchQueries.fetchAllPingData()); // TODO Optimize
|
||||
Map<UUID, List<Nickname>> allNicknames = db.query(LargeFetchQueries.fetchAllNicknameDataByPlayerUUIDs()); // TODO Optimize
|
||||
|
||||
Map<UUID, List<Session>> sessions = sessionsTable.getSessionInfoOfServer(serverUUID);
|
||||
@ -190,7 +190,7 @@ public class SQLFetchOps extends SQLOps implements FetchOperations {
|
||||
Map<UUID, UserInfo> users = usersTable.getUsers();
|
||||
Map<UUID, Integer> timesKicked = usersTable.getAllTimesKicked();
|
||||
Map<UUID, List<GeoInfo>> geoInfo = db.query(LargeFetchQueries.fetchAllGeoInfoData());
|
||||
Map<UUID, List<Ping>> allPings = pingTable.getAllPings();
|
||||
Map<UUID, List<Ping>> allPings = db.query(LargeFetchQueries.fetchAllPingData());
|
||||
Map<UUID, List<Nickname>> allNicknames = db.query(LargeFetchQueries.fetchAllNicknameDataByPlayerUUIDs());
|
||||
|
||||
Map<UUID, Map<UUID, List<Session>>> sessions = sessionsTable.getAllSessions(false);
|
||||
|
@ -29,6 +29,7 @@ import com.djrapitops.plan.data.store.objects.Nickname;
|
||||
import com.djrapitops.plan.data.time.GMTimes;
|
||||
import com.djrapitops.plan.data.time.WorldTimes;
|
||||
import com.djrapitops.plan.db.patches.Patch;
|
||||
import com.djrapitops.plan.db.sql.queries.batch.LargeFetchQueries;
|
||||
import com.djrapitops.plan.db.sql.tables.*;
|
||||
import com.djrapitops.plan.db.tasks.CreateIndexTask;
|
||||
import com.djrapitops.plan.system.PlanSystem;
|
||||
@ -572,7 +573,7 @@ public abstract class CommonDBTest {
|
||||
assertTrue(db.getWorldTable().getAllWorlds().isEmpty());
|
||||
assertTrue(tpsTable.getTPSData().isEmpty());
|
||||
assertTrue(db.getServerTable().getBukkitServers().isEmpty());
|
||||
assertTrue(db.getPingTable().getAllPings().isEmpty());
|
||||
assertTrue(db.query(LargeFetchQueries.fetchAllPingData()).isEmpty());
|
||||
assertTrue(securityTable.getUsers().isEmpty());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user