From 7d5dc08e976de9fa166f35f8e343011019b7f0ec Mon Sep 17 00:00:00 2001 From: oetiker Date: Fri, 5 Feb 2010 18:28:41 +0000 Subject: [PATCH] new rb_rrd_xport function for ruby bindings. -- Pavel Pachkovskij pavel.pachkovskij azati.com git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@2016 a5681a0c-68f1-0310-ab6d-d61299d08faa --- bindings/ruby/CHANGES | 4 ++++ bindings/ruby/main.c | 48 +++++++++++++++++++++++++++++++++++++++++++ bindings/ruby/test.rb | 12 +++++++++++ 3 files changed, 64 insertions(+) diff --git a/bindings/ruby/CHANGES b/bindings/ruby/CHANGES index c84ff29..9e01ed5 100644 --- a/bindings/ruby/CHANGES +++ b/bindings/ruby/CHANGES @@ -1,3 +1,7 @@ +2010-02-05 Pavel Pachkovskij (Azati corp.) + add rrd_xport + update test.rb with rrd_xport example + 2006-07-25 Loïs Lherbier add y_min and y_max parameters to rrd_graph update test.rb to send only strings to RRD.fetch diff --git a/bindings/ruby/main.c b/bindings/ruby/main.c index 355625f..6fe6a35 100644 --- a/bindings/ruby/main.c +++ b/bindings/ruby/main.c @@ -319,6 +319,53 @@ VALUE rb_rrd_last( return rb_funcall(rb_cTime, rb_intern("at"), 1, UINT2NUM(last)); } +VALUE rb_rrd_xport( + VALUE self, + VALUE args) +{ + string_arr a; + unsigned long i, j, k, step, col_cnt; + int xxsize; + rrd_value_t *data; + char **legend_v; + VALUE legend, result, rdata; + time_t start, end; + + a = string_arr_new(args); + rrd_xport(a.len, a.strings, &xxsize, &start, &end, &step, &col_cnt, &legend_v, &data); + string_arr_delete(a); + + RRD_CHECK_ERROR; + + legend = rb_ary_new(); + for (i = 0; i < col_cnt; i++) { + rb_ary_push(legend, rb_str_new2(legend_v[i])); + free(legend_v[i]); + } + free(legend_v); + + k = 0; + rdata = rb_ary_new(); + for (i = start; i <= end; i += step) { + VALUE line = rb_ary_new2(col_cnt); + for (j = 0; j < col_cnt; j++) { + rb_ary_store(line, j, rb_float_new(data[k])); + k++; + } + rb_ary_push(rdata, line); + } + free(data); + + result = rb_ary_new2(6); + rb_ary_store(result, 0, INT2FIX(start)); + rb_ary_store(result, 1, INT2FIX(end)); + rb_ary_store(result, 2, INT2FIX(step)); + rb_ary_store(result, 3, INT2FIX(col_cnt)); + rb_ary_store(result, 4, legend); + rb_ary_store(result, 5, rdata); + return result; +} + void Init_RRD( ) { @@ -338,4 +385,5 @@ void Init_RRD( rb_define_module_function(mRRD, "info", rb_rrd_info, -2); rb_define_module_function(mRRD, "updatev", rb_rrd_updatev, -2); rb_define_module_function(mRRD, "graphv", rb_rrd_graphv, -2); + rb_define_module_function(mRRD, "xport", rb_rrd_xport, -2); } diff --git a/bindings/ruby/test.rb b/bindings/ruby/test.rb index 3d0b95f..2ca502d 100755 --- a/bindings/ruby/test.rb +++ b/bindings/ruby/test.rb @@ -56,5 +56,17 @@ if end_time != RRD.last("#{rrd}").to_i end puts +# xport method test +puts "xporting data from #{rrd}" +(fstart,fend,step,col,legend,data)=RRD.xport( + "--start", start_time.to_s, + "--end", (start_time + 300 * 300).to_s, + "--step", 10.to_s, + "DEF:A=#{rrd}:a:AVERAGE", + "DEF:B=#{rrd}:b:AVERAGE", + "XPORT:A:a", + "XPORT:B:b") +puts "Xported #{col} columns(#{legend.join(", ")}) with #{data.length} rows from #{fstart} to #{fend} and step #{step}\n" + print "This script has created #{name}.png in the current directory\n"; print "This demonstrates the use of the TIME and % RPN operators\n"; -- 2.30.2