rrd-ruby 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,3 @@
1
+ module RRD
2
+ VERSION = "1.0.0"
3
+ end
data/lib/rrd.rb ADDED
@@ -0,0 +1,11 @@
1
+ module RRD
2
+
3
+ autoload :File, "rrd/file"
4
+ autoload :Header, "rrd/header"
5
+ autoload :Data, "rrd/data"
6
+ autoload :DataSource, "rrd/data_source"
7
+ autoload :Archive, "rrd/archive"
8
+ autoload :Reader, "rrd/reader"
9
+ autoload :CDP, "rrd/cdp"
10
+
11
+ end
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
Binary file