Skip to content

Commit

Permalink
Added curses handler to print STDOUT logging to console
Browse files Browse the repository at this point in the history
This change removes the old mechanism for writing to the screen in
additional to adding a custom logging handler.
  • Loading branch information
jamestaylr committed Jun 24, 2015
1 parent dc20dee commit 050e47c
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 57 deletions.
60 changes: 40 additions & 20 deletions src/modules/log.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/python
import logging, modules.utils
import logging, modules.utils, curses

class WebSocketLogger(logging.Handler):

Expand All @@ -21,26 +21,46 @@ def emit(self, record):
print('The server thread has not been created yet. Dropping log output.')
except:
self.handleError(record)

class CursesHandler(logging.Handler):
def __init__(self, screen):
logging.Handler.__init__(self)
self.screen = screen

curses.start_color()
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i + 1, i, -1)


def emit(self, record):
try:
msg = self.format(record)
screen = self.screen
fs = "\n%s"

class ConsoleFormatter(logging.Formatter):
def format(self, record):
if record.levelno == logging.WARNING:
# display yellow text
record.msg = '\033[93m\033[1m%s\033[0m\033[39m' % (record.msg)
elif record.levelno == logging.ERROR:
# display red text
record.msg = '\033[31m\033[1m%s\033[0m\033[39m' % (record.msg)
elif record.levelno == logging.INFO:
# display blue text
record.msg = '\033[94m\033[1m%s\033[0m\033[39m' % (record.msg)
elif record.levelno == logging.CRITICAL:
# display bold red text
record.msg = '\033[31m\033[1m%s\033[0m\033[39m' % (record.msg)
elif record.levelno == logging.DEBUG:
# display green text
record.msg = '\033[92m\033[1m%s\033[0m\033[39m' % (record.msg)

return super(ConsoleFormatter , self).format(record)
try:

ufs = u'\n%s'
try:
screen.addstr(ufs % msg, self.get_color_pair(record.levelno))
screen.refresh()
except UnicodeEncodeError:
screen.addstr((ufs % msg).encode(code))
screen.refresh()

except UnicodeError:
screen.addstr(fs % msg.encode("UTF-8"))
screen.refresh()
except (KeyboardInterrupt, SystemExit):
raise
except:
self.handleError(record)

def get_color_pair(self, level):
index = str(level)
#20 : 28
return curses.color_pair({'10': 83, '20': 39, '30': 245, '40': 167, '50': 197}[index])



38 changes: 1 addition & 37 deletions src/modules/utils.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/python
import json, logging, configparser, modules.calc, time, os, sys
import json, logging, configparser, modules.calc, time, os, sys, modules.log
import logging, curses, time
from datetime import datetime

logger = logging.getLogger('log')
Expand Down Expand Up @@ -61,42 +61,6 @@ def setup_locations(target_locations, boundary_locations):
logger.error('The locations JSON file is malformed!')
sys.exit()

yellow = "\033[33m\033[1m"
green = "\033[32m\033[1m"
purple = "\033[35m\033[1m"
reset = "\033[0m\033[39m"

def print_terminal(data, values):
print('\033c')
print('%sTimestamp: %s' % (yellow, data['timestamp']))
print('Location: %s%s' % (data['location'], reset))
print('Heading: %0.5f' % data['heading'])
print('Speed: %0.5f' % data['speed'])
print('Wind Direction: %0.5f\n' % data['wind_dir'])
print('Roll: %0.5f' % data['roll'])
print('Pitch: %0.5f' % data['pitch'])
print('Yaw: %0.5f\n' % data['yaw'])

print('%sEvent: %s' % (green, values['event']))
print('Debug: %r%s' % (values['debug'], reset))
print('Web server port: %d\n' % values['port'])
print('Transmission delay: %d' % values['transmission_delay'])
print('Logic evaluation delay: %d\n' % values['eval_delay'])
print('%sCurrent desired heading: %d' % (purple, values['current_desired_heading']))
print('Direction: %d' % values['direction'])
print('Absolute wind direction: %d%s\n' % (values['absolute_wind_direction'], reset))
# print('Max turn rate angle: %d' % values['max_turn_rate_angle'])
# print('Max rudder angle: %d' % values['max_rudder_angle'])
# print('Max winch angle: %d\n' % values['max_winch_angle'])
print('Preferred tack: %d' % values['preferred_tack'])
print('Preferred gybe: %d\n' % values['preferred_gybe'])
print('Winch angle: %d\n' % values['winch_angle'])
print('Rudder angle: %d\n' % values['rudder_angle'])
# print('Tack angle: %d' % values['tack_angle'])
# print('Gybe angle: %d\n\n' % values['gybe_angle'])

time.sleep(0.995)

def setup_config(values):

# Logging in this method must stay as print statements because the logger
Expand Down

0 comments on commit 050e47c

Please sign in to comment.