From 80406d66f759065c0dae7aea332f847c65c77001 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 05 Jan 2019 21:02:13 +0000
Subject: [PATCH] Job monitor...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java  |    3 +++
 borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java     |   16 ++++++++--------
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java |    4 +++-
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
index 6e429bf..e4dc1a8 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
@@ -42,7 +42,9 @@
     public List<BorgJob<?>> getJobListCopy(String repo) {
         JobQueue<String> origQueue = getQueue(repo);
         List<BorgJob<?>> jobList = new ArrayList<>();
-        for (AbstractJob<String> origJob : origQueue.getQueue()) {
+        Iterator<AbstractJob<String>> it = origQueue.getQueueIterator();
+        while (it.hasNext()) {
+            AbstractJob<String> origJob = it.next();
             if (!(origJob instanceof BorgJob)) {
                 log.error("Oups, only BorgJobs are supported. Ignoring unexpected job: " + origJob.getClass());
                 continue;
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 54647bf..8b6e8e8 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
@@ -26,6 +26,9 @@
     @Getter(AccessLevel.PACKAGE)
     @Setter(AccessLevel.PACKAGE)
     private Future<JobResult<T>> future;
+    @Getter
+    @Setter(AccessLevel.PACKAGE)
+    private long uniqueJobNumber;
 
     public void cancel() {
         if (this.getStatus() == Status.QUEUED) {
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 7ce762e..5e5a95c 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
@@ -1,6 +1,5 @@
 package de.micromata.borgbutler.jobs;
 
-import lombok.Getter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -11,20 +10,22 @@
 
 public class JobQueue<T> {
     private static final int MAX_DONE_JOBS_SIZE = 50;
+    private static long jobSequence = 0;
     private Logger log = LoggerFactory.getLogger(JobQueue.class);
-    @Getter
     private List<AbstractJob<T>> queue = new ArrayList<>();
     private List<AbstractJob<T>> doneJobs = new LinkedList<>();
     private ExecutorService executorService = Executors.newSingleThreadExecutor();
 
+    private  static synchronized void setNextJobId(AbstractJob<?> job) {
+        job.setUniqueJobNumber(jobSequence++);
+    }
+
     public int getQueueSize() {
         return queue.size();
     }
 
-    public List<AbstractJob<T>> getDoneJobs() {
-        synchronized (doneJobs) {
-            return Collections.unmodifiableList(doneJobs);
-        }
+    public Iterator<AbstractJob<T>> getQueueIterator() {
+        return Collections.unmodifiableList(queue).iterator();
     }
 
     /**
@@ -41,6 +42,7 @@
                     return queuedJob;
                 }
             }
+            setNextJobId(job);
             queue.add(job.setStatus(AbstractJob.Status.QUEUED));
         }
         job.setFuture(executorService.submit(new CallableTask(job)));
@@ -79,8 +81,6 @@
                 }
             }
         }
-
-
     }
 
     private class CallableTask implements Callable<JobResult<T>> {

--
Gitblit v1.10.0