[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 19:11:20 -0400 |
perky 02/05/23 19:11:18
Modified: src _rrdtoolmodule.c
Log:
add 'fetch', 'graph' implementation
Revision Changes Path
1.3 +138 -7 py-rrdtool/src/_rrdtoolmodule.c
Index: _rrdtoolmodule.c
===================================================================
RCS file: /cvsroot/py-rrdtool/py-rrdtool/src/_rrdtoolmodule.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- _rrdtoolmodule.c 23 May 2002 21:05:05 -0000 1.2
+++ _rrdtoolmodule.c 23 May 2002 23:11:18 -0000 1.3
@@ -4,14 +4,14 @@
* RRDTool Python binding
*
* Author : Hye-Shik Chang <address@hidden>
- * Date : $Date: 2002/05/23 21:05:05 $
+ * Date : $Date: 2002/05/23 23:11:18 $
* Created : 23 May 2002
*
- * $Revision: 1.2 $
+ * $Revision: 1.3 $
*/
static char *version =
-"$Id: _rrdtoolmodule.c,v 1.2 2002/05/23 21:05:05 perky Exp $";
+"$Id: _rrdtoolmodule.c,v 1.3 2002/05/23 23:11:18 perky Exp $";
#include "Python.h"
#include "rrd.h"
@@ -42,6 +42,9 @@
(*argv)[0] = command;
*argc = size + 1;
+ /* reset getopt state */
+ opterr = optind = 0;
+
return 0;
}
@@ -68,7 +71,7 @@
if (create_args("create", args, &argc, &argv) < 0)
return NULL;
- if (rrd_create(argc, argv) < 0) {
+ if (rrd_create(argc, argv) == -1) {
PyErr_SetString(ErrorObject, rrd_get_error());
rrd_clear_error();
r = NULL;
@@ -96,7 +99,7 @@
if (create_args("update", args, &argc, &argv) < 0)
return NULL;
- if (rrd_update(argc, argv) < 0) {
+ if (rrd_update(argc, argv) == -1) {
PyErr_SetString(ErrorObject, rrd_get_error());
rrd_clear_error();
r = NULL;
@@ -109,13 +112,141 @@
return r;
}
+static char PyRRD_fetch__doc__[] =
+"fetch(args..): fetch data from an rrd.\n\
+ fetch filename CF [--resolution|-r resolution] \
+[--start|-s start] [--end|-e end]";
+
+static PyObject *
+PyRRD_fetch(PyObject *self, PyObject *args)
+{
+ int argc;
+ char **argv;
+ PyObject *r;
+
+ time_t start, end;
+ unsigned long step, ds_cnt;
+ rrd_value_t *data, *datai;
+ char **ds_namv;
+
+ if (create_args("fetch", args, &argc, &argv) < 0)
+ return NULL;
+
+ if (rrd_fetch(argc, argv, &start, &end, &step, &ds_cnt, &ds_namv, &data)
== -1) {
+ PyErr_SetString(ErrorObject, rrd_get_error());
+ rrd_clear_error();
+ r = NULL;
+ } else {
+ PyObject *range_tup, *dsnam_tup, *data_list, *t;
+ int i, j, row = ((end - start)/step + 1);
+ /* Return :
+ ((start, end, step), (name1, name2, ...), [(data1, data2, ..),
...]) */
+
+ r = PyTuple_New(3);
+ range_tup = PyTuple_New(3);
+ dsnam_tup = PyTuple_New(ds_cnt);
+ data_list = PyList_New(row);
+ PyTuple_SET_ITEM(r, 0, range_tup);
+ PyTuple_SET_ITEM(r, 1, dsnam_tup);
+ PyTuple_SET_ITEM(r, 2, data_list);
+
+ datai = data;
+
+ PyTuple_SET_ITEM(range_tup, 0, PyInt_FromLong((long)start));
+ PyTuple_SET_ITEM(range_tup, 1, PyInt_FromLong((long)end));
+ PyTuple_SET_ITEM(range_tup, 2, PyInt_FromLong((long)step));
+
+ for (i = 0; i < ds_cnt; i++)
+ PyTuple_SET_ITEM(dsnam_tup, i, PyString_FromString(ds_namv[i]));
+
+ for (i = 0; i < row; i ++) {
+ t = PyTuple_New(ds_cnt);
+ PyList_SET_ITEM(data_list, i, t);
+ for (j = 0; j < ds_cnt; j++)
+ PyTuple_SET_ITEM(t, j,
PyFloat_FromDouble((double)*(datai++)));
+ }
+
+ for (i = 0; i < ds_cnt; i++)
+ free(ds_namv[i]);
+ free(ds_namv); /* rrdtool don't use PyMem_Malloc :) */
+ free(data);
+ }
+
+ destroy_args(&argv);
+ return r;
+}
+
+static char PyRRD_graph__doc__[] =
+"graph(args..): Create a graph based on data from one or several RRD\n\
+ graph filename [-s|--start seconds] \
+[-e|--end seconds] [-x|--x-grid x-axis grid and label] \
+[-y|--y-grid y-axis grid and label] [--alt-y-grid] [--alt-y-mrtg] \
+[--alt-autoscale] [--alt-autoscale-max] [--units-exponent] value \
+[-v|--vertical-label text] [-w|--width pixels] [-h|--height pixels] \
+[-i|--interlaced] \
+[-f|--imginfo formatstring] [-a|--imgformat GIF|PNG|GD] \
+[-B|--background value] [-O|--overlay value] \
+[-U|--unit value] [-z|--lazy] [-o|--logarithmic] \
+[-u|--upper-limit value] [-l|--lower-limit value] \
+[-g|--no-legend] [-r|--rigid] [--step value] \
+[-b|--base value] [-c|--color COLORTAG#rrggbb] \
+[-t|--title title] [DEF:vname=rrd:ds-name:CF] \
+[CDEF:vname=rpn-expression] [PRINT:vname:CF:format] \
+[GPRINT:vname:CF:format] [COMMENT:text] \
+[HRULE:value#rrggbb[:legend]] [VRULE:time#rrggbb[:legend]] \
+[LINE{1|2|3}:vname[#rrggbb[:legend]]] \
+[AREA:vname[#rrggbb[:legend]]] \
+[STACK:vname[#rrggbb[:legend]]]";
+
+static PyObject *
+PyRRD_graph(PyObject *self, PyObject *args)
+{
+ int argc, xsize, ysize, i;
+ char **argv, **calcpr;
+ PyObject *r;
+
+ if (create_args("graph", args, &argc, &argv) < 0)
+ return NULL;
+
+ if (rrd_graph(argc, argv, &calcpr, &xsize, &ysize) == -1) {
+ PyErr_SetString(ErrorObject, rrd_get_error());
+ rrd_clear_error();
+ r = NULL;
+ } else {
+ r = PyTuple_New(3);
+
+ PyTuple_SET_ITEM(r, 0, PyInt_FromLong((long)xsize));
+ PyTuple_SET_ITEM(r, 1, PyInt_FromLong((long)ysize));
+
+ if (calcpr) {
+ PyObject *e = PyList_New(0), *t;
+ PyTuple_SET_ITEM(r, 2, e);
+
+ for(i = 0; calcpr[i]; i++) {
+ t = PyString_FromString(calcpr[i]);
+ PyList_Append(e, t);
+ Py_DECREF(t);
+ free(calcpr[i]);
+ }
+ free(calcpr);
+ } else {
+ Py_INCREF(Py_None);
+ PyTuple_SET_ITEM(r, 2, Py_None);
+ }
+ }
+
+ destroy_args(&argv);
+ return r;
+}
/* List of methods defined in the module */
#define meth(name, func, doc) {name, (PyCFunction)func, METH_VARARGS, doc}
static struct PyMethodDef _rrdtool_methods[] = {
- meth("create", PyRRD_create, PyRRD_create__doc__),
- meth("update", PyRRD_update, PyRRD_update__doc__),
+ meth("create", PyRRD_create, PyRRD_create__doc__),
+ meth("update", PyRRD_update, PyRRD_update__doc__),
+ meth("fetch", PyRRD_fetch, PyRRD_fetch__doc__),
+ meth("graph", PyRRD_graph, PyRRD_graph__doc__),
{NULL, NULL},
};