Beispiel #1
0
        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()
Beispiel #2
0
    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)
Beispiel #4
0
    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
Beispiel #5
0
    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)
Beispiel #7
0
    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)
Beispiel #9
0
    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
Beispiel #10
0
        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()