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

...
Kai Reinhard
16.52.2018 78d82418ff8fa4212dbdeec904512092f1a5ac67
...
1 files added
7 files modified
156 ■■■■ changed files
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java 22 ●●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java 7 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/data/Archive.java 19 ●●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive.java 4 ●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive2.java 9 ●●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveLimits.java 13 ●●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/utils/DateUtils.java 3 ●●●●● patch | view | raw | blame | history
borgbutler-webapp/src/components/views/repos/ArchiveView.jsx 79 ●●●●● patch | view | raw | blame | history
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) {
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);
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;
    /**
     *
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);
    }
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);
    }
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveLimits.java
New file
@@ -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;
}
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);
    }
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>