mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-12 06:41:50 +01:00
Progress on automatic config setting propagation
This commit is contained in:
parent
63f8482c4b
commit
6380457ccc
@ -430,4 +430,10 @@ public class Plan extends BukkitPlugin<Plan> implements IPlan {
|
||||
public InformationManager getInfoManager() {
|
||||
return infoManager;
|
||||
}
|
||||
|
||||
public void restart() {
|
||||
onDisable();
|
||||
reloadConfig();
|
||||
onEnable();
|
||||
}
|
||||
}
|
||||
|
@ -77,6 +77,8 @@ public class PlanBungee extends BungeePlugin<PlanBungee> implements IPlan {
|
||||
|
||||
webServer.initServer();
|
||||
|
||||
infoManager.attemptConnection();
|
||||
|
||||
if (!webServer.isEnabled()) {
|
||||
Log.error("WebServer was not successfully initialized.");
|
||||
disablePlugin();
|
||||
|
@ -7,7 +7,6 @@ package main.java.com.djrapitops.plan;
|
||||
import com.djrapitops.plugin.config.IConfig;
|
||||
import com.djrapitops.plugin.config.fileconfig.IFileConfig;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
import main.java.com.djrapitops.plan.api.IPlan;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
@ -23,7 +22,23 @@ import java.util.UUID;
|
||||
*/
|
||||
public class ServerSpecificSettings {
|
||||
|
||||
public void updateSettings(IPlan plugin, Map<String, String> settings) {
|
||||
public void addOriginalBukkitSettings(PlanBungee plugin, UUID serverUUID, Map<String, Object> settings) {
|
||||
try {
|
||||
IConfig iConfig = plugin.getIConfig();
|
||||
IFileConfig config = iConfig.getConfig();
|
||||
if (!Verify.isEmpty(config.getString("Servers." + serverUUID + ".ServerName"))) {
|
||||
return;
|
||||
}
|
||||
for (Map.Entry<String, Object> entry : settings.entrySet()) {
|
||||
config.set("Servers." + serverUUID + "." + entry.getKey(), entry.getValue());
|
||||
}
|
||||
iConfig.save();
|
||||
} catch (IOException e) {
|
||||
Log.toLog(this.getClass().getName(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateSettings(Plan plugin, Map<String, String> settings) {
|
||||
try {
|
||||
IFileConfig config = plugin.getIConfig().getConfig();
|
||||
boolean changedSomething = false;
|
||||
@ -42,8 +57,7 @@ public class ServerSpecificSettings {
|
||||
Log.info("----------------------------------");
|
||||
Log.info("The Received Bungee Settings changed the config values, restarting Plan..");
|
||||
Log.info("----------------------------------");
|
||||
plugin.onDisable();
|
||||
plugin.onEnable();
|
||||
plugin.restart();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.toLog(this.getClass().getName(), e);
|
||||
|
@ -34,9 +34,7 @@ public class ReloadCommand extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
plugin.onDisable();
|
||||
plugin.reloadConfig();
|
||||
plugin.onEnable();
|
||||
plugin.restart();
|
||||
sender.sendMessage(Locale.get(Msg.CMD_INFO_RELOAD_COMPLETE).toString());
|
||||
return true;
|
||||
}
|
||||
|
@ -24,10 +24,7 @@ import main.java.com.djrapitops.plan.systems.webserver.response.Response;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.theme.Theme;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.WebAPIManager;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bukkit.RequestInspectPluginsTabBukkitWebAPI;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bungee.IsCachedWebAPI;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bungee.PostHtmlWebAPI;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bungee.PostInspectPluginsTabWebAPI;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bungee.RequestPluginsTabWebAPI;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bungee.*;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.universal.PingWebAPI;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.analysis.Analysis;
|
||||
@ -226,7 +223,9 @@ public class BukkitInformationManager extends InformationManager {
|
||||
PingWebAPI api = getWebAPI().getAPI(PingWebAPI.class);
|
||||
try {
|
||||
api.sendRequest(webServerAddress);
|
||||
getWebAPI().getAPI(PostOriginalBukkitSettingsWebAPI.class).sendRequest(webServerAddress);
|
||||
Log.info("Bungee Connection OK");
|
||||
plugin.getServerInfoManager().resetConnectionFails();
|
||||
return true;
|
||||
} catch (WebAPIConnectionFailException e) {
|
||||
plugin.getServerInfoManager().markConnectionFail();
|
||||
|
@ -5,6 +5,7 @@
|
||||
package main.java.com.djrapitops.plan.systems.info.server;
|
||||
|
||||
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.ServerVariableHolder;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
@ -123,7 +124,25 @@ public class BukkitServerInfoManager {
|
||||
}
|
||||
|
||||
public void markConnectionFail() {
|
||||
serverInfoFile.markConnectionFail();
|
||||
int timesFailed = serverInfoFile.markConnectionFail();
|
||||
if (timesFailed == -1) {
|
||||
return;
|
||||
}
|
||||
if (timesFailed >= 10) {
|
||||
try {
|
||||
serverInfoFile.saveInfo(serverInfo, new ServerInfo(-1, null, "Bungee", "", -1));
|
||||
Log.info("----------------------------------");
|
||||
Log.info("Bungee connection has failed 10 times in a row, assuming Bungee uninstalled - Restarting Plan..");
|
||||
Log.info("----------------------------------");
|
||||
plugin.restart();
|
||||
} catch (IOException e) {
|
||||
Log.toLog(this.getClass().getName(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void resetConnectionFails() {
|
||||
serverInfoFile.resetConnectionFails();
|
||||
}
|
||||
|
||||
public int getServerID() {
|
||||
|
@ -13,6 +13,7 @@ import main.java.com.djrapitops.plan.api.exceptions.PlanEnableException;
|
||||
import main.java.com.djrapitops.plan.api.exceptions.WebAPIException;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.database.tables.ServerTable;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bukkit.ConfigurationWebAPI;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.universal.PingWebAPI;
|
||||
|
||||
import java.sql.SQLException;
|
||||
@ -94,6 +95,20 @@ public class BungeeServerInfoManager {
|
||||
}
|
||||
}
|
||||
|
||||
private void sendConfigSettings(UUID serverUUID) {
|
||||
try {
|
||||
ServerInfo server = bukkitServers.get(serverUUID);
|
||||
if (server == null) {
|
||||
return;
|
||||
}
|
||||
String webAddress = server.getWebAddress();
|
||||
Log.debug("Sending config settings to " + webAddress + "");
|
||||
plugin.getWebServer().getWebAPI().getAPI(ConfigurationWebAPI.class).sendRequest(webAddress, serverUUID);
|
||||
} catch (WebAPIException e) {
|
||||
serverHasGoneOffline(serverUUID);
|
||||
}
|
||||
}
|
||||
|
||||
public void connectedToServer(ServerInfo server) {
|
||||
Log.info("Connection to Bukkit (" + server.getWebAddress() + ") OK");
|
||||
bukkitServers.put(server.getUuid(), server);
|
||||
@ -110,6 +125,7 @@ public class BungeeServerInfoManager {
|
||||
@Override
|
||||
public void run() {
|
||||
attemptConnection(server);
|
||||
sendConfigSettings(serverUUID);
|
||||
this.cancel();
|
||||
}
|
||||
}).runTaskLaterAsynchronously(TimeAmount.SECOND.ticks() * 3L);
|
||||
|
@ -67,12 +67,24 @@ public class ServerInfoFile extends BukkitConfig {
|
||||
return getConfig().getString("Bungee.WebAddress");
|
||||
}
|
||||
|
||||
public void markConnectionFail() {
|
||||
public int markConnectionFail() {
|
||||
try {
|
||||
IFileConfig config = getConfig();
|
||||
int fails = config.getInt("Bungee.Fail");
|
||||
config.set("Bungee.Fail", fails + 1);
|
||||
save();
|
||||
return fails;
|
||||
} catch (IOException e) {
|
||||
Log.toLog(this.getClass().getName(), e);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public void resetConnectionFails() {
|
||||
try {
|
||||
IFileConfig config = getConfig();
|
||||
config.set("Bungee.Fail", 0);
|
||||
save();
|
||||
} catch (IOException e) {
|
||||
Log.toLog(this.getClass().getName(), e);
|
||||
}
|
||||
|
@ -11,10 +11,7 @@ import main.java.com.djrapitops.plan.locale.Locale;
|
||||
import main.java.com.djrapitops.plan.locale.Msg;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.WebAPIManager;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bukkit.*;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bungee.IsCachedWebAPI;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bungee.PostHtmlWebAPI;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bungee.PostInspectPluginsTabWebAPI;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bungee.RequestPluginsTabWebAPI;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.bungee.*;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.universal.PingWebAPI;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||
|
||||
@ -68,6 +65,7 @@ public class WebServer {
|
||||
webAPI.registerNewAPI(new PostHtmlWebAPI());
|
||||
webAPI.registerNewAPI(new PostInspectPluginsTabWebAPI());
|
||||
webAPI.registerNewAPI(new RequestPluginsTabWebAPI());
|
||||
webAPI.registerNewAPI(new PostOriginalBukkitSettingsWebAPI());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -5,6 +5,8 @@
|
||||
package main.java.com.djrapitops.plan.systems.webserver.webapi.bukkit;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Compatibility;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.ServerSpecificSettings;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.api.IPlan;
|
||||
@ -21,18 +23,17 @@ import java.util.UUID;
|
||||
*/
|
||||
public class ConfigurationWebAPI extends WebAPI {
|
||||
|
||||
private Map<String, Object> configValues = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public Response onRequest(IPlan plugin, Map<String, String> variables) {
|
||||
if (!Compatibility.isBukkitAvailable()) {
|
||||
return badRequest("Called a Bungee Server");
|
||||
}
|
||||
if (Settings.BUNGEE_COPY_CONFIG.isFalse() || Settings.BUNGEE_OVERRIDE_STANDALONE_MODE.isTrue()) {
|
||||
Log.debug("Bungee Config settings overridden on this server.");
|
||||
return success();
|
||||
}
|
||||
variables.remove("sender");
|
||||
Settings.serverSpecific().updateSettings(plugin, variables);
|
||||
Settings.serverSpecific().updateSettings((Plan) plugin, variables);
|
||||
return success();
|
||||
}
|
||||
|
||||
@ -41,23 +42,24 @@ public class ConfigurationWebAPI extends WebAPI {
|
||||
throw new IllegalStateException("Wrong method call for this WebAPI, call sendRequest(String, UUID, UUID) instead.");
|
||||
}
|
||||
|
||||
public void sendRequest(String address, UUID serverUUID, int newPort) throws WebAPIException {
|
||||
setConfigValues(serverUUID, newPort);
|
||||
public void sendRequest(String address, UUID serverUUID) throws WebAPIException {
|
||||
Map<String, Object> configValues = getConfigValues(serverUUID);
|
||||
for (Map.Entry<String, Object> entry : configValues.entrySet()) {
|
||||
addVariable(entry.getKey(), entry.getValue().toString());
|
||||
}
|
||||
super.sendRequest(address);
|
||||
}
|
||||
|
||||
private void addConfigValue(Settings setting, Object value) {
|
||||
private void addConfigValue(Map<String, Object> configValues, Settings setting, Object value) {
|
||||
configValues.put(setting.getPath(), value);
|
||||
}
|
||||
|
||||
public void setConfigValues(UUID serverUUID, int newPort) throws WebAPIException {
|
||||
private Map<String, Object> getConfigValues(UUID serverUUID) throws WebAPIException {
|
||||
Map<String, Object> configValues = new HashMap<>();
|
||||
if (!Compatibility.isBungeeAvailable()) {
|
||||
throw new WebAPIException("Attempted to send config values from Bukkit to Bungee.");
|
||||
}
|
||||
addConfigValue(Settings.DB_TYPE, "mysql");
|
||||
addConfigValue(configValues, Settings.DB_TYPE, "mysql");
|
||||
Settings[] sameStrings = new Settings[]{
|
||||
Settings.DB_HOST, Settings.DB_USER, Settings.DB_PASS,
|
||||
Settings.DB_DATABASE, Settings.FORMAT_DECIMALS, Settings.FORMAT_SECONDS,
|
||||
@ -66,16 +68,18 @@ public class ConfigurationWebAPI extends WebAPI {
|
||||
Settings.FORMAT_YEAR, Settings.FORMAT_YEARS,
|
||||
};
|
||||
for (Settings setting : sameStrings) {
|
||||
addConfigValue(setting, setting.toString());
|
||||
addConfigValue(configValues, setting, setting.toString());
|
||||
}
|
||||
addConfigValue(Settings.DB_PORT, Settings.DB_PORT.getNumber());
|
||||
addServerSpecificValues(serverUUID);
|
||||
addConfigValue(configValues, Settings.DB_PORT, Settings.DB_PORT.getNumber());
|
||||
addServerSpecificValues(configValues, serverUUID);
|
||||
|
||||
return configValues;
|
||||
}
|
||||
|
||||
private void addServerSpecificValues(UUID serverUUID) {
|
||||
private void addServerSpecificValues(Map<String, Object> configValues, UUID serverUUID) {
|
||||
ServerSpecificSettings settings = Settings.serverSpecific();
|
||||
addConfigValue(Settings.THEME_BASE, settings.getString(serverUUID, Settings.THEME_BASE));
|
||||
addConfigValue(Settings.WEBSERVER_PORT, settings.getInt(serverUUID, Settings.WEBSERVER_PORT));
|
||||
addConfigValue(Settings.SERVER_NAME, settings.getString(serverUUID, Settings.SERVER_NAME));
|
||||
addConfigValue(configValues, Settings.THEME_BASE, settings.getString(serverUUID, Settings.THEME_BASE));
|
||||
addConfigValue(configValues, Settings.WEBSERVER_PORT, settings.getInt(serverUUID, Settings.WEBSERVER_PORT));
|
||||
addConfigValue(configValues, Settings.SERVER_NAME, settings.getString(serverUUID, Settings.SERVER_NAME));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Licence is provided in the jar as license.yml also here:
|
||||
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
|
||||
*/
|
||||
package main.java.com.djrapitops.plan.systems.webserver.webapi.bungee;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Compatibility;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
import main.java.com.djrapitops.plan.PlanBungee;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.api.IPlan;
|
||||
import main.java.com.djrapitops.plan.api.exceptions.WebAPIException;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.response.Response;
|
||||
import main.java.com.djrapitops.plan.systems.webserver.webapi.WebAPI;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* //TODO Class Javadoc Comment
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class PostOriginalBukkitSettingsWebAPI extends WebAPI {
|
||||
|
||||
@Override
|
||||
public Response onRequest(IPlan plugin, Map<String, String> variables) {
|
||||
if (Compatibility.isBukkitAvailable()) {
|
||||
return badRequest("Called a Bukkit Server");
|
||||
}
|
||||
Map<String, Object> settings = new HashMap<>();
|
||||
|
||||
String webServerPortS = variables.get("WebServerPort");
|
||||
String serverName = variables.get("ServerName");
|
||||
String themeBase = variables.get("ThemeBase");
|
||||
if (!Verify.notNull(webServerPortS, serverName, themeBase)) {
|
||||
return badRequest("Not all variables were set");
|
||||
}
|
||||
|
||||
int webServerPort = Integer.parseInt(webServerPortS);
|
||||
settings.put("WebServerPort", webServerPort);
|
||||
settings.put("ServerName", serverName);
|
||||
settings.put("ThemeBase", themeBase);
|
||||
Settings.serverSpecific().addOriginalBukkitSettings((PlanBungee) plugin, UUID.fromString(variables.get("sender")), settings);
|
||||
return success();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRequest(String address) throws WebAPIException {
|
||||
addVariable("WebServerPort", Integer.toString(Settings.WEBSERVER_PORT.getNumber()));
|
||||
addVariable("ServerName", Settings.SERVER_NAME.toString());
|
||||
addVariable("ThemeBase", Settings.THEME_BASE.toString());
|
||||
super.sendRequest(address);
|
||||
}
|
||||
}
|
@ -4,7 +4,6 @@ Server:
|
||||
Plugin:
|
||||
Debug: 'false'
|
||||
Locale: default
|
||||
WriteNewLocaleFileOnEnable: false
|
||||
|
||||
WebServer:
|
||||
Port: 8804
|
||||
@ -15,12 +14,6 @@ WebServer:
|
||||
KeyPass: 'default'
|
||||
StorePass: 'default'
|
||||
Alias: 'alias'
|
||||
Servers:
|
||||
TODO: TODO AUTO GENERATE
|
||||
Server1:
|
||||
Port: 8805
|
||||
Server2:
|
||||
Port: 8806
|
||||
|
||||
Database:
|
||||
MySQL:
|
||||
|
Loading…
Reference in New Issue
Block a user