[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[py-rrdtool-cvs] [Commit] py-rrdtool/src _rrdtoolmodule.c
From: |
Hye-Shik Chang <address@hidden> |
Subject: |
[py-rrdtool-cvs] [Commit] py-rrdtool/src _rrdtoolmodule.c |
Date: |
Thu, 23 May 2002 23:27:38 -0400 |
perky 02/05/23 23:27:38
Modified: src _rrdtoolmodule.c
Log:
add tune, last, resize, info implementation
Revision Changes Path
1.4 +192 -5 py-rrdtool/src/_rrdtoolmodule.c
Index: _rrdtoolmodule.c
===================================================================
RCS file: /cvsroot/py-rrdtool/py-rrdtool/src/_rrdtoolmodule.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- _rrdtoolmodule.c 23 May 2002 23:11:18 -0000 1.3
+++ _rrdtoolmodule.c 24 May 2002 03:27:38 -0000 1.4
@@ -4,17 +4,18 @@
* RRDTool Python binding
*
* Author : Hye-Shik Chang <address@hidden>
- * Date : $Date: 2002/05/23 23:11:18 $
+ * Date : $Date: 2002/05/24 03:27:38 $
* Created : 23 May 2002
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*/
static char *version =
-"$Id: _rrdtoolmodule.c,v 1.3 2002/05/23 23:11:18 perky Exp $";
+"$Id: _rrdtoolmodule.c,v 1.4 2002/05/24 03:27:38 perky Exp $";
#include "Python.h"
#include "rrd.h"
+#include "rrd_extra.h"
static PyObject *ErrorObject;
@@ -239,6 +240,188 @@
return r;
}
+static char PyRRD_tune__doc__[] =
+"tune(args...): Modify some basic properties of a Round Robin Database\n\
+ tune filename [--heartbeat|-h ds-name:heartbeat] \
+[--minimum|-i ds-name:min] [--maximum|-a ds-name:max] \
+[--data-source-type|-d ds-name:DST] [--data-source-rename|-r
old-name:new-name]";
+
+static PyObject *
+PyRRD_tune(PyObject *self, PyObject *args)
+{
+ int argc;
+ char **argv;
+ PyObject *r;
+
+ if (create_args("tune", args, &argc, &argv) < 0)
+ return NULL;
+
+ if (rrd_tune(argc, argv) == -1) {
+ PyErr_SetString(ErrorObject, rrd_get_error());
+ rrd_clear_error();
+ r = NULL;
+ } else {
+ Py_INCREF(Py_None);
+ r = Py_None;
+ }
+
+ destroy_args(&argv);
+ return r;
+}
+
+static char PyRRD_last__doc__[] =
+"last(filename): Return the timestamp of the last data sample in an RRD";
+
+static PyObject *
+PyRRD_last(PyObject *self, PyObject *args)
+{
+ int argc;
+ char **argv;
+ int ts;
+ PyObject *r;
+
+ if (create_args("last", args, &argc, &argv) < 0)
+ return NULL;
+
+ if ((ts = rrd_last(argc, argv)) == -1) {
+ PyErr_SetString(ErrorObject, rrd_get_error());
+ rrd_clear_error();
+ r = NULL;
+ } else
+ r = PyInt_FromLong((long)ts);
+
+ destroy_args(&argv);
+ return r;
+}
+
+static char PyRRD_resize__doc__[] =
+"resize(args...): alters the size of an RRA.\n\
+ resize filename rra-num GROW|SHRINK rows";
+
+static PyObject *
+PyRRD_resize(PyObject *self, PyObject *args)
+{
+ int argc;
+ char **argv;
+ int ts;
+ PyObject *r;
+
+ if (create_args("resize", args, &argc, &argv) < 0)
+ return NULL;
+
+ if ((ts = rrd_resize(argc, argv)) == -1) {
+ PyErr_SetString(ErrorObject, rrd_get_error());
+ rrd_clear_error();
+ r = NULL;
+ } else {
+ Py_INCREF(Py_None);
+ r = Py_None;
+ }
+
+ destroy_args(&argv);
+ return r;
+}
+
+static char PyRRD_info__doc__[] =
+"info(filename): extract header information from an rrd";
+
+static PyObject *
+PyRRD_info(PyObject *self, PyObject *args)
+{
+ PyObject *r, *t, *ds;
+ rrd_t rrd;
+ FILE *in_file;
+ char *filename;
+ int i, j;
+
+ if (! PyArg_ParseTuple(args, "s:info", &filename))
+ return NULL;
+
+ if (rrd_open(filename, &in_file, &rrd, RRD_READONLY) == -1) {
+ PyErr_SetString(ErrorObject, rrd_get_error());
+ rrd_clear_error();
+ return NULL;
+ }
+ fclose(in_file);
+
+#define DICTSET_STR(dict, name, value) \
+ t = PyString_FromString(value); \
+ PyDict_SetItemString(dict, name, t); \
+ Py_DECREF(t);
+
+#define DICTSET_CNT(dict, name, value) \
+ t = PyInt_FromLong((long)value); \
+ PyDict_SetItemString(dict, name, t); \
+ Py_DECREF(t);
+
+#define DICTSET_VAL(dict, name, value) \
+ t = PyFloat_FromDouble((double)value); \
+ PyDict_SetItemString(dict, name, t); \
+ Py_DECREF(t);
+
+ r = PyDict_New();
+
+ DICTSET_STR(r, "filename", filename);
+ DICTSET_STR(r, "rrd_version", rrd.stat_head->version);
+ DICTSET_CNT(r, "step", rrd.stat_head->pdp_step);
+ DICTSET_CNT(r, "last_update", rrd.live_head->last_up);
+
+ ds = PyList_New(rrd.stat_head->ds_cnt);
+ PyDict_SetItemString(r, "ds", ds);
+ Py_DECREF(ds);
+
+ for (i = 0; i < rrd.stat_head->ds_cnt; i++) {
+ PyObject *d;
+
+ d = PyDict_New();
+ PyList_SET_ITEM(ds, i, d);
+
+ DICTSET_STR(d, "type", rrd.ds_def[i].dst);
+ DICTSET_CNT(d, "minimal_heartbeat",
rrd.ds_def[i].par[DS_mrhb_cnt].u_cnt);
+ DICTSET_VAL(d, "min", rrd.ds_def[i].par[DS_min_val].u_val);
+ DICTSET_VAL(d, "max", rrd.ds_def[i].par[DS_max_val].u_val);
+ DICTSET_STR(d, "last_ds", rrd.pdp_prep[i].last_ds);
+ DICTSET_VAL(d, "value", rrd.pdp_prep[i].scratch[PDP_val].u_val);
+ DICTSET_CNT(d, "unknown_sec",
rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt);
+ }
+
+ ds = PyList_New(rrd.stat_head->rra_cnt);
+ PyDict_SetItemString(r, "rra", ds);
+ Py_DECREF(ds);
+
+ for (i = 0; i < rrd.stat_head->rra_cnt; i++) {
+ PyObject *d, *cdp;
+
+ d = PyDict_New();
+ PyList_SET_ITEM(ds, i, d);
+
+ DICTSET_STR(d, "cf", rrd.rra_def[i].cf_nam);
+ DICTSET_CNT(d, "rows", rrd.rra_def[i].row_cnt);
+ DICTSET_CNT(d, "pdp_per_row", rrd.rra_def[i].pdp_cnt);
+ DICTSET_VAL(d, "xff", rrd.rra_def[i].par[RRA_cdp_xff_val].u_val);
+
+ cdp = PyList_New(rrd.stat_head->ds_cnt);
+ PyDict_SetItemString(d, "cdp_prep", cdp);
+ Py_DECREF(cdp);
+
+ for (j = 0; j < rrd.stat_head->ds_cnt; j++) {
+ PyObject *cdd;
+
+ cdd = PyDict_New();
+ PyList_SET_ITEM(cdp, j, cdd);
+
+ DICTSET_VAL(cdd, "value",
+
rrd.cdp_prep[i*rrd.stat_head->ds_cnt+j].scratch[CDP_val].u_val);
+ DICTSET_CNT(cdd, "unknown_datapoints",
+
rrd.cdp_prep[i*rrd.stat_head->ds_cnt+j].scratch[CDP_unkn_pdp_cnt].u_cnt);
+ }
+ }
+
+ rrd_free(&rrd);
+
+ return r;
+}
+
/* List of methods defined in the module */
#define meth(name, func, doc) {name, (PyCFunction)func, METH_VARARGS, doc}
@@ -247,6 +430,10 @@
meth("update", PyRRD_update, PyRRD_update__doc__),
meth("fetch", PyRRD_fetch, PyRRD_fetch__doc__),
meth("graph", PyRRD_graph, PyRRD_graph__doc__),
+ meth("tune", PyRRD_tune, PyRRD_tune__doc__),
+ meth("last", PyRRD_last, PyRRD_last__doc__),
+ meth("resize", PyRRD_resize, PyRRD_resize__doc__),
+ meth("info", PyRRD_info, PyRRD_info__doc__),
{NULL, NULL},
};
@@ -272,9 +459,9 @@
d = PyModule_GetDict(m);
SET_STRCONSTANT(d, version);
- SET_INTCONSTANT(d, ABSOLUTE_TIME);
+/* SET_INTCONSTANT(d, ABSOLUTE_TIME);
SET_INTCONSTANT(d, RELATIVE_TO_START_TIME);
- SET_INTCONSTANT(d, RELATIVE_TO_END_TIME);
+ SET_INTCONSTANT(d, RELATIVE_TO_END_TIME); */
ErrorObject = PyErr_NewException("_rrdtool.error", NULL, NULL);
PyDict_SetItemString(d, "error", ErrorObject);