From cdd5a70a92a808d063f32f1454e3584165beab53 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 29 Dec 2018 09:22:37 +0000
Subject: [PATCH] JobResult...
---
borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java | 8 ++--
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java | 18 +++-----
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java | 12 ++++-
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java | 12 +++---
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java | 29 ++++++++------
borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/TestJob.java | 9 ----
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java | 16 -------
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobResult.java | 15 +++++++
8 files changed, 60 insertions(+), 59 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 ea308d8..92d255d 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -3,6 +3,7 @@
import de.micromata.borgbutler.config.BorgRepoConfig;
import de.micromata.borgbutler.data.Archive;
import de.micromata.borgbutler.data.Repository;
+import de.micromata.borgbutler.jobs.JobResult;
import de.micromata.borgbutler.json.JsonUtils;
import de.micromata.borgbutler.json.borg.*;
import de.micromata.borgbutler.utils.DateUtils;
@@ -35,10 +36,11 @@
BorgCommand command = new BorgCommand()
.setParams("--version")
.setDescription("Getting borg version.");
- String version = execute(command).getResult();
- if (command.getResultStatus() != BorgCommand.ResultStatus.OK) {
+ JobResult<String> jobResult = execute(command).getResult();
+ if (jobResult.getStatus() != JobResult.Status.OK) {
return null;
}
+ String version = jobResult.getResultObject();
log.info("Borg version: " + version);
return version;
}
@@ -55,10 +57,11 @@
.setCommand("info")
.setParams("--json")
.setDescription("Loading info of repo '" + repoConfig.getDisplayName() + "'.");
- String result = execute(command).getResult();
- if (command.getResultStatus() != BorgCommand.ResultStatus.OK) {
+ JobResult<String> jobResult = execute(command).getResult();
+ if (jobResult.getStatus() != JobResult.Status.OK) {
return null;
}
+ String result = jobResult.getResultObject();
BorgRepoInfo repoInfo = JsonUtils.fromJson(BorgRepoInfo.class, result);
BorgRepository borgRepository = repoInfo.getRepository();
Repository repository = new Repository()
@@ -87,11 +90,12 @@
.setCommand("list")
.setParams("--json")
.setDescription("Loading list of archives of repo '" + repoConfig.getDisplayName() + "'.");
- String result = execute(command).getResult();
- if (command.getResultStatus() != BorgCommand.ResultStatus.OK) {
+ JobResult<String> jobResult = execute(command).getResult();
+ if (jobResult.getStatus() != JobResult.Status.OK) {
log.error("Can't load archives from repo '" + repository.getName() + "'.");
return;
}
+ String result = jobResult.getResultObject();
BorgRepoList repoList = JsonUtils.fromJson(BorgRepoList.class, result);
if (repoList == null || CollectionUtils.isEmpty(repoList.getArchives())) {
log.error("Can't load archives from repo '" + repository.getName() + "'.");
@@ -128,10 +132,11 @@
.setArchive(archive.getName())
.setParams("--json")
.setDescription("Loading info of archive '" + archive.getName() + "' of repo '" + repoConfig.getDisplayName() + "'.");
- String result = execute(command).getResult();
- if (command.getResultStatus() != BorgCommand.ResultStatus.OK) {
+ JobResult<String> jobResult = execute(command).getResult();
+ if (jobResult.getStatus() != JobResult.Status.OK) {
return;
}
+ String result = jobResult.getResultObject();
BorgArchiveInfo archiveInfo = JsonUtils.fromJson(BorgArchiveInfo.class, result);
if (archiveInfo == null) {
log.error("Archive '" + command.getRepoArchive() + "' not found.");
@@ -158,8 +163,7 @@
.setHostname(borgArchive.getHostname())
.setUsername(borgArchive.getUsername())
.setEnd(DateUtils.format(borgArchive.getEnd()))
- .setDuration(borgArchive.getDuration())
- ;
+ .setDuration(borgArchive.getDuration());
}
public static List<BorgFilesystemItem> listArchiveContent(BorgRepoConfig repoConfig, Archive archive) {
@@ -169,11 +173,12 @@
.setArchive(archive.getName())
.setParams("--json-lines")
.setDescription("Loading list of files of archive '" + archive.getName() + "' of repo '" + repoConfig.getDisplayName() + "'.");
- String result = execute(command).getResult();
List<BorgFilesystemItem> content = new ArrayList<>();
- if (command.getResultStatus() != BorgCommand.ResultStatus.OK) {
+ JobResult<String> jobResult = execute(command).getResult();
+ if (jobResult.getStatus() != JobResult.Status.OK) {
return content;
}
+ String result = jobResult.getResultObject();
try (Scanner scanner = new Scanner(result)) {
while (scanner.hasNextLine()) {
String json = scanner.nextLine();
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
index 474b49b..2fe7604 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
@@ -2,7 +2,6 @@
import de.micromata.borgbutler.config.BorgRepoConfig;
import de.micromata.borgbutler.config.ConfigurationHandler;
-import de.micromata.borgbutler.config.Definitions;
import de.micromata.borgbutler.jobs.AbstractCommandLineJob;
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.environment.EnvironmentUtils;
@@ -17,7 +16,7 @@
* A queue is important because Borg doesn't support parallel calls for one repository.
* For each repository one single queue is allocated.
*/
-public class BorgJob extends AbstractCommandLineJob {
+public class BorgJob extends AbstractCommandLineJob<String> {
private Logger log = LoggerFactory.getLogger(BorgJob.class);
private BorgCommand command;
@@ -50,19 +49,6 @@
}
@Override
- protected void afterSuccess() {
- command.setResultStatus(BorgCommand.ResultStatus.OK);
- command.setResponse(outputStream.toString(Definitions.STD_CHARSET));
- }
-
- @Override
- protected void afterFailure(Exception ex) {
- command.setResultStatus(BorgCommand.ResultStatus.ERROR);
- command.setResponse(outputStream.toString(Definitions.STD_CHARSET));
- log.error("Response: " + command.getAbbreviatedResponse());
- }
-
- @Override
protected Map<String, String> getEnvironment() throws IOException {
BorgRepoConfig repoConfig = command.getRepoConfig();
if (repoConfig == null) {
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
index 73f54bc..8645d62 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
@@ -18,7 +18,7 @@
* A queue is important because Borg doesn't support parallel calls for one repository.
* For each repository one single queue is allocated.
*/
-public abstract class AbstractCommandLineJob extends AbstractJob<String> {
+public abstract class AbstractCommandLineJob<T> extends AbstractJob<T> {
private Logger log = LoggerFactory.getLogger(AbstractCommandLineJob.class);
private ExecuteWatchdog watchdog;
@Getter
@@ -53,7 +53,7 @@
}
@Override
- public String execute() {
+ public JobResult<String> execute() {
getCommandLineAsString();
DefaultExecutor executor = new DefaultExecutor();
if (workingDirectory != null) {
@@ -91,15 +91,17 @@
: "Executing '" + commandLineAsString + "'...";
log.info(msg);
this.executeStarted = true;
+ JobResult<String> result = new JobResult<>();
try {
executor.execute(commandLine, getEnvironment());
- afterSuccess();
+ result.setStatus(JobResult.Status.OK);
log.info(msg + " Done.");
} catch (Exception ex) {
+ result.setStatus(JobResult.Status.ERROR);
failed();
- afterFailure(ex);
}
- return outputStream.toString(Definitions.STD_CHARSET);
+ result.setResultObject(outputStream.toString(Definitions.STD_CHARSET));
+ return result;
}
@Override
@@ -112,12 +114,6 @@
}
}
- protected void afterSuccess() {
- }
-
- protected void afterFailure(Exception ex) {
- }
-
protected Map<String, String> getEnvironment() throws IOException {
return null;
}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java
index a66b32f..a8237f8 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java
@@ -29,7 +29,9 @@
private String statusText;
@Getter(AccessLevel.PACKAGE)
@Setter(AccessLevel.PACKAGE)
- private Future<T> future;
+
+ // TODO: JobResult
+ private Future<JobResult<T>> future;
public void cancel() {
if (this.getStatus() == Status.QUEUED) {
@@ -53,7 +55,7 @@
* Waits for and gets the result.
* @return
*/
- public T getResult() {
+ public JobResult<T> getResult() {
try {
return future.get();
} catch (InterruptedException | ExecutionException ex) {
@@ -62,6 +64,10 @@
return null;
}
+ public T getResultObject() {
+ return getResult().getResultObject();
+ }
+
protected void failed() {
if (this.status == Status.CANCELLED) {
// do nothing. It's normal that cancelled jobs fail.
@@ -83,7 +89,7 @@
return false;
}
- public abstract T execute();
+ public abstract JobResult execute();
/**
* A job is identified by this id. If a job with the same id is already queued (not yet finished), this job will
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
index 6c33bae..8cd3ac2 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
@@ -30,7 +30,7 @@
* @param job
* @return The given job (if it's not already running or queued), otherwise the already running or queued job.
*/
- public AbstractJob append(AbstractJob<T> job) {
+ public AbstractJob append(AbstractJob job) {
synchronized (queue) {
for (AbstractJob queuedJob : queue) {
if (Objects.equals(queuedJob.getId(), job.getId())) {
@@ -83,15 +83,15 @@
}
}
- private class CallableTask implements Callable<T> {
- private AbstractJob<T> job;
+ private class CallableTask implements Callable<JobResult<T>> {
+ private AbstractJob job;
- private CallableTask(AbstractJob<T> job) {
+ private CallableTask(AbstractJob job) {
this.job = job;
}
@Override
- public T call() throws Exception {
+ public JobResult<T> call() throws Exception {
if (job.isCancelledRequested()) {
job.setStatus(AbstractJob.Status.CANCELLED);
return null;
@@ -99,7 +99,7 @@
try {
log.info("Starting job: " + job.getId());
job.setStatus(AbstractJob.Status.RUNNING);
- T result = job.execute();
+ JobResult<T> result = job.execute();
if (!job.isFinished()) {
// Don't overwrite status failed set by job.
job.setStatus(AbstractJob.Status.DONE);
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobResult.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobResult.java
new file mode 100644
index 0000000..f57bd9b
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobResult.java
@@ -0,0 +1,15 @@
+package de.micromata.borgbutler.jobs;
+
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.Setter;
+
+public class JobResult<T> {
+ public enum Status {OK, ERROR}
+ @Getter
+ @Setter(AccessLevel.PACKAGE)
+ private Status status;
+ @Getter
+ @Setter
+ private T resultObject;
+}
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java
index 8abf327..9eded60 100644
--- a/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java
@@ -64,7 +64,7 @@
TestJob job = (TestJob) queue.getQueuedJob(5);
assertEquals(AbstractJob.Status.QUEUED, job.getStatus());
- String result = job1.getResult();
+ String result = job1.getResultObject();
assertEquals("10\n", result);
assertEquals(AbstractJob.Status.DONE, job1.getStatus());
@@ -77,7 +77,7 @@
job.cancel();
assertEquals(AbstractJob.Status.CANCELLED, job.getStatus());
- result = job1.getResult();
+ result = job1.getResultObject();
assertEquals("10\n", result);
assertEquals(0, queue.getQueueSize());
@@ -118,7 +118,7 @@
assertTrue(counter > 0);
assertEquals(AbstractJob.Status.CANCELLED, job.getStatus());
job = (TestJob)queue.getQueuedJob(10);
- assertEquals("10\n", job.getResult());
+ assertEquals("10\n", job.getResultObject());
List<AbstractJob> doneJobs = queue.getDoneJobs();
assertEquals(2, doneJobs.size());
check(((TestJob) doneJobs.get(0)), AbstractJob.Status.DONE, null);
@@ -128,7 +128,7 @@
private void check(TestJob job, AbstractJob.Status status, String result) {
assertEquals(status, job.getStatus());
if (result != null) {
- assertEquals(result + "\n", job.getResult());
+ assertEquals(result + "\n", job.getResultObject());
}
}
}
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/TestJob.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/TestJob.java
index ed9b98b..ec40236 100644
--- a/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/TestJob.java
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/TestJob.java
@@ -6,7 +6,7 @@
import java.io.File;
-public class TestJob extends AbstractCommandLineJob {
+public class TestJob extends AbstractCommandLineJob<String> {
private Logger log = LoggerFactory.getLogger(TestJob.class);
private int time;
private File counterScript;
@@ -34,11 +34,4 @@
commandLine.addArgument(String.valueOf(this.failOn));
return commandLine;
}
-
- @Override
- protected void afterFailure(Exception ex) {
- if (failOn < 0 && getStatus() != Status.CANCELLED) {
- log.error("Error while executing script '" + getCommandLineAsString() + "': " + ex.getMessage(), ex);
- }
- }
}
--
Gitblit v1.10.0