From 1d7f64a410422fb31b1cb403731a777b84d92a7e Mon Sep 17 00:00:00 2001 From: Dries007 Date: Wed, 14 Mar 2018 19:38:30 +0100 Subject: [PATCH] Added much better restart timer thingy, it uses cron expressions + minor file browser changes. --- .gitattributes | 1 + build.gradle | 4 +- gradle/wrapper/gradle-wrapper.jar | Bin 51017 -> 54329 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 78 ++++++----- gradlew.bat | 14 +- .../backend/server/FileManager.java | 4 +- .../backend/server/RestartingInfo.java | 128 ++++++++++++------ .../resources/templates/advancedsettings.ftl | 29 ++-- src/main/resources/templates/filemanager.ftl | 6 +- 10 files changed, 152 insertions(+), 115 deletions(-) create mode 100644 .gitattributes mode change 100644 => 100755 gradlew diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..218a797 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +src/main/resources/static/* linguist-vendored diff --git a/build.gradle b/build.gradle index fa81263..625af05 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ apply plugin: "idea-utils" archivesBaseName = "D3Backend" group = "net.doubledoordev.backend" -version = "0.11.3" +version = "0.12.0" if (System.getenv().BUILD_NUMBER != null) version += "." + System.getenv().BUILD_NUMBER def vendor = "DoubleDoorDevelopment" @@ -73,6 +73,8 @@ dependencies { compile group: "com.flowpowered", name: "flow-nbt", version: "1.0.0" compile group: "com.google.guava", name: "guava", version: "22.0" compile group: "net.dries007.cmd", name: "CurseModpackDownloader", classifier: "all", version: "1.+" + compile group: "com.cronutils", name: "cron-utils", version: "7.0.1" + compile group: "it.sauronsoftware.cron4j", name: "cron4j", version: "2.2.5" } processResources { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 3d0dee6e8edfecc92e04653ec780de06f7b34f8b..f6b961fd5a86aa5fbfe90f707c3138408be7c718 100644 GIT binary patch delta 45214 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 P@u46Hfk{C9*{}Zre5VC( diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ad7fa8f..ca3b339 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Oct 11 19:52:13 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-all.zip diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 index 91a7e26..cccdd3d --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,20 +6,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,31 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -114,6 +113,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 8a0b282..f955316 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/src/main/java/net/doubledoordev/backend/server/FileManager.java b/src/main/java/net/doubledoordev/backend/server/FileManager.java index 65cafd4..ab850e1 100644 --- a/src/main/java/net/doubledoordev/backend/server/FileManager.java +++ b/src/main/java/net/doubledoordev/backend/server/FileManager.java @@ -94,13 +94,13 @@ public Collection makeBreadcrumbs() LinkedList list = new LinkedList<>(); File crumb = file; - while (!crumb.equals(serverFolder)) + while (!crumb.getAbsoluteFile().equals(serverFolder.getAbsoluteFile())) { list.add(crumb); crumb = crumb.getParentFile(); } - list.add(serverFolder); +// list.add(serverFolder); Collections.reverse(list); return list; diff --git a/src/main/java/net/doubledoordev/backend/server/RestartingInfo.java b/src/main/java/net/doubledoordev/backend/server/RestartingInfo.java index 720ffc6..f83ea6f 100644 --- a/src/main/java/net/doubledoordev/backend/server/RestartingInfo.java +++ b/src/main/java/net/doubledoordev/backend/server/RestartingInfo.java @@ -18,15 +18,23 @@ package net.doubledoordev.backend.server; +import com.cronutils.descriptor.CronDescriptor; +import com.cronutils.model.Cron; +import com.cronutils.model.CronType; +import com.cronutils.model.definition.CronDefinitionBuilder; +import com.cronutils.parser.CronParser; +import com.google.common.base.Strings; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; +import it.sauronsoftware.cron4j.Scheduler; +import it.sauronsoftware.cron4j.Task; +import it.sauronsoftware.cron4j.TaskExecutionContext; import net.doubledoordev.backend.Main; import net.doubledoordev.backend.util.IUpdateFromJson; import java.text.SimpleDateFormat; import java.time.ZonedDateTime; import java.util.Date; -import java.util.Timer; import java.util.TimerTask; import static java.time.temporal.ChronoField.*; @@ -39,18 +47,16 @@ */ public class RestartingInfo implements IUpdateFromJson { - private static final int[] COUNTDOWN = new int[] {15, 10, 5, 4, 3, 2, 1}; + public static final CronParser CRON_PARSER = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.CRON4J)); @Expose public boolean autoStart = false; @Expose public boolean enableRestartSchedule = false; @Expose - public int restartScheduleHours = 0; + public String cronString = ""; @Expose - public int restartScheduleMinutes = 0; - @Expose - public String restartScheduleMessage = "Server reboot in %time minutes!"; + public String restartScheduleMessage = "Server reboot in %time seconds!"; @Override public void updateFrom(JsonObject json) @@ -58,65 +64,90 @@ public void updateFrom(JsonObject json) if (json.has("autoStart")) autoStart = json.get("autoStart").getAsBoolean(); if (json.has("enableRestartSchedule")) enableRestartSchedule = json.get("enableRestartSchedule").getAsBoolean(); - if (json.has("restartScheduleHours")) restartScheduleHours = json.get("restartScheduleHours").getAsInt(); - if (json.has("restartScheduleMinutes")) restartScheduleMinutes = json.get("restartScheduleMinutes").getAsInt(); - - if (json.has("enableRestartSchedule") || json.has("restartScheduleHours") || json.has("restartScheduleMinutes")) + if (json.has("cronString")) { - start(); + if (!cronString.equals(json.get("cronString").getAsString())) + { + cronString = json.get("cronString").getAsString(); + start(); + } } - if (json.has("restartScheduleMessage")) restartScheduleMessage = json.get("restartScheduleMessage").getAsString(); } private Server server; + private Scheduler scheduler; + private Date lastRestart; public void init(Server server) { this.server = server; } - private Timer timer; - private Date lastRestart; - private Date nextRestart; - public void start() { - if (timer != null) stop(); - if (!enableRestartSchedule) return; - timer = new Timer(); + if (scheduler != null) scheduler.stop(); - ZonedDateTime now = ZonedDateTime.now(); - ZonedDateTime restartTime = now.with(HOUR_OF_DAY, restartScheduleHours).with(MINUTE_OF_HOUR, restartScheduleMinutes).with(SECOND_OF_MINUTE, 0).with(MICRO_OF_SECOND, 0); - if (restartTime.minusMinutes(1).isBefore(now)) restartTime = restartTime.plusDays(1); + if (!enableRestartSchedule || Strings.isNullOrEmpty(cronString)) return; - nextRestart = Date.from(restartTime.toInstant()); + try + { + CRON_PARSER.parse(cronString).validate(); + } + catch (Exception e) + { + server.error(e); + return; + } - for (int minuteOffset : COUNTDOWN) + scheduler = new Scheduler(); + scheduler.start(); + + server.printLine("[AutoRestart] Starting restart schedule: " + getHumanCronString()); + scheduler.schedule(cronString, new Task() { - ZonedDateTime warningTime = restartTime.minusMinutes(minuteOffset); - if (warningTime.isBefore(now)) continue; - timer.schedule(new TimerTask() + @Override + public boolean canBeStopped() + { + return true; + } + + public boolean sendMessage(int timeleft, int delay) { - @Override - public void run() + server.sendChat(CMDCALLER, restartScheduleMessage.replace("%time", Integer.toString(timeleft))); + try { - server.sendChat(CMDCALLER, restartScheduleMessage.replace("%time", Integer.toString(minuteOffset))); + Thread.sleep(delay*1000); } - }, Date.from(warningTime.toInstant())); - } + catch (InterruptedException ignored) + { + return false; + } + return true; + } - timer.schedule(new TimerTask() - { @Override - public void run() + public void execute(TaskExecutionContext context) throws RuntimeException { + server.printLine("[AutoRestart] Starting restart messages with 60 seconds on the clock."); + + sendMessage(60, 30); if (context.isStopped()) return; + sendMessage(30, 15); if (context.isStopped()) return; + sendMessage(15, 5); if (context.isStopped()) return; + sendMessage(10, 5); if (context.isStopped()) return; + sendMessage(5, 1); if (context.isStopped()) return; + sendMessage(4, 1); if (context.isStopped()) return; + sendMessage(3, 1); if (context.isStopped()) return; + sendMessage(2, 1); if (context.isStopped()) return; + sendMessage(1, 1); if (context.isStopped()) return; + lastRestart = new Date(); server.printLine("[AutoRestart] Sending stop command..."); server.stopServer(CMDCALLER, "[AutoRestart] Restarting on schedule."); waitForShutdown(150); if (server.getOnline()) { + if (context.isStopped()) return; server.printLine("[AutoRestart] Force-stopping server..."); try { @@ -129,6 +160,7 @@ public void run() } if (server.getOnline()) { + if (context.isStopped()) return; server.printLine("[AutoRestart] Murdering server..."); try { @@ -141,6 +173,7 @@ public void run() } if (server.getOnline()) { + if (context.isStopped()) return; server.printLine("[AutoRestart] Failed to make server stop. Can't restart it."); Main.LOGGER.error("[AutoRestart] Failed to restart {}. It wouldn't stop.", server); return; @@ -176,18 +209,14 @@ private void waitForShutdown(int maxDelay) } } } - - }, Date.from(restartTime.toInstant())); + }); } public void stop() { - if (timer == null) return; - - timer.cancel(); - timer.purge(); - timer = null; - nextRestart = null; + if (scheduler == null || !scheduler.isStarted()) return; + scheduler.stop(); + scheduler = null; } public String getLastRestart(String format) @@ -195,8 +224,17 @@ public String getLastRestart(String format) return lastRestart == null ? "None." : new SimpleDateFormat(format).format(lastRestart); } - public String getNextRestart(String format) + public String getHumanCronString() { - return nextRestart == null ? "None." : new SimpleDateFormat(format).format(nextRestart); + if (Strings.isNullOrEmpty(cronString)) return "No schedule provided."; + try + { + Cron cron = CRON_PARSER.parse(cronString).validate(); + return CronDescriptor.instance().describe(cron); + } + catch (Exception e) + { + return "Cron string could not be parsed."; + } } } diff --git a/src/main/resources/templates/advancedsettings.ftl b/src/main/resources/templates/advancedsettings.ftl index 17a7205..b899e17 100644 --- a/src/main/resources/templates/advancedsettings.ftl +++ b/src/main/resources/templates/advancedsettings.ftl @@ -11,7 +11,7 @@

Last Auto Restart: ${restartInfo.getLastRestart("YYYY-MM-dd hh:mm:ss")}

-

Next Auto Restart: ${restartInfo.getNextRestart("YYYY-MM-dd hh:mm:ss")}

+

Auto Restart schedule: ${restartInfo.getHumanCronString()}

- + -
- + -
h
- -
- This is server time! + This is server time!
Format like a cron string, more info here.
- + -
%time = time left in min
+
%time = time left in seconds.
- This message gets send at: T- 15, 10, 5, 4, 3, 2, 1, 0 min. + This message gets send 1 minute before the server restarts.