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.
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