#! /usr/bin/ruby1.8
# NAME
# mauveconsole -- Ruby console to query the mauvealert server directly
#
# SYNOPSIS
# mauveconsole [-h | --help] [-V | --version] [-m | --manual] [<configuration file>]
#
# OPTIONS
# -h, --help Show a help message, and exit
#
# -m, --manual Show this manual, and exit
#
# -V, --version Show the version number, and exit
#
# -v, --verbose Show verbose errors
#
# <configuration file> File from whence to load the configuration. If none is
# specified, then mauvealert.conf in the current
# directory is used, and failing that
# /etc/mauvealert/mauvealert.conf is used.
#
# SEE ALSO
# irb(1), mauveserver(1), mauveclient(1)
#
# AUTHOR
# Patrick J Cherry <patrick@bytemark.co.uk>
#
help = manual = verbose = version = test = false
while arg = ARGV.pop
case arg
when /-(h|-help)/
help = true
when /-(V|-version)/
version = true
when /-(m|-manual)/
manual = true
when /(-(v|-verbose))/
verbose = true
when /(-(t|-test))/
test = true
else
configuration_file = arg
end
end
#
# CAUTION! Kwality kode.
#
if manual or help
# Open the file, stripping the shebang line
lines = File.open(__FILE__){|fh| fh.readlines}[1..-1]
found_synopsis = false
lines.each do |line|
line.chomp!
break if line.empty?
if help and !found_synopsis
found_synopsis = (line =~ /^#\s+SYNOPSIS\s*$/) if !found_synopsis
next
end
puts line[2..-1].to_s
break if help and found_synopsis and line =~ /^#\s*$/
end
end
require 'mauve/version'
puts "#{$0}: version "+Mauve::VERSION if version
exit 0 if help or version or manual
require 'log4r'
#
# Initial logger -- gets detroyed later.
#
logger = Log4r::Logger.new 'Mauve'
outputter = Log4r::StderrOutputter.new("initial")
outputter.formatter = Log4r::PatternFormatter.new( :pattern => "%d [ %6.6l ] [ %12.12c ] %m" )
outputter.level = verbose ? Log4r::DEBUG : Log4r::INFO
logger.outputters << outputter
require 'pp'
def error(msg)
logger = Log4r::Logger['Mauve']
logger.error "*** Error: #{msg}"
logger.error "*** For help, type: #{$0} -h"
if msg.respond_to?("backtrace")
logger.debug "*** Backtrace:"
logger.debug msg.backtrace.join("\n")
end
exit 1
end
begin
eval "Proc.new { |a,&b| }"
rescue SyntaxError => no_blocks_with_procs
error "mauveconsole must have Ruby 1.8.7 or later."
end
configuration_file = [".", "/etc/mauvealert/"].collect{|x| File.join(x, "mauveserver.conf") }.find{|d| File.file?(d)} if configuration_file.nil?
configuration_file = File.expand_path(configuration_file) unless configuration_file.nil?
if configuration_file.nil?
error "No configuration file could be found"
end
unless File.file?(configuration_file)
error "Configuration file #{configuration_file} not found"
end
require 'mauve/configuration'
require 'mauve/configuration_builder'
require 'mauve/configuration_builders'
require 'irb'
#
# Don't truncate logfiles.
#
module Mauve
module ConfigurationBuilders
class LoggerOutputter < ObjectBuilder
def result
@args[:trunc] = false if @args and @args[:trunc] == true
@result ||= Log4r.const_get(@outputter).new("Mauve", @args)
end
end
end
end
begin
builder = Mauve::ConfigurationBuilder.new
builder.include_file(configuration_file)
Mauve::Configuration.current = builder.result
Mauve::Server.instance.setup
rescue StandardError => ex
error ex
end
puts "This is mauve #{Mauve::VERSION}"
if outputter and logger.outputters.include?(outputter)
logger.debug "Closing initial outputter"
logger.outputters.delete(outputter)
outputter.flush
outputter.close
end
include Mauve
IRB.start