def do(self): CRONS_TO_CHECK = map(lambda x: get_class(x), settings.CRON_CLASSES) 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: subject = '%s%s failed %s times in a row!' %\ (FAILED_RUNS_CRONJOB_EMAIL_PREFIX, cron.code, min_failures) from_addr = settings.DEFAULT_FROM_EMAIL, to_addrs = [admin[1] for admin in settings.ADMINS] send_mail(subject, message, from_addr, to_addrs, fail_silently = settings.DEBUG)
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): 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] for job in jobs: if not job.is_success: failures += 1 if failures == min_failures: send_mail( '%s%s failed %s times in a row' % (FAILED_RUNS_CRONJOB_EMAIL_PREFIX, cron.code, min_failures), 'Latest cron job was ran %s \n\n Error reason: \n\n %s' % (job.end_time, job.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 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_connection()