1
1
Fork 0
mirror of https://github.com/oxen-io/lokinet synced 2023-12-14 06:53:00 +01:00
lokinet/contrib/testnet/genconf.py

158 lines
4.7 KiB
Python
Raw Normal View History

#!/usr/bin/env python
#
# this script generate supervisord configs for running a test network on loopback
#
from argparse import ArgumentParser as AP
from configparser import ConfigParser as CP
import os
2018-06-19 19:11:24 +02:00
def svcNodeName(id): return 'svc-node-%03d' % id
def clientNodeName(id): return 'client-node-%03d' % id
def main():
ap = AP()
2018-09-06 15:16:24 +02:00
ap.add_argument('--valgrind', type=bool, default=False)
ap.add_argument('--dir', type=str, default='testnet_tmp')
2018-06-19 19:11:24 +02:00
ap.add_argument('--svc', type=int, default=20,
help='number of service nodes')
ap.add_argument('--baseport', type=int, default=19000)
2018-06-19 19:11:24 +02:00
ap.add_argument('--clients', type=int, default=200,
help='number of client nodes')
ap.add_argument('--bin', type=str, required=True)
ap.add_argument('--out', type=str, required=True)
2018-06-19 19:11:24 +02:00
ap.add_argument('--connect', type=int, default=10)
ap.add_argument('--ip', type=str, default=None)
ap.add_argument('--ifname', type=str, default='lo')
ap.add_argument('--netid', type=str, default=None)
2021-06-07 14:39:38 +02:00
ap.add_argument('--loglevel', type=str, default='debug')
args = ap.parse_args()
2018-09-06 15:16:24 +02:00
if args.valgrind:
exe = 'valgrind {}'.format(args.bin)
else:
2020-02-02 17:31:01 +01:00
exe = '{} -v'.format(args.bin)
basedir = os.path.abspath(args.dir)
2018-06-19 19:11:24 +02:00
for nodeid in range(args.svc):
config = CP()
2018-07-02 21:24:22 +02:00
config['router'] = {
2021-04-12 13:38:12 +02:00
'data-dir': '.',
2018-07-02 21:24:22 +02:00
'net-threads': '1',
2018-08-02 02:51:08 +02:00
'worker-threads': '4',
'nickname': svcNodeName(nodeid),
'min-connections': "{}".format(args.connect)
2018-07-02 21:24:22 +02:00
}
if args.netid:
config['router']['netid'] = args.netid
2021-04-12 13:38:27 +02:00
if args.ip:
config['router']['public-ip'] = args.ip
config['router']['public-port'] = str(args.baseport + nodeid)
2021-04-12 13:38:27 +02:00
config['bind'] = {
args.ifname: str(args.baseport + nodeid)
}
2021-06-06 16:51:19 +02:00
config["logging"] = {
"level": args.loglevel
}
config['netdb'] = {
2018-06-19 19:11:24 +02:00
'dir': 'netdb'
}
2018-12-17 23:43:16 +01:00
config['network'] = {
2021-06-07 14:39:38 +02:00
'type' : 'null',
'save-profiles': 'false'
2018-12-17 23:43:16 +01:00
}
config['api'] = {
'enabled': 'false'
}
2020-02-02 17:31:01 +01:00
config['lokid'] = {
2021-04-12 13:38:12 +02:00
'enabled': 'false',
2020-02-02 17:31:01 +01:00
}
2021-06-07 14:39:38 +02:00
config["logging"] = {
"level": args.loglevel
}
d = os.path.join(args.dir, svcNodeName(nodeid))
if not os.path.exists(d):
os.mkdir(d)
fp = os.path.join(d, 'daemon.ini')
with open(fp, 'w') as f:
config.write(f)
2019-07-19 19:56:17 +02:00
for n in [0]:
2021-04-12 13:38:12 +02:00
if nodeid is not 0:
f.write("[bootstrap]\nadd-node={}\n".format(os.path.join(basedir,svcNodeName(n), 'self.signed')))
else:
f.write("[bootstrap]\nseed-node=true\n")
for nodeid in range(args.clients):
config = CP()
2018-07-02 21:24:22 +02:00
config['router'] = {
2021-04-12 13:38:12 +02:00
'data-dir': '.',
2018-07-02 21:24:22 +02:00
'net-threads': '1',
2018-08-02 02:51:08 +02:00
'worker-threads': '2',
'nickname': clientNodeName(nodeid)
2018-07-02 21:24:22 +02:00
}
2019-02-08 15:04:18 +01:00
if args.netid:
config['router']['netid'] = args.netid
2021-04-12 13:38:12 +02:00
config["logging"] = {
"level": args.loglevel
}
config['netdb'] = {
2018-06-19 19:11:24 +02:00
'dir': 'netdb'
}
config['api'] = {
'enabled': 'false'
}
2018-12-17 23:43:16 +01:00
config['network'] = {
'type' : 'null'
}
d = os.path.join(args.dir, clientNodeName(nodeid))
if not os.path.exists(d):
os.mkdir(d)
fp = os.path.join(d, 'client.ini')
with open(fp, 'w') as f:
config.write(f)
for n in [0]:
otherID = (n + nodeid) % args.svc
2021-04-12 13:38:12 +02:00
f.write("[bootstrap]\nadd-node={}\n".format(os.path.join(basedir,svcNodeName(otherID), 'self.signed')))
2018-06-19 19:11:24 +02:00
with open(args.out, 'w') as f:
2021-04-12 13:38:12 +02:00
basedir = os.path.join(args.dir, 'svc-node-%(process_num)03d')
f.write('''[program:svc-node]
directory = {}
2021-04-12 13:38:12 +02:00
command = {} -r {}/daemon.ini
2018-08-04 04:59:32 +02:00
autorestart=true
redirect_stderr=true
#stdout_logfile=/dev/fd/1
stdout_logfile={}/svc-node-%(process_num)03d-log.txt
stdout_logfile_maxbytes=0
process_name = svc-node-%(process_num)03d
numprocs = {}
2021-04-12 13:38:12 +02:00
'''.format(basedir, exe, basedir, args.dir, args.svc))
basedir = os.path.join(args.dir, 'client-node-%(process_num)03d')
f.write('''[program:Client-node]
directory = {}
2021-04-12 13:38:12 +02:00
command = bash -c "sleep 5 && {} {}/client.ini"
2018-08-04 04:59:32 +02:00
autorestart=true
redirect_stderr=true
#stdout_logfile=/dev/fd/1
stdout_logfile={}/client-node-%(process_num)03d-log.txt
stdout_logfile_maxbytes=0
process_name = client-node-%(process_num)03d
numprocs = {}
2021-04-12 13:38:12 +02:00
'''.format(basedir, exe, basedir, args.dir, args.clients))
f.write('[supervisord]\ndirectory=.\n')
2018-06-19 19:11:24 +02:00
if __name__ == '__main__':
main()