From 95b4fe73788ba771dd7311cf5e8e395976fd5db5 Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 12 Jan 2013 18:13:19 +0000 Subject: [PATCH] * jobs.jsp: Add table of pending jobs --- .../net/i2p/router/web/JobQueueHelper.java | 66 ++++++++++++++++--- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java index 723aaa739..7510044fa 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java @@ -12,9 +12,12 @@ import java.util.List; import net.i2p.data.DataHelper; import net.i2p.router.Job; import net.i2p.router.JobStats; +import net.i2p.util.ObjectCounter; public class JobQueueHelper extends HelperBase { + private static final int MAX_JOBS = 50; + public String getJobQueueSummary() { try { if (_out != null) { @@ -44,7 +47,7 @@ public class JobQueueHelper extends HelperBase { int numRunners = _context.jobQueue().getJobs(readyJobs, timedJobs, activeJobs, justFinishedJobs); StringBuilder buf = new StringBuilder(32*1024); - buf.append("

I2P Job Queue

Job runners: ").append(numRunners); + buf.append("

I2P Job Queue


Job runners: ").append(numRunners); buf.append("
\n"); long now = _context.clock().now(); @@ -56,6 +59,7 @@ public class JobQueueHelper extends HelperBase { buf.append(j.toString()).append("\n"); } buf.append("\n"); + buf.append("
Just finished jobs: ").append(justFinishedJobs.size()).append("
    \n"); for (int i = 0; i < justFinishedJobs.size(); i++) { Job j = justFinishedJobs.get(i); @@ -63,20 +67,32 @@ public class JobQueueHelper extends HelperBase { buf.append(j.toString()).append("\n"); } buf.append("
\n"); + buf.append("
Ready/waiting jobs: ").append(readyJobs.size()).append("
    \n"); + ObjectCounter counter = new ObjectCounter(); for (int i = 0; i < readyJobs.size(); i++) { Job j = readyJobs.get(i); + counter.increment(j.getName()); + if (i >= MAX_JOBS) + continue; buf.append("
  1. [waiting "); buf.append(DataHelper.formatDuration2(now-j.getTiming().getStartAfter())); buf.append("]: "); buf.append(j.toString()).append("
  2. \n"); } buf.append("
\n"); - out.flush(); + getJobCounts(buf, counter); + out.write(buf.toString()); + buf.setLength(0); buf.append("
Scheduled jobs: ").append(timedJobs.size()).append("
    \n"); long prev = Long.MIN_VALUE; - for (Job j : timedJobs) { + counter.clear(); + for (int i = 0; i < timedJobs.size(); i++) { + Job j = timedJobs.get(i); + counter.increment(j.getName()); + if (i >= MAX_JOBS) + continue; long time = j.getTiming().getStartAfter() - now; buf.append("
  1. ").append(j.getName()).append(" in "); buf.append(DataHelper.formatDuration2(time)); @@ -88,16 +104,31 @@ public class JobQueueHelper extends HelperBase { buf.append("
  2. \n"); } buf.append("
\n"); + getJobCounts(buf, counter); + out.write(buf.toString()); + buf.setLength(0); - out.flush(); - + buf.append("
Total Job Stats\n"); getJobStats(buf); - - out.flush(); - out.write(buf.toString()); } + /** @since 0.9.5 */ + private static void getJobCounts(StringBuilder buf, ObjectCounter counter) { + List names = new ArrayList(counter.objects()); + if (names.size() < 4) + return; + buf.append("\n" + + "\n"); + } + buf.append("
JobQueued"); + Collections.sort(names, new JobCountComparator(counter)); + for (String name : names) { + buf.append("
").append(name) + .append("").append(counter.count(name)) + .append("
\n"); + } + /** * Render the HTML for the job stats. * Moved from JobQueue @@ -175,4 +206,23 @@ public class JobQueueHelper extends HelperBase { } } + /** @since 0.9.5 */ + private static class JobCountComparator implements Comparator { + private final ObjectCounter _counter; + + public JobCountComparator(ObjectCounter counter) { + _counter = counter; + } + + public int compare(String l, String r) { + // reverse + int lc = _counter.count(l); + int rc = _counter.count(r); + if (lc > rc) + return -1; + if (lc < rc) + return 1; + return l.compareTo(r); + } + } }