summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/stl/console
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-07-26 11:47:15 +0300
committerimarom <imarom@cisco.com>2016-07-26 11:47:15 +0300
commit90c64917b59e83556454d1338634473cdcd952a9 (patch)
tree1471d34521aafd039d2014e3f8ee4dedf9faaebb /scripts/automation/trex_control_plane/stl/console
parente3b43560ff867c35ee726da9a98aed8acdc53b70 (diff)
some more TUI fixes
Diffstat (limited to 'scripts/automation/trex_control_plane/stl/console')
-rwxr-xr-xscripts/automation/trex_control_plane/stl/console/trex_console.py3
-rw-r--r--scripts/automation/trex_control_plane/stl/console/trex_tui.py45
2 files changed, 37 insertions, 11 deletions
diff --git a/scripts/automation/trex_control_plane/stl/console/trex_console.py b/scripts/automation/trex_control_plane/stl/console/trex_console.py
index 41a04617..7ad0cfa4 100755
--- a/scripts/automation/trex_control_plane/stl/console/trex_console.py
+++ b/scripts/automation/trex_control_plane/stl/console/trex_console.py
@@ -573,7 +573,8 @@ class TRexConsole(TRexGeneralCmd):
try:
with self.stateless_client.logger.supress():
- self.tui.show(self.stateless_client, locked = opts.locked)
+ self.tui.show(self.stateless_client, self.save_console_history, locked = opts.locked)
+
except self.tui.ScreenSizeException as e:
print(format_text(str(e) + "\n", 'bold'))
diff --git a/scripts/automation/trex_control_plane/stl/console/trex_tui.py b/scripts/automation/trex_control_plane/stl/console/trex_tui.py
index 81ba335c..d3da738b 100644
--- a/scripts/automation/trex_control_plane/stl/console/trex_tui.py
+++ b/scripts/automation/trex_control_plane/stl/console/trex_tui.py
@@ -24,6 +24,16 @@ class TUIQuit(Exception):
# for STL exceptions
from trex_stl_lib.api import *
+def ascii_split (s):
+ output = []
+
+ lines = s.split('\n')
+ for elem in lines:
+ if ansi_len(elem) > 0:
+ output.append(elem)
+
+ return output
+
class SimpleBar(object):
def __init__ (self, desc, pattern):
self.desc = desc
@@ -483,13 +493,13 @@ class TrexTUI():
#sys.stdout.write("\x1b[2J\x1b[H")
- def show (self, client, show_log = False, locked = False):
+ def show (self, client, save_console_history, show_log = False, locked = False):
rows, cols = os.popen('stty size', 'r').read().split()
if (int(rows) < TrexTUI.MIN_ROWS) or (int(cols) < TrexTUI.MIN_COLS):
raise self.ScreenSizeException(rows = rows, cols = cols)
- with AsyncKeys(client, locked) as async_keys:
+ with AsyncKeys(client, save_console_history, locked) as async_keys:
sys.stdout.write("\x1bc")
self.async_keys = async_keys
self.show_internal(show_log, locked)
@@ -597,8 +607,8 @@ class AsyncKeys:
STATUS_REDRAW_KEYS = 1
STATUS_REDRAW_ALL = 2
- def __init__ (self, client, locked = False):
- self.engine_console = AsyncKeysEngineConsole(self, client)
+ def __init__ (self, client, save_console_history, locked = False):
+ self.engine_console = AsyncKeysEngineConsole(self, client, save_console_history)
self.engine_legend = AsyncKeysEngineLegend(self)
self.locked = locked
@@ -700,11 +710,12 @@ class AsyncKeysEngineLegend:
# console engine
class AsyncKeysEngineConsole:
- def __init__ (self, async, client):
+ def __init__ (self, async, client, save_console_history):
self.async = async
self.lines = deque(maxlen = 100)
- self.generate_prompt = client.generate_prompt
+ self.generate_prompt = client.generate_prompt
+ self.save_console_history = save_console_history
self.ac = {'start' : client.start_line,
'stop' : client.stop_line,
@@ -929,6 +940,7 @@ class AsyncKeysEngineConsole:
self.lines.appendleft(empty_line)
self.line_index = 0
readline.add_history(cmd)
+ self.save_console_history()
# back to readonly
for line in self.lines:
@@ -939,15 +951,28 @@ class AsyncKeysEngineConsole:
if not func:
self.last_status = "unknown command: '{0}'".format(format_text(cmd.split()[0], 'bold'))
else:
+ # internal commands
if isinstance(func_rc, str):
self.last_status = func_rc
+
+ # RC response
else:
- self.last_status = format_text("[OK]", 'green') if func_rc else format_text(str(func_rc).replace('\n', ''), 'red')
- color = 'red'
+ # success
+ if func_rc:
+ self.last_status = format_text("[OK]", 'green')
+
+ # errors
+ else:
+ err_msgs = ascii_split(str(func_rc))
+ self.last_status = format_text(err_msgs[0], 'red')
+ if len(err_msgs) > 1:
+ self.last_status += " [{0} more errors messages]".format(len(err_msgs) - 1)
+ color = 'red'
# trim too long lines
- if ansi_len(self.last_status) > 100:
- self.last_status = format_text(self.last_status[:100] + "...", color, 'bold')
+ if ansi_len(self.last_status) > TrexTUI.MIN_COLS:
+ self.last_status = format_text(self.last_status[:TrexTUI.MIN_COLS] + "...", color, 'bold')
+
def draw (self):
sys.stdout.write("\nPress 'ESC' for navigation panel...\n")