summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2022-08-16 09:55:39 +0200
committerGitHub <noreply@github.com>2022-08-16 09:55:39 +0200
commit6320847472657fc2b4f98dd5bfeb4c826ed68a06 (patch)
treee38cee5c6a964c20f68162169c69d061e8f2c365
parent8b92ac57d6eab421708917ed585d30552737b04c (diff)
parentd6b3af95f5108ba4dbb7fc38aec39abb9e019986 (diff)
downloadpython-systemd-6320847472657fc2b4f98dd5bfeb4c826ed68a06.tar.gz
Merge pull request #92 from chrismullins/support-realtime-cutoff
Support realtime cutoff access
-rw-r--r--systemd/_reader.c44
-rw-r--r--systemd/journal.py8
2 files changed, 52 insertions, 0 deletions
diff --git a/systemd/_reader.c b/systemd/_reader.c
index a742e9f..4e8f47f 100644
--- a/systemd/_reader.c
+++ b/systemd/_reader.c
@@ -883,6 +883,48 @@ static PyObject* Reader_seek_monotonic(Reader *self, PyObject *args) {
Py_RETURN_NONE;
}
+PyDoc_STRVAR(Reader_get_start__doc__,
+ "get_start() -> int\n\n"
+ "Return the realtime timestamp of the first journal entry\n\n"
+ "in microseconds.\n\n"
+ "Wraps sd_journal_get_cutoff_realtime_usec().\n"
+ "See :manpage:`sd_journal_get_cutoff_realtime_usec(3)`.");
+static PyObject* Reader_get_start(Reader *self, PyObject *args) {
+ uint64_t start;
+ int r;
+
+ assert(self);
+ assert(!args);
+
+ r = sd_journal_get_cutoff_realtime_usec(self->j, &start, NULL);
+ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ assert_cc(sizeof(unsigned long long) == sizeof(start));
+ return PyLong_FromUnsignedLongLong(start);
+}
+
+PyDoc_STRVAR(Reader_get_end__doc__,
+ "get_end() -> int\n\n"
+ "Return the realtime timestamp of the last journal entry\n\n"
+ "in microseconds.\n\n"
+ "Wraps sd_journal_get_cutoff_realtime_usec().\n"
+ "See :manpage:`sd_journal_get_cutoff_realtime_usec(3)`.");
+static PyObject* Reader_get_end(Reader *self, PyObject *args) {
+ uint64_t end;
+ int r;
+
+ assert(self);
+ assert(!args);
+
+ r = sd_journal_get_cutoff_realtime_usec(self->j, NULL, &end);
+ if (set_error(r, NULL, NULL) < 0)
+ return NULL;
+
+ assert_cc(sizeof(unsigned long long) == sizeof(end));
+ return PyLong_FromUnsignedLongLong(end);
+}
+
PyDoc_STRVAR(Reader_process__doc__,
"process() -> state change (integer)\n\n"
@@ -1278,6 +1320,8 @@ static PyMethodDef Reader_methods[] = {
{"seek_tail", (PyCFunction) Reader_seek_tail, METH_NOARGS, Reader_seek_tail__doc__},
{"seek_realtime", (PyCFunction) Reader_seek_realtime, METH_VARARGS, Reader_seek_realtime__doc__},
{"seek_monotonic", (PyCFunction) Reader_seek_monotonic, METH_VARARGS, Reader_seek_monotonic__doc__},
+ {"_get_start", (PyCFunction) Reader_get_start, METH_NOARGS, Reader_get_start__doc__},
+ {"_get_end", (PyCFunction) Reader_get_end, METH_NOARGS, Reader_get_end__doc__},
{"process", (PyCFunction) Reader_process, METH_NOARGS, Reader_process__doc__},
{"wait", (PyCFunction) Reader_wait, METH_VARARGS, Reader_wait__doc__},
{"seek_cursor", (PyCFunction) Reader_seek_cursor, METH_VARARGS, Reader_seek_cursor__doc__},
diff --git a/systemd/journal.py b/systemd/journal.py
index db4701b..b1f2fef 100644
--- a/systemd/journal.py
+++ b/systemd/journal.py
@@ -318,6 +318,14 @@ class Reader(_Reader):
realtime = int(realtime * 1000000)
return super(Reader, self).seek_realtime(realtime)
+ def get_start(self):
+ start = super(Reader, self)._get_start()
+ return _convert_realtime(start)
+
+ def get_end(self):
+ end = super(Reader, self)._get_end()
+ return _convert_realtime(end)
+
def seek_monotonic(self, monotonic, bootid=None):
"""Seek to a matching journal entry nearest to `monotonic` time.