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

Kai Reinhard
15.44.2019 13ab859d2bbea7f28c65cd26c2ff8abf07613bb2
Auto-install borg...
1 files added
4 files modified
74 ■■■■ changed files
borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java 43 ●●●● patch | view | raw | blame | history
borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgVersion.java 14 ●●●●● patch | view | raw | blame | history
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfo.java 5 ●●●●● patch | view | raw | blame | history
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfoRest.java 6 ●●●● patch | view | raw | blame | history
borgbutler-webapp/src/containers/WebApp.jsx 6 ●●●● patch | view | raw | blame | history
borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
@@ -4,6 +4,7 @@
import de.micromata.borgbutler.config.Configuration;
import de.micromata.borgbutler.config.ConfigurationHandler;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
@@ -21,34 +22,54 @@
    private Logger log = LoggerFactory.getLogger(BorgInstallation.class);
    private static final BorgInstallation instance = new BorgInstallation();
    private BorgVersion borgVersion = new BorgVersion();
    public static BorgInstallation getInstance() {
        return instance;
    }
    public void initialize() {
        Configuration configuration = ConfigurationHandler.getConfiguration();
        if (version(configuration) != null) {
            return;
        if (StringUtils.isNotBlank(configuration.getBorgCommand())) {
            if (version(configuration)) {
                return;
            }
        }
        String[] binary = getBinary(RunningMode.getOSType());
        File file = download(binary);
        configuration.setBorgCommand(file.getAbsolutePath());
        if (version(configuration) != null) {
        if (version(configuration)) {
            return;
        }
        log.warn("No working borg version found. Please configure a borg version with minimal version '" + configuration.getMinimumRequiredBorgVersion() + "'.");
    }
    private String version(Configuration configuration) {
        String version = BorgCommands.version();
        if (version != null) {
            if (version.compareTo(configuration.getMinimumRequiredBorgVersion()) < 0) {
                log.info("Found borg version '" + version + "' is less than minimum required version '" + configuration.getMinimumRequiredBorgVersion() + "'.");
                return null;
    /**
     *
     * @return a clone of this.borgVersion.
     */
    public BorgVersion getVersion() {
        return new BorgVersion()
                .setVersion(borgVersion.getVersion())
                .setVersionOK(borgVersion.isVersionOK());
    }
    private boolean version(Configuration configuration) {
        String versionString = BorgCommands.version();
        if (versionString != null) {
            if (versionString.compareTo(configuration.getMinimumRequiredBorgVersion()) < 0) {
                log.info("Found borg version '" + versionString + "' is less than minimum required version '" + configuration.getMinimumRequiredBorgVersion() + "'.");
                borgVersion.setVersionOK(false);
            } else {
                log.info("Found borg '" + configuration.getBorgCommand() + "', version: " + versionString + " (newer than '" + configuration.getMinimumRequiredBorgVersion()
                        + "', OK).");
                borgVersion.setVersionOK(true);
            }
            log.info("Using borg '" + configuration.getBorgCommand() + "', version: " + version);
        } else {
            borgVersion.setVersionOK(false);
            return false;
        }
        return version;
        return true;
    }
    private String[] getBinary(RunningMode.OSType osType) {
borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgVersion.java
New file
@@ -0,0 +1,14 @@
package de.micromata.borgbutler.server;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
public class BorgVersion {
    @Getter
    @Setter(AccessLevel.PACKAGE)
    private boolean versionOK = false;
    @Getter
    @Setter(AccessLevel.PACKAGE)
    private String version;
}
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfo.java
@@ -1,6 +1,7 @@
package de.micromata.borgbutler.server.rest;
import de.micromata.borgbutler.BorgQueueStatistics;
import de.micromata.borgbutler.server.BorgVersion;
import lombok.Getter;
import lombok.Setter;
@@ -17,4 +18,8 @@
    @Getter
    @Setter
    private boolean configurationOK;
    @Getter
    @Setter
    private BorgVersion borgVersion;
}
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfoRest.java
@@ -2,6 +2,8 @@
import de.micromata.borgbutler.BorgQueueExecutor;
import de.micromata.borgbutler.json.JsonUtils;
import de.micromata.borgbutler.server.BorgInstallation;
import de.micromata.borgbutler.server.BorgVersion;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -22,9 +24,11 @@
     * @see JsonUtils#toJson(Object, boolean)
     */
    public String getStatistics() {
        BorgVersion borgVersion = BorgInstallation.getInstance().getVersion();
        SystemInfo systemInfonfo = new SystemInfo()
                .setQueueStatistics(BorgQueueExecutor.getInstance().getStatistics())
                .setConfigurationOK(false);
                .setConfigurationOK(borgVersion.isVersionOK())
                .setBorgVersion(borgVersion);
        return JsonUtils.toJson(systemInfonfo);
    }
}
borgbutler-webapp/src/containers/WebApp.jsx
@@ -49,12 +49,16 @@
        if (statistics && statistics.numberOfRunningAndQueuedJobs > 0) {
            jobsBadge = <Badge color="danger" pill>{statistics.numberOfRunningAndQueuedJobs}</Badge>;
        }
        let configurationBadge = '';
        if (this.state && this.state.systemInfo && !this.state.systemInfo.configurationOK) {
            configurationBadge = <Badge color="danger" pill>!</Badge>;
        }
        let routes = [
            ['Start', '/', Start],
            ['Repositories', '/repos', RepoListView],
            ['Job monitor', '/jobmonitor', JobMonitorView, {badge: jobsBadge}],
            [getTranslation('logviewer'), '/logging', LogPage],
            [getTranslation('configuration'), '/config', ConfigurationPage]
            [getTranslation('configuration'), '/config', ConfigurationPage, {badge: configurationBadge}]
        ];
        if (isDevelopmentMode()) {