[Erp5-report] r11530 - in /erp5/trunk/products/ERP5: Document/ Tool/ tests/
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Nov 30 11:29:54 CET 2006
Author: seb
Date: Thu Nov 30 11:29:52 2006
New Revision: 11530
URL: http://svn.erp5.org?rev=11530&view=rev
Log:
- Alarm use mysql in order to store the next alarm date, this prevent the zodb to grow
again and again
- the algorithm was very poor while calculatint the next alarm date,
make it up to 1440 times faster
- modify a bit the test in order to take into account changes,
thanks to changes, the test is going 4 to 5 times faster
Modified:
erp5/trunk/products/ERP5/Document/Alarm.py
erp5/trunk/products/ERP5/Document/Periodicity.py
erp5/trunk/products/ERP5/Tool/AlarmTool.py
erp5/trunk/products/ERP5/tests/testAlarm.py
Modified: erp5/trunk/products/ERP5/Document/Alarm.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/Alarm.py?rev=11530&r1=11529&r2=11530&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/Alarm.py (original)
+++ erp5/trunk/products/ERP5/Document/Alarm.py Thu Nov 30 11:29:52 2006
@@ -94,10 +94,7 @@
# Set the new date
LOG('activeSense, self.getPath()',0,self.getPath())
- #self.setStartDate(DateTime())
- #self.setStopDate(DateTime())
self.setNextAlarmDate()
- self.reindexObject()
method_id = self.getActiveSenseMethodId()
if method_id is not None:
method = getattr(self.activate(),method_id)
Modified: erp5/trunk/products/ERP5/Document/Periodicity.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/Periodicity.py?rev=11530&r1=11529&r2=11530&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/Periodicity.py (original)
+++ erp5/trunk/products/ERP5/Document/Periodicity.py Thu Nov 30 11:29:52 2006
@@ -90,8 +90,14 @@
# This is usefull to set the current date as parameter for
# unit testing, by default it should be now
current_date = DateTime()
+ if next_start_date is None:
+ next_start_date = current_date
if next_start_date > current_date:
return
+ else:
+ # Make sure the old date is not too far away
+ nb_days = int(current_date-next_start_date)
+ next_start_date = next_start_date + nb_days
def validateMinute(self,date, previous_date):
periodicity_minute_frequency = self.getPeriodicityMinuteFrequency()
@@ -156,14 +162,26 @@
previous_date = next_start_date
next_start_date = addToDate(next_start_date,minute=1)
- while not(next_start_date >= current_date \
- and validateMinute(self,next_start_date, previous_date) \
- and validateHour(self,next_start_date) \
- and validateDay(self,next_start_date) \
- and validateWeek(self,next_start_date) \
- and validateMonth(self,next_start_date)):
- next_start_date = addToDate(next_start_date,minute=1)
- self.setAlarmDate(next_start_date)
+ while 1:
+ validate_minute = validateMinute(self,next_start_date, previous_date)
+ validate_hour = validateHour(self,next_start_date)
+ validate_day = validateDay(self,next_start_date)
+ validate_week = validateWeek(self,next_start_date)
+ validate_month = validateMonth(self,next_start_date)
+ if (next_start_date >= current_date \
+ and validate_minute and validate_hour and validate_day \
+ and validate_week and validate_month):
+ break
+ else:
+ if not(validate_minute):
+ next_start_date = addToDate(next_start_date,minute=1)
+ else:
+ if not(validate_hour):
+ next_start_date = addToDate(next_start_date,hour=1)
+ else:
+ if not(validate_day and validate_week and validate_month):
+ next_start_date = addToDate(next_start_date,day=1)
+ self.Alarm_zUpdateAlarmDate(uid=self.getUid(),alarm_date=next_start_date)
security.declareProtected(Permissions.View, 'getAlarmDate')
@@ -171,9 +189,16 @@
"""
returns something like ['Sunday','Monday',...]
"""
- alarm_date = self._baseGetAlarmDate()
- if alarm_date is None:
- alarm_date = self.getPeriodicityStartDate()
+ #alarm_date = self._baseGetAlarmDate()
+ #if alarm_date is None:
+ # alarm_date = self.getPeriodicityStartDate()
+ alarm_date=None
+ result_list = self.Alarm_zGetAlarmDate(uid=self.getUid())
+ if len(result_list)==1:
+ alarm_date = result_list[0].alarm_date
+ periodicity_start_date = self.getPeriodicityStartDate()
+ if alarm_date < periodicity_start_date:
+ alarm_date = periodicity_start_date
return alarm_date
Modified: erp5/trunk/products/ERP5/Tool/AlarmTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/AlarmTool.py?rev=11530&r1=11529&r2=11530&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/AlarmTool.py (original)
+++ erp5/trunk/products/ERP5/Tool/AlarmTool.py Thu Nov 30 11:29:52 2006
@@ -109,19 +109,10 @@
user = self.portal_catalog.getOwner()
newSecurityManager(self.REQUEST, user)
if to_active:
- now = str(DateTime())
- date_expression = '<= %s' % now
- catalog_search = self.portal_catalog(portal_type = \
- self.getPortalAlarmTypeList(), alarm_date = date_expression)
- else:
- catalog_search = self.portal_catalog(portal_type = \
- self.getPortalAlarmTypeList())
- alarm_list = map(lambda x:x.getObject(),catalog_search)
- if to_active:
now = DateTime()
- date_expression = '<= %s' % str(now)
catalog_search = self.portal_catalog(
- portal_type = self.getPortalAlarmTypeList(), alarm_date=date_expression
+ portal_type = self.getPortalAlarmTypeList(),
+ alarm_date={'query':now,'range':'ngt'}
)
# check again the alarm date in case the alarm was not yet reindexed
alarm_list = [x.getObject() for x in catalog_search \
@@ -130,7 +121,7 @@
catalog_search = self.portal_catalog(
portal_type = self.getPortalAlarmTypeList()
)
- alarm_list = map(lambda x:x.getObject(),catalog_search)
+ alarm_list = [x.getObject() for x in catalog_search]
return alarm_list
security.declareProtected(Permissions.ModifyPortalContent, 'tic')
Modified: erp5/trunk/products/ERP5/tests/testAlarm.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testAlarm.py?rev=11530&r1=11529&r2=11530&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testAlarm.py (original)
+++ erp5/trunk/products/ERP5/tests/testAlarm.py Thu Nov 30 11:29:52 2006
@@ -129,6 +129,8 @@
ZopeTestCase._print('\n%s ' % message)
LOG('Testing... ',0,message)
alarm = self.newAlarm()
+ get_transaction().commit()
+ self.tic()
now = DateTime()
date = addToDate(now,day=1)
alarm.setPeriodicityStartDate(date)
@@ -147,6 +149,8 @@
date = addToDate(now,day=2)
alarm.setPeriodicityStartDate(date)
alarm.setPeriodicityHourFrequency(1)
+ get_transaction().commit()
+ self.tic()
alarm.setNextAlarmDate(current_date=now)
self.assertEquals(alarm.getAlarmDate(),date)
LOG(message + ' now :',0,now)
@@ -173,6 +177,8 @@
date = addToDate(now,day=2)
alarm.setPeriodicityStartDate(date)
alarm.setPeriodicityHourFrequency(3)
+ get_transaction().commit()
+ self.tic()
alarm.setNextAlarmDate(current_date=now)
self.assertEquals(alarm.getAlarmDate(),date)
LOG(message + ' now :',0,now)
@@ -202,6 +208,8 @@
hour_list = (6,10,15,21)
alarm.setPeriodicityStartDate(now)
alarm.setPeriodicityHourList(hour_list)
+ get_transaction().commit()
+ self.tic()
self.assertEquals(alarm.getAlarmDate(),right_first_date)
alarm.setNextAlarmDate(current_date=right_first_date)
self.assertEquals(alarm.getAlarmDate(),right_second_date)
@@ -225,6 +233,8 @@
alarm.setPeriodicityStartDate(now)
alarm.setPeriodicityDayFrequency(1)
alarm.setPeriodicityHourList((10,))
+ get_transaction().commit()
+ self.tic()
self.assertEquals(alarm.getAlarmDate(),right_first_date)
alarm.setNextAlarmDate(current_date=right_first_date)
self.assertEquals(alarm.getAlarmDate(),right_second_date)
@@ -247,6 +257,8 @@
alarm.setPeriodicityStartDate(right_first_date)
alarm.setPeriodicityDayFrequency(3)
alarm.setPeriodicityHourList((14,15,17))
+ get_transaction().commit()
+ self.tic()
self.assertEquals(alarm.getAlarmDate(),right_first_date)
alarm.setNextAlarmDate(current_date=right_first_date)
self.assertEquals(alarm.getAlarmDate(),right_second_date)
@@ -268,6 +280,8 @@
right_third_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,1,6,00,00))
right_fourth_date = DateTime('%i/%i/%i %i:%i:%d' % (2004,10,1,15,00,00))
alarm = self.newAlarm()
+ get_transaction().commit()
+ self.tic()
alarm.setPeriodicityStartDate(right_first_date)
alarm.setPeriodicityWeekDayList(('Monday','Friday'))
alarm.setPeriodicityHourList((6,15))
@@ -307,6 +321,8 @@
alarm.setPeriodicityStartDate(right_first_date)
alarm.setPeriodicityMonthDayList((1,15))
alarm.setPeriodicityHourList((12,14))
+ get_transaction().commit()
+ self.tic()
self.checkDate(alarm, right_first_date, right_second_date, right_third_date, right_fourth_date)
def test_10_OnceEvery2Month(self, quiet=0, run=run_all_test):
@@ -325,6 +341,8 @@
alarm.setPeriodicityMonthDayList((1,))
alarm.setPeriodicityMonthFrequency(2)
alarm.setPeriodicityHourList((6,))
+ get_transaction().commit()
+ self.tic()
self.checkDate(alarm, right_first_date, right_second_date, right_third_date)
def test_11_EveryDayOnceWeek41And42(self, quiet=0, run=run_all_test):
@@ -342,6 +360,8 @@
alarm.setPeriodicityStartDate(right_first_date)
alarm.setPeriodicityHourList((6,))
alarm.setPeriodicityWeekList((41,43))
+ get_transaction().commit()
+ self.tic()
self.checkDate(alarm, right_first_date, right_second_date, right_third_date,right_fourth_date)
def test_12_Every5Minutes(self, quiet=0, run=run_all_test):
@@ -357,6 +377,8 @@
date = addToDate(now,day=2)
alarm.setPeriodicityStartDate(date)
alarm.setPeriodicityMinuteFrequency(5)
+ get_transaction().commit()
+ self.tic()
alarm.setNextAlarmDate(current_date=now)
self.assertEquals(alarm.getAlarmDate(),date)
LOG(message + ' now :',0,now)
More information about the Erp5-report
mailing list