X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=bindings%2Ftcl%2Ftclrrd.c;h=92772571423a4ac88b698b4569080712e0da02d9;hb=71db1316eb097bcad2005ca95f430b9ecedaa760;hp=a58a6c266ab8327679f86b90ed0b4600dc6ce861;hpb=657d850f957a2dd703e3aab2d7cde4b0f9711c15;p=rrdtool.git diff --git a/bindings/tcl/tclrrd.c b/bindings/tcl/tclrrd.c index a58a6c2..9277257 100644 --- a/bindings/tcl/tclrrd.c +++ b/bindings/tcl/tclrrd.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "../../src/rrd_tool.h" #include "../../src/rrd_format.h" @@ -68,10 +69,8 @@ static void getopt_cleanup( } static void getopt_free_element( - argv2, - argn) - char *argv2[]; - int argn; + char *argv2[], + int argn) { if (argv2[argn] != NULL) { free(argv2[argn]); @@ -80,10 +79,8 @@ static void getopt_free_element( } static void getopt_squieeze( - argc, - argv2) - int *argc; - char *argv2[]; + int *argc, + char *argv2[]) { int i, null_i = 0, argc_tmp = *argc; @@ -100,7 +97,7 @@ static void getopt_squieeze( /* Thread-safe version */ static int Rrd_Create( - ClientData clientData, + ClientData __attribute__((unused)) clientData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) @@ -111,7 +108,7 @@ static int Rrd_Create( time_t last_up = time(NULL) - 10; long int long_tmp; unsigned long int pdp_step = 300; - struct rrd_time_value last_up_tv; + rrd_time_value_t last_up_tv; argv2 = getopt_init(argc, argv); @@ -124,7 +121,7 @@ static int Rrd_Create( getopt_cleanup(argc, argv2); return TCL_ERROR; } - if ((parsetime_error = parsetime(argv2[argv_i], &last_up_tv))) { + if ((parsetime_error = rrd_parsetime(argv2[argv_i], &last_up_tv))) { Tcl_AppendResult(interp, "RRD Error: invalid time format: '", argv2[argv_i], "'", (char *) NULL); getopt_cleanup(argc, argv2); @@ -189,7 +186,8 @@ static int Rrd_Create( return TCL_ERROR; } - rrd_create_r(argv2[1], pdp_step, last_up, argc - 2, argv2 + 2); + rrd_create_r(argv2[1], pdp_step, last_up, argc - 2, + (const char **)argv2 + 2); getopt_cleanup(argc, argv2); @@ -207,7 +205,7 @@ static int Rrd_Create( /* Thread-safe version */ static int Rrd_Dump( - ClientData clientData, + ClientData __attribute__((unused)) clientData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) @@ -232,11 +230,35 @@ static int Rrd_Dump( return TCL_OK; } +/* Thread-safe version */ +static int Rrd_Flushcached( + ClientData __attribute__((unused)) clientData, + Tcl_Interp *interp, + int argc, + CONST84 char *argv[]) +{ + if (argc < 2) { + Tcl_AppendResult(interp, "RRD Error: needs rrd filename", + (char *) NULL); + return TCL_ERROR; + } + + rrd_cmd_flush(argc, (char**)argv); + + if (rrd_test_error()) { + Tcl_AppendResult(interp, "RRD Error: ", + rrd_get_error(), (char *) NULL); + rrd_clear_error(); + return TCL_ERROR; + } + + return TCL_OK; +} /* Thread-safe version */ static int Rrd_Last( - ClientData clientData, + ClientData __attribute__((unused)) clientData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) @@ -267,7 +289,7 @@ static int Rrd_Last( /* Thread-safe version */ static int Rrd_Update( - ClientData clientData, + ClientData __attribute__((unused)) clientData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) @@ -322,7 +344,7 @@ static int Rrd_Update( return TCL_ERROR; } - rrd_update_r(argv2[1], template, argc - 2, argv2 + 2); + rrd_update_r(argv2[1], template, argc - 2, (const char **)argv2 + 2); if (template != NULL) { free(template); @@ -340,7 +362,7 @@ static int Rrd_Update( } static int Rrd_Lastupdate( - ClientData clientData, + ClientData __attribute__((unused)) clientData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) @@ -353,8 +375,15 @@ static int Rrd_Lastupdate( Tcl_Obj *listPtr; unsigned long ds_cnt, i; + /* TODO: support for rrdcached */ + if (argc != 2) { + Tcl_AppendResult(interp, "RRD Error: needs a single rrd filename", + (char *) NULL); + return TCL_ERROR; + } + argv2 = getopt_init(argc, argv); - if (rrd_lastupdate(argc - 1, argv2, &last_update, + if (rrd_lastupdate_r(argv2[1], &last_update, &ds_cnt, &ds_namv, &last_ds) == 0) { listPtr = Tcl_GetObjResult(interp); for (i = 0; i < ds_cnt; i++) { @@ -382,7 +411,7 @@ static int Rrd_Lastupdate( } static int Rrd_Fetch( - ClientData clientData, + ClientData __attribute__((unused)) clientData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) @@ -427,7 +456,7 @@ static int Rrd_Fetch( static int Rrd_Graph( - ClientData clientData, + ClientData __attribute__((unused)) clientData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) @@ -537,7 +566,7 @@ static int Rrd_Graph( static int Rrd_Tune( - ClientData clientData, + ClientData __attribute__((unused)) clientData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) @@ -561,7 +590,7 @@ static int Rrd_Tune( static int Rrd_Resize( - ClientData clientData, + ClientData __attribute__((unused)) clientData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) @@ -585,7 +614,7 @@ static int Rrd_Resize( static int Rrd_Restore( - ClientData clientData, + ClientData __attribute__((unused)) clientData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) @@ -621,6 +650,7 @@ typedef struct { static CmdInfo rrdCmds[] = { {"Rrd::create", Rrd_Create, 1}, /* Thread-safe version */ {"Rrd::dump", Rrd_Dump, 0}, /* Thread-safe version */ + {"Rrd::flushcached", Rrd_Flushcached, 0}, {"Rrd::last", Rrd_Last, 0}, /* Thread-safe version */ {"Rrd::lastupdate", Rrd_Lastupdate, 0}, /* Thread-safe version */ {"Rrd::update", Rrd_Update, 1}, /* Thread-safe version */