rrd-ruby 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|