mirror of https://github.com/sipwise/collectd.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.6 KiB
136 lines
3.6 KiB
# Ruby class to access collectd daemon through the UNIX socket
|
|
# plugin.
|
|
#
|
|
# Requires collectd to be configured with the unixsock plugin, like so:
|
|
#
|
|
# LoadPlugin unixsock
|
|
# <Plugin unixsock>
|
|
# SocketFile "/var/run/collectd-unixsock"
|
|
# SocketPerms "0775"
|
|
# </Plugin>
|
|
#
|
|
# Copyright (C) 2009 Novell Inc.
|
|
# Author: Duncan Mac-Vicar P. <dmacvicar@suse.de>
|
|
#
|
|
# Inspired in python version:
|
|
# Copyright (C) 2008 Clay Loveless <clay@killersoft.com>
|
|
#
|
|
# This software is provided 'as-is', without any express or implied
|
|
# warranty. In no event will the author be held liable for any damages
|
|
# arising from the use of this software.
|
|
#
|
|
# Permission is granted to anyone to use this software for any purpose,
|
|
# including commercial applications, and to alter it and redistribute it
|
|
# freely, subject to the following restrictions:
|
|
#
|
|
# 1. The origin of this software must not be misrepresented; you must not
|
|
# claim that you wrote the original software. If you use this software
|
|
# in a product, an acknowledgment in the product documentation would be
|
|
# appreciated but is not required.
|
|
# 2. Altered source versions must be plainly marked as such, and must not be
|
|
# misrepresented as being the original software.
|
|
# 3. This notice may not be removed or altered from any source distribution.
|
|
#
|
|
require 'socket'
|
|
|
|
# Access to collectd data using the unix socket
|
|
# interface
|
|
#
|
|
# see http://collectd.org/wiki/index.php/Plugin:UnixSock
|
|
#
|
|
class CollectdUnixSock
|
|
include Socket::Constants
|
|
|
|
# initializes the collectd interface
|
|
# path is the location of the collectd
|
|
# unix socket
|
|
#
|
|
# collectd = CollectdUnixSock.new
|
|
#
|
|
def initialize(path='/var/run/collectd-unixsock')
|
|
@socket = UNIXSocket.open(path)
|
|
# @socket = Socket.new(AF_UNIX, SOCK_STREAM, 0)
|
|
# @socket.connect(path)
|
|
@path = path
|
|
end
|
|
|
|
# iterates over available values, passing the
|
|
# identifier to the block and the time
|
|
# the data for this identifier was last
|
|
# updated
|
|
#
|
|
# collectd.each_value do |time, identifier|
|
|
# ...
|
|
# end
|
|
def each_value
|
|
n_lines = cmd("LISTVAL")
|
|
n_lines.times do
|
|
line = @socket.readline
|
|
time_s, identifier = line.split(' ', 2)
|
|
time = Time.at(time_s.to_i)
|
|
yield time, identifier
|
|
end
|
|
end
|
|
|
|
# iterates over each value current data
|
|
#
|
|
# collectd.each_value_data('myhost/swap/swap-free') { |col, val| }
|
|
#
|
|
# each iteration gives the column name and the value for it.
|
|
#
|
|
# You can also disable flushing by specifying it as an option:
|
|
#
|
|
# client.each_value_data('tarro/swap/swap-free',
|
|
# :flush => false ) do |col, val|
|
|
# # .. do something with col and val
|
|
# end
|
|
#
|
|
# :flush option is by default true
|
|
#
|
|
def each_value_data(identifier, opts={})
|
|
n_lines = cmd("GETVAL \"#{identifier}\"")
|
|
n_lines.times do
|
|
line = @socket.readline
|
|
col, val = line.split('=', 2)
|
|
yield col, val
|
|
end
|
|
|
|
# unless the user explicitly disabled
|
|
# flush...
|
|
unless opts[:flush] == false
|
|
cmd("FLUSH identifier=\"#{identifier}\"")
|
|
end
|
|
|
|
end
|
|
|
|
private
|
|
|
|
# internal command execution
|
|
def cmd(c)
|
|
@socket.write("#{c}\n")
|
|
line = @socket.readline
|
|
status_string, message = line.split(' ', 2)
|
|
status = status_string.to_i
|
|
raise message if status < 0
|
|
status
|
|
end
|
|
|
|
end
|
|
|
|
if __FILE__ == $0
|
|
|
|
client = CollectdUnixSock.new
|
|
client.each_value do |time, id|
|
|
puts "#{time.to_i} - #{id}"
|
|
end
|
|
|
|
client.each_value_data("tarro/cpu-0/cpu-user") do |col, val|
|
|
puts "#{col} -> #{val}"
|
|
end
|
|
|
|
client.each_value_data("tarro/interface/if_packets-eth0") do |col, val|
|
|
puts "#{col} -> #{val}"
|
|
end
|
|
|
|
end
|