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

Kai Reinhard
06.54.2019 df30856171a76eae2b5d9254787d7f5b5935a3aa
JobQueue...
2 files modified
83 ■■■■■ changed files
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java 27 ●●●● patch | view | raw | blame | history
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/JobsRest.java 56 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
@@ -57,12 +57,15 @@
    /**
     * For displaying purposes.
     *
     * @param repo
     * @param repoConfig
     * @return A list of all jobs of the queue (as copies).
     */
    public List<BorgJob<?>> getJobListCopy(String repo) {
        JobQueue<String> origQueue = getQueue(repo);
    public List<BorgJob<?>> getJobListCopy(BorgRepoConfig repoConfig) {
        JobQueue<String> origQueue = getQueue(repoConfig);
        List<BorgJob<?>> jobList = new ArrayList<>();
        if (origQueue == null) {
            return jobList;
        }
        Iterator<AbstractJob<String>> it = origQueue.getQueueIterator();
        while (it.hasNext()) {
            AbstractJob<String> origJob = it.next();
@@ -76,16 +79,16 @@
        return jobList;
    }
    private JobQueue<String> getQueue(String repo) {
    private JobQueue<String> getQueue(BorgRepoConfig repoConfig) {
        synchronized (queueMap) {
            return queueMap.get(getQueueName(repo));
            return queueMap.get(getQueueName(repoConfig));
        }
    }
    private JobQueue<String> ensureAndGetQueue(String repo) {
    private JobQueue<String> ensureAndGetQueue(BorgRepoConfig repoConfig) {
        synchronized (queueMap) {
            String queueName = getQueueName(repo);
            JobQueue<String> queue = getQueue(queueName);
            String queueName = getQueueName(repoConfig);
            JobQueue<String> queue = getQueue(repoConfig);
            if (queue == null) {
                queue = new JobQueue<>();
                queueMap.put(queueName, queue);
@@ -94,12 +97,8 @@
        }
    }
    private JobQueue<String> ensureAndGetQueue(BorgRepoConfig config) {
        return ensureAndGetQueue(config != null ? config.getRepo() : null);
    }
    private String getQueueName(String repo) {
        return repo != null ? repo : "--NO_REPO--";
    private String getQueueName(BorgRepoConfig repoConfig) {
        return repoConfig != null ? repoConfig.getId() : "--NO_REPO--";
    }
    public BorgJob<Void> execute(BorgCommand command) {
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/JobsRest.java
@@ -14,7 +14,10 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ws.rs.*;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.List;
@@ -28,36 +31,59 @@
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    /**
     * @param repo If given, only the job queue of the given repo will be returned.
     * @param testMode If true, then a test job list is created.
     * @param prettyPrinter If true then the json output will be in pretty format.
     * @return Job queues as json string.
     * @see JsonUtils#toJson(Object, boolean)
     */
    public String getJobs(@QueryParam("testMode") boolean testMode, @QueryParam("prettyPrinter") boolean prettyPrinter) {
    public String getJobs(@QueryParam("repo") String repo,
                          @QueryParam("testMode") boolean testMode,
                          @QueryParam("prettyPrinter") boolean prettyPrinter) {
        if (testMode) {
            // Return dynamic test queue:
            return returnTestList(prettyPrinter);
        }
        boolean validRepo = false;
        if (StringUtils.isNotBlank(repo) && !"null".equals(repo) && !"undefined".equals(repo)) {
            validRepo = true;
        }
        BorgQueueExecutor borgQueueExecutor = BorgQueueExecutor.getInstance();
        List<JsonJobQueue> queueList = new ArrayList<>();
        for (String repo : borgQueueExecutor.getRepos()) {
            BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(repo);
            String title = repoConfig != null ? repoConfig.getDisplayName() : repo;
            List<BorgJob<?>> borgJobList = borgQueueExecutor.getJobListCopy(repo);
            if (CollectionUtils.isEmpty(borgJobList))
                continue;
            JsonJobQueue queue = new JsonJobQueue()
                    .setRepo(title);
            queueList.add(queue);
            queue.setJobs(new ArrayList<>(borgJobList.size()));
            for (BorgJob<?> borgJob : borgJobList) {
                JsonJob job = new JsonJob(borgJob);
                queue.getJobs().add(job);
        if (validRepo) { // Get only the queue of the given repo:
            JsonJobQueue queue = getQueue(repo);
            if (queue != null) {
                queueList.add(queue);
            }
        } else { // Get all the queues (of all repos).
            for (String rep : borgQueueExecutor.getRepos()) {
                JsonJobQueue queue = getQueue(rep);
                if (queue != null) {
                    queueList.add(queue);
                }
            }
        }
        return JsonUtils.toJson(queueList, prettyPrinter);
    }
    private JsonJobQueue getQueue(String repo) {
        BorgQueueExecutor borgQueueExecutor = BorgQueueExecutor.getInstance();
        BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(repo);
        if (repoConfig == null) {
            return null;
        }
        List<BorgJob<?>> borgJobList = borgQueueExecutor.getJobListCopy(repoConfig);
        if (CollectionUtils.isEmpty(borgJobList))
            return null;
        JsonJobQueue queue = new JsonJobQueue().setRepo(repoConfig.getDisplayName());
        queue.setJobs(new ArrayList<>(borgJobList.size()));
        for (BorgJob<?> borgJob : borgJobList) {
            JsonJob job = new JsonJob(borgJob);
            queue.getJobs().add(job);
        }
        return queue;
    }
    @Path("/cancel")
    @GET
    /**