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)
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)
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
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)