diff --git a/.gitignore b/.gitignore index 49412c6..86c3f3e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ test *.db *.journal figures/ +config.yaml # Prerequisites *.d diff --git a/5GTC/pkg/performance_logger/logger.py b/5GTC/pkg/performance_logger/logger.py index 0737c3c..32d439c 100644 --- a/5GTC/pkg/performance_logger/logger.py +++ b/5GTC/pkg/performance_logger/logger.py @@ -1,5 +1,7 @@ import logging import time +import sys +import argparse import threading from pkg.performance_logger.db import DB from pkg.performance_logger.webui import WebUI @@ -32,6 +34,9 @@ def __init__(self, sock, log="INFO"): self._inserted_subflows_cache = {} self.webui.log_iteration_page(self.iteration_id) + def __del__(self): + self.stop() + def init_db(self): self.db = DB({ "db_path": "performance_log.db", @@ -99,4 +104,42 @@ def _run_logger(self, interval_ms, features): # Sleep for the interval assigned time.sleep(interval_ms) - self.db.conn.close() \ No newline at end of file + self.db.conn.close() + + +# Allow the PerformanceLogger to run as an independent module for +# on-server testing as opposed to just through a Transport Converter +if __name__ == "__main__": + if len(sys.argv) < 2 or "".join(sys.argv).find("--help") != -1: + print("Usage: python3 logger.py [--webui-host ] [--webui-port ] [--interval ] [--features ] [--log ]") + print("\t: Socket file descriptor to log performance metrics for") + print("\t--webui-host : Host to run the webui on") + print("\t--webui-port : Port to run the webui on") + print("\t--interval : Interval in ms to log the performance metrics") + print("\t--features : Features to log") + print("\t--log : Log level") + print("Example: python3 logger.py 3 --webui-host localhost --webui-port 5000 --interval 1000 --features all --log INFO") + + sys.exit(1) + # Read the command line arguments + parser = argparse.ArgumentParser(description="Performance Logger") + parser.add_argument("sockfd", type=int, help="Socket file descriptor") + parser.add_argument("--webui-host", type=str, default="localhost", help="Host to run the webui on") + parser.add_argument("--webui-port", type=int, default=5000, help="Port to run the webui on") + parser.add_argument("--interval", type=int, default=1000, help="Interval in ms to log the performance metrics") + parser.add_argument("--features", type=str, default="all", help="Features to log") + parser.add_argument("--log", type=str, default="INFO", help="Log level") + args = parser.parse_args() + + # Initialize the WebUI module + webui = WebUI(args.host, args.port, log=args.log) + + # Feature split by comma + features = args.features.split(",") + + # Initialize the PerformanceLogger + logger = PerformanceLogger(args.sockfd, log=args.log) + + # Run the logger + logger.run(interval_ms=args.interval, features=features) + diff --git a/5GTC/requirements.txt b/5GTC/requirements.txt index e3d2ede..81d7e6f 100644 --- a/5GTC/requirements.txt +++ b/5GTC/requirements.txt @@ -1,4 +1,5 @@ flask matplotlib numpy -scapy \ No newline at end of file +scapy +pyyaml