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.



135
136
137
138
139
# File 'lib/collectd/interface.rb', line 135

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

Instance Attribute Details

#intervalObject (readonly)

Returns the value of attribute interval.



134
135
136
# File 'lib/collectd/interface.rb', line 134

def interval
  @interval
end

Instance Method Details

#inc_counter(plugin_type, values) ⇒ Object



143
144
145
146
147
148
149
# File 'lib/collectd/interface.rb', line 143

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



162
163
164
165
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
# File 'lib/collectd/interface.rb', line 162

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



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

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

#set_gauge(plugin_type, values) ⇒ Object



150
151
152
153
154
155
156
157
158
159
160
# File 'lib/collectd/interface.rb', line 150

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