Update of /var/cvs/applications/crontab/src/org/mmbase/applications/crontab
In directory james.mmbase.org:/tmp/cvs-serv7169

Modified Files:
      Tag: MMBase-1_8
        CronEntry.java Interruptable.java TestCronJob.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.6.2.1
retrieving revision 1.6.2.2
diff -u -b -r1.6.2.1 -r1.6.2.2
--- CronEntry.java      16 Feb 2007 21:11:44 -0000      1.6.2.1
+++ CronEntry.java      14 Jul 2008 13:43:54 -0000      1.6.2.2
@@ -16,7 +16,7 @@
  *
  * @author Kees Jongenburger
  * @author Michiel Meeuwissen
- * @version $Id: CronEntry.java,v 1.6.2.1 2007/02/16 21:11:44 michiel Exp $
+ * @version $Id: CronEntry.java,v 1.6.2.2 2008/07/14 13:43:54 michiel Exp $
  */
 
 public class CronEntry {
@@ -61,10 +61,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
@@ -94,6 +96,8 @@
         this.cronTime = cronTime;
         this.configuration = configuration;
         this.type = type;
+        setCronTime(cronTime);
+
 
         Runnable runnable = (Runnable) Class.forName(className).newInstance();
         if (! (runnable instanceof CronJob)) {
@@ -101,8 +105,6 @@
         } else {
             cronJob = (CronJob) runnable;
         }
-
-        setCronTime(cronTime);
     }
 
     public void init() {
@@ -144,12 +146,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));
@@ -163,8 +172,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;
         }
@@ -211,6 +220,26 @@
         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) {
         Calendar cal = Calendar.getInstance();
         cal.setTime(date);


Index: Interruptable.java
===================================================================
RCS file: 
/var/cvs/applications/crontab/src/org/mmbase/applications/crontab/Interruptable.java,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -b -r1.2 -r1.2.2.1
--- Interruptable.java  27 Jan 2006 20:35:16 -0000      1.2
+++ Interruptable.java  14 Jul 2008 13:43:54 -0000      1.2.2.1
@@ -23,9 +23,15 @@
     private Date   startTime;
     private final Runnable runnable;
     private final Collection collection;
+    private final Runnable ready;
+
     public Interruptable(Runnable run, Collection col) {
+        this(run, col, null);
+    }
+    public Interruptable(Runnable run, Collection col, Runnable r) {
         runnable = run;
         collection = col;
+        ready = r;
     }
 
     public void run() {
@@ -35,6 +41,7 @@
         startTime = new Date();
         try {
             runnable.run();
+            if (ready != null) ready.run();
         } catch (Throwable t) {
             log.error(t.getMessage(), t);
         }


Index: TestCronJob.java
===================================================================
RCS file: 
/var/cvs/applications/crontab/src/org/mmbase/applications/crontab/TestCronJob.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -b -r1.1 -r1.1.2.1
--- TestCronJob.java    5 Oct 2004 11:32:22 -0000       1.1
+++ TestCronJob.java    14 Jul 2008 13:43:54 -0000      1.1.2.1
@@ -25,7 +25,8 @@
         log.info("found cloud " + cloud.getUser().getIdentifier() + "/" + 
cloud.getUser().getRank());
         try {
             log.info("sleeping");
-            Thread.sleep(130 * 1000);
+            //Thread.sleep(130 * 1000);
+            Thread.sleep(130);
             log.info("sleeped");
         } catch (Exception e) {}
     }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to