rrd-ffi 0.2.12 → 0.2.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,6 +9,11 @@
9
9
  * TODO: Add memory leak test
10
10
  * TODO: Add tune methods to RRD::Base instance
11
11
 
12
+ == 2012-11-13 version 0.2.13
13
+
14
+ * Added RRD::Xport capabilities (neilljordan)
15
+ * "--resolution" parameter forwarded to rrd fetch (fpellanda)
16
+
12
17
  == 2011-04-11 version 0.2.10
13
18
 
14
19
  * Fixes Segmentation Fault when using in a multi-thread environment
data/lib/rrd.rb CHANGED
@@ -4,13 +4,14 @@ require "rrd/version"
4
4
  require "rrd/wrapper"
5
5
  require "rrd/base"
6
6
  require "rrd/graph"
7
+ require "rrd/xport"
7
8
  require "rrd/builder"
8
9
  require "rrd/time_extension"
9
10
 
10
11
  module RRD
11
12
  extend self
12
13
 
13
- BANG_METHODS = [:graph!]
14
+ BANG_METHODS = [:graph!, :xport!]
14
15
 
15
16
  def graph(image_file, options = {}, &block)
16
17
  graph = Graph.new(image_file, options)
@@ -18,6 +19,12 @@ module RRD
18
19
  graph.save
19
20
  end
20
21
 
22
+ def xport(options = {}, &block)
23
+ xport = Xport.new(options)
24
+ xport.instance_eval(&block)
25
+ xport.save
26
+ end
27
+
21
28
  def error
22
29
  Wrapper.error
23
30
  end
@@ -3,7 +3,7 @@ module RRD
3
3
  module Version #:nodoc: all
4
4
  MAJOR = 0
5
5
  MINOR = 2
6
- PATCH = 12
6
+ PATCH = 13
7
7
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
8
8
  end
9
9
  end
@@ -121,8 +121,10 @@ module RRD
121
121
  args[2..-1].each_slice(2) {|v| options[v.first] = v.last}
122
122
  start_time = options["--start"]
123
123
  end_time = options["--end"]
124
+ step = options["--resolution"]
124
125
  start_time_ptr.put_int(0, start_time.to_i)
125
126
  end_time_ptr.put_int(0, end_time.to_i)
127
+ step_ptr.put_int(0, step.to_i)
126
128
  return false unless rrd_fetch_r(file, cf, start_time_ptr, end_time_ptr, step_ptr, ds_count_ptr, ds_names_ptr, values_ptr) == 0
127
129
  else
128
130
  return false unless rrd_fetch(args.size+1, argv, start_time_ptr, end_time_ptr, step_ptr, ds_count_ptr, ds_names_ptr, values_ptr) == 0
@@ -0,0 +1,49 @@
1
+ # -*- coding: UTF-8 -*-
2
+ require 'digest/md5'
3
+ module RRD
4
+ class Xport
5
+ attr_accessor :output, :parameters, :definitions, :printables
6
+
7
+ DEF_OPTIONS= [:from]
8
+
9
+ def initialize(parameters = {})
10
+ @parameters = {:start => Time.now - 1.day, :end => Time.now}.merge parameters
11
+ @parameters[:start] = @parameters[:start].to_i
12
+ @parameters[:end] = @parameters[:end].to_i
13
+
14
+ @definitions = []
15
+ @printables = []
16
+ end
17
+
18
+ def for_rrd_data(data_name, options)
19
+ dataset = options.reject {|name, value| DEF_OPTIONS.include?(name.to_sym)}
20
+ definition = "DEF:#{data_name}=#{options[:from]}:#{dataset.keys.first}:#{dataset.values.first.to_s.upcase}"
21
+ definitions << definition
22
+ definition
23
+ end
24
+
25
+ def using_calculated_data(data_name, options)
26
+ definition = "CDEF:#{data_name}=#{options[:calc]}"
27
+ definitions << definition
28
+ definition
29
+ end
30
+
31
+ def xport(data_name, options)
32
+ printable = "XPORT:#{data_name}:#{options[:label].gsub(/:/, '\\:')}"
33
+ printables << printable
34
+ [printable]
35
+ end
36
+
37
+ def save
38
+ Wrapper.xport(*generate_args)
39
+ end
40
+
41
+ private
42
+ def generate_args
43
+ args = []
44
+ args += RRD.to_line_parameters(parameters)
45
+ args += definitions
46
+ args += printables
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,69 @@
1
+ require "spec_helper"
2
+ require 'digest/md5'
3
+
4
+ describe RRD::Xport do
5
+
6
+ before do
7
+ @rrd = RRD::Base.new(RRD_FILE)
8
+ @rrd.restore(XML_FILE)
9
+
10
+ @xport = RRD::Xport.new :start => @rrd.starts_at, :end => @rrd.ends_at, :step => 2
11
+ end
12
+
13
+ it "should store definition for rrd data" do
14
+ result = @xport.for_rrd_data "cpu0", :cpu0 => :average, :from => RRD_FILE
15
+ result.should == "DEF:cpu0=#{RRD_FILE}:cpu0:AVERAGE"
16
+ end
17
+
18
+ it "should store definition for calculated data" do
19
+ result = @xport.using_calculated_data "half_mem", :calc => "mem,2,/"
20
+ result.should == "CDEF:half_mem=mem,2,/"
21
+ end
22
+
23
+ it "should store printable for xport" do
24
+ result = @xport.xport 'memory', :label => "Memory"
25
+ result[0].should == "XPORT:memory:Memory"
26
+ end
27
+
28
+ it "should export data correctly" do
29
+ memory_ds_name = Digest::MD5.hexdigest("#{RRD_FILE}_memory_average")
30
+ cpu_ds_name = Digest::MD5.hexdigest("#{RRD_FILE}_cpu0_average")
31
+ expected_args = [
32
+ "--start", @rrd.starts_at.to_i.to_s,
33
+ "--end", @rrd.ends_at.to_i.to_s,
34
+ "--step", "2",
35
+ "DEF:memory=/Users/neilljordan/Documents/rrd-ffi/spec/vm.rrd:memory:AVERAGE",
36
+ "DEF:cpu0=#{RRD_FILE}:cpu0:AVERAGE",
37
+ "CDEF:half_mem=memory,2,/",
38
+ "XPORT:memory:Memory\\: Average",
39
+ "XPORT:cpu0:cpu0\\: Average",
40
+ "XPORT:half_mem:Half Memory",
41
+ ]
42
+
43
+ @xport.for_rrd_data "memory", :memory => :average, :from => RRD_FILE
44
+ @xport.for_rrd_data "cpu0", :cpu0 => :average, :from => RRD_FILE
45
+ @xport.using_calculated_data "half_mem", :calc => "memory,2,/"
46
+ @xport.xport "memory", :label => "Memory: Average"
47
+ @xport.xport "cpu0", :label => "cpu0: Average"
48
+ @xport.xport "half_mem", :label => "Half Memory"
49
+
50
+ generated_args = @xport.send(:generate_args)
51
+ generated_args.should == expected_args
52
+
53
+ data = @xport.save
54
+
55
+ expected_data = [
56
+ ["time", "Memory: Average", "cpu0: Average", "Half Memory"],
57
+ [1266944780, 536870912.0, 0.0002, 268435456.0],
58
+ [1266944785, 536870912.0, 0.0022, 268435456.0],
59
+ [1266944790, 536870912.0, 0.0022, 268435456.0],
60
+ ]
61
+
62
+ data[0,4].should == expected_data
63
+ end
64
+
65
+ it "should export via dsl" do
66
+
67
+ end
68
+
69
+ end
@@ -24,8 +24,8 @@ describe RRD do
24
24
 
25
25
  result.should be_true
26
26
  File.should be_file(IMG_FILE)
27
- end
28
-
27
+ end
28
+
29
29
  it "should list all bang methods" do
30
30
  (RRD.methods & RRD::BANG_METHODS).should == RRD::BANG_METHODS
31
31
  end
@@ -45,4 +45,47 @@ describe RRD do
45
45
  result.should be_true
46
46
  File.should be_file(IMG_FILE)
47
47
  end
48
+
49
+
50
+ it "should export data using xport dsl" do
51
+ rrd = RRD::Base.new(RRD_FILE)
52
+ data = RRD.xport :start => rrd.starts_at, :end => rrd.ends_at, :step => 2 do
53
+ for_rrd_data "memory", :memory => :average, :from => RRD_FILE
54
+ for_rrd_data "cpu0", :cpu0 => :average, :from => RRD_FILE
55
+ using_calculated_data "half_mem", :calc => "memory,2,/"
56
+ xport "memory", :label => "Memory: Average"
57
+ xport "cpu0", :label => "cpu0: Average"
58
+ xport "half_mem", :label => "Half Memory"
59
+ end
60
+
61
+ expected_data = [
62
+ ["time", "Memory: Average", "cpu0: Average", "Half Memory"],
63
+ [1266944780, 536870912.0, 0.0002, 268435456.0],
64
+ [1266944785, 536870912.0, 0.0022, 268435456.0],
65
+ [1266944790, 536870912.0, 0.0022, 268435456.0],
66
+ ]
67
+
68
+ data[0,4].should == expected_data
69
+ end
70
+
71
+ it "should export data using xport!" do
72
+ rrd = RRD::Base.new(RRD_FILE)
73
+ data = RRD.xport! :start => rrd.starts_at, :end => rrd.ends_at, :step => 2 do
74
+ for_rrd_data "memory", :memory => :average, :from => RRD_FILE
75
+ for_rrd_data "cpu0", :cpu0 => :average, :from => RRD_FILE
76
+ using_calculated_data "half_mem", :calc => "memory,2,/"
77
+ xport "memory", :label => "Memory: Average"
78
+ xport "cpu0", :label => "cpu0: Average"
79
+ xport "half_mem", :label => "Half Memory"
80
+ end
81
+
82
+ expected_data = [
83
+ ["time", "Memory: Average", "cpu0: Average", "Half Memory"],
84
+ [1266944780, 536870912.0, 0.0002, 268435456.0],
85
+ [1266944785, 536870912.0, 0.0022, 268435456.0],
86
+ [1266944790, 536870912.0, 0.0022, 268435456.0],
87
+ ]
88
+
89
+ data[0,4].should == expected_data
90
+ end
48
91
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rrd-ffi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.12
4
+ version: 0.2.13
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-25 00:00:00.000000000 -03:00
13
- default_executable:
12
+ date: 2012-11-13 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: ffi
17
- requirement: &2166215140 !ruby/object:Gem::Requirement
16
+ requirement: &2156342600 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ! '>='
@@ -22,10 +21,10 @@ dependencies:
22
21
  version: '0'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *2166215140
24
+ version_requirements: *2156342600
26
25
  - !ruby/object:Gem::Dependency
27
26
  name: activesupport
28
- requirement: &2166214720 !ruby/object:Gem::Requirement
27
+ requirement: &2156354480 !ruby/object:Gem::Requirement
29
28
  none: false
30
29
  requirements:
31
30
  - - ! '>='
@@ -33,10 +32,10 @@ dependencies:
33
32
  version: '0'
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: *2166214720
35
+ version_requirements: *2156354480
37
36
  - !ruby/object:Gem::Dependency
38
37
  name: rspec
39
- requirement: &2166214300 !ruby/object:Gem::Requirement
38
+ requirement: &2156362240 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ! '>='
@@ -44,7 +43,7 @@ dependencies:
44
43
  version: '0'
45
44
  type: :development
46
45
  prerelease: false
47
- version_requirements: *2166214300
46
+ version_requirements: *2156362240
48
47
  description: Provides bindings for many RRD functions (using ffi gem and librrd),
49
48
  as well as DSLs for graphic and rrd building. You must have librrd in your system!
50
49
  email:
@@ -68,15 +67,16 @@ files:
68
67
  - lib/rrd/time_extension.rb
69
68
  - lib/rrd/version.rb
70
69
  - lib/rrd/wrapper.rb
70
+ - lib/rrd/xport.rb
71
71
  - rrd-ffi.gemspec
72
72
  - spec/rrd/base_spec.rb
73
73
  - spec/rrd/builder_spec.rb
74
74
  - spec/rrd/graph_spec.rb
75
75
  - spec/rrd/wrapper_spec.rb
76
+ - spec/rrd/xport_spec.rb
76
77
  - spec/rrd_spec.rb
77
78
  - spec/spec_helper.rb
78
79
  - spec/vm.xml
79
- has_rdoc: true
80
80
  homepage: http://github.com/morellon/rrd-ffi
81
81
  licenses: []
82
82
  post_install_message:
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  version: '0'
98
98
  requirements: []
99
99
  rubyforge_project:
100
- rubygems_version: 1.6.2
100
+ rubygems_version: 1.8.10
101
101
  signing_key:
102
102
  specification_version: 3
103
103
  summary: DSL + Bindings for librrd using FFI
@@ -106,6 +106,7 @@ test_files:
106
106
  - spec/rrd/builder_spec.rb
107
107
  - spec/rrd/graph_spec.rb
108
108
  - spec/rrd/wrapper_spec.rb
109
+ - spec/rrd/xport_spec.rb
109
110
  - spec/rrd_spec.rb
110
111
  - spec/spec_helper.rb
111
112
  - spec/vm.xml