示例#1
0
    def validate_config_update(self):
        def validator():
            last_update = file_modified_time(self.config_path)
            if self.last_update_time < last_update:
                self.last_update_time = last_update
                self.start_applications(debug=True)

            # Return sleep seconds
            return abs(self.validate_config_seconds or 15)

        start_system_thread('config_ini_update_validator', validator)
示例#2
0
    def validate_config_update(self):
        def validator():
            last_update = file_modified_time(self.config_path)
            if self.last_update_time < last_update:
                self.last_update_time = last_update
                self.start_applications(debug=True)

            # Return sleep seconds
            return abs(self.validate_config_seconds or 15)

        start_system_thread('config_ini_update_validator', validator)
示例#3
0
    def __init__(self, *args, **kwargs):
        super(BaseJobsManager, self).__init__(*args, **kwargs)

        self.save_reports = asbool(self.settings.get('save_reports', True))
        self.server_domain_name = self.settings.get('server_domain_name')
        self.active = bool(
            not self.server_domain_name
            or self.server_domain_name == DOMAIN_NAME)

        self.domain_names = set(self.settings.get('domain_names', ''))
        self.domain_names.add(DOMAIN_NAME)

        try:
            self.transaction = _import_module('transaction')
        except ImportError:
            self.transaction = None

        if self.active:
            temporary_dir = gettempdir()
            domain_start_filename = 'jobs domain %s started' % DOMAIN_NAME
            domain_start_file_path = join_paths(temporary_dir, domain_start_filename)

            lock_key = 'jobs monitor start check'
            self.config.cache.lock(lock_key, timeout=10)

            try:
                start_thread = not isfile(domain_start_file_path)
                if not start_thread:
                    try:
                        with open(domain_start_file_path, 'r') as f:
                            process_id = int(f.read())
                    except (IOError, ValueError):
                        start_thread = True
                    else:
                        try:
                            getpgid(process_id)
                        except OSError as error:
                            if error.errno is errno.ESRCH:
                                start_thread = True
                            else:
                                raise

                if start_thread:
                    with open(domain_start_file_path, 'w') as f:
                        f.write(str(PROCESS_ID))
            finally:
                self.config.cache.unlock(lock_key)

            # Start only one Thread for each domain
            if start_thread:
                start_system_thread('jobs_monitor', self.run_monitor)
                print_('Running jobs monitor on PID %s' % PROCESS_ID)
示例#4
0
    def run_monitor(self):
        try:
            self.validate_daemons()

            immediate_jobs = set(
                to_unicode(k)
                for k in self.config.cache.get_values(JOBS_IMMEDIATE_KEY, expire=None))

            for apijob in list(JOBS):
                run_job = False
                if apijob.name in immediate_jobs:
                    run_job = True
                    immediate_jobs.remove(apijob.name)
                elif apijob.will_run() and apijob.next_date <= NOW():
                    run_job = True

                if run_job:
                    try:
                        daemon = start_system_thread(
                            'job_%s' % apijob.name,
                            apijob,
                            sleep_method=False)
                    except KeyError:
                        pass
                    else:
                        RUNNING_JOBS.append((apijob, daemon))

            self.config.cache.replace_values(JOBS_IMMEDIATE_KEY, immediate_jobs, expire=None)

        except Exception as error:
            self.system_session().logging.log_critical('jobs_undefined_error', str(error))
            return 5
        else:
            return 0.5
示例#5
0
 def clean_junk_locks_as_daemon(self):
     if not thread_is_running('clean_junk_locks'):
         # Shhh.. Do it quietly!
         start_system_thread('clean_junk_locks', self.clean_junk_locks, sleep_method=False)