From 78d82418ff8fa4212dbdeec904512092f1a5ac67 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 15 Dec 2018 23:52:13 +0000
Subject: [PATCH] ...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive2.java      |    9 +++
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java                |   22 ++++--
 borgbutler-webapp/src/components/views/repos/ArchiveView.jsx                           |   79 ++++++++++++++++++++++++--
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive.java       |    4 -
 borgbutler-core/src/main/java/de/micromata/borgbutler/data/Archive.java                |   19 ++++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java           |    7 ++
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveLimits.java |   13 ++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/utils/DateUtils.java             |    3 +
 8 files changed, 137 insertions(+), 19 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
index 75bff07..ef5d6e3 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -83,7 +83,8 @@
                     .setStart(DateUtils.format(borgArchive.getStart()))
                     .setTime(DateUtils.format(borgArchive.getTime()))
                     .setRepoId(repository.getId())
-                    .setRepoName(repository.getName());
+                    .setRepoName(repository.getName())
+                    .setRepoDisplayName(repoConfig.getDisplayName());
             repository.add(archive);
         }
     }
@@ -119,13 +120,18 @@
         if (archiveInfo.getArchives().size() > 1) {
             log.warn("Archive '" + archiveFullname + "' contains more than one archives!? (Using only first.)");
         }
-        BorgArchive2 borgArchive2 = archiveInfo.getArchives().get(0);
-        archive.setStart(DateUtils.format(borgArchive2.getStart()))
-                .setChunkerParams(borgArchive2.getChunkerParams())
-                .setCommandLine(borgArchive2.getCommandLine())
-                .setComment(borgArchive2.getComment())
-                .setStats(borgArchive2.getStats())
-                .setUsername(borgArchive2.getUsername());
+        BorgArchive2 borgArchive = archiveInfo.getArchives().get(0);
+        archive.setStart(DateUtils.format(borgArchive.getStart()))
+                .setChunkerParams(borgArchive.getChunkerParams())
+                .setCommandLine(borgArchive.getCommandLine())
+                .setComment(borgArchive.getComment())
+                .setStats(borgArchive.getStats())
+                .setLimits(borgArchive.getLimits())
+                .setHostname(borgArchive.getHostname())
+                .setUsername(borgArchive.getUsername())
+                .setEnd(DateUtils.format(borgArchive.getEnd()))
+                .setDuration(borgArchive.getDuration())
+        ;
     }
 
     public static List<BorgFilesystemItem> listArchiveContent(BorgRepoConfig repoConfig, String archiveId) {
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
index 88e838d..07914e9 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
@@ -57,7 +57,12 @@
      * @return Repository.
      */
     private Repository getRepository(BorgRepoConfig repoConfig) {
-        Repository repository = repoCacheAccess.get(repoConfig.getRepo());
+        Repository repository = null;
+        try {
+            repository = repoCacheAccess.get(repoConfig.getRepo());
+        } catch (Exception ex) {
+            log.warn("Error while deserializing repository (maybe data format was changed). Reloading...");
+        }
         if (repository == null || repository.getLocation() == null) {
             repository = BorgCommands.info(repoConfig);
             repoCacheAccess.put(repoConfig.getRepo(), repository);
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/data/Archive.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/data/Archive.java
index 0d2547a..5d1dd77 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/data/Archive.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/data/Archive.java
@@ -1,5 +1,6 @@
 package de.micromata.borgbutler.data;
 
+import de.micromata.borgbutler.json.borg.BorgArchiveLimits;
 import de.micromata.borgbutler.json.borg.BorgArchiveStats;
 import de.micromata.borgbutler.json.borg.BorgCache;
 import de.micromata.borgbutler.json.borg.BorgEncryption;
@@ -24,6 +25,12 @@
      */
     @Getter
     @Setter
+    private String repoDisplayName;
+    /**
+     * For convenience purposes for the client.
+     */
+    @Getter
+    @Setter
     private String repoId;
     @Getter
     @Setter
@@ -55,13 +62,25 @@
     private String start;
     @Getter
     @Setter
+    private String end;
+    @Getter
+    @Setter
     private String time;
     @Getter
     @Setter
+    private String duration;
+    @Getter
+    @Setter
     private BorgArchiveStats stats;
     @Getter
     @Setter
+    private BorgArchiveLimits limits;
+    @Getter
+    @Setter
     private String username;
+    @Getter
+    @Setter
+    private String hostname;
 
     /**
      *
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive.java
index 3af01f3..48ca036 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive.java
@@ -2,7 +2,6 @@
 
 import de.micromata.borgbutler.json.JsonUtils;
 import lombok.Getter;
-import lombok.Setter;
 
 import java.io.Serializable;
 
@@ -20,12 +19,11 @@
     @Getter
     private String name;
     @Getter
-    @Setter
     private String start;
     @Getter
-    @Setter
     private String time;
 
+
     public String toString() {
         return JsonUtils.toJson(this, true);
     }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive2.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive2.java
index 3ed36d9..78c8d59 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive2.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive2.java
@@ -25,9 +25,18 @@
     @Getter
     private String start;
     @Getter
+    private String end;
+    @Getter
+    private String duration;
+    @Getter
     private BorgArchiveStats stats;
     @Getter
+    private BorgArchiveLimits limits;
+    @Getter
+    private String hostname;
+    @Getter
     private String username;
+
     public String toString() {
         return JsonUtils.toJson(this, true);
     }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveLimits.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveLimits.java
new file mode 100644
index 0000000..c9f7f06
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveLimits.java
@@ -0,0 +1,13 @@
+package de.micromata.borgbutler.json.borg;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+
+import java.io.Serializable;
+
+public class BorgArchiveLimits implements Serializable {
+    private static final long serialVersionUID = -3079958893130481516L;
+    @JsonProperty("max_archive_size")
+    @Getter
+    private double maxArchiveSize;
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/utils/DateUtils.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/utils/DateUtils.java
index 55278b6..263b550 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/utils/DateUtils.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/utils/DateUtils.java
@@ -10,6 +10,9 @@
      * @return
      */
     public static String format(String borgDateTime) {
+        if (borgDateTime == null) {
+            return null;
+        }
         LocalDateTime dateTime = LocalDateTime.parse(borgDateTime);
         return format(dateTime);
     }
diff --git a/borgbutler-webapp/src/components/views/repos/ArchiveView.jsx b/borgbutler-webapp/src/components/views/repos/ArchiveView.jsx
index 1beea1a..c26f4c6 100644
--- a/borgbutler-webapp/src/components/views/repos/ArchiveView.jsx
+++ b/borgbutler-webapp/src/components/views/repos/ArchiveView.jsx
@@ -1,7 +1,7 @@
 import React from 'react'
 import {Table} from 'reactstrap';
 import {PageHeader} from '../../general/BootstrapComponents';
-import {getRestServiceUrl} from '../../../utilities/global';
+import {getRestServiceUrl, humanFileSize, humanSeconds} from '../../../utilities/global';
 import ErrorAlert from '../../general/ErrorAlert';
 import {IconRefresh} from "../../general/IconComponents";
 
@@ -46,7 +46,7 @@
 
     render = () => {
         let content = undefined;
-        const archive = this.state.archive;
+        let archive = this.state.archive;
         let pageHeader = '';
 
         if (this.state.isFetching) {
@@ -60,9 +60,9 @@
                     title: 'Try again'
                 }}
             />;
-        } else if (this.state.repo) {
+        } else if (this.state.archive) {
             pageHeader = <React.Fragment>
-                {archive.id}
+                {archive.repoDisplayName}
                 <div
                     className={'btn btn-outline-primary refresh-button-right'}
                     onClick={this.fetchArchive.bind(this, true)}
@@ -74,9 +74,74 @@
                 <Table hover>
                     <tbody>
                     <tr>
-                        <th>Archive</th>
-                        <th>Time</th>
-                        <th>Id</th>
+                        <td>Archive</td>
+                        <td>{archive.name}</td>
+                    </tr>
+                    <tr>
+                        <td>Start - end</td>
+                        <td>{archive.start} - {archive.end} (Duration: {humanSeconds(archive.duration)})</td>
+                    </tr>
+                    <tr>
+                        <td>Id</td>
+                        <td>{archive.id}</td>
+                    </tr>
+                    <tr>
+                        <td>Stats</td>
+                        <td>
+                            <table className="inline">
+                                <tbody>
+                                <tr>
+                                    <td>Compressed size</td>
+                                    <td>{humanFileSize(archive.stats.compressed_size)}</td>
+                                </tr>
+                                <tr>
+                                    <td>Deduplicated size</td>
+                                    <td>{humanFileSize(archive.stats.deduplicated_size)}</td>
+                                </tr>
+                                <tr>
+                                    <td>Original size</td>
+                                    <td>{humanFileSize(archive.stats.original_size)}</td>
+                                </tr>
+                                <tr>
+                                    <td>Nfiles</td>
+                                    <td>{Number(archive.stats.nfiles).toLocaleString()}</td>
+                                </tr>
+                                </tbody>
+                            </table>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td>Comment</td>
+                        <td>{archive.comment}</td>
+                    </tr>
+                    <tr>
+                        <td>Command line</td>
+                        <td>{archive.commandLine.join(' ')}</td>
+                    </tr>
+                    <tr>
+                        <td>Host name</td>
+                        <td>{archive.hostname}</td>
+                    </tr>
+                    <tr>
+                        <td>User name</td>
+                        <td>{archive.username}</td>
+                    </tr>
+                    <tr>
+                        <td>Chunker params</td>
+                        <td>{archive.chunkerParams.join(', ')}</td>
+                    </tr>
+                    <tr>
+                        <td>Limits</td>
+                        <td>
+                            <table className="inline">
+                                <tbody>
+                                <tr>
+                                    <td>max_archive_size</td>
+                                    <td>{archive.limits.max_archive_size}</td>
+                                </tr>
+                                </tbody>
+                            </table>
+                        </td>
                     </tr>
                     </tbody>
                 </Table>

--
Gitblit v1.10.0