RRDRUBY(1) rrdtool RRDRUBY(1)

rrdruby - درباره اتصالات Ruby برای RRD

require "RRD"
RRD.create(
   rrd,
   "--step", "300",
   "DS:a:GAUGE:600:U:U",
   "DS:b:GAUGE:600:U:U",
   "RRA:AVERAGE:0.5:1:300")

توابع rrdtool مستقیماً از طریق زبان برنامه‌نویسی Ruby قابل فراخوانی هستند. این پیاده‌سازی لفاف (wrapper) از ابتدا (بدون استفاده از SWIG) نوشته شده است.

این API صرفاً پارامترهایی از نوع رشته را برای توابع انتظار دارد. لطفاً جهت آگاهی از توابع و آرگومان‌های معتبر به سایر مستندات rrdtool مراجعه کنید.

$: << '/path/to/rrdtool/lib/ruby/1.8/i386-linux'
require "RRD"
name = "test"
rrd = "#{name}.rrd"
start = Time.now.to_i
RRD.create(
   rrd,
   "--start", "#{start - 1}",
   "--step", "300",
       "DS:a:GAUGE:600:U:U",
   "DS:b:GAUGE:600:U:U",
   "RRA:AVERAGE:0.5:1:300")
puts
puts "updating #{rrd}"
start.to_i.step(start.to_i + 300 * 300, 300) { |i|
   RRD.update(rrd, "#{i}:#{rand(100)}:#{Math.sin(i / 800) * 50 + 50}")
}
puts
puts "fetching data from #{rrd}"
(fstart, fend, data, step) = RRD.fetch(rrd, "--start", start.to_s, "--end",
     (start + 300 * 300).to_s, "AVERAGE")
puts "got #{data.length} data points from #{fstart} to #{fend}"
puts
puts "generating graph #{name}.png"
RRD.graph(
  "#{name}.png",
   "--title", " RubyRRD Demo",
   "--start", "#{start+3600}",
   "--end", "start + 1000 min",
   "--interlaced",
   "--imgformat", "PNG",
   "--width=450",
   "DEF:a=#{rrd}:a:AVERAGE",
   "DEF:b=#{rrd}:b:AVERAGE",
   "CDEF:line=TIME,2400,%,300,LT,a,UNKN,IF",
   "AREA:b#00b6e4:beta",
   "AREA:line#0022e9:alpha",
   "LINE3:line#ff0000")
puts

اگر از گزینه پیکربندی --ruby-site-install استفاده کنید، می‌توانید خط $: را حذف کنید چرا که ماژول RRDtool به طور خودکار پیدا خواهد شد.

اگر RRDtool با مشکلی مواجه شود، یک استثنا (exception) صادر می‌کند که ممکن است بخواهید آن را مدیریت (catch) کنید.

rrdcreate, rrdupdate, rrdgraph, rrddump, rrdfetch, rrdtune, rrdlast, rrdxport, rrdinfo

Loïs Lherbier <lois.lherbier@covadis.ch>

Miles Egan <miles@caddr.com>

2026-08-08 1.11.0