[#777] Fixed network-server config file updating

TimeUnit.MINUTES was used where MILLISECONDS was appropriate,
the task would have ran once every 1000 hours instead of 1 minute.
This commit is contained in:
Rsl1122 2019-01-08 21:31:10 +02:00
parent 5d0f03c4c1
commit 57ddf070d2
5 changed files with 97 additions and 9 deletions

View File

@ -24,6 +24,7 @@ import com.djrapitops.plan.system.tasks.bukkit.BukkitTPSCountTimer;
import com.djrapitops.plan.system.tasks.bukkit.PaperTPSCountTimer;
import com.djrapitops.plan.system.tasks.bukkit.PingCountTimerBukkit;
import com.djrapitops.plan.system.tasks.server.BootAnalysisTask;
import com.djrapitops.plan.system.tasks.server.ConfigStoreTask;
import com.djrapitops.plan.system.tasks.server.PeriodicAnalysisTask;
import com.djrapitops.plugin.api.Check;
import com.djrapitops.plugin.api.TimeAmount;
@ -44,6 +45,7 @@ public class BukkitTaskSystem extends ServerTaskSystem {
private final Plan plugin;
private final ShutdownHook shutdownHook;
private final PingCountTimerBukkit pingCountTimer;
private final ConfigStoreTask configStoreTask;
@Inject
public BukkitTaskSystem(
@ -57,7 +59,8 @@ public class BukkitTaskSystem extends ServerTaskSystem {
PeriodicAnalysisTask periodicAnalysisTask,
PingCountTimerBukkit pingCountTimer,
LogsFolderCleanTask logsFolderCleanTask,
PlayersPageRefreshTask playersPageRefreshTask
PlayersPageRefreshTask playersPageRefreshTask,
ConfigStoreTask configStoreTask
) {
super(
runnableFactory,
@ -70,6 +73,7 @@ public class BukkitTaskSystem extends ServerTaskSystem {
this.plugin = plugin;
this.shutdownHook = shutdownHook;
this.pingCountTimer = pingCountTimer;
this.configStoreTask = configStoreTask;
}
@Override
@ -80,6 +84,10 @@ public class BukkitTaskSystem extends ServerTaskSystem {
long startDelay = TimeAmount.toTicks(config.get(TimeSettings.PING_SERVER_ENABLE_DELAY), TimeUnit.MILLISECONDS);
registerTask("PingCountTimer", pingCountTimer)
.runTaskTimer(startDelay, 40L);
// +40 ticks / 2 seconds so that update check task runs first.
long storeDelay = TimeAmount.toTicks(config.get(TimeSettings.CONFIG_UPDATE_INTERVAL), TimeUnit.MILLISECONDS) + 40;
registerTask("Config Store Task", configStoreTask).runTaskLaterAsynchronously(storeDelay);
} catch (ExceptionInInitializerError | NoClassDefFoundError ignore) {
// Running CraftBukkit
}

View File

@ -22,15 +22,14 @@ import com.djrapitops.plan.system.database.DBSystem;
import com.djrapitops.plan.system.database.databases.Database;
import com.djrapitops.plan.system.file.PlanFiles;
import com.djrapitops.plan.system.info.server.ServerInfo;
import com.djrapitops.plan.system.settings.config.Config;
import com.djrapitops.plan.system.settings.config.ConfigReader;
import com.djrapitops.plan.system.settings.config.ConfigWriter;
import com.djrapitops.plan.system.settings.config.PlanConfig;
import com.djrapitops.plan.system.settings.config.*;
import com.djrapitops.plan.system.settings.paths.PluginSettings;
import com.djrapitops.plan.system.settings.paths.TimeSettings;
import com.djrapitops.plan.system.tasks.TaskSystem;
import com.djrapitops.plan.utilities.file.FileWatcher;
import com.djrapitops.plan.utilities.file.WatchedFile;
import com.djrapitops.plugin.api.TimeAmount;
import com.djrapitops.plugin.logging.console.PluginLogger;
import com.djrapitops.plugin.logging.error.ErrorHandler;
import com.djrapitops.plugin.task.AbsRunnable;
@ -63,6 +62,7 @@ public class NetworkSettingManager implements SubSystem {
private final ServerInfo serverInfo;
private final TaskSystem taskSystem;
private PlanConfig config;
private final PluginLogger logger;
private ErrorHandler errorHandler;
private File serverSettingsFolder;
@ -76,6 +76,7 @@ public class NetworkSettingManager implements SubSystem {
DBSystem dbSystem,
ServerInfo serverInfo,
TaskSystem taskSystem,
PluginLogger logger,
ErrorHandler errorHandler
) {
this.files = files;
@ -83,6 +84,7 @@ public class NetworkSettingManager implements SubSystem {
this.dbSystem = dbSystem;
this.serverInfo = serverInfo;
this.taskSystem = taskSystem;
this.logger = logger;
this.errorHandler = errorHandler;
}
@ -93,6 +95,7 @@ public class NetworkSettingManager implements SubSystem {
watcher = prepareFileWatcher();
watcher.start();
logger.debug("Server Settings folder FileWatcher started.");
scheduleDBCheckTask();
}
@ -130,7 +133,7 @@ public class NetworkSettingManager implements SubSystem {
}
private void scheduleDBCheckTask() {
long checkPeriod = TimeAmount.toTicks(config.get(TimeSettings.CONFIG_UPDATE_INTERVAL), TimeUnit.MINUTES);
long checkPeriod = TimeAmount.toTicks(config.get(TimeSettings.CONFIG_UPDATE_INTERVAL), TimeUnit.MILLISECONDS);
taskSystem.registerTask("Config Update DB Checker", new AbsRunnable() {
@Override
public void run() {
@ -170,7 +173,11 @@ public class NetworkSettingManager implements SubSystem {
Optional<Config> foundConfig = database.fetch().getNewConfig(lastModified, serverUUID);
if (foundConfig.isPresent()) {
try {
new ConfigWriter(configFile.toPath()).write(foundConfig.get());
Config writing = foundConfig.get();
String serverName = writing.getNode(PluginSettings.SERVER_NAME.getPath()).map(ConfigNode::getString).orElse("Unknown");
new ConfigWriter(configFile.toPath()).write(writing);
logger.info("Config file for server '" + serverName + "' updated in /Plan/serverConfiguration");
addFileToWatchList(watcher, configFile);
} catch (IOException e) {
throw new UncheckedIOException(e);
@ -188,6 +195,8 @@ public class NetworkSettingManager implements SubSystem {
try (ConfigReader reader = new ConfigReader(file.toPath())) {
Config config = reader.read();
database.save().saveConfig(serverUUID, config);
String serverName = config.getNode(PluginSettings.SERVER_NAME.getPath()).map(ConfigNode::getString).orElse("Unknown");
logger.debug("Server config '" + serverName + "' in db now up to date.");
} catch (IOException e) {
throw new UncheckedIOException(e);
}

View File

@ -86,6 +86,8 @@ public class ServerSettingsManager implements SubSystem {
@Override
public void enable() {
watcher = prepareFileWatcher();
watcher.start();
logger.debug("Server Settings folder FileWatcher started.");
scheduleDBCheckTask();
}
@ -108,13 +110,14 @@ public class ServerSettingsManager implements SubSystem {
try (ConfigReader reader = new ConfigReader(file.toPath())) {
Config config = reader.read();
database.save().saveConfig(serverInfo.getServerUUID(), config);
logger.debug("Server config saved to database.");
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
private void scheduleDBCheckTask() {
long checkPeriod = TimeAmount.toTicks(config.get(TimeSettings.CONFIG_UPDATE_INTERVAL), TimeUnit.MINUTES);
long checkPeriod = TimeAmount.toTicks(config.get(TimeSettings.CONFIG_UPDATE_INTERVAL), TimeUnit.MILLISECONDS);
taskSystem.registerTask("Config Update DB Checker", new AbsRunnable() {
@Override
public void run() {

View File

@ -0,0 +1,60 @@
/*
* 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.tasks.server;
import com.djrapitops.plan.system.database.DBSystem;
import com.djrapitops.plan.system.info.server.ServerInfo;
import com.djrapitops.plan.system.settings.config.PlanConfig;
import com.djrapitops.plugin.logging.console.PluginLogger;
import com.djrapitops.plugin.task.AbsRunnable;
import javax.inject.Inject;
import javax.inject.Singleton;
/**
* Task that stores a server config in the database on boot.
*
* @author Rsl1122
*/
@Singleton
public class ConfigStoreTask extends AbsRunnable {
private final PlanConfig config;
private final ServerInfo serverInfo;
private final DBSystem dbSystem;
private final PluginLogger logger;
@Inject
public ConfigStoreTask(
PlanConfig config,
ServerInfo serverInfo,
DBSystem dbSystem,
PluginLogger logger
) {
this.config = config;
this.serverInfo = serverInfo;
this.dbSystem = dbSystem;
this.logger = logger;
}
@Override
public void run() {
dbSystem.getDatabase().save().saveConfig(serverInfo.getServerUUID(), config);
logger.debug("Config Store Task - Config in db now up to date.");
cancel();
}
}

View File

@ -21,6 +21,7 @@ import com.djrapitops.plan.ShutdownHook;
import com.djrapitops.plan.system.settings.config.PlanConfig;
import com.djrapitops.plan.system.settings.paths.TimeSettings;
import com.djrapitops.plan.system.tasks.server.BootAnalysisTask;
import com.djrapitops.plan.system.tasks.server.ConfigStoreTask;
import com.djrapitops.plan.system.tasks.server.PeriodicAnalysisTask;
import com.djrapitops.plan.system.tasks.sponge.PingCountTimerSponge;
import com.djrapitops.plan.system.tasks.sponge.SpongeTPSCountTimer;
@ -37,6 +38,7 @@ public class SpongeTaskSystem extends ServerTaskSystem {
private final PlanSponge plugin;
private final ShutdownHook shutdownHook;
private final PingCountTimerSponge pingCountTimer;
private final ConfigStoreTask configStoreTask;
@Inject
public SpongeTaskSystem(
@ -49,7 +51,8 @@ public class SpongeTaskSystem extends ServerTaskSystem {
PeriodicAnalysisTask periodicAnalysisTask,
PingCountTimerSponge pingCountTimer,
LogsFolderCleanTask logsFolderCleanTask,
PlayersPageRefreshTask playersPageRefreshTask
PlayersPageRefreshTask playersPageRefreshTask,
ConfigStoreTask configStoreTask
) {
super(
runnableFactory,
@ -62,6 +65,7 @@ public class SpongeTaskSystem extends ServerTaskSystem {
this.plugin = plugin;
this.shutdownHook = shutdownHook;
this.pingCountTimer = pingCountTimer;
this.configStoreTask = configStoreTask;
}
@Override
@ -73,6 +77,10 @@ public class SpongeTaskSystem extends ServerTaskSystem {
runnableFactory.create("PingCountTimer", pingCountTimer)
.runTaskTimer(startDelay, PingCountTimerSponge.PING_INTERVAL);
// +40 ticks / 2 seconds so that update check task runs first.
long storeDelay = TimeAmount.toTicks(config.get(TimeSettings.CONFIG_UPDATE_INTERVAL), TimeUnit.MILLISECONDS) + 40;
registerTask("Config Store Task", configStoreTask).runTaskLaterAsynchronously(storeDelay);
shutdownHook.register();
}