#! /usr/bin/ruby1.8 # NAME # mauveconsole -- Ruby console to query the mauvealert server directly # # SYNOPSIS # mauveconsole [-h | --help] [-V | --version] [-m | --manual] [] # # 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 # # 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 # 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