py-rrdtool-cvs
[Top][All Lists]
Advanced

[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},
   };
   
  
  
  



reply via email to

[Prev in Thread] Current Thread [Next in Thread]