def _retrieve_log_flat(queue, settings): """ Writes the given *log_filename* to *queue* in a flat format equivalent to:: ./logviewer.py --flat log_filename *settings* - A dict containing the *log_filename*, *colors_css*, and *theme_css* to use when generating the HTML output. """ out_dict = { 'result': "", 'log': "", 'metadata': {}, } # Local variables out = [] spanstrip = re.compile(r'\s+\<\/span\>$') user = settings['user'] users_dir = settings['users_dir'] log_filename = settings['log_filename'] logs_dir = os.path.join(users_dir, "logs") log_path = os.path.join(logs_dir, log_filename) if os.path.exists(log_path): out_dict['metadata'] = get_or_update_metadata(log_path, user) out_dict['metadata']['filename'] = log_filename out_dict['result'] = "Success" from io import BytesIO # Use the terminal emulator to create nice HTML-formatted output from terminal import Terminal term = Terminal(rows=100, cols=300, em_dimensions=0) io_obj = BytesIO() flatten_log(log_path, io_obj) io_obj.seek(0) # Needed to emulate an actual term flattened_log = io_obj.read().replace(b'\n', b'\r\n') # NOTE: Using chunking below to emulate how a stream might actually be # written to the terminal emulator. This is to prevent the emulator # from thinking that any embedded files (like PDFs) are never going to # end. def chunker(s, n): """Produce `n`-character chunks from `s`.""" for start in range(0, len(s), n): yield s[start:start+n] for chunk in chunker(flattened_log, 499): term.write(chunk) scrollback, screen = term.dump_html() # Join them together log_lines = scrollback + screen # rstrip the lines log_lines = [a.rstrip() for a in log_lines] # Fix things like "<span>whatever [lots of whitespace] </span>" for i, line in enumerate(log_lines): out.append(spanstrip.sub("</span>", line)) out_dict['log'] = out term.clear_screen() # Ensure the function below works... term.close_captured_fds() # Force clean up open file descriptors else: out_dict['result'] = _("ERROR: Log not found") message = {'terminal:logging_log_flat': out_dict} queue.put(message)
def _retrieve_log_flat(queue, settings): """ Writes the given *log_filename* to *queue* in a flat format equivalent to:: ./logviewer.py --flat log_filename *settings* - A dict containing the *log_filename*, *colors*, and *theme* to use when generating the HTML output. """ out_dict = { 'result': "", 'log': "", 'metadata': {}, } # Local variables out = [] spanstrip = re.compile(r'\s+\<\/span\>$') gateone_dir = settings['gateone_dir'] user = settings['user'] users_dir = settings['users_dir'] container = settings['container'] prefix = settings['prefix'] log_filename = settings['log_filename'] theme = "%s.css" % settings['theme'] colors = "%s.css" % settings['colors'] logs_dir = os.path.join(users_dir, "logs") log_path = os.path.join(logs_dir, log_filename) if os.path.exists(log_path): out_dict['metadata'] = get_or_update_metadata(log_path, user) out_dict['metadata']['filename'] = log_filename out_dict['result'] = "Success" import StringIO # Use the terminal emulator to create nice HTML-formatted output from terminal import Terminal term = Terminal(rows=100, cols=300) io_obj = StringIO.StringIO() flatten_log(log_path, io_obj) io_obj.seek(0) # Needed to emulate an actual term flattened_log = io_obj.read().replace('\n', '\r\n') term.write(flattened_log) scrollback, screen = term.dump_html() # Join them together log_lines = scrollback + screen # rstrip the lines log_lines = [a.rstrip() for a in log_lines] # Fix things like "<span>whatever [lots of whitespace] </span>" for i, line in enumerate(log_lines): out.append(spanstrip.sub("</span>", line)) out_dict['log'] = out else: out_dict['result'] = _("ERROR: Log not found") message = {'logging_log_flat': out_dict} queue.put(message)
def _retrieve_log_flat(queue, settings): """ Writes the given *log_filename* to *queue* in a flat format equivalent to:: ./logviewer.py --flat log_filename *settings* - A dict containing the *log_filename*, *colors*, and *theme* to use when generating the HTML output. """ out_dict = { 'result': "", 'log': "", 'metadata': {}, } # Local variables gateone_dir = settings['gateone_dir'] user = settings['user'] users_dir = settings['users_dir'] container = settings['container'] prefix = settings['prefix'] log_filename = settings['log_filename'] theme = "%s.css" % settings['theme'] colors = "%s.css" % settings['colors'] logs_dir = os.path.join(users_dir, "logs") log_path = os.path.join(logs_dir, log_filename) if os.path.exists(log_path): out_dict['metadata'] = get_or_update_metadata(log_path, user) out_dict['metadata']['filename'] = log_filename out_dict['result'] = "Success" # Use the terminal emulator to create nice HTML-formatted output from terminal import Terminal terminal_emulator = Terminal term = terminal_emulator(rows=100, cols=300) flattened_log = flatten_log(log_path) flattened_log.replace('\n', '\r\n') # Needed to emulate an actual term term.write(flattened_log) scrollback, screen = term.dump_html() # Join them together log_lines = scrollback + screen out_dict['log'] = log_lines else: out_dict['result'] = _("ERROR: Log not found") message = {'logging_log_flat': out_dict} queue.put(message)
def _retrieve_log_flat(queue, settings): """ Writes the given *log_filename* to *queue* in a flat format equivalent to:: ./logviewer.py --flat log_filename *settings* - A dict containing the *log_filename*, *colors*, and *theme* to use when generating the HTML output. """ out_dict = {"result": "", "log": "", "metadata": {}} # Local variables gateone_dir = settings["gateone_dir"] user = settings["user"] users_dir = settings["users_dir"] container = settings["container"] prefix = settings["prefix"] log_filename = settings["log_filename"] theme = "%s.css" % settings["theme"] colors = "%s.css" % settings["colors"] logs_dir = os.path.join(users_dir, "logs") log_path = os.path.join(logs_dir, log_filename) if os.path.exists(log_path): out_dict["metadata"] = get_or_update_metadata(log_path, user) out_dict["metadata"]["filename"] = log_filename out_dict["result"] = "Success" # Use the terminal emulator to create nice HTML-formatted output from terminal import Terminal terminal_emulator = Terminal term = terminal_emulator(rows=100, cols=300) flattened_log = flatten_log(log_path) flattened_log.replace("\n", "\r\n") # Needed to emulate an actual term term.write(flattened_log) scrollback, screen = term.dump_html() # Join them together log_lines = scrollback + screen out_dict["log"] = log_lines else: out_dict["result"] = "ERROR: Log not found" message = {"logging_log_flat": out_dict} queue.put(message)