Skip to content
Snippets Groups Projects
Commit d245cfe3 authored by Hendrik Buschmeier's avatar Hendrik Buschmeier
Browse files

Updated ipaaca-iu-sniffer:

* Filtering by IU event type.
* Description of sniffer arguments after startup now prettier.
parent 76e7dd04
No related branches found
No related tags found
No related merge requests found
......@@ -87,7 +87,7 @@ def pretty_printed_iu_event(iu, event_type, local):
s += '\npayload=' + pretty_printed_dict(iu.payload)
return s
def my_update_handler(iu, event_type, local):
def iu_event_handler(iu, event_type, local):
if arguments.regex:
for cat in arguments.categories: # actually now regexs, not categories
if re.match(cat, iu.category):
......@@ -96,7 +96,11 @@ def my_update_handler(iu, event_type, local):
return
print(pretty_printed_iu_event(iu, event_type, local), end='\n\n')
def exit(code):
if platform.system() == 'Windows':
os._exit(code)
else:
sys.exit(code)
parser = ipaaca.IpaacaArgumentParser(description='Ipaaca IU Sniffer -- Selectively listen to IPAACA traffic')
parser.add_argument(
......@@ -113,6 +117,13 @@ parser.add_argument(
metavar='CATEGORY',
nargs='+',
help='set categories (or regex patterns) to be matched')
parser.add_argument(
'-e', '--event-types',
default=None,
dest='event_types',
metavar='EVENT-TYPE',
nargs='+',
help='set event types (ADDED, MESSAGE, UPDATED, LINKSUPDATED, COMMITTED)')
parser.add_argument(
'-r', '--regex',
action='store_true',
......@@ -134,37 +145,45 @@ parser.add_argument(
if __name__ == '__main__':
arguments = parser.parse_args()
buffers = {}
# Create one input buffer for each channel we are listening on
for channel in arguments.channels:
buffers[channel] = ipaaca.InputBuffer(
'IpaacaIUSniffer',
category_interests=arguments.categories if not arguments.regex else [''],
channel=channel,
resend_active=True)
buffers[channel].register_handler(my_update_handler)
channellist = 's ' if len(arguments.channels) > 1 else ' '
channellist += ', '.join(arguments.channels)
print('Listening on channel' + channellist + ' for IU events of ', end='')
# Check whether the specified event_types are valid
if arguments.event_types is not None:
for et in arguments.event_types:
if et.upper() not in ['ADDED', 'MESSAGE', 'UPDATED', 'LINKSUPDATED', 'COMMITTED']:
print('ERROR: "{et}" is not a valid IPAACA event type.'.format(et=et.upper()))
exit(code=1)
buffers[channel].register_handler(
iu_event_handler,
for_event_types=[et.upper() for et in arguments.event_types] if arguments.event_types is not None else None)
# Tell user what we are doing
print('ipaaca-iu-sniffer listening')
print(' * on channel(s): ' + ', '.join(arguments.channels))
print(' * for event type(s): ', end='')
if arguments.event_types is None:
print('any')
else:
print(', '.join([highlight_if_color(et.upper(), event_type_color(et.upper())) for et in arguments.event_types]))
print(' * for category/ies', end='')
if arguments.categories == ['']:
print('any category ...')
print(': any')
else:
if arguments.regex:
print('whose category matches one of the regexes:')
else:
print('categories:')
print('\t' + ', '.join(arguments.categories))
print('')
print(' that match the regex', end='')
print(': ' + ', '.join(arguments.categories))
# Wait for the user to kill the sniffer
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
pass
if platform.system() == 'Windows':
os._exit(0)
else:
sys.exit(0)
exit(code=0)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment