ffwd-collectd 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ac5bc3ee635e6c6924eef53bb428d0c248d5afb6
4
- data.tar.gz: 9e721848dd0815e90996d6464937901eab88a479
3
+ metadata.gz: e49679083351f91e41dbd8633d41113e8382c16e
4
+ data.tar.gz: b4834244fb558ce61ac5c93b4d425a85cc083edd
5
5
  SHA512:
6
- metadata.gz: dca260d6792e3577144bdf6c43776cbb7b32fa8cc345b0f281c63a7b0abf89c97477ae7e93905ca85ba00d8cab6cb89a0b1794ecab01d7f1fa4978089ff33a18
7
- data.tar.gz: 46e0048352da4bdca94456d036e8e8bc5abe2b6253865e1e6bd2ca2303d22d04d78f3720886b177add55994539f2db9f38a528ef36f9cc10e1ce2f838d497e04
6
+ metadata.gz: 5c621d6753759e53c1a4ea5c7532a02a1c3e6fdf86db8c4f103e39088aa291db72e04825ba131bfd35d29660a0242e8db6d01a3eca70a27707bfa404cdd62b7c
7
+ data.tar.gz: 39e84c1eea1d1c2168a6eb3375fb1708c944d32c8ed4b7301f06f13ab59a30037499b7fc99ea32652eca27ed7bdf324c2ce57fe0f55973be863e816a5cbb6c30
@@ -23,56 +23,87 @@ module FFWD::Plugin::Collectd
23
23
  def initialize bind, core, config
24
24
  @bind = bind
25
25
  @core = core
26
- @types_db = TypesDB.open config[:types_db]
26
+ @db = TypesDB.open config[:types_db]
27
27
  @key = config[:key]
28
28
  end
29
29
 
30
30
  def receive_data(data)
31
- Parser.parse(data) do |metric|
32
- values = metric[:values]
33
- time = metric[:time]
34
- host = metric[:host]
31
+ Parser.parse(data) do |m|
32
+ plugin = m[:plugin]
33
+ type = m[:type]
34
+ plugin_i = m[:plugin_instance]
35
+ type_i = m[:type_instance]
35
36
 
36
- attributes = {
37
- "plugin" => metric[:plugin],
38
- "type" => metric[:type],
39
- }
40
-
41
- if instance = metric[:plugin_instance] and not instance.empty?
42
- attributes[:plugin_instance] = instance
43
- end
44
-
45
- if instance = metric[:type_instance] and not instance.empty?
46
- attributes[:type_instance] = instance
47
- end
48
-
49
- # Just add a running integer to the end of the key, the 'correct'
50
- # solution would have been to read, parse and match from a types.db.
51
- #
52
- # http://collectd.org/documentation/manpages/types.db.5.shtml
53
- if values.size > 1
54
- values.each_with_index do |v, i|
55
- if @types_db and name = @types_db.get_name(metric[:type], i)
56
- index_key = name
57
- else
58
- index_key = i.to_s
59
- end
60
-
61
- @core.input.metric(
62
- :key => @key, :time => time, :value => v[1],
63
- :host => host, :attributes => attributes)
64
- @bind.increment :received_metrics
65
- end
66
- else
67
- v = values[0]
37
+ read_values(plugin, plugin_i, type, type_i, m[:values]) do |a, v|
68
38
  @core.input.metric(
69
- :key => @key, :time => time, :value => v[1],
70
- :host => host, :attributes => attributes)
39
+ :key => @key, :time => m[:time], :value => v,
40
+ :host => m[:host], :attributes => a)
71
41
  @bind.increment :received_metrics
72
42
  end
73
43
  end
74
44
  rescue => e
75
45
  @bind.log.error "Failed to receive data", e
76
46
  end
47
+
48
+ def read_values(plugin, plugin_i, type, type_i, values, &block)
49
+ if values.size == 1
50
+ return read_single(plugin, plugin_i, type, type_i, values[0], &block)
51
+ end
52
+
53
+ read_multiple(plugin, plugin_i, type, type_i, values, &block)
54
+ end
55
+
56
+ def read_single(plugin, plugin_i, type, type_i, v)
57
+ a = {:plugin => plugin, :type => type}
58
+ a[:plugin_instance] = plugin_i unless plugin_i.nil? or plugin_i.empty?
59
+ a[:type_instance] = type_i unless type_i.nil? or type_i.empty?
60
+ a[:value_type] = v[0]
61
+ a[:what] = format_what(a)
62
+ yield a, v[1]
63
+ end
64
+
65
+ # Handle payload with multiple values.
66
+ #
67
+ # If a database is not available, plugin_instance becomes the running
68
+ # integer, or index of the value.
69
+ #
70
+ # If a database is avaialble, it would follow the current structure and
71
+ # determine what the name of the plugin_instance is.
72
+ #
73
+ # http://collectd.org/documentation/manpages/types.db.5.shtml
74
+ def read_multiple(plugin, plugin_i, type, type_i, values)
75
+ values.each_with_index do |v, i|
76
+ a = {:plugin => plugin, :type => type}
77
+ a[:plugin_instance] = plugin_i unless plugin_i.nil? or plugin_i.empty?
78
+ a[:type_instance] = format_type_instance(type, i)
79
+ a[:value_type] = v[0]
80
+ a[:what] = format_what(a)
81
+ yield a, v[1]
82
+ end
83
+ end
84
+
85
+ def format_type_instance type, i
86
+ if @db
87
+ return @db.get_name(type, i)
88
+ end
89
+
90
+ i.to_s
91
+ end
92
+
93
+ def format_what a
94
+ p = if a[:plugin_instance]
95
+ "#{a[:plugin]}-#{a[:plugin_instance]}"
96
+ else
97
+ a[:plugin].to_s
98
+ end
99
+
100
+ t = if a[:type_instance]
101
+ "#{a[:type]}-#{a[:type_instance]}"
102
+ else
103
+ a[:type].to_s
104
+ end
105
+
106
+ "#{p}/#{t}"
107
+ end
77
108
  end
78
109
  end
@@ -23,15 +23,11 @@ module FFWD::Plugin::Collectd
23
23
  end
24
24
 
25
25
  def get_name key, i
26
- unless entry = @database[key]
27
- return nil
26
+ if entry = @database[key] and spec = entry[i]
27
+ return spec[0]
28
28
  end
29
29
 
30
- unless type_spec = entry[i]
31
- return nil
32
- end
33
-
34
- type_spec[0]
30
+ return i.to_s
35
31
  end
36
32
 
37
33
  def self.open path
@@ -16,7 +16,7 @@
16
16
  module FFWD
17
17
  module Plugin
18
18
  module Collectd
19
- VERSION = "0.3.3"
19
+ VERSION = "0.3.4"
20
20
  end
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffwd-collectd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - John-John Tedro
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.3
19
+ version: 0.3.4
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.3
26
+ version: 0.3.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement