From bd0a4c75c05b69b2d258bb06d233f41866d462b8 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Tue, 19 Mar 2019 08:39:37 -0700 Subject: [PATCH] Wire up backup config --- Changelog.txt | 3 + .../com/gmail/nossr50/config/MainConfig.java | 88 +------------------ .../hocon/backup/ConfigAutomatedBackups.java | 50 +++++++++++ src/main/java/com/gmail/nossr50/mcMMO.java | 4 +- .../runnables/backups/CleanBackupsTask.java | 36 +++----- 5 files changed, 68 insertions(+), 113 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index f7bb86aeb..b8437ec86 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -35,6 +35,9 @@ Version 2.2.0 Added config option for showing author patreon links in various commands Automated backup config options will now be found in "automated_backups.conf" + "Last_24_Hours", "Daily_Last_Week", "Weekly_Past_Months" have been replaced with "Old-File-Age-Limit-In-Days" which does the same thing + mcMMO will not remove old backups unless at least 10 files are present in the backup folder, this doesn't guarantee that mcMMO won't remove old files, just prevents unnecessary operations + Added some failsafes to prevent mcMMO from saving too often Command config options will now be found in "commands.conf" Settings related to party chat have been moved to the party config file diff --git a/src/main/java/com/gmail/nossr50/config/MainConfig.java b/src/main/java/com/gmail/nossr50/config/MainConfig.java index ba7ebf890..8b9a97ea9 100644 --- a/src/main/java/com/gmail/nossr50/config/MainConfig.java +++ b/src/main/java/com/gmail/nossr50/config/MainConfig.java @@ -240,9 +240,9 @@ public class MainConfig extends ConfigValidated { List reason = new ArrayList(); /* General Settings */ - if (getSaveInterval() <= 0) { + /*if (getSaveInterval() <= 0) { reason.add(GENERAL + SAVE_INTERVAL + " should be greater than 0!"); - } + }*/ /* MySQL Settings */ /*for (SQLDatabaseManager.PoolIdentifier identifier : SQLDatabaseManager.PoolIdentifier.values()) { @@ -434,22 +434,10 @@ public class MainConfig extends ConfigValidated { * GENERAL SETTINGS */ - /* General Settings */ - public String getLocale() { - if(hasNode(GENERAL, LOCALE)) - return getStringValue(GENERAL, LOCALE); - else - return "en_US"; - } - public boolean getShowProfileLoadedMessage() { return getBooleanValue(GENERAL, SHOW_PROFILE_LOADED); } - public int getSaveInterval() { - return getIntValue(GENERAL, SAVE_INTERVAL); - } - public String getAdminChatPrefix() { return getStringValue(COMMANDS, ADMINCHAT, CHAT_PREFIX_FORMAT); } @@ -491,78 +479,6 @@ public class MainConfig extends ConfigValidated { return getIntValue(MOB_HEALTHBAR, DISPLAY_TIME); } - /* Backups */ - public boolean getBackupsEnabled() { - return getBooleanValue(BACKUPS, ENABLED); - } - - public boolean getKeepLast24Hours() { - return getBooleanValue(BACKUPS, KEEP_LAST_24_HOURS); - } - - public boolean getKeepDailyLastWeek() { - return getBooleanValue(BACKUPS, KEEP, DAILY_LAST_WEEK); - } - - public boolean getKeepWeeklyPastMonth() { - return getBooleanValue(BACKUPS, KEEP, WEEKLY_PAST_MONTHS); - } - - /* mySQL */ - /*public boolean getUseMySQL() { - return getBooleanValue(MY_SQL, ENABLED); - } - - public String getMySQLTablePrefix() { - return getStringValue(MY_SQL, DATABASE, TABLE_PREFIX, DATABASE_PREFIX); - } - - public String getMySQLDatabaseName() { - return getStringValue(MY_SQL, DATABASE, NAME); - } - - public String getMySQLUserName() { - return getStringValue(MY_SQL, DATABASE, USER_NAME); - } - - public int getMySQLServerPort() { - return getIntValue(MY_SQL, SERVER, PORT); - } - - public String getMySQLServerName() { - return getStringValue(MY_SQL, SERVER, ADDRESS, LOCALHOST); - } - - public String getMySQLUserPassword() { - return getStringValue(MY_SQL, DATABASE, USER_PASSWORD); - } - - public int getMySQLMaxConnections(SQLDatabaseManager.PoolIdentifier identifier) { - return getIntValue(MY_SQL, DATABASE, MAX_CONNECTIONS, StringUtils.getCapitalized(identifier.toString())); - } - - public int getMySQLMaxPoolSize(SQLDatabaseManager.PoolIdentifier identifier) { - return getIntValue(MY_SQL, DATABASE, MAX_POOL_SIZE, StringUtils.getCapitalized(identifier.toString())); - } - - public boolean getMySQLSSL() { - return getBooleanValue(MY_SQL, SERVER, SSL); - }*/ - - //TODO: Legit cannot tell what the point of this method was - /*ssadprivate String getStringIncludingInts(String[] key) { - String str = getStringValue(key); - - if (str == null) { - str = String.valueOf(getIntValue(key)); - } - - if (str.equals("0")) { - str = "No value set for '" + key + "'"; - } - return str; - }*/ - /* Hardcore Mode */ public boolean getHardcoreStatLossEnabled(PrimarySkillType primarySkillType) { return getBooleanValue(HARDCORE, DEATH_STAT_LOSS, ENABLED, StringUtils.getCapitalized(primarySkillType.toString())); diff --git a/src/main/java/com/gmail/nossr50/config/hocon/backup/ConfigAutomatedBackups.java b/src/main/java/com/gmail/nossr50/config/hocon/backup/ConfigAutomatedBackups.java index 5eb2dd83e..12349c39e 100644 --- a/src/main/java/com/gmail/nossr50/config/hocon/backup/ConfigAutomatedBackups.java +++ b/src/main/java/com/gmail/nossr50/config/hocon/backup/ConfigAutomatedBackups.java @@ -1,7 +1,57 @@ package com.gmail.nossr50.config.hocon.backup; +import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @ConfigSerializable public class ConfigAutomatedBackups { + public static final int SAVE_INTERVAL_MINUTES_DEFAULT = 10; + public static final boolean ZIP_BACKUPS_ENABLED_DEFAULT = true; + public static final int BACKUP_DAY_LIMIT_DEFAULT = 30; + //public static final int MINIMUM_BACKUP_COUNT_DEFAULT = 10; + + @Setting(value = "Database-Save-Interval-Minutes", comment = "How often mcMMO player data gets saved." + + "\nThis value represents how many minutes in between saving mcMMO does." + + "\nSaving is done in ASYNC threads, so it has almost no impact on performance, however you should not be saving too often as its a bit pointless and takes resources away from your machine." + + "\nI recommend just leaving this at its default value." + + "\nDefault value: "+SAVE_INTERVAL_MINUTES_DEFAULT) + private int saveIntervalMinutes = SAVE_INTERVAL_MINUTES_DEFAULT; + + @Setting(value = "Backup-Configs-And-FlatFile-Data", comment = "mcMMO will make backups of your configs and other important data for you." + + "\nNOTE: mcMMO will not be making backups of your SQL data, you will have to setup scripts for that yourself." + + "\nmcMMO does not backup FlatFile user data if you are using SQL" + + "\nYou can find the backups in the following directory inside your mcMMO folder - \\mcMMO\\backup" + + "\nAutomated backups are deleted regularly once they reach a certain age, see the other options in this config to change this." + + "\nBackups are made whenever you start your server for the first time and on each reload of the mcMMO plugin" + + "\nDefault value: "+ZIP_BACKUPS_ENABLED_DEFAULT) + private boolean zipBackupsEnabled = ZIP_BACKUPS_ENABLED_DEFAULT; + + @Setting(value = "Old-File-Age-Limit-In-Days", comment = "How many days should backups be kept in days?" + + "\nBackups older than this are removed if the number of file backups is greater than \"Minimum-Backups\"." + + "\nDefault value: "+ BACKUP_DAY_LIMIT_DEFAULT) + private int backupDayLimit = BACKUP_DAY_LIMIT_DEFAULT; + +/* @Setting(value = "Minimum-Backups", comment = "The amount of backup files you must have before deletion of older files would be considered." + + "\nThis does not prevent mcMMO from removing your old backups, it just prevents unnecessary removal of those files." + + "\nFor example, if this value was set to 10. Then if you had 9 old backups from not having your server on for a long time," + + "\n then once the 10th backup is created those 9 older files would be removed." + + "\nThis setting mostly prevents unnecessary operations rather than acting as a means to preserve a specific number of backups." + + "\nDefault value: "+MINIMUM_BACKUP_COUNT_DEFAULT) + private int minimumBackupCount = MINIMUM_BACKUP_COUNT_DEFAULT;*/ + + /* public int getMinimumBackupCount() { + return minimumBackupCount; + }*/ + + public int getSaveIntervalMinutes() { + return saveIntervalMinutes; + } + + public boolean isZipBackupsEnabled() { + return zipBackupsEnabled; + } + + public int getBackupDayLimit() { + return backupDayLimit; + } } diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index 2e659f4e7..295c8ae73 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -218,7 +218,7 @@ public class mcMMO extends JavaPlugin { debug("Unregister all events..."); HandlerList.unregisterAll(this); // Cancel event registrations - if (MainConfig.getInstance().getBackupsEnabled()) { + if (mcMMO.getConfigManager().getConfigAutomatedBackups().isZipBackupsEnabled()) { // Remove other tasks BEFORE starting the Backup, or we just cancel it straight away. try { ZipLibrary.mcMMOBackup(); @@ -481,7 +481,7 @@ public class mcMMO extends JavaPlugin { private void scheduleTasks() { // Periodic save timer (Saves every 10 minutes by default) - long saveIntervalTicks = MainConfig.getInstance().getSaveInterval() * 1200; + long saveIntervalTicks = Math.max(1200, (getConfigManager().getConfigAutomatedBackups().getSaveIntervalMinutes() * 1200)); new SaveTimerTask().runTaskTimer(this, saveIntervalTicks, saveIntervalTicks); // Cleanup the backups folder diff --git a/src/main/java/com/gmail/nossr50/runnables/backups/CleanBackupsTask.java b/src/main/java/com/gmail/nossr50/runnables/backups/CleanBackupsTask.java index b81123656..84be8156f 100644 --- a/src/main/java/com/gmail/nossr50/runnables/backups/CleanBackupsTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/backups/CleanBackupsTask.java @@ -21,11 +21,17 @@ public class CleanBackupsTask extends BukkitRunnable { List toDelete = new ArrayList(); int amountTotal = 0; int amountDeleted = 0; + int oldFileAgeLimit = mcMMO.getConfigManager().getConfigAutomatedBackups().getBackupDayLimit(); if (BACKUP_DIR.listFiles() == null) { return; } + //if(BACKUP_DIR.listFiles().length < mcMMO.getConfigManager().getConfigAutomatedBackups().getMinimumBackupCount()) + //Don't remove files unless there is at least 10 of them + if(BACKUP_DIR.listFiles().length < 10) + return; + // Check files in backup folder from oldest to newest for (File file : BACKUP_DIR.listFiles()) { if (!file.isFile() || file.isDirectory()) { @@ -42,34 +48,14 @@ public class CleanBackupsTask extends BukkitRunnable { continue; } - Calendar cal = Calendar.getInstance(); - cal.setTime(date); - int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); - int weekOfYear = cal.get(Calendar.WEEK_OF_YEAR); - int year = cal.get(Calendar.YEAR); + long fileSaveTimeStamp = date.getTime(); + long currentTime = System.currentTimeMillis(); - if (isPast24Hours(date) && MainConfig.getInstance().getKeepLast24Hours()) { - // Keep all files from the last 24 hours + //File is not old enough so don't delete it + if((fileSaveTimeStamp + (oldFileAgeLimit * TimeUnit.MILLISECONDS.convert(24, TimeUnit.HOURS))) >= currentTime) + { continue; } - else if (isLastWeek(date) && !savedDays.contains(dayOfWeek) && MainConfig.getInstance().getKeepDailyLastWeek()) { - // Keep daily backups of the past week - savedDays.add(dayOfWeek); - continue; - } - else { - List savedWeeks = savedYearsWeeks.get(year); - if (savedWeeks == null) { - savedWeeks = new ArrayList(); - savedYearsWeeks.put(year, savedWeeks); - } - - if (!savedWeeks.contains(weekOfYear) && MainConfig.getInstance().getKeepWeeklyPastMonth()) { - // Keep one backup of each week - savedWeeks.add(weekOfYear); - continue; - } - } amountDeleted++; toDelete.add(file);