Esempio n. 1
0
    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()
Esempio n. 2
0
    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()
Esempio n. 3
0
    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)
Esempio n. 4
0
    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
                )
Esempio n. 5
0
    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()
Esempio n. 6
0
File: cron.py Progetto: LinasKo/FFT
    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
                )
Esempio n. 7
0
    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)
Esempio n. 9
0
    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()
Esempio n. 10
0
    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()
Esempio n. 11
0
    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()
Esempio n. 12
0
    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()
Esempio n. 13
0
    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
                )