diff --git a/scripts/analysis/parse-logs.py b/scripts/analysis/parse-logs.py index f0f693a1de192717caf2e74749bc131dd9bd7716..ec3dcc96430fb63fcc511fbac0d8d3c025e7ca26 100755 --- a/scripts/analysis/parse-logs.py +++ b/scripts/analysis/parse-logs.py @@ -40,6 +40,7 @@ from transformer.server import ServerLogFilter # find . -type d -depth 1 -print0 | \ # xargs -0 -L1 -P8 -I {} \ # bash -c 'cd {} && echo {} && ../../heterogeneous-smr/scripts/parse-results.py' +from transformer.server_channel import ServerChannelLogFilter AUTO_RANGE_SLACK_AT_END = 5 @@ -70,6 +71,7 @@ def setup_transformers(path: str) -> Iterable[Transformer]: LatencyLogFilter(), ResourceLogFilter(), ServerLogFilter(), + ServerChannelLogFilter(), PrintWarningsFilter(), # FIXME Add transformer to check for required logs # OutputJSONTransformer(path), @@ -208,7 +210,7 @@ def auto_range(logs: List[LogData]) -> Tuple[float, float, float]: end = -base for log in logs: - if log.logtype != "client": + if not is_auto_range_log(log): continue for entry in log.entries(): diff --git a/scripts/analysis/transformer/server_channel.py b/scripts/analysis/transformer/server_channel.py new file mode 100644 index 0000000000000000000000000000000000000000..b72bd77640841e38651336b107f2e12a6952d843 --- /dev/null +++ b/scripts/analysis/transformer/server_channel.py @@ -0,0 +1,41 @@ +from common.log import LogData +from .base import Filter + + +class ServerChannelLogFilter(Filter): + def can_handle(self, log: LogData) -> bool: + return log.logtype == "server" and "channel-micro" in log.scenario \ + and log.logid in ("server-4", "server-5", "server-6") + + def filter(self, log: LogData, start_time: float, end_time: float) -> LogData: + out = log.derive() + first = None + last = None + + for entry in log.entries(): + if "warning" in entry: + line = entry["warning"] + if "CMIC-DST:" in line: + p = line.split(" ") + messages = int(p[-1]) + entry = out.add_data(entry["timestamp"], messages=messages) + + if first is None and entry["timestamp"] >= start_time: + first = entry + if entry["timestamp"] < end_time: + last = entry + + out.add_entry(entry) + + message_delta = 0 + time_delta = 0. + throughput = 0. + + if last is not None and first is not None and last["timestamp"] - first["timestamp"] > 10: + time_delta = last["timestamp"] - first["timestamp"] + message_delta = last["messages"] - first["messages"] + throughput = message_delta / time_delta + + out.add_data((start_time + end_time) / 2, message_delta=message_delta, time_delta=time_delta, + throughput=throughput) + return out