mirror of https://github.com/micromata/borgbackup-butler.git

...
Kai Reinhard
14.17.2018 5844b5f3ece264b31ddd1e1b447cb4d1dd74f6f7
...
7 files modified
98 ■■■■■ changed files
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java 2 ●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java 3 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java 43 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java 18 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java 5 ●●●● patch | view | raw | blame | history
borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java 17 ●●●● patch | view | raw | blame | history
borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java 10 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -112,7 +112,7 @@
        //executor.setExitValue(2);
        //ExecuteWatchdog watchdog = new ExecuteWatchdog(60000);
        //executor.setWatchdog(watchdog);
        ExecuteResultHandler handler = new DefaultExecuteResultHandler();
        //  ExecuteResultHandler handler = new DefaultExecuteResultHandler();
        PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);
        executor.setStreamHandler(streamHandler);
        String borgCall = cmdLine.getExecutable() + " " + StringUtils.join(cmdLine.getArguments(), " ");
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java
@@ -91,7 +91,8 @@
                if (obj instanceof BorgFilesystemItem) {
                    list[i] = (BorgFilesystemItem) obj;
                } else {
                    log.error("Can't load archive content. FilesystemItem expected, but received: " + obj.getClass()
                    log.error("Can't load archive content. FilesystemItem expected, but received: "
                            + (obj != null ? obj.getClass() : "null")
                            + " at position " + i + ".");
                    return null;
                }
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
@@ -5,10 +5,13 @@
import de.micromata.borgbutler.config.Configuration;
import de.micromata.borgbutler.config.ConfigurationHandler;
import de.micromata.borgbutler.data.Repository;
import de.micromata.borgbutler.json.borg.*;
import de.micromata.borgbutler.json.borg.BorgArchive;
import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
import de.micromata.borgbutler.json.borg.BorgRepoList;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.jcs.JCS;
import org.apache.commons.jcs.access.CacheAccess;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,12 +27,17 @@
    private JCSCache jcsCache;
    private CacheAccess<String, Repository> repoCacheAccess;
    private CacheAccess<String, Repository> repoArchivesCacheAccess;
    private ArchiveFilelistCache archiveFilelistCache;
    public static ButlerCache getInstance() {
        return instance;
    }
    /**
     * @param idOrName
     * @return Repository without list of archives.
     */
    public Repository getRepository(String idOrName) {
        BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName);
        Repository repository = repoCacheAccess.get(repoConfig.getRepo());
@@ -43,6 +51,9 @@
        return repository;
    }
    /**
     * @return the list of all repositories without the list of archives.
     */
    public List<Repository> getAllRepositories() {
        List<Repository> repositories = new ArrayList<>();
        for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) {
@@ -57,6 +68,8 @@
    public void clearAllCaches(){
        this.repoCacheAccess.clear();
        log.info("Clearing repositories cache (with included archives)...");
        this.repoArchivesCacheAccess.clear();
        log.info("Clearing cache with file lists of archives...");
        this.archiveFilelistCache.removeAllCacheFiles();
    }
@@ -66,19 +79,32 @@
        this.repoCacheAccess.clear();
    }
/*    public BorgRepoList getRepoList(String idOrName) {
    /**
     * @param idOrName
     * @return The repository including all archives.
     */
    public Repository getRepositoryArchives(String idOrName) {
        BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName);
        //ArchiveInfo archiveInfo = BorgCommands.info(repoConfig, repoConfig.getRepo());
        BorgRepoList repoList = repoListCacheAccess.get(repoConfig.getRepo());
        if (repoList == null) {
            repoList = BorgCommands.list(repoConfig);
            repoListCacheAccess.put(repoConfig.getRepo(), repoList);
        Repository plainRepository = repoArchivesCacheAccess.get(repoConfig.getRepo());
        if (plainRepository != null) {
            return plainRepository;
        }
        plainRepository = repoCacheAccess.get(repoConfig.getRepo());
        if (plainRepository == null) {
            log.warn("Repo with name '" + idOrName + "' not found.");
            return null;
        }
        BorgRepoList repoList = BorgCommands.list(repoConfig);
        if (repoList == null) {
            log.warn("Repo with name '" + idOrName + "' not found.");
            return null;
        }
        return repoList;
    }*/
        Repository repository = ObjectUtils.clone(plainRepository);
        repository.setArchives(repoList.getArchives());
        repoArchivesCacheAccess.put(repoConfig.getRepo(), repository);
        return repository;
    }
    public BorgFilesystemItem[] getArchiveContent(BorgRepoConfig repoConfig, BorgArchive archive) {
        if (archive == null || StringUtils.isBlank(archive.getArchive())) {
@@ -114,6 +140,7 @@
        Configuration configuration = ConfigurationHandler.getConfiguration();
        this.jcsCache = JCSCache.getInstance();
        this.repoCacheAccess = jcsCache.getJCSCache("repositories");
        this.repoArchivesCacheAccess = jcsCache.getJCSCache("repositoriesArchives");
        this.archiveFilelistCache = new ArchiveFilelistCache(getCacheDir(), configuration.getCacheArchiveContentMaxDiscSizeMB());
    }
}
borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java
@@ -1,17 +1,19 @@
package de.micromata.borgbutler.data;
import de.micromata.borgbutler.config.BorgRepoConfig;
import de.micromata.borgbutler.json.borg.BorgArchive;
import de.micromata.borgbutler.json.borg.BorgCache;
import de.micromata.borgbutler.json.borg.BorgEncryption;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
/**
 * Part of Borg json objects to refer objects to repositories.
 */
public class Repository implements Serializable {
public class Repository implements Serializable, Cloneable {
    private static final long serialVersionUID = 1278802519434516280L;
    /**
     * A name describing this config. Only used for displaying purposes. This is automatically set with the name
@@ -25,9 +27,6 @@
    @Getter
    @Setter
    private String id;
    /**
     * UTC date.
     */
    @Getter
    @Setter
    private String lastModified;
@@ -45,6 +44,15 @@
    @Setter
    private BorgEncryption encryption;
    public Repository() {
    /**
     * Might be null.
     */
    @Getter
    @Setter
    private List<BorgArchive> archives;
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java
@@ -6,10 +6,13 @@
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
 * Part of Borg json objects to refer objects to repositories.
 */
public class BorgRepository {
public class BorgRepository 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/test/java/de/micromata/borgbutler/cache/CacheTest.java
@@ -6,6 +6,7 @@
import de.micromata.borgbutler.data.Repository;
import de.micromata.borgbutler.json.borg.BorgArchive;
import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
import org.apache.commons.collections4.CollectionUtils;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,22 +34,22 @@
            }
            assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size());
        }
/*        {
        {
            for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) {
                BorgRepoList repoList = ButlerCache.getInstance().getRepoList(repoConfig.getRepo());
                Repository repository = ButlerCache.getInstance().getRepositoryArchives(repoConfig.getRepo());
            }
            assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size());
        }*/
        }
        List<BorgRepoConfig> repoConfigs = ConfigurationHandler.getConfiguration().getRepoConfigs();
        BorgArchive archive = null;
        BorgRepoConfig repoConfig = null;
/*        if (CollectionUtils.isNotEmpty(repoConfigs)) {
        if (CollectionUtils.isNotEmpty(repoConfigs)) {
            repoConfig = repoConfigs.get(0);
            BorgRepoList repoList = ButlerCache.getInstance().getRepoList(repoConfig.getRepo());
            if (repoList != null && CollectionUtils.isNotEmpty(repoList.getArchives())) {
                archive = repoList.getArchives().get(0);
            Repository rerepositoryoList = ButlerCache.getInstance().getRepositoryArchives(repoConfig.getRepo());
            if (rerepositoryoList != null && CollectionUtils.isNotEmpty(rerepositoryoList.getArchives())) {
                archive = rerepositoryoList.getArchives().get(0);
            }
        }*/
        }
        {
            if (archive != null) {
                BorgFilesystemItem[] content = ButlerCache.getInstance().getArchiveContent(repoConfig, archive);
borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java
@@ -4,8 +4,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.LocalDateTime;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -14,12 +12,6 @@
    @Test
    void parseTest() {
        LocalDateTime dateTime = DateUtils.get("2018-11-21T22:31:51.000000");
        assertEquals(2018, dateTime.getYear());
        assertEquals(11, dateTime.getMonthValue());
        assertEquals(21, dateTime.getDayOfMonth());
        assertEquals(22, dateTime.getHour());
        assertEquals(31, dateTime.getMinute());
        assertEquals(51, dateTime.getSecond());
        assertEquals("2018-11-21T22:31:51",DateUtils.get("2018-11-21T22:31:51.000000"));
    }
}