def get_timedout_locks(): "Get list of stale locks from all sites" old_locks=[] for site in frappe.utils.get_sites(): locksdir = os.path.join(site, 'locks') for lock in os.listdir(locksdir): lock_path = os.path.join(locksdir, lock) try: check_lock(lock_path) except LockTimeoutError: old_locks.append(lock_path) return old_locks
def trigger(site, event, now=False): """trigger method in startup.schedule_handler""" from frappe.tasks import scheduler_task for handler in frappe.get_hooks("scheduler_events").get(event, []): if not check_lock(handler): if not now: scheduler_task.delay(site=site, event=event, handler=handler) else: scheduler_task(site=site, event=event, handler=handler, now=True)
def enqueue_scheduler_events(): for site in get_sites(): enqueue_lock = os.path.join(site, 'locks', 'enqueue.lock') try: if check_lock(enqueue_lock, timeout=1800): continue touch_file(enqueue_lock) enqueue_events_for_site.delay(site=site) except LockTimeoutError: os.remove(enqueue_lock)