equal
deleted
inserted
replaced
1 """core hooks""" |
1 """core hooks |
|
2 |
|
3 :organization: Logilab |
|
4 :copyright: 2009-2010 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2. |
|
5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
|
6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
|
7 """ |
|
8 __docformat__ = "restructuredtext en" |
|
9 |
|
10 from datetime import timedelta, datetime |
|
11 from cubicweb.server import hook |
|
12 |
|
13 class ServerStartupHook(hook.Hook): |
|
14 """task to cleanup expirated auth cookie entities""" |
|
15 __regid__ = 'cw_cleanup_transactions' |
|
16 events = ('server_startup',) |
|
17 |
|
18 def __call__(self): |
|
19 # XXX use named args and inner functions to avoid referencing globals |
|
20 # which may cause reloading pb |
|
21 lifetime = timedelta(days=self.repo.config['keep-transaction-lifetime']) |
|
22 def cleanup_old_transactions(repo=self.repo, lifetime=lifetime): |
|
23 mindate = datetime.now() - lifetime |
|
24 session = repo.internal_session() |
|
25 try: |
|
26 session.system_sql( |
|
27 'DELETE FROM transaction WHERE tx_time < %(time)s', |
|
28 {'time': mindate}) |
|
29 # cleanup deleted entities |
|
30 session.system_sql( |
|
31 'DELETE FROM deleted_entities WHERE dtime < %(time)s', |
|
32 {'time': mindate}) |
|
33 session.commit() |
|
34 finally: |
|
35 session.close() |
|
36 self.repo.looping_task(60*60*24, cleanup_old_transactions, self.repo) |