From 0a08436088a0c7bae718fd005b2c37e4b869b3e2 Mon Sep 17 00:00:00 2001 From: Kenneth Endfinger Date: Sat, 15 Jan 2022 15:08:22 -0500 Subject: [PATCH] Core: Backup cleanup and fixes for Windows. --- .../gradle/FoundationGradlePlugin.kt | 7 ++++ .../cloud/kubelet/foundation/core/Util.kt | 5 +++ .../core/features/backup/BackupCommand.kt | 38 ++++++++++++------- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt index f2cb0c5..4564b90 100644 --- a/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt +++ b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt @@ -8,6 +8,13 @@ class FoundationGradlePlugin : Plugin { override fun apply(project: Project) { project.extensions.create("foundation") val setupPaperServer = project.tasks.create("setupPaperServer") + project.afterEvaluate { -> + setupPaperServer.dependsOn(*project.subprojects + .filter { it.name.startsWith("foundation-") } + .map { it.tasks.getByName("build") } + .toTypedArray() + ) + } val runPaperServer = project.tasks.create("runPaperServer") runPaperServer.dependsOn(setupPaperServer) } diff --git a/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/Util.kt b/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/Util.kt index 177f88d..ea4adfc 100644 --- a/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/Util.kt +++ b/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/Util.kt @@ -57,4 +57,9 @@ object Util { return outPath } + + fun isPlatformWindows(): Boolean { + val os = System.getProperty("os.name") + return os != null && os.lowercase().startsWith("windows") + } } \ No newline at end of file diff --git a/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/features/backup/BackupCommand.kt b/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/features/backup/BackupCommand.kt index 35d991e..df66427 100644 --- a/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/features/backup/BackupCommand.kt +++ b/foundation-core/src/main/kotlin/cloud/kubelet/foundation/core/features/backup/BackupCommand.kt @@ -42,25 +42,28 @@ class BackupCommand( return true } - try { - val server = sender.server - server.scheduler.runTaskAsynchronously(plugin, Runnable { - runBackup(server) - }) - } catch (e: Exception) { - sender.sendMessage(String.format("Failed to backup: %s", e.message)) + val server = sender.server + server.scheduler.runTaskAsynchronously(plugin) { -> + runBackup(server, sender) } - return true } // TODO: Pull backup creation code into a separate service. - private fun runBackup(server: Server) = try { + private fun runBackup(server: Server, sender: CommandSender? = null) = try { RUNNING.set(true) - server.sendMessage(Util.formatSystemMessage("Backup started.")) + server.scheduler.runTask(plugin) { -> + server.sendMessage(Util.formatSystemMessage("Backup started.")) + } - val backupFileName = String.format("backup-%s.zip", Instant.now().toString()) + val backupTime = Instant.now() + val backupIdentifier = if (Util.isPlatformWindows()) { + backupTime.toEpochMilli().toString() + } else { + backupTime.toString() + } + val backupFileName = String.format("backup-%s.zip", backupIdentifier) val backupPath = backupsPath.resolve(backupFileName) val backupFile = backupPath.toFile() @@ -82,9 +85,18 @@ class BackupCommand( ) } Unit + } catch (e: Exception) { + if (sender != null) { + server.scheduler.runTask(plugin) { -> + sender.sendMessage(String.format("Failed to backup: %s", e.message)) + } + } + plugin.slF4JLogger.warn("Failed to backup.", e) } finally { RUNNING.set(false) - server.sendMessage(Util.formatSystemMessage("Backup finished.")) + server.scheduler.runTask(plugin) { -> + server.sendMessage(Util.formatSystemMessage("Backup finished.")) + } } private fun backupPlugins(server: Server, zipStream: ZipOutputStream) { @@ -92,7 +104,7 @@ class BackupCommand( addDirectoryToZip(zipStream, server.pluginsFolder.toPath()) } catch (e: IOException) { // TODO: Add error handling. - e.printStackTrace() + plugin.slF4JLogger.warn("Failed to backup plugins.", e) } }