static PyThreadState *state;
-static PyObject *cpy_format_exception;
+static PyObject *sys_path, *cpy_format_exception;
static cpy_callback_t *cpy_config_callbacks;
static cpy_callback_t *cpy_init_callbacks;
CPY_RETURN_FROM_THREADS 0;
}
for (i = 0; i < value_list->values_len; ++i) {
- if (ds->ds->type == DS_TYPE_COUNTER) {
+ if (ds->ds[i].type == DS_TYPE_COUNTER) {
if ((long) value_list->values[i].counter == value_list->values[i].counter)
PyList_SetItem(list, i, PyInt_FromLong(value_list->values[i].counter));
else
PyList_SetItem(list, i, PyLong_FromUnsignedLongLong(value_list->values[i].counter));
- } else if (ds->ds->type == DS_TYPE_GAUGE) {
+ } else if (ds->ds[i].type == DS_TYPE_GAUGE) {
PyList_SetItem(list, i, PyFloat_FromDouble(value_list->values[i].gauge));
- } else if (ds->ds->type == DS_TYPE_DERIVE) {
+ } else if (ds->ds[i].type == DS_TYPE_DERIVE) {
if ((long) value_list->values[i].derive == value_list->values[i].derive)
PyList_SetItem(list, i, PyInt_FromLong(value_list->values[i].derive));
else
PyList_SetItem(list, i, PyLong_FromLongLong(value_list->values[i].derive));
- } else if (ds->ds->type == DS_TYPE_ABSOLUTE) {
+ } else if (ds->ds[i].type == DS_TYPE_ABSOLUTE) {
if ((long) value_list->values[i].absolute == value_list->values[i].absolute)
PyList_SetItem(list, i, PyInt_FromLong(value_list->values[i].absolute));
else
PyList_SetItem(list, i, PyLong_FromUnsignedLongLong(value_list->values[i].absolute));
} else {
Py_BEGIN_ALLOW_THREADS
- ERROR("cpy_write_callback: Unknown value type %d.", ds->ds->type);
+ ERROR("cpy_write_callback: Unknown value type %d.", ds->ds[i].type);
Py_END_ALLOW_THREADS
Py_DECREF(list);
CPY_RETURN_FROM_THREADS 0;
sstrncpy(v->data.type_instance, value_list->type_instance, sizeof(v->data.type_instance));
sstrncpy(v->data.plugin, value_list->plugin, sizeof(v->data.plugin));
sstrncpy(v->data.plugin_instance, value_list->plugin_instance, sizeof(v->data.plugin_instance));
- v->data.time = value_list->time;
- v->interval = value_list->interval;
+ v->data.time = CDTIME_T_TO_DOUBLE(value_list->time);
+ v->interval = CDTIME_T_TO_DOUBLE(value_list->interval);
Py_CLEAR(v->values);
v->values = list;
Py_CLEAR(v->meta);
sstrncpy(n->data.type_instance, notification->type_instance, sizeof(n->data.type_instance));
sstrncpy(n->data.plugin, notification->plugin, sizeof(n->data.plugin));
sstrncpy(n->data.plugin_instance, notification->plugin_instance, sizeof(n->data.plugin_instance));
- n->data.time = notification->time;
+ n->data.time = CDTIME_T_TO_DOUBLE(notification->time);
sstrncpy(n->message, notification->message, sizeof(n->message));
n->severity = notification->severity;
ret = PyObject_CallFunctionObjArgs(c->callback, n, c->data, (void *) 0); /* New reference. */
}
#endif
-static int cpy_config(oconfig_item_t *ci) {
- int i;
+static int cpy_init_python() {
char *argv = "";
- PyObject *sys, *tb;
- PyObject *sys_path;
+ PyObject *sys;
PyObject *module;
-
- /* Ok in theory we shouldn't do initialization at this point
- * but we have to. In order to give python scripts a chance
- * to register a config callback we need to be able to execute
- * python code during the config callback so we have to start
- * the interpreter here. */
- /* Do *not* use the python "thread" module at this point! */
#ifdef IS_PY3K
/* Add a builtin module, before Py_Initialize */
PyModule_AddIntConstant(module, "NOTIF_FAILURE", NOTIF_FAILURE);
PyModule_AddIntConstant(module, "NOTIF_WARNING", NOTIF_WARNING);
PyModule_AddIntConstant(module, "NOTIF_OKAY", NOTIF_OKAY);
+ return 0;
+}
+
+static int cpy_config(oconfig_item_t *ci) {
+ int i;
+ PyObject *tb;
+
+ /* Ok in theory we shouldn't do initialization at this point
+ * but we have to. In order to give python scripts a chance
+ * to register a config callback we need to be able to execute
+ * python code during the config callback so we have to start
+ * the interpreter here. */
+ /* Do *not* use the python "thread" module at this point! */
+
+ if (!Py_IsInitialized() && cpy_init_python()) return 1;
+
for (i = 0; i < ci->children_num; ++i) {
oconfig_item_t *item = ci->children + i;
WARNING("python plugin: Ignoring unknown config key \"%s\".", item->key);
}
}
- Py_DECREF(sys_path);
return 0;
}