def handle(self, *args, **options): """ Iterates over all the CRON_CLASSES (or if passed in as a commandline argument) and runs them. """ if args: cron_class_names = args else: cron_class_names = getattr(settings, 'CRON_CLASSES', []) try: crons_to_run = [get_class(x) for x in cron_class_names] except Exception: error = traceback.format_exc() self.stdout.write( 'Make sure these are valid cron class names: %s\n%s' % (cron_class_names, error)) return for cron_class in crons_to_run: run_cron_with_cache_check(cron_class, force=options['force'], silent=options['silent']) clear_old_log_entries() close_connection()
def handle(self, *args, **options): """ Iterates over all the CRON_CLASSES (or if passed in as a commandline argument) and runs them. """ if args: cron_class_names = args else: cron_class_names = getattr(settings, 'CRON_CLASSES', []) try: crons_to_run = [get_class(x) for x in cron_class_names] except Exception: error = traceback.format_exc() self.stdout.write('Make sure these are valid cron class names: %s\n%s' % (cron_class_names, error)) raise for cron_class in crons_to_run: run_cron_with_cache_check( cron_class, force=options['force'], silent=options['silent'] ) clear_old_log_entries() close_connection()
def do(self): crons_to_check = [get_class(x) for x in settings.CRON_CLASSES] emails = [admin[1] for admin in settings.ADMINS] failed_runs_cronjob_email_prefix = getattr( settings, 'FAILED_RUNS_CRONJOB_EMAIL_PREFIX', '') for cron in crons_to_check: min_failures = getattr(cron, 'MIN_NUM_FAILURES', 10) jobs = CronJobLog.objects.filter( code=cron.code).order_by('-end_time')[:min_failures] failures = 0 message = '' for job in jobs: if not job.is_success: failures += 1 message += 'Job ran at %s : \n\n %s \n\n' % ( job.start_time, job.message) if failures >= min_failures: send_mail( '%s%s failed %s times in a row!' % ( failed_runs_cronjob_email_prefix, cron.code, min_failures, ), message, settings.DEFAULT_FROM_EMAIL, emails)
def do(self): crons_to_check = [get_class(x) for x in settings.CRON_CLASSES] emails = [admin[1] for admin in settings.ADMINS] failed_runs_cronjob_email_prefix = getattr(settings, 'FAILED_RUNS_CRONJOB_EMAIL_PREFIX', '') for cron in crons_to_check: min_failures = getattr(cron, 'MIN_NUM_FAILURES', 10) jobs = CronJobLog.objects.filter(code=cron.code).order_by('-end_time')[:min_failures] failures = 0 message = '' for job in jobs: if not job.is_success: failures += 1 message += 'Job ran at %s : \n\n %s \n\n' % (job.start_time, job.message) if failures >= min_failures: send_mail( '%s%s failed %s times in a row!' % ( failed_runs_cronjob_email_prefix, cron.code, min_failures, ), message, settings.DEFAULT_FROM_EMAIL, emails )
def handle(self, *args, **options): """ Iterates over all the CRON_CLASSES (or if passed in as a commandline argument) and runs them. """ if not options['silent']: self.stdout.write("Running Crons\n") self.stdout.write("{0}\n".format("=" * 40)) cron_classes = options['cron_classes'] if cron_classes: cron_class_names = cron_classes else: cron_class_names = getattr(settings, 'CRON_CLASSES', []) try: crons_to_run = [get_class(x) for x in cron_class_names] except ImportError: error = traceback.format_exc() self.stdout.write('ERROR: Make sure these are valid cron class names: %s\n\n%s' % (cron_class_names, error)) return for cron_class in crons_to_run: run_cron_with_cache_check( cron_class, force=options['force'], silent=options['silent'], dry_run=options['dry_run'], stdout=self.stdout ) clear_old_log_entries() close_connection()
def do(self): CRONS_TO_CHECK = map(lambda x: get_class(x), settings.CRON_CLASSES) EMAILS = [admin[1] for admin in settings.ADMINS] try: FAILED_RUNS_CRONJOB_EMAIL_PREFIX = settings.FAILED_RUNS_CRONJOB_EMAIL_PREFIX except: FAILED_RUNS_CRONJOB_EMAIL_PREFIX = '' for cron in CRONS_TO_CHECK: try: min_failures = cron.MIN_NUM_FAILURES except AttributeError: min_failures = 10 failures = 0 jobs = CronJobLog.objects.filter(code=cron.code).order_by('-end_time')[:min_failures] message = '' for job in jobs: if not job.is_success: failures += 1 message += 'Job ran at %s : \n\n %s \n\n' % (job.start_time, job.message) if failures == min_failures: send_mail( '%s%s failed %s times in a row!' % (FAILED_RUNS_CRONJOB_EMAIL_PREFIX, cron.code, \ min_failures), message, settings.DEFAULT_FROM_EMAIL, EMAILS )
def do(self): self.config = self.get_config() cron_classes = [get_class(c_name) for c_name in settings.CRON_CLASSES] cron_classes = [c for c in cron_classes if not isinstance(self, c)] for cron_cls in cron_classes: self.check_for_failures(cron_cls)
def test_cron_classes_to_run(self): """ Asserts that a cron class name can be imported using the canonical name given in project settings """ cron_class_names = getattr(settings, 'CRON_CLASSES', []) for cron_class_name in cron_class_names: assert get_class(cron_class_name)
def handle(self, *args, **options): """ Iterates over all the CRON_CLASSES (or if passed in as a commandline argument) and runs them. """ cron_classes = options['cron_classes'] if cron_classes: cron_class_names = cron_classes else: cron_class_names = getattr(settings, 'CRON_CLASSES', []) try: crons_to_run = [get_class(x) for x in cron_class_names] except Exception: error = traceback.format_exc() self.stdout.write( 'Make sure these are valid cron class names: %s\n%s' % (cron_class_names, error)) return threads = [] for cron_class in crons_to_run: if getattr(settings, 'DJANGO_CRON_MULTITHREADED', False): # # run all cron jobs in parallel as thread th = threading.Thread(target=run_cron_with_cache_check, kwargs={ "cron_class": cron_class, "force": options['force'], "silent": options['silent'] }) th.start() threads.append(th) else: run_cron_with_cache_check(cron_class, force=options['force'], silent=options['silent']) for th in threads: th.join() clear_old_log_entries() close_old_connections()
def handle(self, *args, **options): """ Iterates over all the CRON_CLASSES (or if passed in as a commandline argument) and runs them. """ cron_classes = options['cron_classes'] if cron_classes: cron_class_names = cron_classes else: cron_class_names = getattr(settings, 'CRON_CLASSES', []) try: crons_to_run = [get_class(x) for x in cron_class_names] except Exception: error = traceback.format_exc() self.stdout.write('Make sure these are valid cron class names: %s\n%s' % (cron_class_names, error)) return threads = [] for cron_class in crons_to_run: if getattr(settings,'DJANGO_CRON_MULTITHREADED',False): ## run all cron jobs in parallel as thread th = threading.Thread( target = run_cron_with_cache_check, kwargs={ "cron_class":cron_class, "force":options['force'], "silent":options['silent'] } ) th.start() threads.append(th) else: run_cron_with_cache_check( cron_class, force=options['force'], silent=options['silent'] ) for th in threads: th.join() clear_old_log_entries() close_old_connections()
def handle(self, *args, **options): """ Iterates over all the CRON_CLASSES (or if passed in as a commandline argument) and runs them. """ if args: cron_class_names = args else: cron_class_names = getattr(settings, 'CRON_CLASSES', []) try: crons_to_run = map(lambda x: get_class(x), cron_class_names) except: error = traceback.format_exc() print('Make sure these are valid cron class names: %s\n%s' % (cron_class_names, error)) sys.exit() for cron_class in crons_to_run: run_cron_with_cache_check(cron_class, force=options['force'], silent=options['silent']) close_old_connections()
def do(self): CRONS_TO_CHECK = map(lambda x: get_class(x), settings.CRON_CLASSES) EMAILS = [admin[1] for admin in settings.ADMINS] try: FAILED_RUNS_CRONJOB_EMAIL_PREFIX = settings.FAILED_RUNS_CRONJOB_EMAIL_PREFIX except: FAILED_RUNS_CRONJOB_EMAIL_PREFIX = '' for cron in CRONS_TO_CHECK: try: min_failures = cron.MIN_NUM_FAILURES except AttributeError: min_failures = 10 failures = 0 jobs = CronJobLog.objects.filter( code=cron.code).order_by('-end_time')[:min_failures] message = '' for job in jobs: if not job.is_success: failures += 1 message += 'Job ran at %s : \n\n %s \n\n' % ( job.start_time, job.message) if failures == min_failures: send_mail( '%s%s failed %s times in a row!' % (FAILED_RUNS_CRONJOB_EMAIL_PREFIX, cron.code, \ min_failures), message, settings.DEFAULT_FROM_EMAIL, EMAILS )