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 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);
  
  
  



reply via email to

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