X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fpyvalues.c;h=78e6cf9d450413ed242fb73e6126a09f4dd86057;hb=2cbd37356b2a3d3890b335d01e0d563269b448be;hp=fd0788221fbfc1aac60d92cba0c074a8e1ac5b48;hpb=e1cbbf3d7bce76be363f28f83ac87c59156ef2a2;p=collectd.git diff --git a/src/pyvalues.c b/src/pyvalues.c index fd078822..78e6cf9d 100644 --- a/src/pyvalues.c +++ b/src/pyvalues.c @@ -99,7 +99,7 @@ static PyObject *cpy_common_repr(PyObject *s) { if (self->time != 0) { CPY_STRCAT(&ret, l_time); - tmp = PyInt_FromLong(self->time); + tmp = PyFloat_FromDouble(self->time); CPY_SUBSTITUTE(PyObject_Repr, tmp, tmp); CPY_STRCAT_AND_DEL(&ret, tmp); } @@ -362,14 +362,13 @@ static PyObject *Values_new(PyTypeObject *type, PyObject *args, PyObject *kwds) static int Values_init(PyObject *s, PyObject *args, PyObject *kwds) { Values *self = (Values *) s; - int interval = 0; - double time = 0; + double interval = 0, time = 0; PyObject *values = NULL, *meta = NULL, *tmp; char *type = NULL, *plugin_instance = NULL, *type_instance = NULL, *plugin = NULL, *host = NULL; static char *kwlist[] = {"type", "values", "plugin_instance", "type_instance", "plugin", "host", "time", "interval", "meta", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|etOetetetetdiO", kwlist, + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|etOetetetetddO", kwlist, NULL, &type, &values, NULL, &plugin_instance, NULL, &type_instance, NULL, &plugin, NULL, &host, &time, &interval, &meta)) return -1; @@ -420,7 +419,7 @@ static meta_data_t *cpy_build_meta(PyObject *meta) { meta_data_t *m = NULL; PyObject *l; - if (!meta) + if ((meta == NULL) || (meta == Py_None)) return NULL; l = PyDict_Items(meta); /* New reference. */ @@ -428,8 +427,13 @@ static meta_data_t *cpy_build_meta(PyObject *meta) { cpy_log_exception("building meta data"); return NULL; } - m = meta_data_create(); s = PyList_Size(l); + if (s <= 0) { + Py_XDECREF(l); + return NULL; + } + + m = meta_data_create(); for (i = 0; i < s; ++i) { const char *string, *keystring; PyObject *key, *value, *item, *tmp; @@ -504,13 +508,12 @@ static PyObject *Values_dispatch(Values *self, PyObject *args, PyObject *kwds) { value_t *value; value_list_t value_list = VALUE_LIST_INIT; PyObject *values = self->values, *meta = self->meta; - double time = self->data.time; - int interval = self->interval; + double time = self->data.time, interval = self->interval; char *host = NULL, *plugin = NULL, *plugin_instance = NULL, *type = NULL, *type_instance = NULL; static char *kwlist[] = {"type", "values", "plugin_instance", "type_instance", "plugin", "host", "time", "interval", "meta", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|etOetetetetdiO", kwlist, + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|etOetetetetddO", kwlist, NULL, &type, &values, NULL, &plugin_instance, NULL, &type_instance, NULL, &plugin, NULL, &host, &time, &interval, &meta)) return NULL; @@ -589,8 +592,8 @@ static PyObject *Values_dispatch(Values *self, PyObject *args, PyObject *kwds) { value_list.values = value; value_list.meta = cpy_build_meta(meta); value_list.values_len = size; - value_list.time = time; - value_list.interval = interval; + value_list.time = DOUBLE_TO_CDTIME_T(time); + value_list.interval = DOUBLE_TO_CDTIME_T(interval); if (value_list.host[0] == 0) sstrncpy(value_list.host, hostname_g, sizeof(value_list.host)); if (value_list.plugin[0] == 0) @@ -614,8 +617,7 @@ static PyObject *Values_write(Values *self, PyObject *args, PyObject *kwds) { value_t *value; value_list_t value_list = VALUE_LIST_INIT; PyObject *values = self->values, *meta = self->meta; - double time = self->data.time; - int interval = self->interval; + double time = self->data.time, interval = self->interval; char *host = NULL, *plugin = NULL, *plugin_instance = NULL, *type = NULL, *type_instance = NULL, *dest = NULL; static char *kwlist[] = {"destination", "type", "values", "plugin_instance", "type_instance", @@ -693,8 +695,8 @@ static PyObject *Values_write(Values *self, PyObject *args, PyObject *kwds) { } value_list.values = value; value_list.values_len = size; - value_list.time = time; - value_list.interval = interval; + value_list.time = DOUBLE_TO_CDTIME_T(time); + value_list.interval = DOUBLE_TO_CDTIME_T(interval); value_list.meta = cpy_build_meta(meta);; if (value_list.host[0] == 0) sstrncpy(value_list.host, hostname_g, sizeof(value_list.host)); @@ -732,7 +734,7 @@ static PyObject *Values_repr(PyObject *s) { ret = cpy_common_repr(s); if (self->interval != 0) { CPY_STRCAT(&ret, l_interval); - tmp = PyInt_FromLong(self->interval); + tmp = PyFloat_FromDouble(self->interval); CPY_SUBSTITUTE(PyObject_Repr, tmp, tmp); CPY_STRCAT_AND_DEL(&ret, tmp); } @@ -770,7 +772,7 @@ static void Values_dealloc(PyObject *self) { } static PyMemberDef Values_members[] = { - {"interval", T_INT, offsetof(Values, interval), 0, interval_doc}, + {"interval", T_DOUBLE, offsetof(Values, interval), 0, interval_doc}, {"values", T_OBJECT_EX, offsetof(Values, values), 0, values_doc}, {"meta", T_OBJECT_EX, offsetof(Values, meta), 0, meta_doc}, {NULL} @@ -885,7 +887,7 @@ static PyObject *Notification_dispatch(Notification *self, PyObject *args, PyObj NULL, &plugin, NULL, &host, &t, &severity)) return NULL; - notification.time = t; + notification.time = DOUBLE_TO_CDTIME_T(t); notification.severity = severity; sstrncpy(notification.message, message ? message : self->message, sizeof(notification.message)); sstrncpy(notification.host, host ? host : self->data.host, sizeof(notification.host)); @@ -907,8 +909,8 @@ static PyObject *Notification_dispatch(Notification *self, PyObject *args, PyObj return NULL; } - if (notification.time < 1) - notification.time = time(0); + if (notification.time == 0) + notification.time = cdtime(); if (notification.host[0] == 0) sstrncpy(notification.host, hostname_g, sizeof(notification.host)); if (notification.plugin[0] == 0)