X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=hippotat.git;a=blobdiff_plain;f=hippotatd;h=525e4a1bcf810b1ca4edae5cdb413b8e0ea49f30;hp=aefa45890a9676b64fa59d2df0b3b229c35dd99a;hb=ec2c9312c36782c61b38e1c3bcdbe932685a9794;hpb=b80a8f5ce910eeaf997aeacd66c814a89439184e diff --git a/hippotatd b/hippotatd index aefa458..525e4a1 100755 --- a/hippotatd +++ b/hippotatd @@ -37,6 +37,7 @@ import twisted.internet from twisted.web.server import NOT_DONE_YET import twisted.web.static +import twisted.python.syslog import hippotatlib.ownsource from hippotatlib.ownsource import SourceShipmentPreparer @@ -242,16 +243,17 @@ class IphttpResource(NotStupidResource): def render_GET(self, request): log_debug(DBG.HTTP, 'GET request') - return (''' - -hippotat -

-source -(and that of dependency packages) -available - -''' - % tuple(self.hippotat_sources)).encode('utf-8') + s = 'hippotat\n' + (s0,s1) = self.hippotat_sources + if s0: + s += '

source\n' % s0 + if self.hippotat_sources[1]: + s += ('(and that of dependency packages)\n' % s1) + s += 'available' + else: + s += 'TESTING' + s += '' + return s.encode('utf-8') def start_http(): resource = IphttpResource() @@ -273,11 +275,13 @@ def start_http(): ssp = SourceShipmentPreparer(td) ssp.logger = partial(log_debug, DBG.OWNSOURCE) if DBG.OWNSOURCE in debug_set: ssp.stream_debug = sys.stdout - ssp.generate() + ssp.download_packages = opts.ownsource >= 2 + if opts.ownsource >= 1: ssp.generate() for ix in (0,1): bn = ssp.output_names[ix] op = ssp.output_paths[ix] + if op is None: continue resource.hippotat_sources[ix] = bn subresource =twisted.web.static.File(op) resource.putChild(bn.encode('utf-8'), subresource) @@ -286,7 +290,10 @@ def start_http(): #---------- config and setup ---------- -def process_cfg(putative_servers, putative_clients): +def process_cfg(_opts, putative_servers, putative_clients): + global opts + opts = _opts + global c c = ConfigResults() c.server = cfg.get('SERVER','server') @@ -335,8 +342,53 @@ def catch_termination(): for sig in (signal.SIGINT, signal.SIGTERM): signal.signal(sig, partial(signal_handler, sig.name)) +def daemonise(): + global syslogfacility + if opts.daemon and opts.syslogfacility is None: + opts.syslogfacility = 'daemon' + + if opts.syslogfacility is not None: + facilnum = syslog.__dict__['LOG_' + opts.syslogfacility.upper()] + syslog.openlog('hippotatd', + facility=facilnum, + logoption=syslog.LOG_PID) + def emit(event): + m = twisted.logger.formatEvent(event) + #print(repr(event), m, file=org_stderr) + level = event.get('log_level') + if event.get('dflag',None) is not None: sl = syslog.LOG_DEBUG + elif level == LogLevel.critical : sl = syslog.LOG_CRIT + elif level == LogLevel.error : sl = syslog.LOG_ERR + elif level == LogLevel.warn : sl = syslog.LOG_WARNING + else : sl = syslog.LOG_INFO + syslog.syslog(sl,m) + glp = twisted.logger.globalLogPublisher + glp.addObserver(emit) + log_debug(DBG.INIT, 'starting to log to syslog') + + glp.removeObserver(hippotatlib.file_log_observer) + +optparser.add_option('--ownsource', default=2, + action='store_const', dest='ownsource', const=2, + help='source download fully enabled (default)') + +optparser.add_option('--ownsource-local', + action='store_const', dest='ownsource', const=1, + help='source download is local source code only') + +optparser.add_option('--no-ownsource', + action='store_const', dest='ownsource', const=0, + help='source download disabled (for testing only)') + +optparser.add_option('--syslog-facility', + nargs=1, type='string',action='store', + metavar='FACILITY', dest='syslogfacility', + default=None, + help='log to syslog, with specified facility') + common_startup(process_cfg) catch_termination() ipif = start_ipif(c.ipif_command, (lambda p,s,d: route(p,"[ipif]",s,d))) start_http() +daemonise() common_run()