chiark
/
gitweb
/
~mdw
/
hippotat
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rename "password" to "secret" everywhere
[hippotat]
/
hippotatlib
/
__init__.py
diff --git
a/hippotatlib/__init__.py
b/hippotatlib/__init__.py
index 397dfb2c23459cf4f9a7c17bd4064b63cec2e215..282266c009651b004ec940f7b79aac2b84f5c3c7 100644
(file)
--- a/
hippotatlib/__init__.py
+++ b/
hippotatlib/__init__.py
@@
-110,7
+110,8
@@
def logevent_is_boringtwisted(event):
if dflag is None and DBG.TWISTED in debug_set: return False
return True
except Exception:
if dflag is None and DBG.TWISTED in debug_set: return False
return True
except Exception:
- print(traceback.format_exc(), file=org_stderr)
+ print('EXCEPTION (IN BORINGTWISTED CHECK)',
+ traceback.format_exc(), file=org_stderr)
return False
@implementer(twisted.logger.ILogFilterPredicate)
return False
@implementer(twisted.logger.ILogFilterPredicate)
@@
-125,7
+126,7
@@
class LogNotBoringTwisted:
#---------- default config ----------
defcfg = '''
#---------- default config ----------
defcfg = '''
-[
DEFAULT
]
+[
COMMON
]
max_batch_down = 65536
max_queue_time = 10
target_requests_outstanding = 3
max_batch_down = 65536
max_queue_time = 10
target_requests_outstanding = 3
@@
-136,27
+137,27
@@
max_batch_up = 4000
http_retry = 5
port = 80
vroutes = ''
http_retry = 5
port = 80
vroutes = ''
+ifname_client = hippo%%d
+ifname_server = shippo%%d
#[server] or [<client>] overrides
#[server] or [<client>] 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
# 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 = <prefix>/<len>
# addrs = 127.0.0.1 ::1
# url
# relating to virtual network
vvnetwork = 172.24.230.192
# vnetwork = <prefix>/<len>
-# vadd
r
= <ipaddr>
+# vadd
r
= <ipaddr>
# vrelay = <ipaddr>
# [<client-ip4-or-ipv6-address>]
# vrelay = <ipaddr>
# [<client-ip4-or-ipv6-address>]
-#
password = <password
> # used by both, must match
+#
secret = <secret
> # used by both, must match
[LIMIT]
max_batch_down = 262144
[LIMIT]
max_batch_down = 262144
@@
-385,11
+386,21
@@
def _cfg_process_putatives():
server_pat = r'[-.0-9A-Za-z]+'
client_pat = r'[.:0-9a-f]+'
server_re = regexp.compile(server_pat)
server_pat = r'[-.0-9A-Za-z]+'
client_pat = r'[.:0-9a-f]+'
server_re = regexp.compile(server_pat)
- serverclient_re = regexp.compile(server_pat + r' ' + client_pat)
+ serverclient_re = regexp.compile(
+ server_pat + r' ' + '(?:' + client_pat + '|LIMIT)')
for cs in cfg.sections():
for cs in cfg.sections():
- if cs == 'LIMIT':
- # plan A "[LIMIT]"
+ def dbg(m):
+ log_debug_config('putatives: section [%s] %s' % (cs, m))
+
+ def log_ignore(why):
+ dbg('X ignore: %s' % (why))
+ print('warning: ignoring config section [%s] (%s)' % (cs, why),
+ file=sys.stderr)
+
+ if cs == 'LIMIT' or cs == 'COMMON':
+ # plan A "[LIMIT]" or "[COMMON]"
+ dbg('A ignore')
continue
try:
continue
try:
@@
-399,6
+410,7
@@
def _cfg_process_putatives():
if server_re.fullmatch(cs):
# plan C "[<servername>]"
if server_re.fullmatch(cs):
# plan C "[<servername>]"
+ dbg('C <server>')
putative(servers, cs, cs)
continue
putative(servers, cs, cs)
continue
@@
-408,32
+420,37
@@
def _cfg_process_putatives():
if pcs == 'LIMIT':
# plan E "[<servername> LIMIT]"
if pcs == 'LIMIT':
# plan E "[<servername> LIMIT]"
+ dbg('E <server> LIMIT')
continue
try:
# plan D "[<servername> <client>]" part 2
continue
try:
# plan D "[<servername> <client>]" part 2
- ci = ipaddr(pc)
+ ci = ipaddr(pc
s
)
except AddressValueError:
except AddressValueError:
- # plan F "[<some thing we do not understand>]"
- # well, we ignore this
- print('warning: ignoring config section %s' % cs, file=sys.stderr)
+ # plan F branch 1 "[<some thing we do not understand>]"
+ log_ignore('bad-addr')
continue
else: # no AddressValueError
continue
else: # no AddressValueError
- # plan D "[<servername> <client]" part 3
+ # plan D "[<servername> <client>]" part 3
+ dbg('D <server> <client>')
putative(clients, ci, pcs)
putative(servers, pss, pss)
continue
putative(clients, ci, pcs)
putative(servers, pss, pss)
continue
+ else:
+ # plan F branch 2 "[<some thing we do not understand>]"
+ log_ignore('nomatch '+ repr(serverclient_re))
else: # no AddressValueError
# plan B "[<client>" part 2
else: # no AddressValueError
# plan B "[<client>" part 2
+ dbg('B <client>')
putative(clients, ci, cs)
continue
return (servers, clients)
putative(clients, ci, cs)
continue
return (servers, clients)
-def cfg_process_
common
(c, ss):
- c.mtu = cfg
.
getint(ss, 'mtu')
+def cfg_process_
general
(c, ss):
+ c.mtu = cfg
1
getint(ss, 'mtu')
def cfg_process_saddrs(c, ss):
class ServerAddr():
def cfg_process_saddrs(c, ss):
class ServerAddr():
@@
-459,20
+476,20
@@
def cfg_process_saddrs(c, ss):
def __repr__(self):
return 'ServerAddr'+repr((self.port,self.addr))
def __repr__(self):
return 'ServerAddr'+repr((self.port,self.addr))
- c.port = cfg
.
getint(ss,'port')
+ c.port = cfg
1
getint(ss,'port')
c.saddrs = [ ]
c.saddrs = [ ]
- for addrspec in cfg
.
get(ss, 'addrs').split():
+ for addrspec in cfg
1
get(ss, 'addrs').split():
sa = ServerAddr(c.port, addrspec)
c.saddrs.append(sa)
def cfg_process_vnetwork(c, ss):
sa = ServerAddr(c.port, addrspec)
c.saddrs.append(sa)
def cfg_process_vnetwork(c, ss):
- c.vnetwork = ipnetwork(cfg
.
get(ss,'vnetwork'))
+ c.vnetwork = ipnetwork(cfg
1
get(ss,'vnetwork'))
if c.vnetwork.num_addresses < 3 + 2:
raise ValueError('vnetwork needs at least 2^3 addresses')
def cfg_process_vaddr(c, ss):
try:
if c.vnetwork.num_addresses < 3 + 2:
raise ValueError('vnetwork needs at least 2^3 addresses')
def cfg_process_vaddr(c, ss):
try:
- c.vaddr = cfg
.
get(ss,'vaddr')
+ c.vaddr = cfg
1
get(ss,'vaddr')
except NoOptionError:
cfg_process_vnetwork(c, ss)
c.vaddr = next(c.vnetwork.hosts())
except NoOptionError:
cfg_process_vnetwork(c, ss)
c.vaddr = next(c.vnetwork.hosts())
@@
-483,29
+500,40
@@
def cfg_search_section(key,sections):
return section
raise NoOptionError(key, repr(sections))
return section
raise NoOptionError(key, repr(sections))
+def cfg_get_raw(*args, **kwargs):
+ # for passing to cfg_search
+ return cfg.get(*args, raw=True, **kwargs)
+
def cfg_search(getter,key,sections):
section = cfg_search_section(key,sections)
return getter(section, key)
def cfg_search(getter,key,sections):
section = cfg_search_section(key,sections)
return getter(section, key)
+def cfg1get(section,key, getter=cfg.get,**kwargs):
+ section = cfg_search_section(key,[section,'COMMON'])
+ return getter(section,key,**kwargs)
+
+def cfg1getint(section,key, **kwargs):
+ return cfg1get(section,key, getter=cfg.getint,**kwargs);
+
def cfg_process_client_limited(cc,ss,sections,key):
def cfg_process_client_limited(cc,ss,sections,key):
- val = cfg_search(cfg
.
getint, key, sections)
- lim = cfg_search(cfg
.
getint, key, ['%s LIMIT' % ss, 'LIMIT'])
+ val = cfg_search(cfg
1
getint, key, sections)
+ lim = cfg_search(cfg
1
getint, key, ['%s LIMIT' % ss, 'LIMIT'])
cc.__dict__[key] = min(val,lim)
def cfg_process_client_common(cc,ss,cs,ci):
cc.__dict__[key] = min(val,lim)
def cfg_process_client_common(cc,ss,cs,ci):
- # returns sections to search in, iff
password
is defined, otherwise None
+ # returns sections to search in, iff
secret
is defined, otherwise None
cc.ci = ci
sections = ['%s %s' % (ss,cs),
cs,
ss,
cc.ci = ci
sections = ['%s %s' % (ss,cs),
cs,
ss,
- '
DEFAULT
']
+ '
COMMON
']
- try: pwsection = cfg_search_section('
password
', sections)
+ try: pwsection = cfg_search_section('
secret
', sections)
except NoOptionError: return None
except NoOptionError: return None
- pw = cfg
.get(pwsection, 'password
')
- cc.
password
= pw.encode('utf-8')
+ pw = cfg
1get(pwsection, 'secret
')
+ cc.
secret
= pw.encode('utf-8')
cfg_process_client_limited(cc,ss,sections,'target_requests_outstanding')
cfg_process_client_limited(cc,ss,sections,'http_timeout')
cfg_process_client_limited(cc,ss,sections,'target_requests_outstanding')
cfg_process_client_limited(cc,ss,sections,'http_timeout')
@@
-521,7
+549,7
@@
def cfg_process_ipif(c, sections, varmap):
#print('CFGIPIF',repr((varmap, sections, c.__dict__)),file=sys.stderr)
section = cfg_search_section('ipif', sections)
#print('CFGIPIF',repr((varmap, sections, c.__dict__)),file=sys.stderr)
section = cfg_search_section('ipif', sections)
- c.ipif_command = cfg
.
get(section,'ipif', vars=c.__dict__)
+ c.ipif_command = cfg
1
get(section,'ipif', vars=c.__dict__)
#---------- startup ----------
#---------- startup ----------
@@
-540,7
+568,7
@@
def common_startup(process_cfg):
def readconfig(pathname, mandatory=True):
def log(m, p=pathname):
if not DBG.CONFIG in debug_set: return
def readconfig(pathname, mandatory=True):
def log(m, p=pathname):
if not DBG.CONFIG in debug_set: return
- log_debug_config('%s: %s' % (m, p
athname
))
+ log_debug_config('%s: %s' % (m, p))
try:
files = os.listdir(pathname)
try:
files = os.listdir(pathname)
@@
-579,7
+607,7
@@
def common_startup(process_cfg):
def read_defconfig():
readconfig('/etc/hippotat/config.d', False)
def read_defconfig():
readconfig('/etc/hippotat/config.d', False)
- readconfig('/etc/hippotat/
password
s.d', False)
+ readconfig('/etc/hippotat/
secret
s.d', False)
readconfig('/etc/hippotat/master.cfg', False)
def oc_defconfig(od,os, value, op):
readconfig('/etc/hippotat/master.cfg', False)
def oc_defconfig(od,os, value, op):