From 16e954101f2ec499c46acea7b6f51007518a90a3 Mon Sep 17 00:00:00 2001 From: Sambo Chea Date: Fri, 21 Aug 2020 21:31:30 +0700 Subject: [PATCH] Add exec uitils for command line with executable --- .../com/cubetiqs/demo/axon/AxonApplication.kt | 18 ++++++++ .../com/cubetiqs/demo/axon/util/ExecUtils.kt | 43 +++++++++++++++++++ src/test/kotlin/TestExecUtils.kt | 10 +++++ 3 files changed, 71 insertions(+) create mode 100644 src/main/kotlin/com/cubetiqs/demo/axon/util/ExecUtils.kt create mode 100644 src/test/kotlin/TestExecUtils.kt diff --git a/src/main/kotlin/com/cubetiqs/demo/axon/AxonApplication.kt b/src/main/kotlin/com/cubetiqs/demo/axon/AxonApplication.kt index 5849438..9ef5236 100644 --- a/src/main/kotlin/com/cubetiqs/demo/axon/AxonApplication.kt +++ b/src/main/kotlin/com/cubetiqs/demo/axon/AxonApplication.kt @@ -1,11 +1,29 @@ package com.cubetiqs.demo.axon +import com.cubetiqs.demo.axon.util.ExecUtils import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication +import org.springframework.http.MediaType +import org.springframework.util.FileCopyUtils +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RestController +import javax.servlet.http.HttpServletResponse @SpringBootApplication class AxonApplication fun main(args: Array) { runApplication(*args) +} + +@RestController +class MyDumper { + @GetMapping("/dump") + fun dumper( + response: HttpServletResponse + ) { + response.contentType = MediaType.APPLICATION_OCTET_STREAM_VALUE + val data = ExecUtils.execMySqlDump() + FileCopyUtils.copy(data ?: ByteArray(0), response.outputStream) + } } \ No newline at end of file diff --git a/src/main/kotlin/com/cubetiqs/demo/axon/util/ExecUtils.kt b/src/main/kotlin/com/cubetiqs/demo/axon/util/ExecUtils.kt new file mode 100644 index 0000000..c2463ac --- /dev/null +++ b/src/main/kotlin/com/cubetiqs/demo/axon/util/ExecUtils.kt @@ -0,0 +1,43 @@ +package com.cubetiqs.demo.axon.util + +import java.io.BufferedInputStream +import java.io.ByteArrayOutputStream + +object ExecUtils { + private const val MYSQLDUMP_FILE = "mysqldump" + + fun execMySqlDump(): ByteArray? { + var results: ByteArray? + try { + val command: MutableList = mutableListOf() + command.add(MYSQLDUMP_FILE) + command.add("--databases") + command.add("orderwebapp") + command.add("--host") + command.add("192.168.0.204") + command.add("-usombochea") + command.add("-p@Csb632612") + + val builder = ProcessBuilder(*command.toTypedArray()) + .redirectErrorStream(false) + val process = builder.start() + BufferedInputStream(process.inputStream).use { + ByteArrayOutputStream().use { stdout -> + while (true) { + val x = it.read() + if (x == -1) { + break + } + stdout.write(x) + } + results = stdout.toByteArray() + process.waitFor() + } + } + } catch (e: Exception) { + println(e.message) + return null + } + return results + } +} \ No newline at end of file diff --git a/src/test/kotlin/TestExecUtils.kt b/src/test/kotlin/TestExecUtils.kt new file mode 100644 index 0000000..d71cff1 --- /dev/null +++ b/src/test/kotlin/TestExecUtils.kt @@ -0,0 +1,10 @@ +import com.cubetiqs.demo.axon.util.ExecUtils +import org.junit.jupiter.api.Test + +class TestExecUtils { + @Test + fun dump() { + val dump = ExecUtils.execMySqlDump() + println("Dump size: ${dump?.size}") + } +} \ No newline at end of file