public inbox for linux-rt-users@vger.kernel.org
 help / color / mirror / Atom feed
From: Costa Shulyupin <costa.shul@redhat.com>
To: linux-rt-users <linux-rt-users@vger.kernel.org>
Cc: John Kacur <jkacur@redhat.com>,
	Costa Shulyupin <costa.shul@redhat.com>,
	"Luis Claudio R. Goncalves" <lgoncalv@redhat.com>
Subject: [PATCH v1] rt-tests: hwlatdetect: Add --time-format argument
Date: Mon, 23 Mar 2026 18:03:46 +0200	[thread overview]
Message-ID: <20260323160346.230639-1-costa.shul@redhat.com> (raw)

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 <costa.shul@redhat.com>
---
 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


                 reply	other threads:[~2026-03-23 16:04 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260323160346.230639-1-costa.shul@redhat.com \
    --to=costa.shul@redhat.com \
    --cc=jkacur@redhat.com \
    --cc=lgoncalv@redhat.com \
    --cc=linux-rt-users@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox