#! /usr/bin/ruby1.8 # NAME # # mauveserver -- receive alerts from station(s) around the network # # SYNOPSIS # # mauveserver [ -h | --help ] [] # # OPTIONS # # -h, --help Show a help message # # File to load the configuration from # # SEE ALSO # # mauveclient(1), mauveconsole(1) # # AUTHOR # # Patrick J Cherry # def error(msg) STDERR.print "*** Error: #{msg}\n" STDERR.print "*** For help, type: #{$0} -h\n" exit 1 end begin eval "Proc.new { |a,&b| }" rescue SyntaxError => no_blocks_with_procs error "mauveserver must have Ruby 1.8.7 or later" end # CAUTION! Kwality kode. # if ARGV.any?{|a| a =~ /--?h(elp)?/} # Open the file, stripping the shebang line lines = File.open(__FILE__){|fh| fh.readlines}[1..-1] lines.each do |line| line.chomp! break if line.empty? puts line[2..-1].to_s end exit 0 end configuration_file = ARGV.shift configuration_file = [".", "/etc/mauvealert/"].collect{|x| File.join("mauveserver.conf") }.find{|d| File.file?(d)} if configuration_file.nil? configuration_file = File.expand_path(configuration_file) unless File.file?(configuration_file) error "Configuration file #{configuration_file} not found\n" end require 'mauve/configuration' begin Mauve::Configuration.current = Mauve::ConfigurationBuilder.load(configuration_file) rescue StandardError => ex error ex.message end %w(HUP).each do |sig| trap(sig) do # this blows up if you do it twice in quick succession, but don't really # care about that case as it's only for log rotation. Mauve::Server.instance.logger.warn "#{sig} signal received. Restarting." Mauve::Server.instance.stop # # Reload configuration # begin new_config = Mauve::ConfigurationBuilder.load(configuration_file) Mauve::Configuration.current = new_config rescue BuildException => ex Mauve::Server.instance.logger.error "Reconfiguration failed: #{ex}. Sticking with old one." end Mauve::Server.instance.logger.warn "Restarting." Mauve::Server.instance.start end end %w(USR1).each do |sig| trap(sig) do Mauve::Server.instance.logger.warn "#{sig} signal received. Re-opening logs." Log4r::Outputter.each_outputter do |old| next unless old.is_a?(Log4r::FileOutputter) new = Log4r::FileOutputter.new(old.name, {:filename => old.filename, :trunc => false}) new.formatter = old.formatter new.level = old.level Mauve::Server.instance.logger.outputters << new Mauve::Server.instance.logger.outputters.delete(old) old.close Mauve::Server.instance.logger.debug "Opened #{new.filename}." end end end %w(QUIT TERM INT).each do |sig| trap(sig) do Mauve::Server.instance.logger.warn "#{sig} signal received. Stopping." Mauve::Server.instance.stop exit 0 end end begin Mauve::Server.instance.run rescue StandardError => ex error ex.message end