systemd-python: implement this_boot/this_machine in Python

This commit is contained in:
Steven Hiscocks
2013-02-15 17:16:56 +00:00
committed by Zbigniew Jędrzejewski-Szmek
parent 25523db4e1
commit 6a71de70e5
2 changed files with 9 additions and 68 deletions

View File

@@ -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 */
};

View File

@@ -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