X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=bindings%2Fruby%2Fmain.c;h=c5cf79effdfcb7569ea32812ff6e043b477baa27;hb=24a688e090d4a51a52fdc120a8cee1ab411ce7a0;hp=32bd8cffd182c1b715d813e981a04bb96d7fd735;hpb=657d850f957a2dd703e3aab2d7cde4b0f9711c15;p=rrdtool.git diff --git a/bindings/ruby/main.c b/bindings/ruby/main.c index 32bd8cf..c5cf79e 100644 --- a/bindings/ruby/main.c +++ b/bindings/ruby/main.c @@ -4,7 +4,7 @@ #include #include -#include +#include "../../src/rrd_tool.h" typedef struct string_arr_t { int len; @@ -49,7 +49,9 @@ string_arr string_arr_new( a.strings[i + 1] = strdup(buf); break; default: - rb_raise(rb_eTypeError, "invalid argument"); + rb_raise(rb_eTypeError, + "invalid argument - %s, expected T_STRING or T_FIXNUM on index %d", + rb_class2name(CLASS_OF(v)), i); break; } } @@ -148,7 +150,7 @@ VALUE rb_rrd_fetch( rb_ary_store(result, 0, INT2FIX(start)); rb_ary_store(result, 1, INT2FIX(end)); rb_ary_store(result, 2, names); - rb_ary_store(result, 2, data); + rb_ary_store(result, 3, data); return result; } @@ -182,37 +184,36 @@ VALUE rb_rrd_graph( return result; } -/* -VALUE rb_rrd_info(VALUE self, VALUE args) +VALUE rb_rrd_info( + VALUE self, + VALUE args) { string_arr a; - info_t *p; - VALUE result; + info_t *p, *data; + VALUE result; a = string_arr_new(args); data = rrd_info(a.len, a.strings); string_arr_delete(a); - RRD_CHECK_ERROR - - result = rb_hash_new(); + RRD_CHECK_ERROR result = rb_hash_new(); while (data) { - VALUE key = rb_str_new2(data->key); + VALUE key = rb_str_new2(data->key); + switch (data->type) { case RD_I_VAL: - if (isnan(data->u_val)) { + if (isnan(data->value.u_val)) { rb_hash_aset(result, key, Qnil); - } - else { - rb_hash_aset(result, key, rb_float_new(data->u_val)); + } else { + rb_hash_aset(result, key, rb_float_new(data->value.u_val)); } break; case RD_I_CNT: - rb_hash_aset(result, key, INT2FIX(data->u_cnt)); + rb_hash_aset(result, key, INT2FIX(data->value.u_cnt)); break; case RD_I_STR: - rb_hash_aset(result, key, rb_str_new2(data->u_str)); - free(data->u_str); + rb_hash_aset(result, key, rb_str_new2(data->value.u_str)); + free(data->value.u_str); break; } p = data; @@ -221,7 +222,6 @@ VALUE rb_rrd_info(VALUE self, VALUE args) } return result; } -*/ VALUE rb_rrd_last( VALUE self, @@ -282,4 +282,5 @@ void Init_RRD( rb_define_module_function(mRRD, "restore", rb_rrd_restore, -2); rb_define_module_function(mRRD, "tune", rb_rrd_tune, -2); rb_define_module_function(mRRD, "update", rb_rrd_update, -2); + rb_define_module_function(mRRD, "info", rb_rrd_info, -2); }