rrd-ffi 0.2.12 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +5 -0
- data/lib/rrd.rb +8 -1
- data/lib/rrd/version.rb +1 -1
- data/lib/rrd/wrapper.rb +2 -0
- data/lib/rrd/xport.rb +49 -0
- data/spec/rrd/xport_spec.rb +69 -0
- data/spec/rrd_spec.rb +45 -2
- metadata +12 -11
data/CHANGELOG.rdoc
CHANGED
@@ -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
|
data/lib/rrd/version.rb
CHANGED
data/lib/rrd/wrapper.rb
CHANGED
@@ -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
|
data/lib/rrd/xport.rb
ADDED
@@ -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
|
data/spec/rrd_spec.rb
CHANGED
@@ -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.
|
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-
|
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: &
|
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: *
|
24
|
+
version_requirements: *2156342600
|
26
25
|
- !ruby/object:Gem::Dependency
|
27
26
|
name: activesupport
|
28
|
-
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: *
|
35
|
+
version_requirements: *2156354480
|
37
36
|
- !ruby/object:Gem::Dependency
|
38
37
|
name: rspec
|
39
|
-
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: *
|
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.
|
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
|