Class: Opstat::Parsers::Haproxy

Inherits:
Object
  • Object
show all
Includes:
Logging
Defined in:
lib/parsers/haproxy.rb

Instance Method Summary collapse

Methods included from Logging

#log_level, #oplogger, #preconfig_logger

Instance Method Details

#parse_data(data:, time:) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/parsers/haproxy.rb', line 8

def parse_data(data:, time:)
  white_headers = [ :svname, :qcur, :qmax, :scur, :smax, :slim, :stot, :bin, :bout, :hrsp_1xx, :hrsp_2xx, :hrsp_3xx, :hrsp_4xx, :hrsp_5xx, :hrsp_other, :req_tot, :conn_tot]
  parsed_data = CSV.parse(data.join, { headers: true, header_converters: :symbol, converters: :all}).map{|row| Hash[row.headers[0..-1].zip(row.fields[0..-1])]}.group_by{|row| row[:_pxname]}
  report = []  
  yaml = []
  parsed_data.each do |key,value| 
    if value.first[:svname] == "FRONTEND"
      report <<  {:stats_type => :frontend, :name => value.first[:_pxname], :summary => value.first.select { |key, value| white_headers.include?(key)}}
    elsif value.first[:_pxname].to_s.start_with?("backend")
      backends = { :stats_type => :backend, :name => value.first[:_pxname] }
      instances = []
      value.each do |backend|
        if backend[:svname]  == "BACKEND"
          backends[:summary] =  backend.select { |key, value| white_headers.include?(key) }
        else
          backends[:details] = instances.push ( backend.select { |key, value| white_headers.include?(key) } )
        end
      end
      report <<  backends
    end
  end
  return report
end