From 13ab859d2bbea7f28c65cd26c2ff8abf07613bb2 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Tue, 15 Jan 2019 06:44:49 +0000
Subject: [PATCH] Auto-install borg...

---
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java    |   43 ++++++++++++++++-----
 borgbutler-webapp/src/containers/WebApp.jsx                                             |    6 ++
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfoRest.java |    6 ++
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgVersion.java         |   14 +++++++
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfo.java     |    5 ++
 5 files changed, 61 insertions(+), 13 deletions(-)

diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
index fe933ac..b8641c1 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
+++ b/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) {
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgVersion.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgVersion.java
new file mode 100644
index 0000000..629ee82
--- /dev/null
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgVersion.java
@@ -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;
+}
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfo.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfo.java
index a819450..eaf6495 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfo.java
+++ b/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;
 }
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfoRest.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfoRest.java
index 8cbec32..6077481 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfoRest.java
+++ b/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);
     }
 }
diff --git a/borgbutler-webapp/src/containers/WebApp.jsx b/borgbutler-webapp/src/containers/WebApp.jsx
index e830f92..90c5494 100644
--- a/borgbutler-webapp/src/containers/WebApp.jsx
+++ b/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()) {

--
Gitblit v1.10.0