diff options
author | Patrick J Cherry <patrick@bytemark.co.uk> | 2011-07-13 16:02:50 +0100 |
---|---|---|
committer | Patrick J Cherry <patrick@bytemark.co.uk> | 2011-07-13 16:02:50 +0100 |
commit | e140af144e987ff7f6d767f2dc48b9cf685803fd (patch) | |
tree | 4a01971890865b4b3ca837d563bc673cbb787de8 /bin/mauveserver | |
parent | d28af4ec946c6aa4b645b73cef47d7e0c680bc0d (diff) |
Big commit
* Added manpages for all binaries
* Added log-reopening for mauvealert-server, and logrotate snippet
* mauveserver now adds a user on install, and runs as that user
* Big logging tidy-up
* Alert subjects are only overwritten by the source, when the subject in the databse is empty
* Removed various attr_writer methods that were being redifined
* Added a notes box to the acknowledge form, but this doesn't work yet
Diffstat (limited to 'bin/mauveserver')
-rwxr-xr-x | bin/mauveserver | 96 |
1 files changed, 81 insertions, 15 deletions
diff --git a/bin/mauveserver b/bin/mauveserver index 2d810b9..a5cf7b5 100755 --- a/bin/mauveserver +++ b/bin/mauveserver @@ -1,49 +1,111 @@ #! /usr/bin/ruby1.8 +# NAME +# +# mauveserver -- receive alerts from station(s) around the network +# +# SYNOPSIS +# +# mauveserver [ -h | --help ] [<configuration file>] +# +# OPTIONS +# +# -h, --help Show a help message +# +# <configuration file> File to load the configuration from +# +# SEE ALSO +# +# mauveclient(1), mauveconsole(1) +# +# AUTHOR +# +# Patrick J Cherry <patrick@bytemark.co.uk> +# + +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 - STDERR.print "mauveserver must have Ruby 1.8.7 or later, sorry (if you "+ - "try, you'll get a SyntaxError trying to load one of its libraries)\n" - exit 1 + error "mauveserver must have Ruby 1.8.7 or later" end - -require 'mauve/configuration' + +# 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/"].find{|d| File.file?(File.join(d,"mauveserver.conf")) } if configuration_file.nil? +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) - STDERR.print "Configuration file #{configuration_file} not found\n" - Kernel.exit 1 + error "Configuration file #{configuration_file} not found\n" end -Mauve::Configuration.current = Mauve::ConfigurationBuilder.load(configuration_file) +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("HUP") do + 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. Stopping." + Mauve::Server.instance.logger.warn "#{sig} signal received. Restarting." Mauve::Server.instance.stop # # Reload configuration # - Mauve::Server.instance.logger.warn "Restarting." - begin new_config = Mauve::ConfigurationBuilder.load(configuration_file) Mauve::Configuration.current = new_config rescue BuildException => ex - Mauve::Server.instance.logger.warn "Reconfiguration failed: #{ex}. Sticking with old one." + 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." @@ -52,5 +114,9 @@ end end end -Mauve::Server.instance.run +begin + Mauve::Server.instance.run +rescue StandardError => ex + error ex.message +end |