The algorithm in addDailyAction in Scheduler.py is broken. I wrote a little test script to exercise the algorithm for various cases and this is the result:
Start time: 00:00 (12:00am) Current time: 23:01 (11:01pm) Expected delay: 0:59 Computed delay - 1:59 Current time: 23:59 (11:59pm) Expected delay: 0:01 Computed delay - 1:01 Current time: 00:01 (12:01am) Expected delay: 23:59 Computed delay - 0:59 Current time: 00:59 (12:59am) Expected delay: 23:01 Computed delay - 0:01 Start time: 00:30 (12:30am) Current time: 23:01 (11:01pm) Expected delay: 1:29 Computed delay - 1:29 Current time: 23:59 (11:59pm) Expected delay: 0:31 Computed delay - 1:31 Current time: 00:01 (12:01am) Expected delay: 00:29 Computed delay - 0:29 Current time: 00:59 (12:59am) Expected delay: 23:31 Computed delay - 0:31 The attached patch corrects the problem. brett
Index: Scheduler.py =================================================================== RCS file: /cvsroot/webware/Webware/TaskKit/Scheduler.py,v retrieving revision 1.11 diff -u -3 -p -r1.11 Scheduler.py --- Scheduler.py 22 Oct 2002 18:46:56 -0000 1.11 +++ Scheduler.py 12 Aug 2003 21:54:42 -0000 @@ -206,21 +206,34 @@ class Scheduler(Thread): currHour = current[3] currMin = current[4] - #minute difference - if minute > currMin: - minuteDifference = minute - currMin - elif minute < currMin: - minuteDifference = 60 - currMin + minute - else: #equal - minuteDifference = 0 - - #hourDifference if hour > currHour: hourDifference = hour - currHour + if minute > currMin: + minuteDifference = minute - currMin + elif minute < currMin: + minuteDifference = 60 - currMin + minute + hourDifference -= 1 + else: + minuteDifference = 0 elif hour < currHour: hourDifference = 24 - currHour + hour - else: #equal - hourDifference = 0 + if minute > currMin: + minuteDifference = minute - currMin + elif minute < currMin: + minuteDifference = 60 - currMin + minute + hourDifference -= 1 + else: + minuteDifference = 0 + else: + if minute > currMin: + hourDifference = 0 + minuteDifference = minute - currMin + elif minute < currMin: + minuteDifference = 60 - currMin + minute + hourDifference = 23 + else: + hourDifference = 0 + minuteDifference = 0 delay = (minuteDifference + (hourDifference * 60)) * 60 self.addPeriodicAction(time.time()+delay, 24*60*60, task, name)