Refactored TPSTable#insertTPS to a transaction:

- Removed TPSInsertProcessor
This commit is contained in:
Rsl1122 2019-02-02 12:18:46 +02:00
parent f9136d390a
commit af674919e7
12 changed files with 90 additions and 101 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -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());
}
};
}
}

View File

@ -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);
}
}
}

View File

@ -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 (");

View File

@ -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);

View File

@ -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() {

View File

@ -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() {

View File

@ -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) {

View File

@ -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(

View File

@ -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;

View File

@ -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;
}