class Fail2Ban

Public Class Methods

new(motd) click to toggle source
Calls superclass method Component::new
# File lib/panda_motd/components/fail_2_ban.rb, line 4
def initialize(motd)
  super(motd, "fail_2_ban")
end

Public Instance Methods

process() click to toggle source
# File lib/panda_motd/components/fail_2_ban.rb, line 8
def process
  @results = {
    jails: {},
  }

  @config["jails"].each do |jail|
    status = jail_status(jail)
    @results[:jails][jail] = {
      total: status[:total],
      current: status[:current],
    }
  end
end
to_s() click to toggle source
# File lib/panda_motd/components/fail_2_ban.rb, line 22
def to_s
  result = +"Fail2Ban:\n"
  @results[:jails].each do |name, stats|
    result << "  #{name}:\n"
    result << "    Total bans:   #{stats[:total]}\n"
    result << "    Current bans: #{stats[:current]}\n"
  end

  result.gsub!(/\s$/, "")
end

Private Instance Methods

jail_status(jail) click to toggle source
# File lib/panda_motd/components/fail_2_ban.rb, line 35
def jail_status(jail)
  cmd_result = `fail2ban-client status #{jail}`
  if cmd_result =~ /Sorry but the jail '#{jail}' does not exist/
    @errors << ComponentError.new(self, "Invalid jail name '#{jail}'.")
  else
    total = cmd_result.match(/Total banned:\s+([0-9]+)/)[1].to_i
    current = cmd_result.match(/Currently banned:\s+([0-9]+)/)[1].to_i
  end

  { total: total, current: current }
end