X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fpython-systemd%2F_reader.c;h=17c001530fda0bc4313e7f225bfea2dcaf6b774f;hb=50a279f85783375416dacae7dafbcbbcd2765962;hp=2feb091c26e5a5f9bf44cc932ecf90dd87d226b3;hpb=2b01924cda5257531867119e11ee950741af2ff6;p=elogind.git diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c index 2feb091c2..17c001530 100644 --- a/src/python-systemd/_reader.c +++ b/src/python-systemd/_reader.c @@ -75,6 +75,7 @@ static PyStructSequence_Desc Monotonic_desc = { }; #endif + static void Reader_dealloc(Reader* self) { sd_journal_close(self->j); @@ -121,6 +122,7 @@ static int Reader_init(Reader *self, PyObject *args, PyObject *keywds) return set_error(r, path, "Invalid flags or path"); } + PyDoc_STRVAR(Reader_fileno__doc__, "fileno() -> int\n\n" "Get a file descriptor to poll for changes in the journal.\n" @@ -128,14 +130,15 @@ PyDoc_STRVAR(Reader_fileno__doc__, "See man:sd_journal_get_fd(3)."); static PyObject* Reader_fileno(Reader *self, PyObject *args) { - int r; - r = sd_journal_get_fd(self->j); - set_error(r, NULL, NULL); - if (r < 0) + int fd; + fd = sd_journal_get_fd(self->j); + set_error(fd, NULL, NULL); + if (fd < 0) return NULL; - return long_FromLong(r); + return long_FromLong(fd); } + PyDoc_STRVAR(Reader_reliable_fd__doc__, "reliable_fd() -> bool\n\n" "Returns True iff the journal can be polled reliably.\n" @@ -151,6 +154,7 @@ static PyObject* Reader_reliable_fd(Reader *self, PyObject *args) return PyBool_FromLong(r); } + PyDoc_STRVAR(Reader_close__doc__, "close() -> None\n\n" "Free resources allocated by this Reader object.\n" @@ -166,6 +170,30 @@ static PyObject* Reader_close(Reader *self, PyObject *args) Py_RETURN_NONE; } + +PyDoc_STRVAR(Reader_get_usage__doc__, + "get_usage() -> int\n\n" + "Returns the total disk space currently used by journal" + "files (in bytes). If `SD_JOURNAL_LOCAL_ONLY` was" + "passed when opening the journal this value will only reflect" + "the size of journal files of the local host, otherwise" + "of all hosts.\n\n" + "This method invokes sd_journal_get_usage().\n" + "See man:sd_journal_get_usage(3)."); +static PyObject* Reader_get_usage(Reader *self, PyObject *args) +{ + int r; + uint64_t bytes; + + r = sd_journal_get_usage(self->j, &bytes); + if (set_error(r, NULL, NULL)) + return NULL; + + assert_cc(sizeof(unsigned long long) == sizeof(bytes)); + return PyLong_FromUnsignedLongLong(bytes); +} + + PyDoc_STRVAR(Reader___enter____doc__, "__enter__() -> self\n\n" "Part of the context manager protocol.\n" @@ -192,6 +220,7 @@ static PyObject* Reader___exit__(Reader *self, PyObject *args) Py_RETURN_NONE; } + PyDoc_STRVAR(Reader_get_next__doc__, "get_next([skip]) -> dict\n\n" "Return dictionary of the next log entry. Optional skip value will\n" @@ -204,7 +233,7 @@ static PyObject* Reader_get_next(Reader *self, PyObject *args) int64_t skip = 1LL; int r; - if (!PyArg_ParseTuple(args, "|L", &skip)) + if (!PyArg_ParseTuple(args, "|L:_Reader.get_next", &skip)) return NULL; if (skip == 0LL) { @@ -371,6 +400,7 @@ error: return NULL; } + PyDoc_STRVAR(Reader_get_previous__doc__, "get_previous([skip]) -> dict\n\n" "Return dictionary of the previous log entry. Optional skip value\n" @@ -378,13 +408,14 @@ PyDoc_STRVAR(Reader_get_previous__doc__, static PyObject* Reader_get_previous(Reader *self, PyObject *args) { int64_t skip = 1LL; - if (!PyArg_ParseTuple(args, "|L", &skip)) + if (!PyArg_ParseTuple(args, "|L:_Reader.get_previous", &skip)) return NULL; return PyObject_CallMethod((PyObject *)self, (char*) "get_next", (char*) "L", -skip); } + PyDoc_STRVAR(Reader_add_match__doc__, "add_match(match) -> None\n\n" "Add a match to filter journal log entries. All matches of different\n" @@ -395,7 +426,7 @@ static PyObject* Reader_add_match(Reader *self, PyObject *args, PyObject *keywds { char *match; int match_len, r; - if (!PyArg_ParseTuple(args, "s#", &match, &match_len)) + if (!PyArg_ParseTuple(args, "s#:_Reader.add_match", &match, &match_len)) return NULL; r = sd_journal_add_match(self->j, match, match_len); @@ -406,6 +437,7 @@ static PyObject* Reader_add_match(Reader *self, PyObject *args, PyObject *keywds Py_RETURN_NONE; } + PyDoc_STRVAR(Reader_add_disjunction__doc__, "add_disjunction() -> None\n\n" "Inserts a logical OR between matches added before and afterwards."); @@ -419,6 +451,7 @@ static PyObject* Reader_add_disjunction(Reader *self, PyObject *args) Py_RETURN_NONE; } + PyDoc_STRVAR(Reader_flush_matches__doc__, "flush_matches() -> None\n\n" "Clear all current match filters."); @@ -428,6 +461,7 @@ static PyObject* Reader_flush_matches(Reader *self, PyObject *args) Py_RETURN_NONE; } + PyDoc_STRVAR(Reader_seek_head__doc__, "seek_head() -> None\n\n" "Jump to the beginning of the journal.\n" @@ -444,6 +478,7 @@ static PyObject* Reader_seek_head(Reader *self, PyObject *args) Py_RETURN_NONE; } + PyDoc_STRVAR(Reader_seek_tail__doc__, "seek_tail() -> None\n\n" "Jump to the end of the journal.\n" @@ -460,6 +495,7 @@ static PyObject* Reader_seek_tail(Reader *self, PyObject *args) Py_RETURN_NONE; } + PyDoc_STRVAR(Reader_seek_realtime__doc__, "seek_realtime(realtime) -> None\n\n" "Seek to nearest matching journal entry to `realtime`. Argument\n" @@ -470,7 +506,7 @@ static PyObject* Reader_seek_realtime(Reader *self, PyObject *args) uint64_t timestamp; int r; - if (!PyArg_ParseTuple(args, "d", &timedouble)) + if (!PyArg_ParseTuple(args, "d:_Reader.seek_realtime", &timedouble)) return NULL; timestamp = (uint64_t) (timedouble * 1.0E6); @@ -487,6 +523,7 @@ static PyObject* Reader_seek_realtime(Reader *self, PyObject *args) Py_RETURN_NONE; } + PyDoc_STRVAR(Reader_seek_monotonic__doc__, "seek_monotonic(monotonic[, bootid]) -> None\n\n" "Seek to nearest matching journal entry to `monotonic`. Argument\n" @@ -501,7 +538,7 @@ static PyObject* Reader_seek_monotonic(Reader *self, PyObject *args) sd_id128_t id; int r; - if (!PyArg_ParseTuple(args, "d|z", &timedouble, &bootid)) + if (!PyArg_ParseTuple(args, "d|z:_Reader.seek_monotonic", &timedouble, &bootid)) return NULL; timestamp = (uint64_t) (timedouble * 1.0E6); @@ -531,6 +568,7 @@ static PyObject* Reader_seek_monotonic(Reader *self, PyObject *args) Py_RETURN_NONE; } + PyDoc_STRVAR(Reader_wait__doc__, "wait([timeout]) -> state change (integer)\n\n" "Wait for a change in the journal. Argument `timeout` specifies\n" @@ -545,7 +583,7 @@ static PyObject* Reader_wait(Reader *self, PyObject *args, PyObject *keywds) int r; int64_t timeout = 0LL; - if (!PyArg_ParseTuple(args, "|L", &timeout)) + if (!PyArg_ParseTuple(args, "|L:_Reader.wait", &timeout)) return NULL; Py_BEGIN_ALLOW_THREADS @@ -558,6 +596,7 @@ static PyObject* Reader_wait(Reader *self, PyObject *args, PyObject *keywds) return long_FromLong(r); } + PyDoc_STRVAR(Reader_seek_cursor__doc__, "seek_cursor(cursor) -> None\n\n" "Seek to journal entry by given unique reference `cursor`."); @@ -566,7 +605,7 @@ static PyObject* Reader_seek_cursor(Reader *self, PyObject *args) const char *cursor; int r; - if (!PyArg_ParseTuple(args, "s", &cursor)) + if (!PyArg_ParseTuple(args, "s:_Reader.seek_cursor", &cursor)) return NULL; Py_BEGIN_ALLOW_THREADS @@ -577,6 +616,7 @@ static PyObject* Reader_seek_cursor(Reader *self, PyObject *args) Py_RETURN_NONE; } + static PyObject* Reader_iter(PyObject *self) { Py_INCREF(self); @@ -601,6 +641,7 @@ static PyObject* Reader_iternext(PyObject *self) } } + PyDoc_STRVAR(Reader_query_unique__doc__, "query_unique(field) -> a set of values\n\n" "Return a set of unique values appearing in journal for the\n" @@ -613,7 +654,7 @@ static PyObject* Reader_query_unique(Reader *self, PyObject *args) size_t uniq_len; PyObject *value_set, *key, *value; - if (!PyArg_ParseTuple(args, "s", &query)) + if (!PyArg_ParseTuple(args, "s:_Reader.query_unique", &query)) return NULL; Py_BEGIN_ALLOW_THREADS @@ -676,7 +717,7 @@ static PyObject* get_catalog(PyObject *self, PyObject *args) assert(!self); assert(args); - if (!PyArg_ParseTuple(args, "z", &id_)) + if (!PyArg_ParseTuple(args, "z:get_catalog", &id_)) return NULL; r = sd_id128_from_string(id_, &id); @@ -725,6 +766,7 @@ static int Reader_set_data_threshold(Reader *self, PyObject *value, void *closur return set_error(r, NULL, NULL); } + PyDoc_STRVAR(closed__doc__, "True iff journal is closed"); static PyObject* Reader_get_closed(Reader *self, void *closure) @@ -732,6 +774,7 @@ static PyObject* Reader_get_closed(Reader *self, void *closure) return PyBool_FromLong(self->j == NULL); } + static PyGetSetDef Reader_getsetters[] = { {(char*) "data_threshold", (getter) Reader_get_data_threshold, @@ -750,9 +793,9 @@ static PyMethodDef Reader_methods[] = { {"fileno", (PyCFunction) Reader_fileno, METH_NOARGS, Reader_fileno__doc__}, {"reliable_fd", (PyCFunction) Reader_reliable_fd, METH_NOARGS, Reader_reliable_fd__doc__}, {"close", (PyCFunction) Reader_close, METH_NOARGS, Reader_close__doc__}, + {"get_usage", (PyCFunction) Reader_get_usage, METH_NOARGS, Reader_get_usage__doc__}, {"__enter__", (PyCFunction) Reader___enter__, METH_NOARGS, Reader___enter____doc__}, {"__exit__", (PyCFunction) Reader___exit__, METH_VARARGS, Reader___exit____doc__}, - {"close", (PyCFunction) Reader_close, METH_NOARGS, Reader_close__doc__}, {"get_next", (PyCFunction) Reader_get_next, METH_VARARGS, Reader_get_next__doc__}, {"get_previous", (PyCFunction) Reader_get_previous, METH_VARARGS, Reader_get_previous__doc__}, {"add_match", (PyCFunction) Reader_add_match, METH_VARARGS|METH_KEYWORDS, Reader_add_match__doc__},