use of com.djrapitops.plan.exceptions.database.DBOpException in project Plan by plan-player-analytics.
the class DatabaseCommands method onHotswap.
public void onHotswap(CMDSender sender, Arguments arguments) {
DBType toDB = arguments.get(0).flatMap(DBType::getForName).orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_INCORRECT_DB, arguments.get(0).orElse("<MySQL/SQLite>"))));
try {
Database database = dbSystem.getActiveDatabaseByType(toDB);
database.init();
if (database.getState() == Database.State.CLOSED) {
return;
}
config.set(DatabaseSettings.TYPE, toDB.getName());
config.save();
} catch (DBOpException | IOException e) {
errorLogger.warn(e, ErrorContext.builder().related(toDB).build());
sender.send(locale.getString(CommandLang.PROGRESS_FAIL, e.getMessage()));
return;
}
statusCommands.onReload(sender);
}
use of com.djrapitops.plan.exceptions.database.DBOpException in project Plan by plan-player-analytics.
the class RegistrationCommands method registerUser.
private void registerUser(User user, CMDSender sender, int permissionLevel) {
String username = user.getUsername();
user.setPermissionLevel(permissionLevel);
try {
Database database = dbSystem.getDatabase();
boolean userExists = database.query(WebUserQueries.fetchUser(username)).isPresent();
if (userExists)
throw new IllegalArgumentException(locale.getString(CommandLang.FAIL_WEB_USER_EXISTS));
database.executeTransaction(new RegisterWebUserTransaction(user)).get();
sender.send(locale.getString(CommandLang.WEB_USER_REGISTER_SUCCESS, username));
logger.info(locale.getString(CommandLang.WEB_USER_REGISTER_NOTIFY, username, permissionLevel));
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (DBOpException | ExecutionException e) {
errorLogger.warn(e, ErrorContext.builder().related(sender, user, permissionLevel).build());
}
}
use of com.djrapitops.plan.exceptions.database.DBOpException in project Plan by plan-player-analytics.
the class BasicAuthentication method getUser.
@Override
public User getUser() {
String decoded = Base64Util.decode(authenticationString);
String[] userInfo = StringUtils.split(decoded, ':');
if (userInfo.length != 2) {
throw new WebUserAuthException(FailReason.USER_AND_PASS_NOT_SPECIFIED, Arrays.toString(userInfo));
}
String username = userInfo[0];
String passwordRaw = userInfo[1];
Database.State dbState = database.getState();
if (dbState != Database.State.OPEN) {
throw new WebUserAuthException(FailReason.DATABASE_NOT_OPEN, "State was: " + dbState.name());
}
try {
User user = database.query(WebUserQueries.fetchUser(username)).orElseThrow(() -> new WebUserAuthException(FailReason.USER_DOES_NOT_EXIST, username));
boolean correctPass = user.doesPasswordMatch(passwordRaw);
if (!correctPass) {
throw new WebUserAuthException(FailReason.USER_PASS_MISMATCH, username);
}
return user;
} catch (DBOpException | PassEncryptException e) {
throw new WebUserAuthException(e);
}
}
use of com.djrapitops.plan.exceptions.database.DBOpException in project Plan by plan-player-analytics.
the class DBCleanTask method run.
@Override
public void run() {
Database database = dbSystem.getDatabase();
try {
if (database.getState() != Database.State.CLOSED) {
database.executeTransaction(new RemoveOldSampledDataTransaction(serverInfo.getServerUUID(), config.get(TimeSettings.DELETE_TPS_DATA_AFTER), config.get(TimeSettings.DELETE_PING_DATA_AFTER)));
database.executeTransaction(new RemoveDuplicateUserInfoTransaction());
database.executeTransaction(new RemoveUnsatisfiedConditionalPlayerResultsTransaction());
database.executeTransaction(new RemoveUnsatisfiedConditionalServerResultsTransaction());
int removed = cleanOldPlayers(database);
if (removed > 0) {
logger.info(locale.getString(PluginLang.DB_NOTIFY_CLEAN, removed));
}
Long deleteExtensionDataAfter = config.get(TimeSettings.DELETE_EXTENSION_DATA_AFTER);
Long databaseCleanPeriod = config.get(TimeSettings.CLEAN_DATABASE_PERIOD);
if (databaseCleanPeriod > deleteExtensionDataAfter) {
logger.warn("Data of Disabled Extensions can not be cleaned due to " + TimeSettings.CLEAN_DATABASE_PERIOD.getPath() + " being larger than " + TimeSettings.DELETE_EXTENSION_DATA_AFTER.getPath());
}
// for plugins being deleted all the time.
if (System.currentTimeMillis() - lastReload <= deleteExtensionDataAfter) {
database.executeTransaction(new RemoveOldExtensionsTransaction(config.getExtensionSettings(), deleteExtensionDataAfter, serverInfo.getServerUUID()));
}
}
} catch (DBOpException e) {
errorLogger.error(e);
cancel();
}
}
use of com.djrapitops.plan.exceptions.database.DBOpException in project Plan by plan-player-analytics.
the class PingStoreTransaction method performOperations.
@Override
protected void performOperations() {
Ping ping = calculateAggregatePing();
DBOpException userInsertError = null;
if (Boolean.FALSE.equals(query(PlayerFetchQueries.isPlayerRegistered(playerUUID)))) {
userInsertError = tryToRegisterUser(ping.getDate());
}
try {
execute(DataStoreQueries.storePing(playerUUID, serverUUID, ping));
} catch (DBOpException failed) {
if (userInsertError != null)
failed.addSuppressed(userInsertError);
if (failed.isUserIdConstraintViolation()) {
retry(ping, failed);
} else {
throw failed;
}
}
}
Aggregations