aboutsummaryrefslogtreecommitdiff
path: root/bin/jmauveserver
diff options
context:
space:
mode:
authorPatrick J Cherry <patrick@bytemark.co.uk>2011-04-13 17:03:16 +0100
committerPatrick J Cherry <patrick@bytemark.co.uk>2011-04-13 17:03:16 +0100
commit89a67770e66d11740948e90a41db6cee0482cf8e (patch)
treebe858515fb789a89d68f94975690ab019813726c /bin/jmauveserver
new version.
Diffstat (limited to 'bin/jmauveserver')
-rwxr-xr-xbin/jmauveserver65
1 files changed, 65 insertions, 0 deletions
diff --git a/bin/jmauveserver b/bin/jmauveserver
new file mode 100755
index 0000000..9cdd26f
--- /dev/null
+++ b/bin/jmauveserver
@@ -0,0 +1,65 @@
+#!/usr/bin/env jruby
+
+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
+end
+
+require 'mauve/configuration'
+include Mauve
+
+configuration_file = ARGV[0]
+if !configuration_file
+ if File.exists?("/etc/mauvealert/mauveserver.conf")
+ configuration_file = "/etc/mauvealert/mauveserver.conf"
+ else
+ STDERR.print "Syntax: #{$0} <configuration filename>\n"
+ exit 1
+ end
+end
+Configuration.current = ConfigurationBuilder.load(configuration_file)
+
+class RestartSignalReceived < Exception; end
+trap("HUP") 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.
+ Thread.main.raise(RestartSignalReceived.new)
+end
+
+# Start canary thread.
+#require 'canary'
+#Canary.start(1, Log)
+
+# Main loop
+@logger = Log4r::Logger.new "mauve::server<#{Process.pid}>"
+loop do
+ begin
+ Configuration.current.server.run
+ rescue Interrupt
+ @logger.info "Interrupted by user, exiting"
+ Configuration.current.close
+ exit 0
+ rescue RestartSignalReceived => ex
+ @logger.info "Restart signal received, reloading the configuration"
+ begin
+ new_configuration = ConfigurationBuilder.load(configuration_file)
+ rescue Exception => ex
+ @logger.error "Error reloading configuration, reusing old one: #{ex}"
+ @logger.debug ex.backtrace.join("\n")
+ end
+
+ Configuration.current.close
+ Configuration.current = new_configuration
+ rescue Exception => ex
+ @logger.fatal("Uncaught #{ex.class} exception, will try to log")
+ @logger.fatal("Class: #{ex.class} "+
+ "Message: #{ex.message} "+
+ "Backtrace: #{ex.backtrace.join("\n")}")
+ exit 9
+ end
+end
+
+