borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -4,6 +4,7 @@ import de.micromata.borgbutler.config.Configuration; import de.micromata.borgbutler.config.ConfigurationHandler; import de.micromata.borgbutler.json.JsonUtils; import de.micromata.borgbutler.json.borg.Archive; import de.micromata.borgbutler.json.borg.RepoInfo; import de.micromata.borgbutler.json.borg.RepoList; import org.apache.commons.exec.*; @@ -20,8 +21,14 @@ public class BorgCommands { private static Logger log = LoggerFactory.getLogger(BorgCommands.class); /** * Executes borg info repository * * @param repoConfig * @return Parsed repo config returned by Borg command. */ public static RepoInfo info(BorgRepoConfig repoConfig) { String json = execute(repoConfig, "info", "--json"); String json = execute(repoConfig, "info", repoConfig.getRepo(), "--json"); if (json == null) { return null; } @@ -30,8 +37,24 @@ return repoInfo; } /** * Executes borg info archive * * @param repoConfig * @param archive * @return */ public static String info(BorgRepoConfig repoConfig, Archive archive) { String json = execute(repoConfig, "info", repoConfig.getRepo() + "::" + archive.getArchive(), "--json"); if (json == null) { return null; } log.info(json); return json; } public static RepoList list(BorgRepoConfig repoConfig) { String json = execute(repoConfig, "list", "--json"); String json = execute(repoConfig, "list", repoConfig.getRepo(), "--json"); if (json == null) { return null; } @@ -40,17 +63,17 @@ return repoList; } private static String execute(BorgRepoConfig repoConfig, String command, String... args) { private static String execute(BorgRepoConfig repoConfig, String command, String repoOrArchive, String... args) { CommandLine cmdLine = new CommandLine(ConfigurationHandler.getConfiguration().getBorgCommand()); cmdLine.addArgument(command); for (String arg : args) { cmdLine.addArgument(arg); } cmdLine.addArgument(repoConfig.getRepo()); cmdLine.addArgument(repoOrArchive); DefaultExecutor executor = new DefaultExecutor(); //executor.setExitValue(2); ExecuteWatchdog watchdog = new ExecuteWatchdog(60000); executor.setWatchdog(watchdog); //ExecuteWatchdog watchdog = new ExecuteWatchdog(60000); //executor.setWatchdog(watchdog); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ExecuteResultHandler handler = new DefaultExecuteResultHandler(); PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream); borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
@@ -1,5 +1,6 @@ package de.micromata.borgbutler.config; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import java.util.ArrayList; @@ -9,17 +10,18 @@ @Getter private String borgCommand = "borg"; @Getter private List<BorgRepoConfig> repos = new ArrayList<>(); @JsonProperty("repo-configs") private List<BorgRepoConfig> repoConfigs = new ArrayList<>(); public void add(BorgRepoConfig repo) { repos.add(repo); public void add(BorgRepoConfig repoConfig) { repoConfigs.add(repoConfig); } public BorgRepoConfig getRepo(String idOrName) { public BorgRepoConfig getRepoConfig(String idOrName) { if (idOrName == null) { return null; } for (BorgRepoConfig repoConfig : repos) { for (BorgRepoConfig repoConfig : repoConfigs) { if (idOrName.equals(repoConfig.getRepo()) ||idOrName.equals(repoConfig.getName())) { return repoConfig; } borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Repository.java
@@ -33,7 +33,7 @@ public Repository setLocation(String location) { this.location = location; // It's ugly but efficiently ;-) BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepo(location); BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(location); if (repoConfig != null) { this.name = repoConfig.getName(); } borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java
@@ -4,12 +4,16 @@ import de.micromata.borgbutler.config.BorgRepoConfig; import de.micromata.borgbutler.config.Configuration; import de.micromata.borgbutler.config.ConfigurationHandler; import de.micromata.borgbutler.json.borg.Archive; import de.micromata.borgbutler.json.borg.RepoInfo; import de.micromata.borgbutler.json.borg.RepoList; import org.apache.commons.collections4.CollectionUtils; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -22,7 +26,7 @@ ConfigurationHandler configHandler = ConfigurationHandler.getInstance(); configHandler.read(); Configuration config = ConfigurationHandler.getConfiguration(); if (config.getRepos().size() == 0) { if (config.getRepoConfigs().size() == 0) { log.info("No repos configured. Please configure repos first in: " + configHandler.getConfigFile().getAbsolutePath()); return; } @@ -31,23 +35,36 @@ butlerCache.read(); { RepoInfoCache repoInfoCache = ButlerCache.getRepoInfoCache(); if (repoInfoCache.getElements().size() != config.getRepos().size()) { if (repoInfoCache.getElements().size() != config.getRepoConfigs().size()) { refreshRepoInfoCache(config, repoInfoCache); } assertEquals(config.getRepos().size(), repoInfoCache.getElements().size()); assertEquals(config.getRepoConfigs().size(), repoInfoCache.getElements().size()); } { RepoListCache repoListCache = ButlerCache.getRepoListCache(); if (repoListCache.getElements().size() != config.getRepos().size()) { if (repoListCache.getElements().size() != config.getRepoConfigs().size()) { refreshRepoListCache(config, repoListCache); } assertEquals(config.getRepos().size(), repoListCache.getElements().size()); assertEquals(config.getRepoConfigs().size(), repoListCache.getElements().size()); } { List<BorgRepoConfig> repoConfigs = ConfigurationHandler.getConfiguration().getRepoConfigs(); if (CollectionUtils.isNotEmpty(repoConfigs)) { BorgRepoConfig repoConfig = repoConfigs.get(0); RepoList repoList = ButlerCache.getRepoListCache().get(repoConfig.getRepo()); if (repoList != null && CollectionUtils.isNotEmpty(repoList.getArchives())) { Archive archive = repoList.getArchives().get(0); if (archive != null) { String json = BorgCommands.info(repoConfig, archive); } } } } butlerCache.save(); } private void refreshRepoInfoCache(Configuration config, RepoInfoCache repoInfoCache) { for (BorgRepoConfig repo : config.getRepos()) { for (BorgRepoConfig repo : config.getRepoConfigs()) { log.info("Processing repo info '" + repo + "'"); RepoInfo repoInfo = BorgCommands.info(repo); repoInfoCache.upsert(repoInfo); @@ -57,7 +74,7 @@ } private void refreshRepoListCache(Configuration config, RepoListCache repoListCache) { for (BorgRepoConfig repo : config.getRepos()) { for (BorgRepoConfig repo : config.getRepoConfigs()) { log.info("Processing repo list '" + repo + "'"); RepoList repoList = BorgCommands.list(repo); repoListCache.upsert(repoList);