X-Git-Url: https://git.distorted.org.uk/~mdw/hippotat/blobdiff_plain/f85d143fe449d69d6f611fcd388191a80bdfc415..00ea54437e092ecc925df543d3c6fec30a32d667:/hippotatlib/__init__.py diff --git a/hippotatlib/__init__.py b/hippotatlib/__init__.py index feb7894..1460d5a 100644 --- a/hippotatlib/__init__.py +++ b/hippotatlib/__init__.py @@ -100,22 +100,28 @@ def log_debug(dflag, msg, idof=None, d=None): msg += ' ' + d + trunc log.info('{dflag} {msgcore}', dflag=dflag, msgcore=msg) +def logevent_is_boringtwisted(event): + try: + if event.get('log_level') != LogLevel.info: + return False + dflag = event.get('dflag') + if dflag is False : return False + if dflag in debug_set: return False + if dflag is None and DBG.TWISTED in debug_set: return False + return True + except Exception: + print('EXCEPTION (IN BORINGTWISTED CHECK)', + traceback.format_exc(), file=org_stderr) + return False + @implementer(twisted.logger.ILogFilterPredicate) class LogNotBoringTwisted: def __call__(self, event): - yes = twisted.logger.PredicateResult.yes - no = twisted.logger.PredicateResult.no - try: - if event.get('log_level') != LogLevel.info: - return yes - dflag = event.get('dflag') - if dflag is False : return yes - if dflag in debug_set: return yes - if dflag is None and DBG.TWISTED in debug_set: return yes - return no - except Exception: - print(traceback.format_exc(), file=org_stderr) - return yes + return ( + twisted.logger.PredicateResult.no + if logevent_is_boringtwisted(event) else + twisted.logger.PredicateResult.yes + ) #---------- default config ---------- @@ -131,22 +137,22 @@ max_batch_up = 4000 http_retry = 5 port = 80 vroutes = '' +ifname_client = hippo%%d +ifname_server = shippo%%d #[server] or [] overrides -ipif = userv root ipif %(local)s,%(peer)s,%(mtu)s,slip %(rnets)s +ipif = userv root ipif %(local)s,%(peer)s,%(mtu)s,slip,%(ifname)s %(rnets)s # relating to virtual network mtu = 1500 -[SERVER] -server = SERVER # addrs = 127.0.0.1 ::1 # url # relating to virtual network vvnetwork = 172.24.230.192 # vnetwork = / -# vadd r = +# vaddr = # vrelay = @@ -444,12 +450,15 @@ def cfg_process_saddrs(c, ss): self._endpointfactory = twisted.internet.endpoints.TCP6ServerEndpoint self._inurl = b'[%s]' def make_endpoint(self): - return self._endpointfactory(reactor, self.port, self.addr) + return self._endpointfactory(reactor, self.port, + interface= '%s' % self.addr) def url(self): url = b'http://' + (self._inurl % str(self.addr).encode('ascii')) if self.port != 80: url += b':%d' % self.port url += b'/' return url + def __repr__(self): + return 'ServerAddr'+repr((self.port,self.addr)) c.port = cfg.getint(ss,'port') c.saddrs = [ ] @@ -517,6 +526,10 @@ def cfg_process_ipif(c, sections, varmap): #---------- startup ---------- +def log_debug_config(m): + if not DBG.CONFIG in debug_set: return + print('DBG.CONFIG:', m) + def common_startup(process_cfg): # calls process_cfg(putative_clients, putative_servers) @@ -528,7 +541,7 @@ def common_startup(process_cfg): def readconfig(pathname, mandatory=True): def log(m, p=pathname): if not DBG.CONFIG in debug_set: return - print('DBG.CONFIG: %s: %s' % (m, pathname)) + log_debug_config('%s: %s' % (m, p)) try: files = os.listdir(pathname) @@ -546,7 +559,7 @@ def common_startup(process_cfg): # is a directory log('directory') re = regexp.compile('[^-A-Za-z0-9_]') - for f in os.listdir(cdir): + for f in os.listdir(pathname): if re.search(f): continue subpath = pathname + '/' + f try: @@ -562,12 +575,26 @@ def common_startup(process_cfg): need_defcfg = False readconfig(value) + def oc_extra_config(od,os, value, op): + readconfig(value) + + def read_defconfig(): + readconfig('/etc/hippotat/config.d', False) + readconfig('/etc/hippotat/passwords.d', False) + readconfig('/etc/hippotat/master.cfg', False) + + def oc_defconfig(od,os, value, op): + nonlocal need_defcfg + need_defcfg = False + read_defconfig(value) + def dfs_less_detailed(dl): return [df for df in DBG.iterconstants() if df <= dl] def ds_default(od,os,dl,op): global debug_set - debug_set = set(dfs_less_detailed(debug_def_detail)) + debug_set.clear + debug_set |= set(dfs_less_detailed(debug_def_detail)) def ds_select(od,os, spec, op): for it in spec.split(','): @@ -624,22 +651,34 @@ just `+': all DFLAGs. action='callback', callback= oc_config) + optparser.add_option('--extra-config', + nargs=1, + type='string', + metavar='CONFIGFILE', + dest='configfile', + action='callback', + callback= oc_extra_config) + + optparser.add_option('--default-config', + action='callback', + callback= oc_defconfig) + (opts, args) = optparser.parse_args() if len(args): optparser.error('no non-option arguments please') if need_defcfg: - readconfig('/etc/hippotat/config', False) - readconfig('/etc/hippotat/config.d', False) + read_defconfig() try: (pss, pcs) = _cfg_process_putatives() - process_cfg(pss, pcs) + process_cfg(opts, pss, pcs) except (configparser.Error, ValueError): traceback.print_exc(file=sys.stderr) print('\nInvalid configuration, giving up.', file=sys.stderr) sys.exit(12) - #print(repr(debug_set), file=sys.stderr) + + #print('X', debug_set, file=sys.stderr) log_formatter = twisted.logger.formatEventAsClassicLogText stdout_obs = twisted.logger.FileLogObserver(sys.stdout, log_formatter) @@ -648,15 +687,17 @@ just `+': all DFLAGs. stdsomething_obs = twisted.logger.FilteringLogObserver( stderr_obs, [pred], stdout_obs ) - log_observer = twisted.logger.FilteringLogObserver( + global file_log_observer + file_log_observer = twisted.logger.FilteringLogObserver( stdsomething_obs, [LogNotBoringTwisted()] ) #log_observer = stdsomething_obs twisted.logger.globalLogBeginner.beginLoggingTo( - [ log_observer, crash_on_critical ] + [ file_log_observer, crash_on_critical ] ) def common_run(): log_debug(DBG.INIT, 'entering reactor') if not _crashing: reactor.run() - print('CRASHED (end)', file=sys.stderr) + print('ENDED', file=sys.stderr) + sys.exit(16)