mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-07 17:28:03 +08:00
Refactored TPSTable#insertTPS to a transaction:
- Removed TPSInsertProcessor
This commit is contained in:
parent
f9136d390a
commit
af674919e7
@ -19,9 +19,9 @@ package com.djrapitops.plan.system.tasks.bukkit;
|
||||
import com.djrapitops.plan.Plan;
|
||||
import com.djrapitops.plan.data.container.TPS;
|
||||
import com.djrapitops.plan.data.container.builders.TPSBuilder;
|
||||
import com.djrapitops.plan.system.database.DBSystem;
|
||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
|
||||
import com.djrapitops.plan.system.processing.Processing;
|
||||
import com.djrapitops.plan.system.processing.processors.Processors;
|
||||
import com.djrapitops.plan.system.tasks.TPSCountTimer;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||
@ -41,13 +41,13 @@ public class BukkitTPSCountTimer extends TPSCountTimer {
|
||||
@Inject
|
||||
public BukkitTPSCountTimer(
|
||||
Plan plugin,
|
||||
Processors processors,
|
||||
Processing processing,
|
||||
DBSystem dbSystem,
|
||||
ServerInfo serverInfo,
|
||||
ServerProperties serverProperties,
|
||||
PluginLogger logger,
|
||||
ErrorHandler errorHandler
|
||||
) {
|
||||
super(processors, processing, logger, errorHandler);
|
||||
super(dbSystem, serverInfo, logger, errorHandler);
|
||||
this.plugin = plugin;
|
||||
this.serverProperties = serverProperties;
|
||||
lastCheckNano = -1;
|
||||
|
@ -18,9 +18,9 @@ package com.djrapitops.plan.system.tasks.bungee;
|
||||
|
||||
import com.djrapitops.plan.data.container.TPS;
|
||||
import com.djrapitops.plan.data.container.builders.TPSBuilder;
|
||||
import com.djrapitops.plan.system.database.DBSystem;
|
||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
|
||||
import com.djrapitops.plan.system.processing.Processing;
|
||||
import com.djrapitops.plan.system.processing.processors.Processors;
|
||||
import com.djrapitops.plan.system.tasks.TPSCountTimer;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||
@ -35,13 +35,13 @@ public class BungeeTPSCountTimer extends TPSCountTimer {
|
||||
|
||||
@Inject
|
||||
public BungeeTPSCountTimer(
|
||||
Processors processors,
|
||||
Processing processing,
|
||||
DBSystem dbSystem,
|
||||
ServerInfo serverInfo,
|
||||
ServerProperties serverProperties,
|
||||
PluginLogger logger,
|
||||
ErrorHandler errorHandler
|
||||
) {
|
||||
super(processors, processing, logger, errorHandler);
|
||||
super(dbSystem, serverInfo, logger, errorHandler);
|
||||
this.serverProperties = serverProperties;
|
||||
}
|
||||
|
||||
|
@ -19,6 +19,7 @@ package com.djrapitops.plan.db.access.queries;
|
||||
import com.djrapitops.plan.data.container.GeoInfo;
|
||||
import com.djrapitops.plan.data.container.Ping;
|
||||
import com.djrapitops.plan.data.container.Session;
|
||||
import com.djrapitops.plan.data.container.TPS;
|
||||
import com.djrapitops.plan.data.store.keys.SessionKeys;
|
||||
import com.djrapitops.plan.data.time.GMTimes;
|
||||
import com.djrapitops.plan.db.access.ExecBatchStatement;
|
||||
@ -262,4 +263,28 @@ public class DataStoreQueries {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Store TPS data of a server.
|
||||
*
|
||||
* @param serverUUID UUID of the Plan server.
|
||||
* @param tps TPS data entry
|
||||
* @return Executable, use inside a {@link com.djrapitops.plan.db.access.transactions.Transaction}
|
||||
*/
|
||||
public static Executable storeTPS(UUID serverUUID, TPS tps) {
|
||||
return new ExecStatement(TPSTable.INSERT_STATEMENT) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, serverUUID.toString());
|
||||
statement.setLong(2, tps.getDate());
|
||||
statement.setDouble(3, tps.getTicksPerSecond());
|
||||
statement.setInt(4, tps.getPlayers());
|
||||
statement.setDouble(5, tps.getCPUUsage());
|
||||
statement.setLong(6, tps.getUsedMemory());
|
||||
statement.setDouble(7, tps.getEntityCount());
|
||||
statement.setDouble(8, tps.getChunksLoaded());
|
||||
statement.setLong(9, tps.getFreeDiskSpace());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -14,44 +14,48 @@
|
||||
* 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;
|
||||
package com.djrapitops.plan.db.access.transactions.events;
|
||||
|
||||
import com.djrapitops.plan.data.container.TPS;
|
||||
import com.djrapitops.plan.data.container.builders.TPSBuilder;
|
||||
import com.djrapitops.plan.db.Database;
|
||||
import com.djrapitops.plan.system.processing.CriticalRunnable;
|
||||
import com.djrapitops.plan.db.access.queries.DataStoreQueries;
|
||||
import com.djrapitops.plan.db.access.transactions.Transaction;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Processes 60s average of a TPS list.
|
||||
* Transaction to store server's TPS data.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class TPSInsertProcessor implements CriticalRunnable {
|
||||
public class TPSStoreTransaction extends Transaction {
|
||||
|
||||
private final UUID serverUUID;
|
||||
private final List<TPS> tpsList;
|
||||
|
||||
private final Database database;
|
||||
|
||||
TPSInsertProcessor(List<TPS> tpsList, Database database) {
|
||||
public TPSStoreTransaction(UUID serverUUID, List<TPS> tpsList) {
|
||||
this.serverUUID = serverUUID;
|
||||
this.tpsList = tpsList;
|
||||
this.database = database;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
List<TPS> history = tpsList;
|
||||
long lastDate = history.get(history.size() - 1).getDate();
|
||||
double averageTPS = history.stream().mapToDouble(TPS::getTicksPerSecond).average().orElse(0);
|
||||
int peakPlayersOnline = history.stream().mapToInt(TPS::getPlayers).max().orElse(0);
|
||||
double averageCPUUsage = history.stream().mapToDouble(TPS::getCPUUsage).average().orElse(0);
|
||||
long averageUsedMemory = (long) history.stream().mapToLong(TPS::getUsedMemory).average().orElse(0);
|
||||
int averageEntityCount = (int) history.stream().mapToInt(TPS::getEntityCount).average().orElse(0);
|
||||
int averageChunksLoaded = (int) history.stream().mapToInt(TPS::getChunksLoaded).average().orElse(0);
|
||||
long freeDiskSpace = (long) history.stream().mapToLong(TPS::getFreeDiskSpace).average().orElse(0);
|
||||
protected void performOperations() {
|
||||
TPS tps = calculateTPS();
|
||||
execute(DataStoreQueries.storeTPS(serverUUID, tps));
|
||||
}
|
||||
|
||||
TPS tps = TPSBuilder.get()
|
||||
private TPS calculateTPS() {
|
||||
long lastDate = tpsList.get(tpsList.size() - 1).getDate();
|
||||
double averageTPS = tpsList.stream().mapToDouble(TPS::getTicksPerSecond).average().orElse(0);
|
||||
int peakPlayersOnline = tpsList.stream().mapToInt(TPS::getPlayers).max().orElse(0);
|
||||
double averageCPUUsage = tpsList.stream().mapToDouble(TPS::getCPUUsage).average().orElse(0);
|
||||
long averageUsedMemory = (long) tpsList.stream().mapToLong(TPS::getUsedMemory).average().orElse(0);
|
||||
int averageEntityCount = (int) tpsList.stream().mapToInt(TPS::getEntityCount).average().orElse(0);
|
||||
int averageChunksLoaded = (int) tpsList.stream().mapToInt(TPS::getChunksLoaded).average().orElse(0);
|
||||
long freeDiskSpace = (long) tpsList.stream().mapToLong(TPS::getFreeDiskSpace).average().orElse(0);
|
||||
|
||||
return TPSBuilder.get()
|
||||
.date(lastDate)
|
||||
.tps(averageTPS)
|
||||
.playersOnline(peakPlayersOnline)
|
||||
@ -61,7 +65,5 @@ public class TPSInsertProcessor implements CriticalRunnable {
|
||||
.chunksLoaded(averageChunksLoaded)
|
||||
.freeDiskSpace(freeDiskSpace)
|
||||
.toTPS();
|
||||
|
||||
database.save().insertTPSforThisServer(tps);
|
||||
}
|
||||
}
|
||||
}
|
@ -20,7 +20,6 @@ import com.djrapitops.plan.data.container.TPS;
|
||||
import com.djrapitops.plan.data.container.builders.TPSBuilder;
|
||||
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.QueryAllStatement;
|
||||
import com.djrapitops.plan.db.access.QueryStatement;
|
||||
import com.djrapitops.plan.db.access.queries.OptionalFetchQueries;
|
||||
@ -73,11 +72,8 @@ public class TPSTable extends Table {
|
||||
|
||||
public TPSTable(SQLDB db) {
|
||||
super(TABLE_NAME, db);
|
||||
serverTable = db.getServerTable();
|
||||
}
|
||||
|
||||
private final ServerTable serverTable;
|
||||
|
||||
public static String createTableSQL(DBType dbType) {
|
||||
return CreateTableParser.create(TABLE_NAME, dbType)
|
||||
.column(SERVER_ID, Sql.INT).notNull()
|
||||
@ -95,7 +91,7 @@ public class TPSTable extends Table {
|
||||
|
||||
public List<TPS> getTPSData(UUID serverUUID) {
|
||||
String sql = Select.all(tableName)
|
||||
.where(SERVER_ID + "=" + serverTable.statementSelectServerID)
|
||||
.where(SERVER_ID + "=" + ServerTable.STATEMENT_SELECT_SERVER_ID)
|
||||
.toString();
|
||||
|
||||
return query(new QueryStatement<List<TPS>>(sql, 50000) {
|
||||
@ -127,23 +123,6 @@ public class TPSTable extends Table {
|
||||
});
|
||||
}
|
||||
|
||||
public void insertTPS(TPS tps) {
|
||||
execute(new ExecStatement(INSERT_STATEMENT) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, getServerUUID().toString());
|
||||
statement.setLong(2, tps.getDate());
|
||||
statement.setDouble(3, tps.getTicksPerSecond());
|
||||
statement.setInt(4, tps.getPlayers());
|
||||
statement.setDouble(5, tps.getCPUUsage());
|
||||
statement.setLong(6, tps.getUsedMemory());
|
||||
statement.setDouble(7, tps.getEntityCount());
|
||||
statement.setDouble(8, tps.getChunksLoaded());
|
||||
statement.setLong(9, tps.getFreeDiskSpace());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public List<TPS> getNetworkOnlineData() {
|
||||
Optional<Server> proxyInfo = db.query(OptionalFetchQueries.fetchProxyServerInformation());
|
||||
if (!proxyInfo.isPresent()) {
|
||||
@ -154,8 +133,8 @@ public class TPSTable extends Table {
|
||||
String sql = "SELECT " +
|
||||
DATE + ", " +
|
||||
PLAYERS_ONLINE +
|
||||
" FROM " + tableName +
|
||||
" WHERE " + SERVER_ID + "=" + serverTable.statementSelectServerID;
|
||||
" FROM " + TABLE_NAME +
|
||||
" WHERE " + SERVER_ID + "=" + ServerTable.STATEMENT_SELECT_SERVER_ID;
|
||||
|
||||
return query(new QueryStatement<List<TPS>>(sql, 50000) {
|
||||
@Override
|
||||
@ -188,7 +167,7 @@ public class TPSTable extends Table {
|
||||
sql.append(SERVER_ID).append(", ")
|
||||
.append(DATE).append(", ")
|
||||
.append(PLAYERS_ONLINE)
|
||||
.append(" FROM ").append(tableName)
|
||||
.append(" FROM ").append(TABLE_NAME)
|
||||
.append(" WHERE ")
|
||||
.append(DATE).append(">").append(System.currentTimeMillis() - TimeAmount.WEEK.toMillis(2L))
|
||||
.append(" AND (");
|
||||
|
@ -78,9 +78,6 @@ public interface SaveOperations {
|
||||
@Deprecated
|
||||
void playerDisplayName(UUID uuid, Nickname nickname);
|
||||
|
||||
@Deprecated
|
||||
void insertTPSforThisServer(TPS tps);
|
||||
|
||||
@Deprecated
|
||||
void session(UUID uuid, Session session);
|
||||
|
||||
|
@ -146,11 +146,6 @@ public class SQLSaveOps extends SQLOps implements SaveOperations {
|
||||
nicknamesTable.saveUserName(uuid, nickname);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertTPSforThisServer(TPS tps) {
|
||||
tpsTable.insertTPS(tps);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void session(UUID uuid, Session session) {
|
||||
db.executeTransaction(new Transaction() {
|
||||
|
@ -16,15 +16,11 @@
|
||||
*/
|
||||
package com.djrapitops.plan.system.processing.processors;
|
||||
|
||||
import com.djrapitops.plan.data.container.TPS;
|
||||
import com.djrapitops.plan.system.database.DBSystem;
|
||||
import com.djrapitops.plan.system.processing.processors.info.InfoProcessors;
|
||||
import com.djrapitops.plan.system.processing.processors.player.PlayerProcessors;
|
||||
import dagger.Lazy;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Factory for creating Runnables to run with {@link com.djrapitops.plan.system.processing.Processing}.
|
||||
@ -37,22 +33,13 @@ public class Processors {
|
||||
private final PlayerProcessors playerProcessors;
|
||||
private final InfoProcessors infoProcessors;
|
||||
|
||||
private final Lazy<DBSystem> dbSystem;
|
||||
|
||||
@Inject
|
||||
public Processors(
|
||||
PlayerProcessors playerProcessors,
|
||||
InfoProcessors infoProcessors,
|
||||
|
||||
Lazy<DBSystem> dbSystem
|
||||
InfoProcessors infoProcessors
|
||||
) {
|
||||
this.playerProcessors = playerProcessors;
|
||||
this.infoProcessors = infoProcessors;
|
||||
this.dbSystem = dbSystem;
|
||||
}
|
||||
|
||||
public TPSInsertProcessor tpsInsertProcessor(List<TPS> tpsList) {
|
||||
return new TPSInsertProcessor(tpsList, dbSystem.get().getDatabase());
|
||||
}
|
||||
|
||||
public PlayerProcessors player() {
|
||||
|
@ -17,8 +17,9 @@
|
||||
package com.djrapitops.plan.system.tasks;
|
||||
|
||||
import com.djrapitops.plan.data.container.TPS;
|
||||
import com.djrapitops.plan.system.processing.Processing;
|
||||
import com.djrapitops.plan.system.processing.processors.Processors;
|
||||
import com.djrapitops.plan.db.access.transactions.events.TPSStoreTransaction;
|
||||
import com.djrapitops.plan.system.database.DBSystem;
|
||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||
@ -39,8 +40,8 @@ public abstract class TPSCountTimer extends AbsRunnable {
|
||||
|
||||
protected final List<TPS> history;
|
||||
|
||||
protected final Processors processors;
|
||||
protected final Processing processing;
|
||||
protected final DBSystem dbSystem;
|
||||
protected final ServerInfo serverInfo;
|
||||
protected final PluginLogger logger;
|
||||
protected final ErrorHandler errorHandler;
|
||||
|
||||
@ -49,13 +50,13 @@ public abstract class TPSCountTimer extends AbsRunnable {
|
||||
protected int latestPlayersOnline = 0;
|
||||
|
||||
public TPSCountTimer(
|
||||
Processors processors,
|
||||
Processing processing,
|
||||
DBSystem dbSystem,
|
||||
ServerInfo serverInfo,
|
||||
PluginLogger logger,
|
||||
ErrorHandler errorHandler
|
||||
) {
|
||||
this.processors = processors;
|
||||
this.processing = processing;
|
||||
this.dbSystem = dbSystem;
|
||||
this.serverInfo = serverInfo;
|
||||
this.logger = logger;
|
||||
this.errorHandler = errorHandler;
|
||||
history = new ArrayList<>();
|
||||
@ -70,7 +71,10 @@ public abstract class TPSCountTimer extends AbsRunnable {
|
||||
addNewTPSEntry(nanoTime, now);
|
||||
|
||||
if (history.size() >= 60) {
|
||||
processing.submit(processors.tpsInsertProcessor(new ArrayList<>(history)));
|
||||
dbSystem.getDatabase().executeTransaction(new TPSStoreTransaction(
|
||||
serverInfo.getServerUUID(),
|
||||
new ArrayList<>(history)
|
||||
));
|
||||
history.clear();
|
||||
}
|
||||
} catch (Exception | NoClassDefFoundError | NoSuchMethodError | NoSuchFieldError e) {
|
||||
|
@ -215,7 +215,7 @@ public abstract class CommonDBTest {
|
||||
}
|
||||
|
||||
for (TPS tps : expected) {
|
||||
tpsTable.insertTPS(tps);
|
||||
execute(DataStoreQueries.storeTPS(serverUUID, tps));
|
||||
}
|
||||
|
||||
commitTest();
|
||||
@ -558,7 +558,7 @@ public abstract class CommonDBTest {
|
||||
expected.add(new TPS(r.nextLong(), r.nextDouble(), r.nextInt(100000000), averageCPUUsage, usedMemory, entityCount, chunksLoaded, freeDiskSpace));
|
||||
expected.add(new TPS(r.nextLong(), r.nextDouble(), r.nextInt(100000000), averageCPUUsage, usedMemory, entityCount, chunksLoaded, freeDiskSpace));
|
||||
for (TPS tps : expected) {
|
||||
tpsTable.insertTPS(tps);
|
||||
execute(DataStoreQueries.storeTPS(serverUUID, tps));
|
||||
}
|
||||
|
||||
db.executeTransaction(new PingStoreTransaction(
|
||||
|
@ -19,9 +19,9 @@ package com.djrapitops.plan.system.tasks.sponge;
|
||||
import com.djrapitops.plan.PlanSponge;
|
||||
import com.djrapitops.plan.data.container.TPS;
|
||||
import com.djrapitops.plan.data.container.builders.TPSBuilder;
|
||||
import com.djrapitops.plan.system.database.DBSystem;
|
||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
|
||||
import com.djrapitops.plan.system.processing.Processing;
|
||||
import com.djrapitops.plan.system.processing.processors.Processors;
|
||||
import com.djrapitops.plan.system.tasks.TPSCountTimer;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||
@ -40,13 +40,13 @@ public class SpongeTPSCountTimer extends TPSCountTimer {
|
||||
@Inject
|
||||
public SpongeTPSCountTimer(
|
||||
PlanSponge plugin,
|
||||
Processors processors,
|
||||
Processing processing,
|
||||
DBSystem dbSystem,
|
||||
ServerInfo serverInfo,
|
||||
ServerProperties serverProperties,
|
||||
PluginLogger logger,
|
||||
ErrorHandler errorHandler
|
||||
) {
|
||||
super(processors, processing, logger, errorHandler);
|
||||
super(dbSystem, serverInfo, logger, errorHandler);
|
||||
this.plugin = plugin;
|
||||
this.serverProperties = serverProperties;
|
||||
lastCheckNano = -1;
|
||||
|
@ -18,9 +18,9 @@ package com.djrapitops.plan.system.tasks.velocity;
|
||||
|
||||
import com.djrapitops.plan.data.container.TPS;
|
||||
import com.djrapitops.plan.data.container.builders.TPSBuilder;
|
||||
import com.djrapitops.plan.system.database.DBSystem;
|
||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
|
||||
import com.djrapitops.plan.system.processing.Processing;
|
||||
import com.djrapitops.plan.system.processing.processors.Processors;
|
||||
import com.djrapitops.plan.system.tasks.TPSCountTimer;
|
||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||
@ -35,13 +35,13 @@ public class VelocityTPSCountTimer extends TPSCountTimer {
|
||||
|
||||
@Inject
|
||||
public VelocityTPSCountTimer(
|
||||
Processors processors,
|
||||
Processing processing,
|
||||
DBSystem dbSystem,
|
||||
ServerInfo serverInfo,
|
||||
ServerProperties serverProperties,
|
||||
PluginLogger logger,
|
||||
ErrorHandler errorHandler
|
||||
) {
|
||||
super(processors, processing, logger, errorHandler);
|
||||
super(dbSystem, serverInfo, logger, errorHandler);
|
||||
this.serverProperties = serverProperties;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user