Update of /var/cvs/applications/crontab/src/org/mmbase/applications/crontab
In directory james.mmbase.org:/tmp/cvs-serv7427
Modified Files:
CronEntry.java Interruptable.java
Log Message:
MMB-1677
See also:
http://cvs.mmbase.org/viewcvs/applications/crontab/src/org/mmbase/applications/crontab
See also: http://www.mmbase.org/jira/browse/MMB-1677
Index: CronEntry.java
===================================================================
RCS file:
/var/cvs/applications/crontab/src/org/mmbase/applications/crontab/CronEntry.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- CronEntry.java 23 Feb 2007 10:52:10 -0000 1.10
+++ CronEntry.java 14 Jul 2008 13:51:36 -0000 1.11
@@ -18,7 +18,7 @@
*
* @author Kees Jongenburger
* @author Michiel Meeuwissen
- * @version $Id: CronEntry.java,v 1.10 2007/02/23 10:52:10 michiel Exp $
+ * @version $Id: CronEntry.java,v 1.11 2008/07/14 13:51:36 michiel Exp $
*/
public class CronEntry {
@@ -65,10 +65,12 @@
private final String id;
private final String name;
private final String className;
- private final String cronTime;
+ protected final String cronTime;
private String configuration = null;
- private int count = 0;
+ protected Date lastRun = new Date(0);
+ protected int count = 0;
+ protected int lastCost = -1;
private final CronEntryField second = new CronEntryField(); // 0-59
private final CronEntryField minute = new CronEntryField(); // 0-59
@@ -162,12 +164,19 @@
}
public boolean kick() {
+ final Date start = new Date();
+ Runnable ready = new Runnable() {
+ public void run() {
+ CronEntry.this.incCount();
+ CronEntry.this.setLastCost((int) (new Date().getTime() -
start.getTime()));
+ }
+ };
switch (type) {
case SHORT_JOB_TYPE :
{
- count++;
try {
- Interruptable thread = new Interruptable(cronJob,
threads);
+ setLastRun(new Date());
+ Interruptable thread = new Interruptable(cronJob,
threads, ready);
thread.run();
} catch (Throwable t) {
log.error("Error during cron-job " + this +" : " +
t.getClass().getName() + " " + t.getMessage() + "\n" + Logging.stackTrace(t));
@@ -181,8 +190,8 @@
// fall through
case CANBEMORE_JOB_TYPE :
default :
- count++;
- Interruptable thread = new Interruptable(cronJob, threads);
+ setLastRun(start);
+ Interruptable thread = new Interruptable(cronJob, threads,
ready);
org.mmbase.util.ThreadPools.jobsExecutor.execute(thread);
return true;
}
@@ -228,6 +237,26 @@
public String getClassName() {
return className;
}
+ public Date getLastRun() {
+ return lastRun;
+ }
+
+ protected void setLastRun(Date d) {
+ lastRun = d;
+ setLastCost(-1);
+ }
+ public int getCount() {
+ return count;
+ }
+ protected void incCount() {
+ count++;
+ }
+ public int getLastCost() {
+ return lastCost;
+ }
+ protected void setLastCost(int s) {
+ lastCost = s;
+ }
boolean mustRun(Date date) {
String machineName = MMBase.getMMBase().getMachineName();
Index: Interruptable.java
===================================================================
RCS file:
/var/cvs/applications/crontab/src/org/mmbase/applications/crontab/Interruptable.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- Interruptable.java 11 Jun 2007 12:30:53 -0000 1.4
+++ Interruptable.java 14 Jul 2008 13:51:36 -0000 1.5
@@ -15,7 +15,7 @@
* if the job does sleeps (InterruptedException) or check
Thread.isInterrupted().
* @author Michiel Meeuwissen
* @since MMBase-1.8
- * @version $Id: Interruptable.java,v 1.4 2007/06/11 12:30:53 michiel Exp $
+ * @version $Id: Interruptable.java,v 1.5 2008/07/14 13:51:36 michiel Exp $
*/
public class Interruptable implements Runnable {
@@ -24,15 +24,21 @@
private Date startTime;
private final Runnable runnable;
private final Collection<Interruptable> collection;
+ private final Runnable ready;
+
+ public Interruptable(Runnable run, Collection<Interruptable> col) {
+ this(run, col, null);
+ }
/**
* @param run The runnable wrapped by this Interrupted, which is to be
executed in [EMAIL PROTECTED] #run}.
* @param col A modifiable collection or <code>null</code> If not null,
this interruptable is
* added to it just before running, and removed from it just
after running.
*/
- public Interruptable(Runnable run, Collection<Interruptable> col) {
+ public Interruptable(Runnable run, Collection<Interruptable> col, Runnable
r) {
runnable = run;
collection = col;
+ ready = r;
}
public void run() {
@@ -42,6 +48,7 @@
startTime = new Date();
try {
runnable.run();
+ if (ready != null) ready.run();
} catch (Throwable t) {
log.error(t.getMessage(), t);
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs