def clean_results(): if self._autoclean_stopped: return if os.path.exists(parent_folder): for user_folder in os.listdir(parent_folder): for timed_folder in os.listdir( os.path.join(parent_folder, user_folder)): if not re.match('\d+', timed_folder): continue millis = int(timed_folder) folder_date = ms_to_datetime(millis) now = datetime_now() if (now - folder_date) > datetime.timedelta( milliseconds=lifetime_ms): folder_path = os.path.join(parent_folder, user_folder, timed_folder) LOGGER.info('Cleaning old folder: ' + folder_path) shutil.rmtree(folder_path) timer = threading.Timer(period_sec, clean_results) timer.setDaemon(True) timer.start()
def create_filename(self, execution_id, all_audit_names, script_name, start_time): audit_name = get_audit_name(all_audit_names) audit_name = file_utils.to_filename(audit_name) date_string = ms_to_datetime(start_time).strftime(self._date_format) username = get_first_existing(all_audit_names, audit_utils.AUTH_USERNAME, audit_utils.PROXIED_USERNAME) mapping = { 'ID': execution_id, 'USERNAME': username, 'HOSTNAME': get_first_existing(all_audit_names, audit_utils.PROXIED_HOSTNAME, audit_utils.HOSTNAME, default='unknown-host'), 'IP': get_first_existing(all_audit_names, audit_utils.PROXIED_IP, audit_utils.IP), 'DATE': date_string, 'AUDIT_NAME': audit_name, 'SCRIPT': script_name } filename = self._filename_template.safe_substitute(mapping) if not filename.lower().endswith('.log'): filename += '.log' filename = filename.replace(" ", "_") return filename
def validate_history_entry(self, entry, *, id, user_name='userX', user_id=None, script_name='my_script', start_time='IGNORE', command='cmd', output_format=OUTPUT_FORMAT_TERMINAL, exit_code: Optional[int] = 0): if user_id is None: user_id = user_name self.assertEqual(id, entry.id) self.assertEqual(user_name, entry.user_name) self.assertEqual(user_id, entry.user_id) self.assertEqual(script_name, entry.script_name) self.assertEqual(command, entry.command) self.assertEqual(output_format, entry.output_format) if start_time != 'IGNORE': self.assertEqual(ms_to_datetime(start_time), entry.start_time) self.assertEqual(exit_code, entry.exit_code)
def _create_log_identifier(audit_name, script_name, start_time): audit_name = file_utils.to_filename(audit_name) date_string = ms_to_datetime(start_time).strftime("%y%m%d_%H%M%S") script_name = script_name.replace(" ", "_") log_identifier = script_name + "_" + audit_name + "_" + date_string return log_identifier
def _create_log_identifier(audit_name, script_name, start_time): audit_name = file_utils.to_filename(audit_name) date_string = ms_to_datetime(start_time).strftime("%y%m%d_%H%M%S") script_name = script_name.replace(" ", "_") log_identifier = script_name + "_" + audit_name + "_" + date_string return log_identifier
def validate_history_entry(self, entry, *, id, user='******', script_name='my_script', start_time='IGNORE', command='cmd', exit_code=0): self.assertEqual(id, entry.id) self.assertEqual(user, entry.username) self.assertEqual(script_name, entry.script_name) self.assertEqual(command, entry.command) if start_time != 'IGNORE': self.assertEqual(ms_to_datetime(start_time), entry.start_time) self.assertEqual(exit_code, entry.exit_code)
def _parameters_to_entry(parameters): id = parameters.get('id') if not id: return None entry = HistoryEntry() entry.id = id entry.script_name = parameters.get('script') entry.user_name = parameters.get('user_name') entry.user_id = parameters.get('user_id') entry.command = parameters.get('command') exit_code = parameters.get('exit_code') if exit_code is not None: entry.exit_code = int(exit_code) start_time = parameters.get('start_time') if start_time: entry.start_time = ms_to_datetime(int(start_time)) return entry
def validate_history_entry(self, entry, *, id, user_name='userX', user_id=None, script_name='my_script', start_time='IGNORE', command='cmd', exit_code: Optional[int] = 0): if user_id is None: user_id = user_name self.assertEqual(id, entry.id) self.assertEqual(user_name, entry.user_name) self.assertEqual(user_id, entry.user_id) self.assertEqual(script_name, entry.script_name) self.assertEqual(command, entry.command) if start_time != 'IGNORE': self.assertEqual(ms_to_datetime(start_time), entry.start_time) self.assertEqual(exit_code, entry.exit_code)
def _parse_history_parameters(parameters_text, file_path): current_value = None current_key = None parameters = {} for line in parameters_text.splitlines(keepends=True): match = re.fullmatch('([\w_]+):(.*\r?\n)', line) if not match: current_value += line continue if current_key is not None: parameters[current_key] = current_value.rstrip('\n') current_key = match.group(1) current_value = match.group(2) if current_key is not None: parameters[current_key] = current_value.rstrip('\n') id = parameters.get('id') if not id: return None entry = HistoryEntry() entry.id = id entry.script_name = parameters.get('script') entry.username = parameters.get('user') entry.command = parameters.get('command') exit_code = parameters.get('exit_code') if exit_code is not None: entry.exit_code = int(exit_code) start_time = parameters.get('start_time') if start_time: entry.start_time = ms_to_datetime(int(start_time)) return entry
def clean_results(): if self._autoclean_stopped: return if os.path.exists(parent_folder): for user_folder in os.listdir(parent_folder): for timed_folder in os.listdir(os.path.join(parent_folder, user_folder)): if not re.match('\d+', timed_folder): continue millis = int(timed_folder) folder_date = ms_to_datetime(millis) now = datetime_now() if (now - folder_date) > datetime.timedelta(milliseconds=lifetime_ms): folder_path = os.path.join(parent_folder, user_folder, timed_folder) LOGGER.info('Cleaning old folder: ' + folder_path) shutil.rmtree(folder_path) timer = threading.Timer(period_sec, clean_results) timer.setDaemon(True) timer.start()