class OpenVPNStatusWeb::Parser::V1

Public Instance Methods

parse_status_log(text) click to toggle source
# File lib/openvpn-status-web/parser/v1.rb, line 6
def parse_status_log(text)
  current_section = :none
  client_list = []
  routing_table = []
  global_stats = []

  text.lines.each do |line|
    (current_section = :cl; next) if line == "OpenVPN CLIENT LIST\n"
    (current_section = :rt; next) if line == "ROUTING TABLE\n"
    (current_section = :gs; next) if line == "GLOBAL STATS\n"
    (current_section = :end; next) if line == "END\n"

    case current_section
    when :cl
      client_list << line.strip.split(',')
    when :rt
      routing_table << line.strip.split(',')
    when :gs
      global_stats << line.strip.split(',')
    end
  end

  status = Status.new
  status.client_list_headers = ['Common Name', 'Real Address', 'Data Received', 'Data Sent', 'Connected Since']
  status.client_list = client_list[2..].map { |client| parse_client(client) }
  status.routing_table_headers = ['Virtual Address', 'Common Name', 'Real Address', 'Last Ref']
  status.routing_table = routing_table[1..].map { |route| parse_route(route) }
  status.global_stats = global_stats.map { |global| parse_global(global) }
  status
end

Private Instance Methods

parse_client(client) click to toggle source
# File lib/openvpn-status-web/parser/v1.rb, line 39
def parse_client(client)
  client[2] = client[2].to_i
  client[3] = client[3].to_i
  client[4] = DateTime.strptime(client[4], '%a %b %d %k:%M:%S %Y')
  client
end
parse_global(global) click to toggle source
# File lib/openvpn-status-web/parser/v1.rb, line 51
def parse_global(global)
  global[1] = global[1].to_i
  global
end
parse_route(route) click to toggle source
# File lib/openvpn-status-web/parser/v1.rb, line 46
def parse_route(route)
  route[3] = DateTime.strptime(route[3], '%a %b %d %k:%M:%S %Y')
  route
end