From fd977dfd39e74eb2bb436b8d7eff26c323e0d393 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 08 Dec 2018 00:55:51 +0000
Subject: [PATCH] ...
---
.gitignore | 1
borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java | 6 ++-
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java | 59 +++++++++++++++++++++++++++++
borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java | 4 +-
borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java | 4 -
borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java | 11 +++++
borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java | 26 +++++++++++++
7 files changed, 103 insertions(+), 8 deletions(-)
diff --git a/.gitignore b/.gitignore
index a9543ac..3fc88b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,3 +36,4 @@
*.iml
*.iws
borgbutler-core/build
+borgbutler-core/out
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
new file mode 100644
index 0000000..490c8c5
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -0,0 +1,59 @@
+package de.micromata.borgbutler;
+
+import de.micromata.borgbutler.config.BorgRepoConfig;
+import de.micromata.borgbutler.config.Configuration;
+import de.micromata.borgbutler.config.ConfigurationHandler;
+import org.apache.commons.exec.*;
+import org.apache.commons.exec.environment.EnvironmentUtils;
+import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.Map;
+
+public class BorgCommands {
+ private static Logger log = LoggerFactory.getLogger(BorgCommands.class);
+
+ public static String info(BorgRepoConfig repoConfig) {
+ try {
+ //CommandLine cmdLine = new CommandLine("/Users/kai/bin/test.sh");
+ //CommandLine cmdLine = new CommandLine("/Users/kai/bin/borgbackup-hetzner.sh");
+ CommandLine cmdLine = new CommandLine(ConfigurationHandler.getConfiguration().getBorgCommand());
+ cmdLine.addArgument("info");
+ cmdLine.addArgument(repoConfig.getRepo());
+ DefaultExecutor executor = new DefaultExecutor();
+ //executor.setExitValue(1);
+ //ExecuteWatchdog watchdog = new ExecuteWatchdog(60000);
+ //executor.setWatchdog(watchdog);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ //ExecuteResultHandler handler = new DefaultExecuteResultHandler();
+ PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);
+ executor.setStreamHandler(streamHandler);
+ log.info("Executing '" + cmdLine.getExecutable() + " " + StringUtils.join(cmdLine.getArguments(), " ") + "'...");
+ executor.execute(cmdLine, getEnvironment(repoConfig));
+ return (outputStream.toString(Charset.forName("UTF-8")));
+ } catch (IOException ex) {
+ log.error("Error while executing borg command: " + ex.getMessage(), ex);
+ return null;
+ }
+ }
+
+ public static Map<String, String> getEnvironment(BorgRepoConfig repoConfig) throws IOException {
+ Configuration config = ConfigurationHandler.getConfiguration();
+ Map<String, String> env = EnvironmentUtils.getProcEnvironment();
+ addEnvironmentVariable(env, "BORG_REPO", repoConfig.getRepo());
+ addEnvironmentVariable(env, "BORG_RSH", repoConfig.getRsh());
+ addEnvironmentVariable(env, "BORG_PASSPHRASE", repoConfig.getPassphrase());
+ addEnvironmentVariable(env, "BORG_PASSCOMMAND", repoConfig.getPasswordCommand());
+ return env;
+ }
+
+ private static void addEnvironmentVariable(Map<String, String> env, String name, String value) {
+ if (StringUtils.isNotBlank(value)) {
+ EnvironmentUtils.addVariableToEnvironment(env, name + "=" + value);
+ }
+ }
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java
index 6bc7160..32314c8 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java
@@ -1,7 +1,16 @@
package de.micromata.borgbutler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class Main {
+ private static Logger log = LoggerFactory.getLogger(Main.class);
+
public static void main(String[] args) {
- System.out.println("Hello world.");
+ new Main().start(args);
+ }
+
+ private void start(String[] args) {
+ log.info("Hello Borgbutler...");
}
}
\ No newline at end of file
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepo.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java
similarity index 82%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepo.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java
index 3661662..b5ffc87 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepo.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java
@@ -3,7 +3,7 @@
import lombok.Getter;
import lombok.Setter;
-public class BorgRepo {
+public class BorgRepoConfig {
@Getter @Setter
private String name;
@Getter @Setter
@@ -11,7 +11,7 @@
@Getter @Setter
private String rsh;
@Getter @Setter
- private String password;
+ private String passphrase;
@Getter @Setter
private String passwordCommand;
}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
index 1e9b71d..449f910 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
@@ -7,9 +7,11 @@
public class Configuration {
@Getter
- private List<BorgRepo> repos = new ArrayList<>();
+ private String borgCommand = "borg";
+ @Getter
+ private List<BorgRepoConfig> repos = new ArrayList<>();
- public void add(BorgRepo repo) {
+ public void add(BorgRepoConfig repo) {
repos.add(repo);
}
}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java
index 033e272..9f13c00 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java
@@ -1,7 +1,6 @@
package de.micromata.borgbutler.config;
import de.micromata.borgbutler.json.JsonUtils;
-import lombok.AccessLevel;
import lombok.Getter;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
@@ -16,9 +15,8 @@
private static ConfigurationHandler instance = new ConfigurationHandler();
private static final String CONFIG_FILENAME = ".borgbutler.json";
private static final String CONFIG_BACKUP_FILENAME = ".borgbutler-bak.json";
- @Getter(AccessLevel.PACKAGE)
+ @Getter
private File configFile;
- @Getter(AccessLevel.PACKAGE)
private File backupConfigFile;
private Configuration configuration = new Configuration();
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java
new file mode 100644
index 0000000..fc25d15
--- /dev/null
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java
@@ -0,0 +1,26 @@
+package de.micromata.borgbutler;
+
+import de.micromata.borgbutler.config.BorgRepoConfig;
+import de.micromata.borgbutler.config.Configuration;
+import de.micromata.borgbutler.config.ConfigurationHandler;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BorgCommandsTest {
+ private static Logger log = LoggerFactory.getLogger(BorgCommandsTest.class);
+ @Test
+ void infoTest() {
+ ConfigurationHandler configHandler = ConfigurationHandler.getInstance();
+ configHandler.read();
+ Configuration config = ConfigurationHandler.getConfiguration();
+ if (config.getRepos().size() == 0) {
+ log.info("No repos configured. Please configure repos first in: " + configHandler.getConfigFile().getAbsolutePath());
+ return;
+ }
+ for (BorgRepoConfig repo : config.getRepos()) {
+ log.info("Processing repo '" + repo + "'");
+ log.info(BorgCommands.info(repo));
+ }
+ }
+}
--
Gitblit v1.10.0