README.adoc
@@ -28,7 +28,7 @@ } ---- * `cache_max_disc_size_mb` specifies the cache size BorgButler may use for caching borg results (such as repository information, archive information and also file list of archive content. information, archive information and also file list of archive content). * `repo-configs`: You may add a list of all your repos with the borg variables. The name is only used for displaying purposes. borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
@@ -1,6 +1,7 @@ package de.micromata.borgbutler.cache; import com.fasterxml.jackson.annotation.JsonIgnore; import de.micromata.borgbutler.BorgCommands; import de.micromata.borgbutler.config.BorgRepoConfig; import de.micromata.borgbutler.config.ConfigurationHandler; import de.micromata.borgbutler.json.borg.Archive; @@ -8,6 +9,7 @@ import de.micromata.borgbutler.json.borg.RepoInfo; import de.micromata.borgbutler.json.borg.Repository; import lombok.Getter; import org.apache.commons.jcs.access.CacheAccess; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,8 +23,8 @@ public static final String CACHE_DIR_NAME = "caches"; private static ButlerCache instance = new ButlerCache(); @Getter private RepoInfoCache repoInfoCache; private JCSCache jcsCache = JCSCache.getInstance(); private CacheAccess<String, RepoInfo> repoInfoCacheAccess; @Getter private RepoListCache repoListCache; private ArchiveListCache archiveListCache; @@ -43,21 +45,31 @@ } public Repository getRepository(String idOrName) { BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName); RepoInfo repoInfo = repoInfoCache.get(repoConfig, idOrName); RepoInfo repoInfo = getRepoInfo(idOrName); if (repoInfo == null) { log.warn("Repo with name or id '" + idOrName + "' not found."); return null; } return repoInfo.getRepository(); } public RepoInfo getRepoInfo(String idOrName) { BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName); RepoInfo repoInfo = repoInfoCacheAccess.get(repoConfig.getRepo()); if (repoInfo == null) { repoInfo = BorgCommands.info(repoConfig); repoInfoCacheAccess.put(repoConfig.getRepo(), repoInfo); } if (repoInfo == null) { log.warn("Repo with name '" + idOrName + "' not found."); } return repoInfo; } public List<Repository> getAllRepositories() { List<Repository> repositories = new ArrayList<>(); for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) { RepoInfo repoInfo = repoInfoCache.get(repoConfig, repoConfig.getName()); RepoInfo repoInfo = getRepoInfo(repoConfig.getName()); if (repoInfo == null) { log.warn("Repo with name '" + repoConfig.getName() + "' not found."); continue; } repositories.add(repoInfo.getRepository()); @@ -106,9 +118,9 @@ cacheDir.mkdir(); } caches = new ArrayList<>(); caches.add(repoInfoCache = new RepoInfoCache(cacheDir)); caches.add(repoListCache = new RepoListCache(cacheDir)); caches.add(archiveListCache = new ArchiveListCache(cacheDir)); archiveFileListCaches = new ArrayList<>(); this.repoInfoCacheAccess = jcsCache.getJCSCache(); } } borgbutler-core/src/main/java/de/micromata/borgbutler/cache/JCSCache.java
File was renamed from borgbutler-core/src/main/java/de/micromata/borgbutler/jcs/JCSCache.java @@ -1,4 +1,4 @@ package de.micromata.borgbutler.jcs; package de.micromata.borgbutler.cache; import de.micromata.borgbutler.config.Configuration; import de.micromata.borgbutler.config.ConfigurationHandler; @@ -18,6 +18,30 @@ private static final String CONFIG_FILE = "jcs-basic-config.properties"; public static final String CACHE_DIR_NAME = "cache"; public enum Region {DEFAULT, ARCHIVE_CONTENT} public static JCSCache getInstance() { return instance; } /** * @param <K> * @param <V> * @return JCS cache for default region. */ public <K, V> CacheAccess<K, V> getJCSCache() { return JCS.getInstance("default"); } public <K, V> CacheAccess<K, V> getJCSCache(Region region) { switch (region) { case ARCHIVE_CONTENT: return JCS.getInstance("default"); default: return getJCSCache(); } } private JCSCache() { Configuration configuration = ConfigurationHandler.getConfiguration(); File cacheDir = new File(ConfigurationHandler.getInstance().getWorkingDir(), CACHE_DIR_NAME); @@ -32,7 +56,6 @@ } catch (IOException ex) { log.error("Error while loading jcs config file '" + CONFIG_FILE + "': " + ex.getMessage(), ex); } CacheAccess<String, String> jcs = JCS.getInstance("default"); props.setProperty("jcs.auxiliary.DC.attributes.DiskPath", cacheDir.getAbsolutePath()); props.setProperty("jcs.auxiliary.DC2.attributes.DiskPath", cacheDir.getAbsolutePath()); int cacheMaxDiscSizeMB = configuration.getCacheMaxDiscSizeMB(); borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoInfoCache.java
File was deleted borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive.java
@@ -5,10 +5,13 @@ import lombok.Getter; import lombok.Setter; import java.io.Serializable; /** * This object is given by <tt>borg list repo</tt>. */ public class Archive { public class Archive implements Serializable { private static final long serialVersionUID = -7872260170265536732L; @Getter private String archive; @Getter borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive2.java
@@ -4,10 +4,13 @@ import de.micromata.borgbutler.json.JsonUtils; import lombok.Getter; import java.io.Serializable; /** * This object is given by <tt>borg list archive</tt>. */ public class Archive2 { public class Archive2 implements Serializable { private static final long serialVersionUID = 4734056884088174992L; @Getter @JsonProperty("chunker_params") private int[] chunkerParams; borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveInfo.java
@@ -4,12 +4,14 @@ import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.util.List; /** * Result of <tt>borg list repo</tt>. */ public class ArchiveInfo extends RepositoryMatcher { public class ArchiveInfo extends RepositoryMatcher implements Serializable { private static final long serialVersionUID = -4200553322856662346L; @Getter private List<Archive2> archives; @Getter borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveStats.java
@@ -3,7 +3,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; public class ArchiveStats { import java.io.Serializable; public class ArchiveStats implements Serializable { private static final long serialVersionUID = -7603297185652222010L; @Getter @JsonProperty("compressed_size") private long compressedSize; borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Cache.java
@@ -2,7 +2,10 @@ import lombok.Getter; public class Cache { import java.io.Serializable; public class Cache implements Serializable { private static final long serialVersionUID = -1728825838475013561L; @Getter private String path; @Getter borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Encryption.java
@@ -2,7 +2,10 @@ import lombok.Getter; public class Encryption { import java.io.Serializable; public class Encryption implements Serializable { private static final long serialVersionUID = -4867140003118289187L; @Getter private String mode; } borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/FilesystemItem.java
@@ -2,7 +2,10 @@ import lombok.Getter; public class FilesystemItem { import java.io.Serializable; public class FilesystemItem implements Serializable { private static final long serialVersionUID = -5545350851640655468L; /** * d (directory), - (file) */ borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java
@@ -3,7 +3,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; public class RepoInfo extends RepositoryMatcher { import java.io.Serializable; public class RepoInfo extends RepositoryMatcher implements Serializable { private static final long serialVersionUID = -1588038325129799400L; @Getter @JsonProperty("security_dir") private String securityDir; borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoList.java
@@ -2,9 +2,11 @@ import lombok.Getter; import java.io.Serializable; import java.util.List; public class RepoList extends RepositoryMatcher { public class RepoList extends RepositoryMatcher implements Serializable { private static final long serialVersionUID = 1006757749929526034L; @Getter private List<Archive> archives; @Getter borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Repository.java
@@ -6,7 +6,10 @@ import lombok.Getter; import lombok.Setter; public class Repository { import java.io.Serializable; public class Repository implements Serializable { private static final long serialVersionUID = 1278802519434516280L; /** * A name describing this config. Only used for displaying purposes. This is automatically set with the name * of the repository configuration. borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepositoryMatcher.java
@@ -5,7 +5,11 @@ import lombok.Getter; import lombok.Setter; public abstract class RepositoryMatcher { import java.io.Serializable; public abstract class RepositoryMatcher implements Serializable { private static final long serialVersionUID = -3672403959096363628L; @Getter protected Repository repository; @Getter borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Stats.java
@@ -3,7 +3,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; public class Stats { import java.io.Serializable; public class Stats implements Serializable { private static final long serialVersionUID = 9141985857856734073L; @Getter @JsonProperty("total_chunks") private long totalChunks; borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java
@@ -32,15 +32,15 @@ //butlerCache.removeAllCacheFiles(); { for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) { RepoInfo repoInfo = ButlerCache.getInstance().getRepoInfoCache().get(repoConfig, repoConfig.getRepo()); RepoInfo repoInfo = ButlerCache.getInstance().getRepoInfo(repoConfig.getRepo()); } assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getRepoInfoCache().getElements().size()); assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size()); } { for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) { RepoList repoList = ButlerCache.getInstance().getRepoListCache().get(repoConfig, repoConfig.getRepo()); } assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getRepoInfoCache().getElements().size()); assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size()); } List<BorgRepoConfig> repoConfigs = ConfigurationHandler.getConfiguration().getRepoConfigs(); Archive archive = null; borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java
@@ -4,6 +4,8 @@ import de.micromata.borgbutler.json.JsonUtils; import de.micromata.borgbutler.json.borg.Repository; import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.ws.rs.GET; import javax.ws.rs.Path; @@ -14,6 +16,8 @@ @Path("/repos") public class ReposRest { private static Logger log = LoggerFactory.getLogger(ReposRest.class); @GET @Path("refresh") @Produces(MediaType.TEXT_PLAIN) @@ -22,8 +26,8 @@ * @return "OK" */ public String refresh() { ButlerCache.getInstance().getRepoInfoCache().clearAndReset(); return "OK"; log.error("refresh not yet implemented."); return "FAILED"; } @GET