Hi,

In the python journal Reader, the splitting out of monotonic and realtime stamps, has affected `get_next` function as timestamp values are no longer present in the dictionary returned. Also the new `get_monotonic` and `get_realtime` functions are not run through the converters. Equally, the 'get' method added is not run through the converters. I also noted the additional `next` method doesn't work on python2, as it clashes with the iter `next` method (python3 not affected as it changes iter method to `__next__`)

My suggestion with the python Reader `get_next` method is that the realtime and monotonic timestamps remain part of it, as these are key parts of a log entry, and two more lines in everyone's code to get them seems cumbersome. Equally also the cursor value. This also makes the output fields the same as the journalctl json format. (I agree it makes sense the _Reader object element to remain separate so close to actual C API).

I'm not sure what the best approach to the `next` method issue is…

Proposed changes below. I've add `get_cursor` to go through converters for consistency, even if not required currently.

```
diff --git a/src/python-systemd/journal.py b/src/python-systemd/journal.py
index 48f57ac..c163ff7 100644
--- a/src/python-systemd/journal.py
+++ b/src/python-systemd/journal.py
@@ -189,6 +189,21 @@ class Reader(_Reader):
         for arg in args:
             super(Reader, self).add_match(arg)

+    def get(self, key):
+        return self._convert_field(key, super(Reader, self).get(key))
+
+    def get_realtime(self):
+        return self._convert_field(
+            '__REALTIME_TIMESTAMP', super(Reader, self).get_realtime())
+
+    def get_monotonic(self):
+        return self._convert_field(
+            '__MONOTONIC_TIMESTAMP', super(Reader, self).get_monotonic())
+
+    def get_cursor(self):
+        return self._convert_field(
+            '__CURSOR', super(Reader, self).get_cursor())
+
     def get_next(self, skip=1):
         """Return the next log entry as a dictionary of fields.

@@ -197,8 +212,13 @@ class Reader(_Reader):
         Entries will be processed with converters specified during
         Reader creation.
         """
-        return self._convert_entry(
+        entry = self._convert_entry(
             super(Reader, self).get_next(skip))
+        entry['__REALTIME_TIMESTAMP'] =  self.get_realtime()
+        entry['__MONOTONIC_TIMESTAMP']  = self.get_monotonic()
+        entry['__CURSOR']  = self.get_cursor()
+
+        return entry

     def query_unique(self, field):
"""Return unique values appearing in the journal for given `field`.
```

Thanks
--
Steven Hiscocks
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to