1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import argparse
- from console_bottombar import BottomBar
- import os
- import re
- import sys
- import tail
- import task
-
- VERSION = "0.1.0"
-
- HELPTEXT = """
- F1: Get this help message
- F2: Set a filter (regular expression) for the topic of a message
- Examples:
- * "/gfw/.*/main_light/" to get everything with "/gfw/" before "/main_light/"
- * "^zigbee.*(?>!logging)$" to get everything starting with "zigbee" and not ending with "logging"
- * "^(?!shellies).*/dirk/.*temperature$" to get everything not starting with "shellies" followed by "/dirk/" and ends with "temperature"
- F12: Quit ftail
-
- 'c': Clear screen
- 'q': Quit
- """
-
-
- def tail_parser(line):
- global my_bb
-
- try:
- match = len(re.findall(my_bb.get_entry('msg_re'), line)) > 0
- except re.error:
- print('No valid regular expression (%s). No filter active.' % my_bb.get_entry('msg_re'))
- match = True
-
- if match:
- sys.stdout.write(line)
-
-
- if __name__ == "__main__":
- parser = argparse.ArgumentParser(description='This is a mqtt sniffer.')
- parser.add_argument('logfile') # , nargs='+' for >= 1
-
- args = parser.parse_args()
-
-
- if not os.access(args.logfile, os.R_OK):
- print("Error: File %s is not readable!" % logfile)
- sys.exit(1)
- else:
-
- #
- # Background tail task
- #
- tp = tail.Tail(args.logfile)
- tp.register_callback(tail_parser)
- my_tail = task.delayed(0.1, tp.follow, 0.1)
-
- #
- # Bottombar
- #
- my_bb = BottomBar(VERSION, label='ftail')
- my_bb.add_entry('help', 1, my_bb.FUNC_INFO, '[F1] Help', infotext=HELPTEXT)
- my_bb.add_entry('msg_re', 2, my_bb.FUNC_TEXT, label='[F2] Filter', default="")
- my_bb.add_entry('quit', 12, my_bb.FUNC_QUIT, "Quit", label='[F12]', right=True)
-
- my_tail.run()
- my_bb.run()
-
- my_tail.stop()
|