monitoring_protocols 0.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.
@@ -0,0 +1,322 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe 'MessagePack Ruby parser' do
4
+ before do
5
+ @parser_class = MonitoringProtocols::MsgPack::Parser
6
+ @now = Time.new.utc
7
+ end
8
+
9
+ describe 'first packet' do
10
+ before do
11
+ @json = MessagePack.pack({
12
+ 'type' => 'datapoints',
13
+ 'host' => 'hostname',
14
+ 'app_name' => 'system',
15
+ 'time' => @now.iso8601,
16
+ 'first' => true,
17
+
18
+ 'cpu' => {
19
+ 'user' => 1,
20
+ }
21
+ }
22
+ )
23
+ end
24
+
25
+ should 'parse buffer' do
26
+ msgs = @parser_class.parse(@json)
27
+ msgs.size.should == 1
28
+
29
+ msgs[0].class.should == MonitoringProtocols::DataPoint
30
+ msgs[0].first == true
31
+ msgs[0].host.should == 'hostname'
32
+ msgs[0].time.to_i.should == @now.to_i
33
+ msgs[0].app_name.should == 'system'
34
+ msgs[0].res_name.should == 'cpu'
35
+ msgs[0].metric_name.should == 'user'
36
+ msgs[0].value.should == 1
37
+ end
38
+ end
39
+
40
+ describe 'with common app_name' do
41
+
42
+ describe 'One point in buffer' do
43
+ before do
44
+ @json = MessagePack.pack({
45
+ 'type' => 'datapoints',
46
+ 'host' => 'hostname',
47
+ 'app_name' => 'system',
48
+ 'time' => @now.iso8601,
49
+
50
+ 'cpu' => {
51
+ 'user' => 1,
52
+ }
53
+ }
54
+ )
55
+ end
56
+
57
+ should 'parse buffer' do
58
+ msgs = @parser_class.parse(@json)
59
+ msgs.size.should == 1
60
+
61
+ msgs[0].class.should == MonitoringProtocols::DataPoint
62
+ msgs[0].host.should == 'hostname'
63
+ msgs[0].time.to_i.should == @now.to_i
64
+ msgs[0].app_name.should == 'system'
65
+ msgs[0].res_name.should == 'cpu'
66
+ msgs[0].metric_name.should == 'user'
67
+ msgs[0].value.should == 1
68
+ end
69
+ end
70
+
71
+
72
+ describe 'Multiple points in buffer' do
73
+ before do
74
+ @json = MessagePack.pack({
75
+ 'type' => 'datapoints',
76
+ 'host' => 'hostname',
77
+ 'app_name' => 'system',
78
+ 'time' => @now.iso8601,
79
+
80
+ 'cpu' => {
81
+ 'user' => 1,
82
+ 'sys' => 2
83
+ },
84
+
85
+ 'memory' => {
86
+ 'total' => 4,
87
+ 'used' => 1,
88
+ 'free' => 3
89
+ }
90
+ }
91
+ )
92
+
93
+ end
94
+
95
+ should 'parse buffer' do
96
+ msgs = @parser_class.parse(@json)
97
+ msgs.size.should == 5
98
+
99
+ common_check = ->(m){
100
+ m.class.should == MonitoringProtocols::DataPoint
101
+ m.host.should == 'hostname'
102
+ m.time.to_i.should == @now.to_i
103
+ m.app_name.should == 'system'
104
+ }
105
+
106
+ msgs[0].tap do |m|
107
+ common_check.call(m)
108
+ m.res_name.should == 'cpu'
109
+ m.metric_name.should == 'user'
110
+ m.value.should == 1
111
+ end
112
+
113
+ msgs[1].tap do |m|
114
+ common_check.call(m)
115
+ m.res_name.should == 'cpu'
116
+ m.metric_name.should == 'sys'
117
+ m.value.should == 2
118
+ end
119
+
120
+ msgs[2].tap do |m|
121
+ common_check.call(m)
122
+ m.res_name.should == 'memory'
123
+ m.metric_name.should == 'total'
124
+ m.value.should == 4
125
+ end
126
+
127
+ msgs[3].tap do |m|
128
+ common_check.call(m)
129
+ m.res_name.should == 'memory'
130
+ m.metric_name.should == 'used'
131
+ m.value.should == 1
132
+ end
133
+
134
+ msgs[4].tap do |m|
135
+ common_check.call(m)
136
+ m.res_name.should == 'memory'
137
+ m.metric_name.should == 'free'
138
+ m.value.should == 3
139
+ end
140
+
141
+
142
+
143
+ end
144
+ end
145
+
146
+ end
147
+
148
+
149
+ describe 'with different app_name' do
150
+
151
+ describe 'One point in buffer' do
152
+ before do
153
+ @json = MessagePack.pack({
154
+ 'type' => 'datapoints',
155
+ 'host' => 'hostname',
156
+ 'time' => @now.iso8601,
157
+
158
+ 'system' => {
159
+ 'cpu' => {
160
+ 'user' => 1,
161
+ }
162
+ }
163
+ }
164
+ )
165
+ end
166
+
167
+ should 'parse buffer' do
168
+ msgs = @parser_class.parse(@json)
169
+ msgs.size.should == 1
170
+
171
+ msgs[0].class.should == MonitoringProtocols::DataPoint
172
+ msgs[0].host.should == 'hostname'
173
+ msgs[0].time.to_i.should == @now.to_i
174
+ msgs[0].app_name.should == 'system'
175
+ msgs[0].res_name.should == 'cpu'
176
+ msgs[0].metric_name.should == 'user'
177
+ msgs[0].value.should == 1
178
+ end
179
+ end
180
+
181
+
182
+ describe 'Multiple points in buffer' do
183
+ before do
184
+ @now = Time.new.utc
185
+ @json = MessagePack.pack({
186
+ 'type' => 'datapoints',
187
+ 'host' => 'hostname',
188
+ 'time' => @now.iso8601,
189
+
190
+ 'system2' => {
191
+ 'cpu' => {
192
+ 'user' => 45,
193
+ 'sys' => 27
194
+ }
195
+ },
196
+
197
+ 'icmp-ping' => {
198
+ "1.2.3.4" => {
199
+ "latency" => 0.0,
200
+ "loss" => 100.0
201
+ },
202
+ "192.168.0.32" => {
203
+ "latency" => 3.45,
204
+ "loss" => 4.0
205
+ }
206
+ },
207
+
208
+ 'system' => {
209
+ 'cpu' => {
210
+ 'user' => 1,
211
+ 'sys' => 2
212
+ },
213
+
214
+ 'memory' => {
215
+ 'total' => 4,
216
+ 'used' => 1,
217
+ 'free' => 3
218
+ }
219
+ }
220
+ }
221
+ )
222
+
223
+ end
224
+
225
+ should 'parse buffer' do
226
+ msgs = @parser_class.parse(@json)
227
+ msgs.size.should == 11
228
+
229
+ common_check = ->(m, app_name = 'system'){
230
+ m.class.should == MonitoringProtocols::DataPoint
231
+ m.host.should == 'hostname'
232
+ m.time.to_i.should == @now.to_i
233
+ m.app_name.should == app_name
234
+ }
235
+
236
+ index = -1
237
+
238
+ msgs[index += 1].tap do |m|
239
+ common_check.call(m, 'system2')
240
+ m.res_name.should == 'cpu'
241
+ m.metric_name.should == 'user'
242
+ m.value.should == 45
243
+ end
244
+
245
+ msgs[index += 1].tap do |m|
246
+ common_check.call(m, 'system2')
247
+ m.res_name.should == 'cpu'
248
+ m.metric_name.should == 'sys'
249
+ m.value.should == 27
250
+ end
251
+
252
+ msgs[index += 1].tap do |m|
253
+ common_check.call(m, 'icmp-ping')
254
+ m.res_name.should == '1.2.3.4'
255
+ m.metric_name.should == 'latency'
256
+ m.value.should == 0.0
257
+ end
258
+
259
+ msgs[index += 1].tap do |m|
260
+ common_check.call(m, 'icmp-ping')
261
+ m.res_name.should == '1.2.3.4'
262
+ m.metric_name.should == 'loss'
263
+ m.value.should == 100.0
264
+ end
265
+
266
+ msgs[index += 1].tap do |m|
267
+ common_check.call(m, 'icmp-ping')
268
+ m.res_name.should == '192.168.0.32'
269
+ m.metric_name.should == 'latency'
270
+ m.value.should == 3.45
271
+ end
272
+
273
+ msgs[index += 1].tap do |m|
274
+ common_check.call(m, 'icmp-ping')
275
+ m.res_name.should == '192.168.0.32'
276
+ m.metric_name.should == 'loss'
277
+ m.value.should == 4.0
278
+ end
279
+
280
+
281
+ msgs[index += 1].tap do |m|
282
+ common_check.call(m)
283
+ m.res_name.should == 'cpu'
284
+ m.metric_name.should == 'user'
285
+ m.value.should == 1
286
+ end
287
+
288
+ msgs[index += 1].tap do |m|
289
+ common_check.call(m)
290
+ m.res_name.should == 'cpu'
291
+ m.metric_name.should == 'sys'
292
+ m.value.should == 2
293
+ end
294
+
295
+ msgs[index += 1].tap do |m|
296
+ common_check.call(m)
297
+ m.res_name.should == 'memory'
298
+ m.metric_name.should == 'total'
299
+ m.value.should == 4
300
+ end
301
+
302
+ msgs[index += 1].tap do |m|
303
+ common_check.call(m)
304
+ m.res_name.should == 'memory'
305
+ m.metric_name.should == 'used'
306
+ m.value.should == 1
307
+ end
308
+
309
+ msgs[index += 1].tap do |m|
310
+ common_check.call(m)
311
+ m.res_name.should == 'memory'
312
+ m.metric_name.should == 'free'
313
+ m.value.should == 3
314
+ end
315
+
316
+ end
317
+ end
318
+
319
+ end
320
+
321
+
322
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe 'Parser' do
4
+
5
+ should 'call parse class method by default' do
6
+ n = 0
7
+
8
+ parser = Class.new(MonitoringProtocols::Parser)
9
+ parser.define_singleton_method(:parse) do |data|
10
+ n = 2
11
+ end
12
+
13
+ p = parser.new
14
+ p.parse("data")
15
+ n.should == 2
16
+ end
17
+
18
+ end
@@ -0,0 +1,83 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe 'Generic Network Message' do
4
+ before do
5
+ @now = Time.now
6
+
7
+ @base_data = {
8
+ time: @now,
9
+ host: 'local',
10
+ app_name: 'app',
11
+ res_name: 'res',
12
+ metric_name: 'metric',
13
+ }
14
+ end
15
+
16
+ describe 'DataPoint' do
17
+ before do
18
+ @p = MonitoringProtocols::DataPoint.new(
19
+ @base_data.merge(value: 2.45)
20
+ )
21
+ end
22
+
23
+ should 'have working factory' do
24
+ point = FactoryGirl.build(:data_point)
25
+ point.should.not == nil
26
+ end
27
+
28
+ should 'have all fields' do
29
+ @p.time.should == @now
30
+ @p.host.should == 'local'
31
+ @p.app_name.should == 'app'
32
+ @p.value.should == 2.45
33
+ end
34
+
35
+ it 'can be encoded with msgpack' do
36
+ data = MessagePack.pack(@p)
37
+ h = MessagePack.unpack(data)
38
+ h.class.should == Hash
39
+
40
+ h['type'].should == 'datapoint'
41
+ h['time'].should == @p.time.iso8601()
42
+ h['host'].should == @p.host
43
+ h['app_name'].should == @p.app_name
44
+ h['res_name'].should == @p.res_name
45
+ h['metric_name'].should == @p.metric_name
46
+ h['value'].should == 2.45
47
+ end
48
+ end
49
+
50
+
51
+ describe 'Notification' do
52
+ before do
53
+ @n = MonitoringProtocols::Notification.new(
54
+ @base_data.merge(severity: 0, message: 'I saw a horse')
55
+ )
56
+ end
57
+
58
+ should 'have all fields' do
59
+ @n.time.should == @now
60
+ @n.host.should == 'local'
61
+ @n.app_name.should == 'app'
62
+ @n.severity.should == :info
63
+ @n.message.should == 'I saw a horse'
64
+ end
65
+
66
+ it 'can be encoded with msgpack' do
67
+ data = MessagePack.pack(@n)
68
+ h = MessagePack.unpack(data)
69
+ h.class.should == Hash
70
+
71
+ h['type'].should == 'notification'
72
+ h['time'].should == @n.time.iso8601()
73
+ h['host'].should == @n.host
74
+ h['app_name'].should == @n.app_name
75
+ h['res_name'].should == @n.res_name
76
+ h['metric_name'].should == @n.metric_name
77
+ h['severity'].should == 'info'
78
+ h['message'].should == 'I saw a horse'
79
+ end
80
+
81
+ end
82
+
83
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: monitoring_protocols
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Julien Ammous
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-10-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: msgpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: oj
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: "..."
42
+ email:
43
+ - schmurfy@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Gemfile
50
+ - Guardfile
51
+ - LICENSE
52
+ - Rakefile
53
+ - lib/monitoring_protocols.rb
54
+ - lib/monitoring_protocols/builder.rb
55
+ - lib/monitoring_protocols/collectd/builder.rb
56
+ - lib/monitoring_protocols/collectd/msg.rb
57
+ - lib/monitoring_protocols/collectd/parser.rb
58
+ - lib/monitoring_protocols/core.rb
59
+ - lib/monitoring_protocols/data_struct.rb
60
+ - lib/monitoring_protocols/json/builder.rb
61
+ - lib/monitoring_protocols/json/parser.rb
62
+ - lib/monitoring_protocols/msgpack/parser.rb
63
+ - lib/monitoring_protocols/parser.rb
64
+ - lib/monitoring_protocols/struct.rb
65
+ - lib/monitoring_protocols/version.rb
66
+ - monitoring_protocols.gemspec
67
+ - specs/factories.rb
68
+ - specs/spec_helper.rb
69
+ - specs/unit/collectd/builder_spec.rb
70
+ - specs/unit/collectd/msg_spec.rb
71
+ - specs/unit/collectd/parser_spec.rb
72
+ - specs/unit/core_spec.rb
73
+ - specs/unit/data_struct_spec.rb
74
+ - specs/unit/json/builder_spec.rb
75
+ - specs/unit/json/parser_spec.rb
76
+ - specs/unit/msgpack/parser_spec.rb
77
+ - specs/unit/parser_spec.rb
78
+ - specs/unit/struct_spec.rb
79
+ homepage: ''
80
+ licenses: []
81
+ metadata: {}
82
+ post_install_message:
83
+ rdoc_options: []
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ requirements: []
97
+ rubyforge_project:
98
+ rubygems_version: 2.5.1
99
+ signing_key:
100
+ specification_version: 4
101
+ summary: "...."
102
+ test_files: []