comparison pylons_app/lib/celerylib/tasks.py @ 497:fb0c3af6031b celery

Implemented locking for task, to prevent for running the same tasks, moved out pidlock library. Added dirsize display
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 23 Sep 2010 01:08:33 +0200
parents 2256c78afe53
children ac32a026c306
comparison
equal deleted inserted replaced
496:47f4c7ff245b 497:fb0c3af6031b
1 from celery.decorators import task 1 from celery.decorators import task
2 from celery.task.sets import subtask 2 from celery.task.sets import subtask
3 from celeryconfig import PYLONS_CONFIG as config 3 from celeryconfig import PYLONS_CONFIG as config
4 from pylons.i18n.translation import _ 4 from pylons.i18n.translation import _
5 from pylons_app.lib.celerylib import run_task 5 from pylons_app.lib.celerylib import run_task, LockTask
6 from pylons_app.lib.helpers import person 6 from pylons_app.lib.helpers import person
7 from pylons_app.lib.smtp_mailer import SmtpMailer 7 from pylons_app.lib.smtp_mailer import SmtpMailer
8 from pylons_app.lib.utils import OrderedDict 8 from pylons_app.lib.utils import OrderedDict
9 from operator import itemgetter 9 from operator import itemgetter
10 from vcs.backends.hg import MercurialRepository 10 from vcs.backends.hg import MercurialRepository
66 return settings 66 return settings
67 67
68 @task 68 @task
69 def whoosh_index(repo_location, full_index): 69 def whoosh_index(repo_location, full_index):
70 log = whoosh_index.get_logger() 70 log = whoosh_index.get_logger()
71 from pylons_app.lib.indexers import DaemonLock 71 from pylons_app.lib.pidlock import DaemonLock
72 from pylons_app.lib.indexers.daemon import WhooshIndexingDaemon, LockHeld 72 from pylons_app.lib.indexers.daemon import WhooshIndexingDaemon, LockHeld
73 try: 73 try:
74 l = DaemonLock() 74 l = DaemonLock()
75 WhooshIndexingDaemon(repo_location=repo_location)\ 75 WhooshIndexingDaemon(repo_location=repo_location)\
76 .run(full_index=full_index) 76 .run(full_index=full_index)
78 return 'Done' 78 return 'Done'
79 except LockHeld: 79 except LockHeld:
80 log.info('LockHeld') 80 log.info('LockHeld')
81 return 'LockHeld' 81 return 'LockHeld'
82 82
83
83 @task 84 @task
85 @LockTask('get_commits_stats')
84 def get_commits_stats(repo_name, ts_min_y, ts_max_y): 86 def get_commits_stats(repo_name, ts_min_y, ts_max_y):
85 author_key_cleaner = lambda k: person(k).replace('"', "") #for js data compatibilty 87 author_key_cleaner = lambda k: person(k).replace('"', "") #for js data compatibilty
86 88
87 from pylons_app.model.db import Statistics, Repository 89 from pylons_app.model.db import Statistics, Repository
88 log = get_commits_stats.get_logger() 90 log = get_commits_stats.get_logger()
90 commits_by_day_aggregate = {} 92 commits_by_day_aggregate = {}
91 repos_path = get_hg_ui_settings()['paths_root_path'].replace('*', '') 93 repos_path = get_hg_ui_settings()['paths_root_path'].replace('*', '')
92 repo = MercurialRepository(repos_path + repo_name) 94 repo = MercurialRepository(repos_path + repo_name)
93 95
94 skip_date_limit = True 96 skip_date_limit = True
95 parse_limit = 500 #limit for single task changeset parsing 97 parse_limit = 350 #limit for single task changeset parsing
96 last_rev = 0 98 last_rev = 0
97 last_cs = None 99 last_cs = None
98 timegetter = itemgetter('time') 100 timegetter = itemgetter('time')
99 101
100 sa = get_session() 102 sa = get_session()
203 sa.commit() 205 sa.commit()
204 except: 206 except:
205 log.error(traceback.format_exc()) 207 log.error(traceback.format_exc())
206 sa.rollback() 208 sa.rollback()
207 return False 209 return False
208 210
211 run_task(get_commits_stats, repo_name, ts_min_y, ts_max_y)
212
209 return True 213 return True
210 214
211 @task 215 @task
212 def reset_user_password(user_email): 216 def reset_user_password(user_email):
213 log = reset_user_password.get_logger() 217 log = reset_user_password.get_logger()