drone_collectd 1.0.2 → 1.0.4
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/LICENSE +20 -0
- data/README.md +24 -0
- data/lib/drone_collectd/collectd.rb +97 -0
- data/lib/drone_collectd/collectd.rbc +1231 -0
- data/lib/drone_collectd/parser.rb +86 -0
- data/lib/drone_collectd/parser.rbc +3118 -0
- data/lib/drone_collectd/parser_old.rb +153 -0
- data/lib/drone_collectd/version.rbc +130 -0
- data/lib/drone_collectd.rb +7 -0
- data/lib/drone_collectd.rbc +244 -0
- data/specs/common.rb +63 -0
- data/specs/common.rbc +1482 -0
- data/specs/unit/parser_spec.rb +49 -0
- data/specs/unit/parser_spec.rbc +0 -0
- metadata +22 -7
@@ -0,0 +1,86 @@
|
|
1
|
+
module DroneCollectd
|
2
|
+
class CollectdPacket
|
3
|
+
# part type
|
4
|
+
HOST = 0x0000
|
5
|
+
TIME = 0x0001
|
6
|
+
PLUGIN = 0x0002
|
7
|
+
PLUGIN_INSTANCE = 0x0003
|
8
|
+
TYPE = 0x0004
|
9
|
+
TYPE_INSTANCE = 0x0005
|
10
|
+
VALUES = 0x0006
|
11
|
+
INTERVAL = 0x0007
|
12
|
+
MESSAGE = 0x0100
|
13
|
+
SEVERITY = 0x0101
|
14
|
+
|
15
|
+
# data type
|
16
|
+
COUNTER = 0
|
17
|
+
GAUGE = 1
|
18
|
+
DERIVE = 2
|
19
|
+
ABSOLUTE = 3
|
20
|
+
|
21
|
+
|
22
|
+
attr_accessor :host, :time, :interval
|
23
|
+
attr_accessor :plugin, :plugin_instance
|
24
|
+
attr_accessor :type, :type_instance
|
25
|
+
|
26
|
+
def initialize
|
27
|
+
@values = []
|
28
|
+
@values_type = []
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_value(type, value)
|
32
|
+
raise(ArgumentError, "unknown type: #{type}") unless CollectdPacket::const_defined?(type.to_s.upcase)
|
33
|
+
data_type = CollectdPacket::const_get(type.to_s.upcase)
|
34
|
+
|
35
|
+
@values_type << data_type
|
36
|
+
@values << value
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_packet
|
40
|
+
@pkt = CollectdGenerator::string(HOST, @host)
|
41
|
+
@pkt << CollectdGenerator::number(TIME, @time)
|
42
|
+
@pkt << CollectdGenerator::number(INTERVAL, @interval)
|
43
|
+
@pkt << CollectdGenerator::string(PLUGIN, @plugin)
|
44
|
+
@pkt << CollectdGenerator::string(PLUGIN_INSTANCE, @plugin_instance)
|
45
|
+
@pkt << CollectdGenerator::string(TYPE, @type)
|
46
|
+
@pkt << CollectdGenerator::string(TYPE_INSTANCE, @type_instance)
|
47
|
+
|
48
|
+
# values part header
|
49
|
+
@pkt << [VALUES, 4 + 2 + (@values.size * 9), @values.size].pack('nnn')
|
50
|
+
# types
|
51
|
+
@pkt << @values_type.pack('C*')
|
52
|
+
|
53
|
+
# and the values
|
54
|
+
@values.each.with_index do |v, i|
|
55
|
+
case @values_type[i]
|
56
|
+
when COUNTER, ABSOLUTE, DERIVE
|
57
|
+
@pkt << [v >> 32, v & 0xffffffff].pack("NN")
|
58
|
+
|
59
|
+
when GAUGE
|
60
|
+
@pkt << [v].pack('E')
|
61
|
+
|
62
|
+
else
|
63
|
+
raise "unknown type: #{@values_type[i]}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
@pkt
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
module CollectdGenerator
|
73
|
+
# Encode a string (type 0, null terminated string)
|
74
|
+
def self.string(type, str)
|
75
|
+
str += "\000"
|
76
|
+
str_size = str.respond_to?(:bytesize) ? str.bytesize : str.size
|
77
|
+
[type, 4 + str_size].pack("nn") + str
|
78
|
+
end
|
79
|
+
|
80
|
+
# Encode an integer
|
81
|
+
def self.number(type, num)
|
82
|
+
[type, 12].pack("nn") + [num >> 32, num & 0xffffffff].pack("NN")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|