def main(args): ''' main() function of this module ''' CONFIG.register_descriptions({ "http.server.address": "Address to listen to", "http.server.class": "Use alternate ServerHTTP-like class", "http.server.daemonize": "Run in background as a daemon", "http.server.mime": "Enable code that guess mime types", "http.server.ports": "List of ports to listen to", "http.server.rootdir": "Root directory for static pages", "http.server.ssi": "Enable server-side includes", }) common.main("http.server", "Neubot simple HTTP server", args) conf = CONFIG.copy() if conf["http.server.class"]: make_child = utils.import_class(conf["http.server.class"]) server = make_child(POLLER) else: server = HTTP_SERVER server.configure(conf) if conf["http.server.rootdir"] == ".": conf["http.server.rootdir"] = os.path.abspath(".") for port in conf["http.server.ports"].split(","): if port: server.listen((conf["http.server.address"], int(port))) if conf["http.server.daemonize"]: system.change_dir() system.go_background() system.write_pidfile() LOG.redirect() system.drop_privileges(LOG.error) POLLER.loop()
def main(args): common.main("agent", "Run in background, periodically run tests", args) conf = CONFIG.copy() privacy.complain_if_needed() if conf["agent.api"]: server = HTTP_SERVER LOG.debug("* API server root directory: %s" % WWW) conf["http.server.rootdir"] = WWW conf["http.server.ssi"] = True conf["http.server.bind_or_die"] = True server.configure(conf) server.register_child(ServerAPI(POLLER), "/api") server.listen((conf["agent.api.address"], conf["agent.api.port"])) if conf["agent.daemonize"]: system.change_dir() system.go_background() system.write_pidfile() LOG.redirect() if conf["agent.use_syslog"]: LOG.redirect() system.drop_privileges(LOG.error) # # When we run as an agent we also save logs into # the database, to easily access and show them via # the web user interface. # LOG.use_database() if conf["agent.rendezvous"]: client = ClientRendezvous(POLLER) client.configure(conf) client.connect_uri() POLLER.loop()
def main(args): """ Starts the server module """ # # Register descriptions in main() only so that # we don't advertise the name of knobs that aren't # relevant in the current context. # CONFIG.register_descriptions({ "server.bittorrent": "Start up BitTorrent test and negotiate server", "server.daemonize": "Become a daemon and run in background", 'server.debug': 'Run the localhost-only debug server', "server.negotiate": "Turn on negotiation infrastructure", "server.rendezvous": "Start up rendezvous server", "server.sapi": "Turn on Server-side API", "server.speedtest": "Start up Speedtest test and negotiate server", }) common.main("server", "Neubot server-side component", args) conf = CONFIG.copy() # # Configure our global HTTP server and make # sure that we don't provide filesystem access # even by mistake. # conf["http.server.rootdir"] = "" HTTP_SERVER.configure(conf) # # New-style modules are started just setting a # bunch of conf[] variables and then invoking # their run() method in order to kick them off. # if conf["server.negotiate"]: negotiate.run(POLLER, conf) if conf["server.bittorrent"]: conf["bittorrent.listen"] = True conf["bittorrent.negotiate"] = True bittorrent.run(POLLER, conf) if conf['server.speedtest']: #conf['speedtest.listen'] = 1 # Not yet #conf['speedtest.negotiate'] = 1 # Not yet neubot.speedtest.wrapper.run(POLLER, conf) # Migrating from old style to new style if conf["server.rendezvous"]: #conf["rendezvous.listen"] = True # Not yet neubot.rendezvous.server.run(POLLER, conf) # # Historically Neubot runs on port 9773 and # 8080 but we would like to switch to port 80 # in the long term period, because it's rare # that they filter it. # OTOH it looks like it's not possible to # do that easily w/ M-Lab because the port # is already taken. # address = "0.0.0.0" ports = (80, 8080, 9773) for port in ports: HTTP_SERVER.listen((address, port)) # # Start server-side API for Nagios plugin # to query the state of the server. # functionalities. # if conf["server.sapi"]: server = ServerSideAPI(POLLER) server.configure(conf) HTTP_SERVER.register_child(server, "/sapi") # # Create localhost-only debug server # if CONFIG['server.debug']: LOG.info('server: Starting debug server at 127.0.0.1:9774') server = DebugAPI(POLLER) server.configure(conf) server.listen(('127.0.0.1', 9774)) # # Go background and drop privileges, # then enter into the main loop. # if conf["server.daemonize"]: system.change_dir() system.go_background() system.write_pidfile() LOG.redirect() system.drop_privileges(LOG.error) POLLER.loop()