diff --git a/py-json/port_probe.py b/py-json/port_probe.py new file mode 100644 index 00000000..8cfd81aa --- /dev/null +++ b/py-json/port_probe.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +from LANforge.lfcli_base import LFCliBase + + +class ProbePort(LFCliBase): + def __init__(self, + lfhost=None, + lfport='8080', + debug=False, + eid_str=None): + super().__init__(_lfjson_host=lfhost, + _lfjson_port=lfport, + _debug=debug) + hunks = eid_str.split(".") + self.eid_str = eid_str + self.probepath = "/probe/1/%s/%s" % (hunks[-2], hunks[-1]) + self.response = None + self.signals = None + + def refreshProbe(self): + self.json_post(self.probepath, {}) + response = self.json_get(self.probepath) + self.response = response + text = self.response['probe-results'][0][self.eid_str]['probe results'].split('\n') + signals = [x.strip('\t').split('\t') for x in text if 'signal' in x] + keys = [x[0].strip(' ').strip(':') for x in signals] + values = [x[1].strip('dBm').strip(' ') for x in signals] + self.signals = dict(zip(keys, values)) + + def getSignalAvgCombined(self): + return self.signals['signal avg'].split(' ')[0] + + def getSignalAvgPerChain(self): + return ' '.join(self.signals['signal avg'].split(' ')[1:]) + + def getSignalCombined(self): + return self.signals['signal'].split(' ')[0] + + def getSignalPerChain(self): + return ' '.join(self.signals['signal'].split(' ')[1:]) + + def getBeaconSignalAvg(self): + return ' '.join(self.signals['beacon signal avg']) diff --git a/py-scripts/scripts_deprecated/event_break_flood.py b/py-scripts/scripts_deprecated/event_break_flood.py new file mode 100755 index 00000000..a59a28bb --- /dev/null +++ b/py-scripts/scripts_deprecated/event_break_flood.py @@ -0,0 +1,46 @@ +#!/usr/bin/python3 + +import threading +from event_flood import EventFlood +from event_breaker import EventBreaker +import importlib +import sys +import os + +sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../../../"))) + +lfcli_base = importlib.import_module("py-json.LANforge.lfcli_base") +LFCliBase = lfcli_base.LFCliBase + + +def event_break(args): + event_breaker = EventBreaker(host=args.mgr, + port=args.mgr_port, + duration='30s') + event_breaker.create() + event_breaker.run() + event_breaker.cleanup() + + +def event_flooding(args): + event_flood = EventFlood(host=args.mgr, + port=args.mgr_port, + duration='30s', + pause_ms=30) + event_flood.create() + event_flood.run() + event_flood.cleanup() + + +def main(): + parser = LFCliBase.create_bare_argparse() + args = parser.parse_args() + flood = threading.Thread(target=event_flooding(args)) + breaker = threading.Thread(target=event_break(args)) + + flood.start() + breaker.start() + + +if __name__ == "__main__": + main() diff --git a/py-scripts/event_breaker.py b/py-scripts/scripts_deprecated/event_breaker.py similarity index 76% rename from py-scripts/event_breaker.py rename to py-scripts/scripts_deprecated/event_breaker.py index 15a2fa2b..66442a03 100755 --- a/py-scripts/event_breaker.py +++ b/py-scripts/scripts_deprecated/event_breaker.py @@ -9,14 +9,12 @@ import os import importlib from datetime import datetime import pprint -import argparse if sys.version_info[0] != 3: print("This script requires Python 3") exit(1) - -sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../"))) +sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../../"))) lfcli_base = importlib.import_module("py-json.LANforge.lfcli_base") LFCliBase = lfcli_base.LFCliBase @@ -25,15 +23,15 @@ Realm = realm.Realm class EventBreaker(Realm): - def __init__(self, host, port, + def __init__(self, host, port, duration=None, _debug_on=False, _exit_on_error=False, _exit_on_fail=False): super().__init__(host, port) self.counter = 0 - self.test_duration=duration - if (self.test_duration is None): + self.test_duration = duration + if self.test_duration is None: raise ValueError("run wants numeric run_duration_sec") def create(self): @@ -42,25 +40,18 @@ class EventBreaker(Realm): def run(self): now = datetime.now() - now_ms = 0 end_time = self.parse_time(self.test_duration) + now client_time_ms = 0 - prev_client_time_ms = 0 - start_loop_time_ms = 0 loop_time_ms = 0 - prev_loop_time_ms = 0 num_events = 0 - prev_num_events = 0 - bad_events = [] while datetime.now() < end_time: bad_events = [] start_loop_time_ms = int(self.get_milliseconds(datetime.now())) - print ('\r♦ ', end='') - #prev_loop_time_ms = loop_time_ms - # loop_time_ms = self.get_milliseconds(datetime.now()) + print('\r♦ ', end='') prev_client_time_ms = client_time_ms response = self.json_get("/events/all") - #pprint.pprint(response) + if self.debug: + pprint.pprint(response) if "events" not in response: pprint.pprint(response) @@ -69,32 +60,35 @@ class EventBreaker(Realm): prev_num_events = num_events num_events = len(events) if num_events != prev_num_events: - print("%s events Δ%s"%(num_events, (num_events - prev_num_events))) + print("%s events Δ%s" % (num_events, (num_events - prev_num_events))) if "candela.lanforge.HttpEvents" in response: client_time_ms = float(response["candela.lanforge.HttpEvents"]["duration"]) - # print(" client_time %d"%client_time_ms) + if self.debug: + print(" client_time %d" % client_time_ms) if abs(prev_client_time_ms - client_time_ms) > 30: - print(" client time %d ms Δ%d"%(client_time_ms, (prev_client_time_ms - client_time_ms)), + print(" client time %d ms Δ%d" % (client_time_ms, (prev_client_time_ms - client_time_ms)), end='') event_index = 0 for record in events: for k in record.keys(): if record[k] is None: - print (' ☠no %s☠'%k, end='') + print(' ☠no %s☠' % k, end='') continue - # pprint.pprint( record[k]) + if self.debug: + pprint.pprint(record[k]) if "NA" == record[k]["event"] \ or "NA" == record[k]["name"] \ or "NA" == record[k]["type"] \ or "NA" == record[k]["priority"]: bad_events.append(int(k)) pprint.pprint(record[k]) - # print( " ☠id[%s]☠"%k, end='') + if self.debug: + print(" ☠id[%s]☠" % k, end='') if len(bad_events) > 0: pprint.pprint(events[event_index]) - print( " ☠id[%s]☠"%bad_events, end='') + print(" ☠id[%s]☠" % bad_events, end='') exit(1) event_index += 1 prev_loop_time_ms = loop_time_ms @@ -102,7 +96,7 @@ class EventBreaker(Realm): loop_time_ms = now_ms - start_loop_time_ms if (prev_loop_time_ms - loop_time_ms) > 15: print(" loop time %d ms Δ%d " - %(loop_time_ms, (prev_loop_time_ms - loop_time_ms)), + % (loop_time_ms, (prev_loop_time_ms - loop_time_ms)), end='') if (prev_loop_time_ms - loop_time_ms) > 30: print("") @@ -110,13 +104,14 @@ class EventBreaker(Realm): def cleanup(self): pass + def main(): parser = LFCliBase.create_bare_argparse( prog='event_breaker.py', - formatter_class=argparse.RawTextHelpFormatter) + description="""event breaker is meant to be used in conjunction with event flood + Please use the event_break_flood.py script""") - parser.add_argument("--test_duration", help='test duration', default="30s" ) - # if optional_args is not None: + parser.add_argument("--test_duration", help='test duration', default="30s") args = parser.parse_args() event_breaker = EventBreaker(host=args.mgr, @@ -129,5 +124,6 @@ def main(): event_breaker.run() event_breaker.cleanup() + if __name__ == "__main__": main() diff --git a/py-scripts/event_flood.py b/py-scripts/scripts_deprecated/event_flood.py similarity index 54% rename from py-scripts/event_flood.py rename to py-scripts/scripts_deprecated/event_flood.py index 573800b8..d974331b 100755 --- a/py-scripts/event_flood.py +++ b/py-scripts/scripts_deprecated/event_flood.py @@ -7,16 +7,15 @@ Please concurrently use with event_breaker.py. import sys import os import importlib -import argparse from datetime import datetime from time import sleep +import pprint if sys.version_info[0] != 3: print("This script requires Python 3") exit(1) - -sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../"))) +sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../../"))) lfcli_base = importlib.import_module("py-json.LANforge.lfcli_base") LFCliBase = lfcli_base.LFCliBase @@ -24,8 +23,8 @@ realm = importlib.import_module("py-json.realm") Realm = realm.Realm -class EventBreaker(Realm): - def __init__(self, host, port, +class EventFlood(Realm): + def __init__(self, host, port, duration=None, pause_ms=None, _debug_on=False, @@ -35,7 +34,7 @@ class EventBreaker(Realm): self.counter = 0 self.test_duration = duration self.pause_ms = pause_ms - if (self.test_duration is None): + if self.test_duration is None: raise ValueError("run wants numeric run_duration_sec") def create(self): @@ -44,73 +43,68 @@ class EventBreaker(Realm): def run(self): last_second_ms = 0 start_time = datetime.now() - now_ms = 0 end_time = self.parse_time(self.test_duration) + start_time client_time_ms = 0 - prev_client_time_ms = 0 - start_loop_time_ms = 0 loop_time_ms = 0 - prev_loop_time_ms = 0 - num_events = 0 - prev_num_events = 0 while datetime.now() < end_time: - sleep( self.pause_ms / 1000 ) + sleep(self.pause_ms / 1000) start_loop_time_ms = int(self.get_milliseconds(datetime.now())) - print ('\r♦ ', end='') - #prev_loop_time_ms = loop_time_ms - # loop_time_ms = self.get_milliseconds(datetime.now()) - prev_client_time_ms = client_time_ms + print('\r♦ ', end='') response_list = [] - response = self.json_post("/cli-json/add_event", - { - "event_id": "new", - "details": "event_flood %d"%start_loop_time_ms, - "priority": "INFO", - "name": "custom" - }, - response_json_list_=response_list) - # pprint.pprint(response_list) + self.json_post("/cli-json/add_event", + { + "event_id": "new", + "details": "event_flood %d" % start_loop_time_ms, + "priority": "INFO", + "name": "custom" + }, + response_json_list_=response_list) + if self.debug: + pprint.pprint(response_list) prev_client_time_ms = client_time_ms prev_loop_time_ms = loop_time_ms now = int(self.get_milliseconds(datetime.now())) loop_time_ms = now - start_loop_time_ms client_time_ms = response_list[0]["LAST"]["duration"] - if (client_time_ms != prev_client_time_ms): - print(" client %d ms %d"%(client_time_ms, - (prev_client_time_ms - client_time_ms)), + if client_time_ms != prev_client_time_ms: + print(" client %d ms %d" % (client_time_ms, + (prev_client_time_ms - client_time_ms)), end='') - if (loop_time_ms != prev_loop_time_ms): - print(" loop %d ms %d "%(loop_time_ms, - (prev_loop_time_ms - loop_time_ms)), + if loop_time_ms != prev_loop_time_ms: + print(" loop %d ms %d " % (loop_time_ms, + (prev_loop_time_ms - loop_time_ms)), end='') if (last_second_ms + 1000) < now: last_second_ms = now print("") + def cleanup(self): pass + def main(): parser = LFCliBase.create_bare_argparse( prog='event_breaker.py', - formatter_class=argparse.RawTextHelpFormatter) + description="""event flood is meant to be used in conjunction with event breaker + Please use the event_break_flood.py script""") - parser.add_argument("--test_duration", help='test duration', default="30s" ) - parser.add_argument("--pause_ms", help='interval between submitting events', default="30" ) - # if optional_args is not None: + parser.add_argument("--test_duration", help='test duration', default="30s") + parser.add_argument("--pause_ms", help='interval between submitting events', default="30") args = parser.parse_args() - event_breaker = EventBreaker(host=args.mgr, - port=args.mgr_port, - duration=args.test_duration, - pause_ms=int(args.pause_ms), - _debug_on=True, - _exit_on_error=True, - _exit_on_fail=True) + event_breaker = EventFlood(host=args.mgr, + port=args.mgr_port, + duration=args.test_duration, + pause_ms=int(args.pause_ms), + _debug_on=True, + _exit_on_error=True, + _exit_on_fail=True) event_breaker.create() event_breaker.run() event_breaker.cleanup() + if __name__ == "__main__": main()