mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 00:47:10 +09:00
systemd-python: implement this_boot/this_machine in Python
This commit is contained in:
committed by
Zbigniew Jędrzejewski-Szmek
parent
25523db4e1
commit
6a71de70e5
@@ -671,70 +671,6 @@ Journal_query_unique(Journal *self, PyObject *args)
|
||||
}
|
||||
#endif //def SD_JOURNAL_FOREACH_UNIQUE
|
||||
|
||||
PyDoc_STRVAR(Journal_this_boot__doc__,
|
||||
"this_boot() -> None\n\n"
|
||||
"Sets match filter for the current _BOOT_ID.");
|
||||
static PyObject *
|
||||
Journal_this_boot(Journal *self, PyObject *args)
|
||||
{
|
||||
sd_id128_t sd_id;
|
||||
int r;
|
||||
r = sd_id128_get_boot(&sd_id);
|
||||
if (r == -EIO) {
|
||||
PyErr_SetString(PyExc_IOError, "Error getting current boot ID");
|
||||
return NULL;
|
||||
} else if (r < 0) {
|
||||
PyErr_SetString(PyExc_RuntimeError, "Error getting current boot ID");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char bootid[33];
|
||||
sd_id128_to_string(sd_id, bootid);
|
||||
|
||||
PyObject *arg, *keywds;
|
||||
arg = PyTuple_New(0);
|
||||
keywds = Py_BuildValue("{s:s}", "_BOOT_ID", bootid);
|
||||
Journal_add_match(self, arg, keywds);
|
||||
Py_DECREF(arg);
|
||||
Py_DECREF(keywds);
|
||||
if (PyErr_Occurred())
|
||||
return NULL;
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(Journal_this_machine__doc__,
|
||||
"this_machine() -> None\n\n"
|
||||
"Sets match filter for the current _MACHINE_ID.");
|
||||
static PyObject *
|
||||
Journal_this_machine(Journal *self, PyObject *args)
|
||||
{
|
||||
sd_id128_t sd_id;
|
||||
int r;
|
||||
r = sd_id128_get_machine(&sd_id);
|
||||
if (r == -EIO) {
|
||||
PyErr_SetString(PyExc_IOError, "Error getting current boot ID");
|
||||
return NULL;
|
||||
} else if (r < 0) {
|
||||
PyErr_SetString(PyExc_RuntimeError, "Error getting current boot ID");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char machineid[33];
|
||||
sd_id128_to_string(sd_id, machineid);
|
||||
|
||||
PyObject *arg, *keywds;
|
||||
arg = PyTuple_New(0);
|
||||
keywds = Py_BuildValue("{s:s}", "_MACHINE_ID", machineid);
|
||||
Journal_add_match(self, arg, keywds);
|
||||
Py_DECREF(arg);
|
||||
Py_DECREF(keywds);
|
||||
if (PyErr_Occurred())
|
||||
return NULL;
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
Journal_get_data_threshold(Journal *self, void *closure)
|
||||
{
|
||||
@@ -818,10 +754,6 @@ static PyMethodDef Journal_methods[] = {
|
||||
{"query_unique", (PyCFunction)Journal_query_unique, METH_VARARGS,
|
||||
Journal_query_unique__doc__},
|
||||
#endif
|
||||
{"this_boot", (PyCFunction)Journal_this_boot, METH_NOARGS,
|
||||
Journal_this_boot__doc__},
|
||||
{"this_machine", (PyCFunction)Journal_this_machine, METH_NOARGS,
|
||||
Journal_this_machine__doc__},
|
||||
{NULL} /* Sentinel */
|
||||
};
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ from syslog import (LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR,
|
||||
from ._journal import sendv, stream_fd
|
||||
from ._reader import (_Journal, NOP, APPEND, INVALIDATE,
|
||||
LOCAL_ONLY, RUNTIME_ONLY, SYSTEM_ONLY)
|
||||
from . import id128 as _id128
|
||||
|
||||
_MONOTONIC_CONVERTER = lambda x: datetime.timedelta(microseconds=float(x))
|
||||
_REALTIME_CONVERTER = lambda x: datetime.datetime.fromtimestamp(float(x)/1E6)
|
||||
@@ -123,6 +124,14 @@ class Journal(_Journal):
|
||||
else:
|
||||
raise ValueError("Log level must be 0 <= level <= 7")
|
||||
|
||||
def this_boot(self):
|
||||
"""Add match for _BOOT_ID equal to current boot ID."""
|
||||
self.add_match(_BOOT_ID=_id128.get_boot().hex)
|
||||
|
||||
def this_machine(self):
|
||||
"""Add match for _MACHINE_ID equal to the ID of this machine."""
|
||||
self.add_match(_MACHINE_ID=_id128.get_machine().hex)
|
||||
|
||||
def _make_line(field, value):
|
||||
if isinstance(value, bytes):
|
||||
return field.encode('utf-8') + b'=' + value
|
||||
|
||||
Reference in New Issue
Block a user