class GmonPacket
Public Class Methods
new(packet)
click to toggle source
# File lib/logstash/inputs/ganglia/gmondpacket.rb, line 15 def initialize(packet) @xdr=XDR::Reader.new(StringIO.new(packet)) # Read packet type type=@xdr.uint32 case type when 128 @type=:meta when 132 @type=:heartbeat when 133..134 @type=:data when 135 @type=:gexec else @type=:unknown end end
Public Instance Methods
data?()
click to toggle source
# File lib/logstash/inputs/ganglia/gmondpacket.rb, line 38 def data? @type == :data end
heartbeat?()
click to toggle source
# File lib/logstash/inputs/ganglia/gmondpacket.rb, line 34 def heartbeat? @type == :hearbeat end
meta?()
click to toggle source
# File lib/logstash/inputs/ganglia/gmondpacket.rb, line 42 def meta? @type == :meta end
name_to_type(name,metadata)
click to toggle source
Does lookup of metricname in metadata table to find the correct type
# File lib/logstash/inputs/ganglia/gmondpacket.rb, line 138 def name_to_type(name,metadata) # Lookup this metric metadata meta=metadata[name] return nil if meta.nil? return meta['type'] end
parse_data(metadata)
click to toggle source
Parsing a data packet : type 133..135 Requires metadata to be available for correct parsing of the value
# File lib/logstash/inputs/ganglia/gmondpacket.rb, line 87 def parse_data(metadata) data=Hash.new data['hostname']=@xdr.string metricname=@xdr.string data['name']=metricname data['spoof']=@xdr.uint32 data['format']=@xdr.string metrictype=name_to_type(metricname,metadata) if metrictype.nil? # Probably we got a data packet before a metadata packet #puts "Received datapacket without metadata packet" return nil end data['val']=parse_value(metrictype) # If we received a packet, last update was 0 time ago data['tn']=0 return data end
parse_metadata()
click to toggle source
Parsing a metadata packet : type 128
# File lib/logstash/inputs/ganglia/gmondpacket.rb, line 47 def parse_metadata meta=Hash.new meta['hostname']=@xdr.string meta['name']=@xdr.string meta['spoof']=@xdr.uint32 meta['type']=@xdr.string meta['name2']=@xdr.string meta['units']=@xdr.string slope=@xdr.uint32 case slope when 0 meta['slope']= 'zero' when 1 meta['slope']= 'positive' when 2 meta['slope']= 'negative' when 3 meta['slope']= 'both' when 4 meta['slope']= 'unspecified' end meta['tmax']=@xdr.uint32 meta['dmax']=@xdr.uint32 nrelements=@xdr.uint32 meta['nrelements']=nrelements unless nrelements.nil? extra={} for i in 1..nrelements name=@xdr.string extra[name]=@xdr.string end meta['extra']=extra end return meta end
parse_value(type)
click to toggle source
Parsing a specific value of type github.com/ganglia/monitor-core/blob/master/gmond/gmond.c#L1527
# File lib/logstash/inputs/ganglia/gmondpacket.rb, line 114 def parse_value(type) value=:unknown case type when "int16" value=@xdr.int16 when "uint16" value=@xdr.uint16 when "uint32" value=@xdr.uint32 when "int32" value=@xdr.int32 when "float" value=@xdr.float32 when "double" value=@xdr.float64 when "string" value=@xdr.string else #puts "Received unknown type #{type}" end return value end