[PATCH v1] rt-tests: hwlatdetect: Add --time-format argument
Costa Shulyupin <[email protected]>
| Newsgroups | org.kernel.vger.linux-rt-users |
|---|---|
| Message-ID | <[email protected]> |
Add --time-format argument to customize timestamp output format using strftime directives. By default raw timestamps are output for backward compatibility. Add %n directive processing for nanoseconds (9 digits) since strftime doesn't support it. Signed-off-by: Costa Shulyupin <[email protected]> --- src/hwlatdetect/hwlatdetect.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/hwlatdetect/hwlatdetect.py b/src/hwlatdetect/hwlatdetect.py index 18ca930487f0..34fe5af4844a 100755 --- a/src/hwlatdetect/hwlatdetect.py +++ b/src/hwlatdetect/hwlatdetect.py @@ -14,6 +14,7 @@ import subprocess import sys import time +from datetime import datetime version = "0.8" debugging = False @@ -255,6 +256,7 @@ def detect(self): 'private class for tracer sample data' __slots__ = 'cpu', 'timestamp', 'delta', 'inner', 'outer', 'count' prev = float('nan') + time_format = None def __init__(self, line): fields = line.split() @@ -284,8 +286,17 @@ def __init__(self, line): self.outer = int(o) self.count = int(kv["count"]) if "count" in kv else None + def format_timestamp(self): + """Format timestamp with %n (nanoseconds) support. + Float precision is safe for microseconds until year 2242 (2^33 seconds).""" + if not self.time_format: + return self.timestamp + t, ns = self.timestamp.split('.') + return datetime.fromtimestamp(float(f"{t}.{ns[:6]}")).strftime(self.time_format.replace('%n', ns)) + def __str__(self): - s = f"ts: {self.timestamp}, delta:{self.delta:.6f}, inner:{self.inner}, outer:{self.outer}, cpu:{self.cpu}" + s = f"ts: {self.format_timestamp()}" + s += f", delta:{self.delta:.6f}, inner:{self.inner}, outer:{self.outer}, cpu:{self.cpu}" return s if self.count is None else s + f", count:{self.count}" def display(self): @@ -472,6 +483,9 @@ def cleanup(self): dest="watch", help="print sample data to stdout as it arrives") + parser.add_argument("--time-format", + help="strftime format for timestamps (e.g. %%H:%%M:%%S.%%n)") + args = parser.parse_args() # need these before creating detector instance @@ -525,6 +539,8 @@ def cleanup(self): if args.watch: watch = True + Tracer.Sample.time_format = args.time_format + reportfile = args.report if args.cpulist: -- 2.53.0