Class: Collectd::Values

Inherits:
Object
  • Object
show all
Defined in:
lib/collectd/interface.rb

Overview

Value-holder, baseclass for servers

Direct Known Subclasses

EmServer, Server

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(interval) ⇒ Values

Returns a new instance of Values.



139
140
141
142
143
# File 'lib/collectd/interface.rb', line 139

def initialize(interval)
  @interval = interval
  @counters = {}
  @gauges = {}
end

Instance Attribute Details

#intervalObject (readonly)

Returns the value of attribute interval.



138
139
140
# File 'lib/collectd/interface.rb', line 138

def interval
  @interval
end

Instance Method Details

#inc_counter(plugin_type, values) ⇒ Object



147
148
149
150
151
152
153
# File 'lib/collectd/interface.rb', line 147

def inc_counter(plugin_type, values)
  old_values = @counters[plugin_type] || []
  values.map! { |value|
    value + (old_values.shift || 0)
  }
  @counters[plugin_type] = values
end

#make_pktObject



166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# File 'lib/collectd/interface.rb', line 166

def make_pkt
  plugin_type_values = {}
  @counters.each do |plugin_types,values|
    plugin, plugin_instance, type, type_instance = plugin_types
    plugin_type_values[plugin] ||= {}
    plugin_type_values[plugin][plugin_instance] ||= {}
    plugin_type_values[plugin][plugin_instance][type] ||= {}
    plugin_type_values[plugin][plugin_instance][type][type_instance] =
    Packet::Values.new(values.map { |value| Packet::Values::Counter.new(value) })
  end
  @gauges.each do |plugin_types,values|
    plugin, plugin_instance, type, type_instance = plugin_types
    plugin_type_values[plugin] ||= {}
    plugin_type_values[plugin][plugin_instance] ||= {}
    plugin_type_values[plugin][plugin_instance][type] ||= {}
    count = values.shift || next
    values.map! { |value| value.to_f / count }
    plugin_type_values[plugin][plugin_instance][type][type_instance] =
      Packet::Values.new(values.map { |value| Packet::Values::Gauge.new(value) })
  end
  pkt = [Packet::Host.new(Collectd.hostname),
         Packet::Time.new(Time.now.to_i),
         Packet::Interval.new(10)]
  plugin_type_values.each do |plugin,plugin_instances|
    pkt << Packet::Plugin.new(plugin)
    plugin_instances.each do |plugin_instance,types|
      pkt << Packet::PluginInstance.new(plugin_instance)
      types.each do |type,type_instances|
        pkt << Packet::Type.new(type)
        type_instances.each do |type_instance,values|
          pkt << Packet::TypeInstance.new(type_instance)
          pkt << values
        end
      end
    end
  end

  # Reset only gauges. Counters are persistent for incrementing.
  @gauges = {}

  # And return serialized packet of parts
  pkt.to_s
end

#set_counter(plugin_type, values) ⇒ Object



144
145
146
# File 'lib/collectd/interface.rb', line 144

def set_counter(plugin_type, values)
  @counters[plugin_type] = values
end

#set_gauge(plugin_type, values) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
# File 'lib/collectd/interface.rb', line 154

def set_gauge(plugin_type, values)
  # Use count & sums for average
  if @gauges.has_key?(plugin_type)
    old_values = @gauges[plugin_type]
    count = old_values.shift || 0
    values.map! { |value| value + (old_values.shift || value) }
    @gauges[plugin_type] = [count + 1] + values
  else
    @gauges[plugin_type] = [1] + values
  end
end