示例#1
0
def initialize():
	"""
	Starts the server main loop.
	"""
	from twisted.internet import reactor
	from twisted.python.logfile import LogFile
	import os,os.path,sys

	# load our run-time configuration
	import tops.core.utility.config as config
	verbose = config.initialize()

	# use file-based logging for ourself (print statements are automatically redirected)
	logpath = config.getfilename('archiver','logfile')
	if not logpath or logpath == 'stdout':
		log.startLogging(sys.stdout)
	else:
		(logpath,logfile) = os.path.split(logpath)
		log.startLogging(LogFile(logfile,logpath))

	print 'Executing',__file__,'as PID',os.getpid()
	try:
		# create an archive manager to connect our consumers to our producers
		manager = ArchiveManager()

		# initialize a TCP server to listen for local or network clients producing log messages
		factory = Factory()
		factory.protocol = ArchiveServer
		factory.manager = manager
		reactor.listenTCP(config.getint('archiver','tcp_port'),factory)
		reactor.listenUNIX(config.getfilename('archiver','unix_addr'),factory)

		# initialize an HTTP server to handle archive monitoring queries via http
		prepareWebServer(
			portNumber = config.getint('archiver','http_port'),
			handlers = {"feed":ArchiveQuery()},
			properties = {"manager":manager},
			filterLogs = True
		)

		# fire up the reactor
		print 'Waiting for clients...'
		reactor.run()

	except Exception:
		print 'Reactor startup failed'
		# How do I release my unix socket cleanly here?
		#reactor.stop()
		raise