rrd-ruby 1.0.0
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE +165 -0
- data/LICENSE.txt +22 -0
- data/README.md +56 -0
- data/Rakefile +1 -0
- data/lib/rrd/archive.rb +57 -0
- data/lib/rrd/cdp.rb +55 -0
- data/lib/rrd/data.rb +113 -0
- data/lib/rrd/data_source.rb +36 -0
- data/lib/rrd/file.rb +31 -0
- data/lib/rrd/header.rb +117 -0
- data/lib/rrd/reader.rb +93 -0
- data/lib/rrd/version.rb +3 -0
- data/lib/rrd.rb +11 -0
- data/rrd-ruby.gemspec +27 -0
- data/test/data/test.rrd +0 -0
- data/test/data/test.xml +18643 -0
- data/test/rrd/file_test.rb +30 -0
- data/test/test_helper.rb +9 -0
- metadata +153 -0
data/lib/rrd/reader.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
module RRD
|
2
|
+
class Reader
|
3
|
+
|
4
|
+
class Unival
|
5
|
+
|
6
|
+
def initialize(data, endianess)
|
7
|
+
@data, @little_endian = data.first, endianess == :little
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_i
|
11
|
+
@data.unpack("Q" + (@little_endian ? "<" : ">")).first
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_f
|
15
|
+
@data.unpack(@little_endian ? "E" : "G").first
|
16
|
+
end
|
17
|
+
|
18
|
+
def inspect
|
19
|
+
"<#{to_i}/#{to_f}>"
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
attr_reader :file
|
25
|
+
|
26
|
+
attr_accessor :endianess, :alignment
|
27
|
+
|
28
|
+
def initialize(filename)
|
29
|
+
@file = ::File.open(filename, "rb")
|
30
|
+
@endianess = :little
|
31
|
+
@alignment = 4
|
32
|
+
end
|
33
|
+
|
34
|
+
def seek(position, mode = :absolute)
|
35
|
+
modes = {
|
36
|
+
absolute: IO::SEEK_SET,
|
37
|
+
eof: IO::SEEK_END,
|
38
|
+
relative: IO::SEEK_CUR
|
39
|
+
}
|
40
|
+
|
41
|
+
file.seek(position.to_i, modes[mode] || raise("Unknown seek mode '#{mode}'"))
|
42
|
+
end
|
43
|
+
|
44
|
+
def pos
|
45
|
+
file.pos
|
46
|
+
end
|
47
|
+
|
48
|
+
def align
|
49
|
+
skip = (alignment - (file.pos % alignment)) % alignment
|
50
|
+
file.read(skip) if skip
|
51
|
+
end
|
52
|
+
|
53
|
+
def read(size, symbol = "a*", options = {})
|
54
|
+
align if options[:align]
|
55
|
+
|
56
|
+
file.read(size).unpack(endian(symbol))
|
57
|
+
end
|
58
|
+
|
59
|
+
def read_string(size, symbol = "a*")
|
60
|
+
read(size, symbol).first
|
61
|
+
end
|
62
|
+
|
63
|
+
def read_uniparams(size)
|
64
|
+
size.times.map do |i|
|
65
|
+
Unival.new(read(8, "a*"), endianess)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def close
|
70
|
+
@file.close if @file
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def symbol_cache
|
76
|
+
@symbol_cache ||= {}
|
77
|
+
end
|
78
|
+
|
79
|
+
def endian(symbol)
|
80
|
+
symbol_cache[symbol] ||= begin
|
81
|
+
symbol.gsub!(/([sSiIlLqQ][_!]*)/, "\\1" + (little_endian? ? "<" : ">"))
|
82
|
+
symbol.gsub!(/[Dd]/, (little_endian? ? "E" : "G"))
|
83
|
+
symbol.gsub!(/[Ff]/, (little_endian? ? "e" : "g"))
|
84
|
+
symbol
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def little_endian?
|
89
|
+
endianess == :little
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
data/lib/rrd/version.rb
ADDED
data/lib/rrd.rb
ADDED
data/rrd-ruby.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rrd/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "rrd-ruby"
|
8
|
+
spec.version = RRD::VERSION
|
9
|
+
spec.authors = ["Igor Yamolov"]
|
10
|
+
spec.email = ["iyamolov@spbtv.com"]
|
11
|
+
spec.description = %q{Native RRD file reader}
|
12
|
+
spec.summary = %q{Native ruby RRD file parser}
|
13
|
+
spec.homepage = "https://github.com/t3hk0d3/rrd-ruby"
|
14
|
+
spec.license = "LGPL"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake", "~> 0"
|
23
|
+
spec.add_development_dependency "minitest", "~> 5.2"
|
24
|
+
spec.add_development_dependency "ruby-prof", "~> 0.14"
|
25
|
+
spec.add_development_dependency "shoulda", "~> 3.5"
|
26
|
+
spec.add_development_dependency "shoulda-context", "~> 1.2"
|
27
|
+
end
|
data/test/data/test.rrd
ADDED
Binary file
|