mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-10 05:39:19 +01:00
Refactored GeoInfo storage into a Transaction:
- Refactored GeoInfoTable#saveGeoInfo into queries - Removed IPUpdateProcessor
This commit is contained in:
parent
87d77240fa
commit
cb22c0f80a
@ -17,7 +17,9 @@
|
||||
package com.djrapitops.plan.system.listeners.bukkit;
|
||||
|
||||
import com.djrapitops.plan.data.container.Session;
|
||||
import com.djrapitops.plan.db.access.transactions.events.GeoInfoStoreTransaction;
|
||||
import com.djrapitops.plan.db.access.transactions.events.WorldNameStoreTransaction;
|
||||
import com.djrapitops.plan.system.cache.GeolocationCache;
|
||||
import com.djrapitops.plan.system.cache.SessionCache;
|
||||
import com.djrapitops.plan.system.database.DBSystem;
|
||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||
@ -54,6 +56,7 @@ public class PlayerOnlineListener implements Listener {
|
||||
private final Processing processing;
|
||||
private final ServerInfo serverInfo;
|
||||
private final DBSystem dbSystem;
|
||||
private final GeolocationCache geolocationCache;
|
||||
private final SessionCache sessionCache;
|
||||
private final ErrorHandler errorHandler;
|
||||
private final Status status;
|
||||
@ -66,6 +69,7 @@ public class PlayerOnlineListener implements Listener {
|
||||
Processing processing,
|
||||
ServerInfo serverInfo,
|
||||
DBSystem dbSystem,
|
||||
GeolocationCache geolocationCache,
|
||||
SessionCache sessionCache,
|
||||
Status status,
|
||||
RunnableFactory runnableFactory,
|
||||
@ -76,6 +80,7 @@ public class PlayerOnlineListener implements Listener {
|
||||
this.processing = processing;
|
||||
this.serverInfo = serverInfo;
|
||||
this.dbSystem = dbSystem;
|
||||
this.geolocationCache = geolocationCache;
|
||||
this.sessionCache = sessionCache;
|
||||
this.status = status;
|
||||
this.runnableFactory = runnableFactory;
|
||||
@ -148,11 +153,15 @@ public class PlayerOnlineListener implements Listener {
|
||||
String displayName = player.getDisplayName();
|
||||
|
||||
boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS);
|
||||
if (gatheringGeolocations) {
|
||||
dbSystem.getDatabase().executeTransaction(
|
||||
new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry)
|
||||
);
|
||||
}
|
||||
|
||||
processing.submitCritical(() -> sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, world, gm)));
|
||||
runnableFactory.create("Player Register: " + uuid,
|
||||
processors.player().registerProcessor(uuid, player::getFirstPlayed, playerName,
|
||||
gatheringGeolocations ? processors.player().ipUpdateProcessor(uuid, address, time) : null,
|
||||
processors.player().nameProcessor(uuid, playerName, displayName),
|
||||
processors.info().playerPageUpdateProcessor(uuid)
|
||||
)
|
||||
|
@ -17,7 +17,10 @@
|
||||
package com.djrapitops.plan.system.listeners.bungee;
|
||||
|
||||
import com.djrapitops.plan.data.container.Session;
|
||||
import com.djrapitops.plan.db.access.transactions.events.GeoInfoStoreTransaction;
|
||||
import com.djrapitops.plan.system.cache.GeolocationCache;
|
||||
import com.djrapitops.plan.system.cache.SessionCache;
|
||||
import com.djrapitops.plan.system.database.DBSystem;
|
||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||
import com.djrapitops.plan.system.processing.Processing;
|
||||
import com.djrapitops.plan.system.processing.processors.Processors;
|
||||
@ -48,6 +51,8 @@ public class PlayerOnlineListener implements Listener {
|
||||
private final PlanConfig config;
|
||||
private final Processors processors;
|
||||
private final Processing processing;
|
||||
private final DBSystem dbSystem;
|
||||
private final GeolocationCache geolocationCache;
|
||||
private final SessionCache sessionCache;
|
||||
private final ServerInfo serverInfo;
|
||||
private final ErrorHandler errorHandler;
|
||||
@ -57,6 +62,8 @@ public class PlayerOnlineListener implements Listener {
|
||||
PlanConfig config,
|
||||
Processors processors,
|
||||
Processing processing,
|
||||
DBSystem dbSystem,
|
||||
GeolocationCache geolocationCache,
|
||||
SessionCache sessionCache,
|
||||
ServerInfo serverInfo,
|
||||
ErrorHandler errorHandler
|
||||
@ -64,6 +71,8 @@ public class PlayerOnlineListener implements Listener {
|
||||
this.config = config;
|
||||
this.processors = processors;
|
||||
this.processing = processing;
|
||||
this.dbSystem = dbSystem;
|
||||
this.geolocationCache = geolocationCache;
|
||||
this.sessionCache = sessionCache;
|
||||
this.serverInfo = serverInfo;
|
||||
this.errorHandler = errorHandler;
|
||||
@ -81,10 +90,13 @@ public class PlayerOnlineListener implements Listener {
|
||||
sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, null, null));
|
||||
|
||||
boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS);
|
||||
if (gatheringGeolocations) {
|
||||
dbSystem.getDatabase().executeTransaction(
|
||||
new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry)
|
||||
);
|
||||
}
|
||||
|
||||
processing.submit(processors.player().proxyRegisterProcessor(uuid, name, time,
|
||||
gatheringGeolocations ? processors.player().ipUpdateProcessor(uuid, address, time) : null
|
||||
));
|
||||
processing.submit(processors.player().proxyRegisterProcessor(uuid, name, time));
|
||||
processing.submit(processors.info().playerPageUpdateProcessor(uuid));
|
||||
ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID()));
|
||||
} catch (Exception e) {
|
||||
|
@ -16,6 +16,7 @@
|
||||
*/
|
||||
package com.djrapitops.plan.db.access.queries;
|
||||
|
||||
import com.djrapitops.plan.data.container.GeoInfo;
|
||||
import com.djrapitops.plan.data.container.Session;
|
||||
import com.djrapitops.plan.data.store.keys.SessionKeys;
|
||||
import com.djrapitops.plan.data.time.GMTimes;
|
||||
@ -137,4 +138,38 @@ public class DataStoreQueries {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static Executable storeGeoInfo(UUID playerUUID, GeoInfo geoInfo) {
|
||||
return connection -> {
|
||||
if (!updateGeoInfo(playerUUID, geoInfo).execute(connection)) {
|
||||
return insertGeoInfo(playerUUID, geoInfo).execute(connection);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
private static Executable updateGeoInfo(UUID playerUUID, GeoInfo geoInfo) {
|
||||
return new ExecStatement(GeoInfoTable.UPDATE_STATEMENT) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setLong(1, geoInfo.getDate());
|
||||
statement.setString(2, playerUUID.toString());
|
||||
statement.setString(3, geoInfo.getIpHash());
|
||||
statement.setString(4, geoInfo.getGeolocation());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private static Executable insertGeoInfo(UUID playerUUID, GeoInfo geoInfo) {
|
||||
return new ExecStatement(GeoInfoTable.INSERT_STATEMENT) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, playerUUID.toString());
|
||||
statement.setString(2, geoInfo.getIp());
|
||||
statement.setString(3, geoInfo.getIpHash());
|
||||
statement.setString(4, geoInfo.getGeolocation());
|
||||
statement.setLong(5, geoInfo.getDate());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.db.access.transactions.events;
|
||||
|
||||
import com.djrapitops.plan.data.container.GeoInfo;
|
||||
import com.djrapitops.plan.db.access.queries.DataStoreQueries;
|
||||
import com.djrapitops.plan.db.access.transactions.Transaction;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* Transaction to update Geo information of a player in the database.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class GeoInfoStoreTransaction extends Transaction {
|
||||
|
||||
private static boolean hasFailed = false;
|
||||
|
||||
private final UUID playerUUID;
|
||||
private InetAddress ip;
|
||||
private long time;
|
||||
private Function<String, String> geolocationFunction;
|
||||
|
||||
private GeoInfo geoInfo;
|
||||
|
||||
public GeoInfoStoreTransaction(
|
||||
UUID playerUUID,
|
||||
InetAddress ip,
|
||||
long time,
|
||||
Function<String, String> geolocationFunction
|
||||
) {
|
||||
this.playerUUID = playerUUID;
|
||||
this.ip = ip;
|
||||
this.time = time;
|
||||
this.geolocationFunction = geolocationFunction;
|
||||
}
|
||||
|
||||
public GeoInfoStoreTransaction(UUID playerUUID, GeoInfo geoInfo) {
|
||||
this.playerUUID = playerUUID;
|
||||
this.geoInfo = geoInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldBeExecuted() {
|
||||
return !hasFailed;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void performOperations() {
|
||||
try {
|
||||
if (geoInfo == null) geoInfo = createGeoInfo();
|
||||
|
||||
execute(DataStoreQueries.storeGeoInfo(playerUUID, geoInfo));
|
||||
} catch (NoSuchAlgorithmException noSHA256Available) {
|
||||
// SHA256 not available.
|
||||
hasFailed = true;
|
||||
}
|
||||
}
|
||||
|
||||
private GeoInfo createGeoInfo() throws NoSuchAlgorithmException {
|
||||
String country = geolocationFunction.apply(ip.getHostAddress());
|
||||
return new GeoInfo(ip, country, time);
|
||||
}
|
||||
}
|
@ -19,19 +19,20 @@ package com.djrapitops.plan.db.sql.tables;
|
||||
import com.djrapitops.plan.data.container.GeoInfo;
|
||||
import com.djrapitops.plan.db.DBType;
|
||||
import com.djrapitops.plan.db.SQLDB;
|
||||
import com.djrapitops.plan.db.access.ExecStatement;
|
||||
import com.djrapitops.plan.db.access.QueryStatement;
|
||||
import com.djrapitops.plan.db.access.queries.LargeFetchQueries;
|
||||
import com.djrapitops.plan.db.patches.*;
|
||||
import com.djrapitops.plan.db.sql.parsing.CreateTableParser;
|
||||
import com.djrapitops.plan.db.sql.parsing.Select;
|
||||
import com.djrapitops.plan.db.sql.parsing.Sql;
|
||||
import com.djrapitops.plan.utilities.comparators.GeoInfoComparator;
|
||||
|
||||
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 is in charge of storing common IP and Geolocation data for users.
|
||||
@ -65,6 +66,11 @@ public class GeoInfoTable extends Table {
|
||||
+ GEOLOCATION + ", "
|
||||
+ LAST_USED
|
||||
+ ") VALUES (?, ?, ?, ?, ?)";
|
||||
public static final String UPDATE_STATEMENT = "UPDATE " + TABLE_NAME + " SET "
|
||||
+ LAST_USED + "=?" +
|
||||
" WHERE " + USER_UUID + "=?" +
|
||||
" AND " + IP_HASH + "=?" +
|
||||
" AND " + GEOLOCATION + "=?";
|
||||
|
||||
public GeoInfoTable(SQLDB db) {
|
||||
super(TABLE_NAME, db);
|
||||
@ -106,67 +112,6 @@ public class GeoInfoTable extends Table {
|
||||
});
|
||||
}
|
||||
|
||||
private void updateGeoInfo(UUID uuid, GeoInfo info) {
|
||||
String sql = "UPDATE " + tableName + " SET "
|
||||
+ LAST_USED + "=?" +
|
||||
" WHERE " + USER_UUID + "=?" +
|
||||
" AND " + IP_HASH + "=?" +
|
||||
" AND " + GEOLOCATION + "=?";
|
||||
|
||||
execute(new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setLong(1, info.getDate());
|
||||
statement.setString(2, uuid.toString());
|
||||
statement.setString(3, info.getIpHash());
|
||||
statement.setString(4, info.getGeolocation());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void saveGeoInfo(UUID uuid, GeoInfo info) {
|
||||
List<GeoInfo> geoInfo = getGeoInfo(uuid);
|
||||
if (geoInfo.contains(info)) {
|
||||
updateGeoInfo(uuid, info);
|
||||
} else {
|
||||
insertGeoInfo(uuid, info);
|
||||
}
|
||||
}
|
||||
|
||||
private void insertGeoInfo(UUID uuid, GeoInfo info) {
|
||||
execute(new ExecStatement(INSERT_STATEMENT) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, uuid.toString());
|
||||
statement.setString(2, info.getIp());
|
||||
statement.setString(3, info.getIpHash());
|
||||
statement.setString(4, info.getGeolocation());
|
||||
statement.setLong(5, info.getDate());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public Optional<String> getGeolocation(String ip) {
|
||||
String sql = Select.from(tableName, GEOLOCATION)
|
||||
.where(IP + "=?")
|
||||
.toString();
|
||||
|
||||
return query(new QueryStatement<Optional<String>>(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, ip);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<String> processResults(ResultSet set) throws SQLException {
|
||||
if (set.next()) {
|
||||
return Optional.of(set.getString(GEOLOCATION));
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public List<String> getNetworkGeolocations() {
|
||||
List<String> geolocations = new ArrayList<>();
|
||||
|
||||
|
@ -73,9 +73,6 @@ public interface SaveOperations {
|
||||
@Deprecated
|
||||
void registerNewUser(UUID uuid, long registered, String name);
|
||||
|
||||
@Deprecated
|
||||
void geoInfo(UUID uuid, GeoInfo geoInfo);
|
||||
|
||||
@Deprecated
|
||||
void playerWasKicked(UUID uuid);
|
||||
|
||||
|
@ -142,11 +142,6 @@ public class SQLSaveOps extends SQLOps implements SaveOperations {
|
||||
usersTable.registerUser(uuid, registered, name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void geoInfo(UUID uuid, GeoInfo geoInfo) {
|
||||
geoInfoTable.saveGeoInfo(uuid, geoInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playerWasKicked(UUID uuid) {
|
||||
usersTable.kicked(uuid);
|
||||
|
@ -1,64 +0,0 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.system.processing.processors.player;
|
||||
|
||||
import com.djrapitops.plan.data.container.GeoInfo;
|
||||
import com.djrapitops.plan.db.Database;
|
||||
import com.djrapitops.plan.system.cache.GeolocationCache;
|
||||
import com.djrapitops.plan.system.processing.CriticalRunnable;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Updates the IP and Geolocation of a user.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class IPUpdateProcessor implements CriticalRunnable {
|
||||
|
||||
private final UUID uuid;
|
||||
private final InetAddress ip;
|
||||
private final long time;
|
||||
|
||||
private final Database database;
|
||||
private final GeolocationCache geolocationCache;
|
||||
|
||||
IPUpdateProcessor(
|
||||
UUID uuid, InetAddress ip, long time,
|
||||
Database database,
|
||||
GeolocationCache geolocationCache
|
||||
) {
|
||||
this.uuid = uuid;
|
||||
this.ip = ip;
|
||||
this.time = time;
|
||||
this.database = database;
|
||||
this.geolocationCache = geolocationCache;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
String country = geolocationCache.getCountry(ip.getHostAddress());
|
||||
GeoInfo geoInfo = new GeoInfo(ip, country, time);
|
||||
database.save().geoInfo(uuid, geoInfo);
|
||||
} catch (NoSuchAlgorithmException ignore) {
|
||||
// Ignored, SHA-256 should be available
|
||||
}
|
||||
}
|
||||
}
|
@ -27,7 +27,6 @@ import dagger.Lazy;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.net.InetAddress;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BooleanSupplier;
|
||||
@ -74,10 +73,6 @@ public class PlayerProcessors {
|
||||
return new EndSessionProcessor(uuid, time, dataCache.get());
|
||||
}
|
||||
|
||||
public IPUpdateProcessor ipUpdateProcessor(UUID uuid, InetAddress ip, long time) {
|
||||
return new IPUpdateProcessor(uuid, ip, time, dbSystem.get().getDatabase(), geolocationCache.get());
|
||||
}
|
||||
|
||||
public KickProcessor kickProcessor(UUID uuid) {
|
||||
return new KickProcessor(uuid, dbSystem.get().getDatabase());
|
||||
}
|
||||
|
@ -34,6 +34,7 @@ import com.djrapitops.plan.db.access.queries.*;
|
||||
import com.djrapitops.plan.db.access.queries.containers.ContainerFetchQueries;
|
||||
import com.djrapitops.plan.db.access.transactions.*;
|
||||
import com.djrapitops.plan.db.access.transactions.events.CommandStoreTransaction;
|
||||
import com.djrapitops.plan.db.access.transactions.events.GeoInfoStoreTransaction;
|
||||
import com.djrapitops.plan.db.access.transactions.events.WorldNameStoreTransaction;
|
||||
import com.djrapitops.plan.db.patches.Patch;
|
||||
import com.djrapitops.plan.db.sql.tables.*;
|
||||
@ -233,28 +234,20 @@ public abstract class CommonDBTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIPTable() throws DBInitException {
|
||||
public void geoInformationIsStored() throws DBInitException {
|
||||
saveUserOne();
|
||||
GeoInfoTable geoInfoTable = db.getGeoInfoTable();
|
||||
|
||||
String expectedIP = "1.2.3.4";
|
||||
String expectedGeoLoc = "TestLocation";
|
||||
long time = System.currentTimeMillis();
|
||||
|
||||
GeoInfo expected = new GeoInfo(expectedIP, expectedGeoLoc, time, "3");
|
||||
geoInfoTable.saveGeoInfo(playerUUID, expected);
|
||||
geoInfoTable.saveGeoInfo(playerUUID, expected);
|
||||
saveGeoInfo(playerUUID, expected);
|
||||
commitTest();
|
||||
|
||||
List<GeoInfo> getInfo = geoInfoTable.getGeoInfo(playerUUID);
|
||||
assertEquals(1, getInfo.size());
|
||||
GeoInfo actual = getInfo.get(0);
|
||||
assertEquals(expected, actual);
|
||||
assertEquals(time, actual.getDate());
|
||||
|
||||
Optional<String> result = geoInfoTable.getGeolocation(expectedIP);
|
||||
assertTrue(result.isPresent());
|
||||
assertEquals(expectedGeoLoc, result.get());
|
||||
List<GeoInfo> geolocations = db.query(LargeFetchQueries.fetchAllGeoInformation()).getOrDefault(playerUUID, new ArrayList<>());
|
||||
assertEquals(1, geolocations.size());
|
||||
assertEquals(expected, geolocations.get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -518,7 +511,7 @@ public abstract class CommonDBTest {
|
||||
|
||||
execute(DataStoreQueries.storeSession(session));
|
||||
nicknamesTable.saveUserName(playerUUID, new Nickname("TestNick", System.currentTimeMillis(), serverUUID));
|
||||
geoInfoTable.saveGeoInfo(playerUUID, new GeoInfo("1.2.3.4", "TestLoc", 223456789L, "3"));
|
||||
saveGeoInfo(playerUUID, new GeoInfo("1.2.3.4", "TestLoc", 223456789L, "3"));
|
||||
|
||||
assertTrue(usersTable.isRegistered(playerUUID));
|
||||
|
||||
@ -576,7 +569,7 @@ public abstract class CommonDBTest {
|
||||
|
||||
execute(DataStoreQueries.storeSession(session));
|
||||
nicknamesTable.saveUserName(playerUUID, new Nickname("TestNick", System.currentTimeMillis(), serverUUID));
|
||||
geoInfoTable.saveGeoInfo(playerUUID, new GeoInfo("1.2.3.4", "TestLoc", 223456789L,
|
||||
saveGeoInfo(playerUUID, new GeoInfo("1.2.3.4", "TestLoc", 223456789L,
|
||||
new SHA256Hash("1.2.3.4").create()));
|
||||
|
||||
assertTrue(usersTable.isRegistered(playerUUID));
|
||||
@ -613,6 +606,10 @@ public abstract class CommonDBTest {
|
||||
securityTable.addNewUser(new WebUser("Test", "RandomGarbageBlah", 0));
|
||||
}
|
||||
|
||||
private void saveGeoInfo(UUID uuid, GeoInfo geoInfo) {
|
||||
db.executeTransaction(new GeoInfoStoreTransaction(uuid, geoInfo));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSessionTableNPEWhenNoPlayers() {
|
||||
Map<UUID, Long> lastSeen = db.getSessionsTable().getLastSeenForAllPlayers();
|
||||
@ -815,11 +812,11 @@ public abstract class CommonDBTest {
|
||||
usersTable.registerUser(secondUuid, 0, "");
|
||||
usersTable.registerUser(thirdUuid, 0, "");
|
||||
|
||||
geoInfoTable.saveGeoInfo(firstUuid, new GeoInfo("-", "Test1", 0, "3"));
|
||||
saveGeoInfo(firstUuid, new GeoInfo("-", "Test1", 0, "3"));
|
||||
GeoInfo secondInfo = new GeoInfo("-", "Test2", 5, "3");
|
||||
geoInfoTable.saveGeoInfo(firstUuid, secondInfo);
|
||||
geoInfoTable.saveGeoInfo(secondUuid, new GeoInfo("-", "Test3", 0, "3"));
|
||||
geoInfoTable.saveGeoInfo(thirdUuid, new GeoInfo("-", "Test4", 0, "3"));
|
||||
saveGeoInfo(firstUuid, secondInfo);
|
||||
saveGeoInfo(secondUuid, new GeoInfo("-", "Test3", 0, "3"));
|
||||
saveGeoInfo(thirdUuid, new GeoInfo("-", "Test4", 0, "3"));
|
||||
|
||||
List<String> geolocations = geoInfoTable.getNetworkGeolocations();
|
||||
|
||||
|
@ -17,7 +17,9 @@
|
||||
package com.djrapitops.plan.system.listeners.sponge;
|
||||
|
||||
import com.djrapitops.plan.data.container.Session;
|
||||
import com.djrapitops.plan.db.access.transactions.events.GeoInfoStoreTransaction;
|
||||
import com.djrapitops.plan.db.access.transactions.events.WorldNameStoreTransaction;
|
||||
import com.djrapitops.plan.system.cache.GeolocationCache;
|
||||
import com.djrapitops.plan.system.cache.SessionCache;
|
||||
import com.djrapitops.plan.system.database.DBSystem;
|
||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||
@ -58,10 +60,11 @@ public class SpongePlayerListener {
|
||||
private final Processing processing;
|
||||
private final ServerInfo serverInfo;
|
||||
private final DBSystem dbSystem;
|
||||
private SessionCache sessionCache;
|
||||
private final GeolocationCache geolocationCache;
|
||||
private final SessionCache sessionCache;
|
||||
private final Status status;
|
||||
private RunnableFactory runnableFactory;
|
||||
private ErrorHandler errorHandler;
|
||||
private final RunnableFactory runnableFactory;
|
||||
private final ErrorHandler errorHandler;
|
||||
|
||||
@Inject
|
||||
public SpongePlayerListener(
|
||||
@ -70,6 +73,7 @@ public class SpongePlayerListener {
|
||||
Processing processing,
|
||||
ServerInfo serverInfo,
|
||||
DBSystem dbSystem,
|
||||
GeolocationCache geolocationCache,
|
||||
SessionCache sessionCache,
|
||||
Status status,
|
||||
RunnableFactory runnableFactory,
|
||||
@ -80,6 +84,7 @@ public class SpongePlayerListener {
|
||||
this.processing = processing;
|
||||
this.serverInfo = serverInfo;
|
||||
this.dbSystem = dbSystem;
|
||||
this.geolocationCache = geolocationCache;
|
||||
this.sessionCache = sessionCache;
|
||||
this.status = status;
|
||||
this.runnableFactory = runnableFactory;
|
||||
@ -153,11 +158,15 @@ public class SpongePlayerListener {
|
||||
String displayName = player.getDisplayNameData().displayName().get().toPlain();
|
||||
|
||||
boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS);
|
||||
if (gatheringGeolocations) {
|
||||
dbSystem.getDatabase().executeTransaction(
|
||||
new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry)
|
||||
);
|
||||
}
|
||||
|
||||
processing.submitCritical(() -> sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, world, gm)));
|
||||
runnableFactory.create("Player Register: " + uuid,
|
||||
processors.player().registerProcessor(uuid, () -> time, playerName,
|
||||
gatheringGeolocations ? processors.player().ipUpdateProcessor(uuid, address, time) : null,
|
||||
processors.player().nameProcessor(uuid, playerName, displayName),
|
||||
processors.info().playerPageUpdateProcessor(uuid)
|
||||
)
|
||||
|
@ -17,7 +17,10 @@
|
||||
package com.djrapitops.plan.system.listeners.velocity;
|
||||
|
||||
import com.djrapitops.plan.data.container.Session;
|
||||
import com.djrapitops.plan.db.access.transactions.events.GeoInfoStoreTransaction;
|
||||
import com.djrapitops.plan.system.cache.GeolocationCache;
|
||||
import com.djrapitops.plan.system.cache.SessionCache;
|
||||
import com.djrapitops.plan.system.database.DBSystem;
|
||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||
import com.djrapitops.plan.system.processing.Processing;
|
||||
import com.djrapitops.plan.system.processing.processors.Processors;
|
||||
@ -51,6 +54,8 @@ public class PlayerOnlineListener {
|
||||
private final PlanConfig config;
|
||||
private final Processors processors;
|
||||
private final Processing processing;
|
||||
private final DBSystem dbSystem;
|
||||
private final GeolocationCache geolocationCache;
|
||||
private final SessionCache sessionCache;
|
||||
private final ServerInfo serverInfo;
|
||||
private final ErrorHandler errorHandler;
|
||||
@ -60,6 +65,8 @@ public class PlayerOnlineListener {
|
||||
PlanConfig config,
|
||||
Processing processing,
|
||||
Processors processors,
|
||||
DBSystem dbSystem,
|
||||
GeolocationCache geolocationCache,
|
||||
SessionCache sessionCache,
|
||||
ServerInfo serverInfo,
|
||||
ErrorHandler errorHandler
|
||||
@ -67,6 +74,8 @@ public class PlayerOnlineListener {
|
||||
this.config = config;
|
||||
this.processing = processing;
|
||||
this.processors = processors;
|
||||
this.dbSystem = dbSystem;
|
||||
this.geolocationCache = geolocationCache;
|
||||
this.sessionCache = sessionCache;
|
||||
this.serverInfo = serverInfo;
|
||||
this.errorHandler = errorHandler;
|
||||
@ -84,10 +93,13 @@ public class PlayerOnlineListener {
|
||||
sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, null, null));
|
||||
|
||||
boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS);
|
||||
if (gatheringGeolocations) {
|
||||
dbSystem.getDatabase().executeTransaction(
|
||||
new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry)
|
||||
);
|
||||
}
|
||||
|
||||
processing.submit(processors.player().proxyRegisterProcessor(uuid, name, time,
|
||||
gatheringGeolocations ? processors.player().ipUpdateProcessor(uuid, address, time) : null
|
||||
));
|
||||
processing.submit(processors.player().proxyRegisterProcessor(uuid, name, time));
|
||||
processing.submit(processors.info().playerPageUpdateProcessor(uuid));
|
||||
ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID()));
|
||||
} catch (Exception e) {
|
||||
|
Loading…
Reference in New Issue
Block a user