Class: GmonPacket

Inherits:
Object
  • Object
show all
Defined in:
lib/logstash/inputs/ganglia/gmondpacket.rb

Instance Method Summary collapse

Constructor Details

#initialize(packet) ⇒ GmonPacket

Returns a new instance of GmonPacket.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 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 129
    @type=:ushort
  when 130
    @type=:short
  when 131
    @type=:int
  when 132
    @type=:uint
  when 133
    @type=:string
  when 134
    @type=:float
  when 135
    @type=:double
  when 136
    @type=:meta_request
  else
    @type=:unknown
  end
end

Instance Method Details

#data?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/logstash/inputs/ganglia/gmondpacket.rb', line 48

def data?
  [:ushort, :short, :int, :uint, :string, :float, :double].include? @type
end

#heartbeat?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/logstash/inputs/ganglia/gmondpacket.rb', line 44

def heartbeat?
  @type == :hearbeat
end

#meta?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/logstash/inputs/ganglia/gmondpacket.rb', line 52

def meta?
  @type == :meta
end

#parse_data(metadata) ⇒ Object

Parsing a data packet : type 133..135 Requires metadata to be available for correct parsing of the value



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/logstash/inputs/ganglia/gmondpacket.rb', line 97

def parse_data()
  data=Hash.new
  data['hostname']=@xdr.string

  metricname=@xdr.string
  data['name']=metricname

  data['spoof']=@xdr.uint32
  data['format']=@xdr.string

  data['val']=parse_value(@type)

  # If we received a packet, last update was 0 time ago
  data['tn']=0
  return data
end

#parse_metadataObject

Parsing a metadata packet : type 128



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/logstash/inputs/ganglia/gmondpacket.rb', line 57

def 
  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) ⇒ Object



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/logstash/inputs/ganglia/gmondpacket.rb', line 116

def parse_value(type)
  value=:unknown
  case type
  when :short
    value=@xdr.int16
  when :ushort
    value=@xdr.uint16
  when :int
    value=@xdr.int32
  when :uint
    value=@xdr.uint32
  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