mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-10 09:21:35 +01:00
[#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:
parent
5d0f03c4c1
commit
57ddf070d2
@ -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.PaperTPSCountTimer;
|
||||||
import com.djrapitops.plan.system.tasks.bukkit.PingCountTimerBukkit;
|
import com.djrapitops.plan.system.tasks.bukkit.PingCountTimerBukkit;
|
||||||
import com.djrapitops.plan.system.tasks.server.BootAnalysisTask;
|
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.server.PeriodicAnalysisTask;
|
||||||
import com.djrapitops.plugin.api.Check;
|
import com.djrapitops.plugin.api.Check;
|
||||||
import com.djrapitops.plugin.api.TimeAmount;
|
import com.djrapitops.plugin.api.TimeAmount;
|
||||||
@ -44,6 +45,7 @@ public class BukkitTaskSystem extends ServerTaskSystem {
|
|||||||
private final Plan plugin;
|
private final Plan plugin;
|
||||||
private final ShutdownHook shutdownHook;
|
private final ShutdownHook shutdownHook;
|
||||||
private final PingCountTimerBukkit pingCountTimer;
|
private final PingCountTimerBukkit pingCountTimer;
|
||||||
|
private final ConfigStoreTask configStoreTask;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public BukkitTaskSystem(
|
public BukkitTaskSystem(
|
||||||
@ -57,7 +59,8 @@ public class BukkitTaskSystem extends ServerTaskSystem {
|
|||||||
PeriodicAnalysisTask periodicAnalysisTask,
|
PeriodicAnalysisTask periodicAnalysisTask,
|
||||||
PingCountTimerBukkit pingCountTimer,
|
PingCountTimerBukkit pingCountTimer,
|
||||||
LogsFolderCleanTask logsFolderCleanTask,
|
LogsFolderCleanTask logsFolderCleanTask,
|
||||||
PlayersPageRefreshTask playersPageRefreshTask
|
PlayersPageRefreshTask playersPageRefreshTask,
|
||||||
|
ConfigStoreTask configStoreTask
|
||||||
) {
|
) {
|
||||||
super(
|
super(
|
||||||
runnableFactory,
|
runnableFactory,
|
||||||
@ -70,6 +73,7 @@ public class BukkitTaskSystem extends ServerTaskSystem {
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.shutdownHook = shutdownHook;
|
this.shutdownHook = shutdownHook;
|
||||||
this.pingCountTimer = pingCountTimer;
|
this.pingCountTimer = pingCountTimer;
|
||||||
|
this.configStoreTask = configStoreTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -80,6 +84,10 @@ public class BukkitTaskSystem extends ServerTaskSystem {
|
|||||||
long startDelay = TimeAmount.toTicks(config.get(TimeSettings.PING_SERVER_ENABLE_DELAY), TimeUnit.MILLISECONDS);
|
long startDelay = TimeAmount.toTicks(config.get(TimeSettings.PING_SERVER_ENABLE_DELAY), TimeUnit.MILLISECONDS);
|
||||||
registerTask("PingCountTimer", pingCountTimer)
|
registerTask("PingCountTimer", pingCountTimer)
|
||||||
.runTaskTimer(startDelay, 40L);
|
.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) {
|
} catch (ExceptionInInitializerError | NoClassDefFoundError ignore) {
|
||||||
// Running CraftBukkit
|
// Running CraftBukkit
|
||||||
}
|
}
|
||||||
|
@ -22,15 +22,14 @@ import com.djrapitops.plan.system.database.DBSystem;
|
|||||||
import com.djrapitops.plan.system.database.databases.Database;
|
import com.djrapitops.plan.system.database.databases.Database;
|
||||||
import com.djrapitops.plan.system.file.PlanFiles;
|
import com.djrapitops.plan.system.file.PlanFiles;
|
||||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||||
import com.djrapitops.plan.system.settings.config.Config;
|
import com.djrapitops.plan.system.settings.config.*;
|
||||||
import com.djrapitops.plan.system.settings.config.ConfigReader;
|
import com.djrapitops.plan.system.settings.paths.PluginSettings;
|
||||||
import com.djrapitops.plan.system.settings.config.ConfigWriter;
|
|
||||||
import com.djrapitops.plan.system.settings.config.PlanConfig;
|
|
||||||
import com.djrapitops.plan.system.settings.paths.TimeSettings;
|
import com.djrapitops.plan.system.settings.paths.TimeSettings;
|
||||||
import com.djrapitops.plan.system.tasks.TaskSystem;
|
import com.djrapitops.plan.system.tasks.TaskSystem;
|
||||||
import com.djrapitops.plan.utilities.file.FileWatcher;
|
import com.djrapitops.plan.utilities.file.FileWatcher;
|
||||||
import com.djrapitops.plan.utilities.file.WatchedFile;
|
import com.djrapitops.plan.utilities.file.WatchedFile;
|
||||||
import com.djrapitops.plugin.api.TimeAmount;
|
import com.djrapitops.plugin.api.TimeAmount;
|
||||||
|
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||||
import com.djrapitops.plugin.task.AbsRunnable;
|
import com.djrapitops.plugin.task.AbsRunnable;
|
||||||
|
|
||||||
@ -63,6 +62,7 @@ public class NetworkSettingManager implements SubSystem {
|
|||||||
private final ServerInfo serverInfo;
|
private final ServerInfo serverInfo;
|
||||||
private final TaskSystem taskSystem;
|
private final TaskSystem taskSystem;
|
||||||
private PlanConfig config;
|
private PlanConfig config;
|
||||||
|
private final PluginLogger logger;
|
||||||
private ErrorHandler errorHandler;
|
private ErrorHandler errorHandler;
|
||||||
|
|
||||||
private File serverSettingsFolder;
|
private File serverSettingsFolder;
|
||||||
@ -76,6 +76,7 @@ public class NetworkSettingManager implements SubSystem {
|
|||||||
DBSystem dbSystem,
|
DBSystem dbSystem,
|
||||||
ServerInfo serverInfo,
|
ServerInfo serverInfo,
|
||||||
TaskSystem taskSystem,
|
TaskSystem taskSystem,
|
||||||
|
PluginLogger logger,
|
||||||
ErrorHandler errorHandler
|
ErrorHandler errorHandler
|
||||||
) {
|
) {
|
||||||
this.files = files;
|
this.files = files;
|
||||||
@ -83,6 +84,7 @@ public class NetworkSettingManager implements SubSystem {
|
|||||||
this.dbSystem = dbSystem;
|
this.dbSystem = dbSystem;
|
||||||
this.serverInfo = serverInfo;
|
this.serverInfo = serverInfo;
|
||||||
this.taskSystem = taskSystem;
|
this.taskSystem = taskSystem;
|
||||||
|
this.logger = logger;
|
||||||
|
|
||||||
this.errorHandler = errorHandler;
|
this.errorHandler = errorHandler;
|
||||||
}
|
}
|
||||||
@ -93,6 +95,7 @@ public class NetworkSettingManager implements SubSystem {
|
|||||||
|
|
||||||
watcher = prepareFileWatcher();
|
watcher = prepareFileWatcher();
|
||||||
watcher.start();
|
watcher.start();
|
||||||
|
logger.debug("Server Settings folder FileWatcher started.");
|
||||||
|
|
||||||
scheduleDBCheckTask();
|
scheduleDBCheckTask();
|
||||||
}
|
}
|
||||||
@ -130,7 +133,7 @@ public class NetworkSettingManager implements SubSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void scheduleDBCheckTask() {
|
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() {
|
taskSystem.registerTask("Config Update DB Checker", new AbsRunnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@ -170,7 +173,11 @@ public class NetworkSettingManager implements SubSystem {
|
|||||||
Optional<Config> foundConfig = database.fetch().getNewConfig(lastModified, serverUUID);
|
Optional<Config> foundConfig = database.fetch().getNewConfig(lastModified, serverUUID);
|
||||||
if (foundConfig.isPresent()) {
|
if (foundConfig.isPresent()) {
|
||||||
try {
|
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);
|
addFileToWatchList(watcher, configFile);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new UncheckedIOException(e);
|
throw new UncheckedIOException(e);
|
||||||
@ -188,6 +195,8 @@ public class NetworkSettingManager implements SubSystem {
|
|||||||
try (ConfigReader reader = new ConfigReader(file.toPath())) {
|
try (ConfigReader reader = new ConfigReader(file.toPath())) {
|
||||||
Config config = reader.read();
|
Config config = reader.read();
|
||||||
database.save().saveConfig(serverUUID, config);
|
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) {
|
} catch (IOException e) {
|
||||||
throw new UncheckedIOException(e);
|
throw new UncheckedIOException(e);
|
||||||
}
|
}
|
||||||
|
@ -86,6 +86,8 @@ public class ServerSettingsManager implements SubSystem {
|
|||||||
@Override
|
@Override
|
||||||
public void enable() {
|
public void enable() {
|
||||||
watcher = prepareFileWatcher();
|
watcher = prepareFileWatcher();
|
||||||
|
watcher.start();
|
||||||
|
logger.debug("Server Settings folder FileWatcher started.");
|
||||||
scheduleDBCheckTask();
|
scheduleDBCheckTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,13 +110,14 @@ public class ServerSettingsManager implements SubSystem {
|
|||||||
try (ConfigReader reader = new ConfigReader(file.toPath())) {
|
try (ConfigReader reader = new ConfigReader(file.toPath())) {
|
||||||
Config config = reader.read();
|
Config config = reader.read();
|
||||||
database.save().saveConfig(serverInfo.getServerUUID(), config);
|
database.save().saveConfig(serverInfo.getServerUUID(), config);
|
||||||
|
logger.debug("Server config saved to database.");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new UncheckedIOException(e);
|
throw new UncheckedIOException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void scheduleDBCheckTask() {
|
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() {
|
taskSystem.registerTask("Config Update DB Checker", new AbsRunnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
@ -21,6 +21,7 @@ import com.djrapitops.plan.ShutdownHook;
|
|||||||
import com.djrapitops.plan.system.settings.config.PlanConfig;
|
import com.djrapitops.plan.system.settings.config.PlanConfig;
|
||||||
import com.djrapitops.plan.system.settings.paths.TimeSettings;
|
import com.djrapitops.plan.system.settings.paths.TimeSettings;
|
||||||
import com.djrapitops.plan.system.tasks.server.BootAnalysisTask;
|
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.server.PeriodicAnalysisTask;
|
||||||
import com.djrapitops.plan.system.tasks.sponge.PingCountTimerSponge;
|
import com.djrapitops.plan.system.tasks.sponge.PingCountTimerSponge;
|
||||||
import com.djrapitops.plan.system.tasks.sponge.SpongeTPSCountTimer;
|
import com.djrapitops.plan.system.tasks.sponge.SpongeTPSCountTimer;
|
||||||
@ -37,6 +38,7 @@ public class SpongeTaskSystem extends ServerTaskSystem {
|
|||||||
private final PlanSponge plugin;
|
private final PlanSponge plugin;
|
||||||
private final ShutdownHook shutdownHook;
|
private final ShutdownHook shutdownHook;
|
||||||
private final PingCountTimerSponge pingCountTimer;
|
private final PingCountTimerSponge pingCountTimer;
|
||||||
|
private final ConfigStoreTask configStoreTask;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public SpongeTaskSystem(
|
public SpongeTaskSystem(
|
||||||
@ -49,7 +51,8 @@ public class SpongeTaskSystem extends ServerTaskSystem {
|
|||||||
PeriodicAnalysisTask periodicAnalysisTask,
|
PeriodicAnalysisTask periodicAnalysisTask,
|
||||||
PingCountTimerSponge pingCountTimer,
|
PingCountTimerSponge pingCountTimer,
|
||||||
LogsFolderCleanTask logsFolderCleanTask,
|
LogsFolderCleanTask logsFolderCleanTask,
|
||||||
PlayersPageRefreshTask playersPageRefreshTask
|
PlayersPageRefreshTask playersPageRefreshTask,
|
||||||
|
ConfigStoreTask configStoreTask
|
||||||
) {
|
) {
|
||||||
super(
|
super(
|
||||||
runnableFactory,
|
runnableFactory,
|
||||||
@ -62,6 +65,7 @@ public class SpongeTaskSystem extends ServerTaskSystem {
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.shutdownHook = shutdownHook;
|
this.shutdownHook = shutdownHook;
|
||||||
this.pingCountTimer = pingCountTimer;
|
this.pingCountTimer = pingCountTimer;
|
||||||
|
this.configStoreTask = configStoreTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -73,6 +77,10 @@ public class SpongeTaskSystem extends ServerTaskSystem {
|
|||||||
runnableFactory.create("PingCountTimer", pingCountTimer)
|
runnableFactory.create("PingCountTimer", pingCountTimer)
|
||||||
.runTaskTimer(startDelay, PingCountTimerSponge.PING_INTERVAL);
|
.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();
|
shutdownHook.register();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user