Skip to content

Commit f987e85

Browse files
committed
Redoing the config parser
1 parent de09b51 commit f987e85

11 files changed

Lines changed: 428 additions & 248 deletions

File tree

docs/source/intro.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@ following configuration:
8282
In the video below you'll see these 3 nodes launched in a ``tmux`` 4-pane layout
8383
with the following commands::
8484

85-
$ receptor controller --socket-path=/tmp/receptor.sock --listen-port=8888 --node-id=controller
86-
$ receptor node --listen-port=8889 --peer=localhost:8888 --node-id=node-a
87-
$ receptor node --listen-port=8890 --peer=localhost:8889 --node-id=node-b
85+
$ receptor -d /tmp/controller controller --socket-path=/tmp/receptor.sock --listen-port=8888 --node-id=controller
86+
$ receptor -d /tmp/node-a node --listen-port=8889 --peer=localhost:8888 --node-id=node-a
87+
$ receptor -d /tmp/node-b node --listen-port=8890 --peer=localhost:8889 --node-id=node-b
8888

8989
In the last pane we execute the ``ping`` command::
9090

receptor/__main__.py

Lines changed: 6 additions & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -2,166 +2,17 @@
22
import datetime
33
import logging
44
import logging.config
5-
from .config import ReceptorConfig, DEFAULT_CONFIG
5+
6+
from .config import ReceptorConfig
67
from .receptor import Receptor
7-
from . import node
8-
from . import controller
98

109
logger = logging.getLogger(__name__)
1110

1211

13-
def map_args_to_config(args):
14-
to_return = {}
15-
if getattr(args, 'listen_address', None):
16-
to_return.setdefault('server', {})['address'] = args.listen_address
17-
if getattr(args, 'listen_port', None):
18-
to_return.setdefault('server', {})['port'] = args.listen_port
19-
if getattr(args, 'server_enable', None):
20-
to_return.setdefault('server', {})['server_enable'] = args.server_enable
21-
if getattr(args, 'debug', None):
22-
to_return.setdefault('server', {})['debug'] = args.debug
23-
if getattr(args, 'ssl_certificate', None):
24-
to_return.setdefault('server', {})['ssl_certificate'] = args.ssl_certificate
25-
if getattr(args, 'ssl_key', None):
26-
to_return.setdefault('server', {})['ssl_key'] = args.ssl_key
27-
if getattr(args, 'data_dir', None):
28-
to_return.setdefault('server', {})['data_dir'] = args.data_dir
29-
if getattr(args, 'peer', None):
30-
to_return['peers'] = {peer: '' for peer in args.peer}
31-
if getattr(args, 'node_id', None):
32-
to_return.setdefault('receptor', {})['node_id'] = args.node_id
33-
return to_return
34-
35-
36-
def run_as_controller(args):
37-
config = ReceptorConfig(args.config, map_args_to_config(args))
38-
receptor = Receptor(config)
39-
logger.info(f'Starting up as node ID {receptor.node_id}')
40-
controller.mainloop(receptor, args.socket_path)
41-
42-
43-
def run_as_ping(args):
44-
logger.info(f'Sending ping to {args.recipient}.')
45-
now = datetime.datetime.utcnow()
46-
controller.send_directive('receptor:ping', args.recipient, now.isoformat(), args.socket_path)
47-
48-
49-
def run_as_send(args):
50-
logger.info(f'Sending a {args.directive} directive to {args.recipient}.')
51-
controller.send_directive(args.directive, args.recipient, args.payload, args.socket_path)
52-
53-
54-
def run_as_node(args):
55-
config = ReceptorConfig(args.config, map_args_to_config(args))
56-
receptor = Receptor(config)
57-
logger.info("Running as Receptor node with ID: {}".format(receptor.node_id))
58-
node.mainloop(receptor, args.ping_interval)
59-
60-
6112
def main(args=None):
62-
parser = argparse.ArgumentParser("receptor")
63-
parser.add_argument(
64-
"-c", "--config", default="/etc/receptor/receptor.conf",
65-
help='Path to configuration file')
66-
parser.add_argument(
67-
"--debug", action="store_true", default=False,
68-
help='Emit debugging output')
69-
parser.add_argument(
70-
'--ssl_certificate',
71-
help="Certificate Chain File"
72-
)
73-
parser.add_argument(
74-
"-d", "--data_dir", default="/var/lib/receptor",
75-
help='Path to the directory where Receptor stores its database and metadata')
76-
parser.add_argument(
77-
'--ssl_key',
78-
help="Certificate Key File"
79-
)
80-
subparsers = parser.add_subparsers(
81-
title='subcommands')
8213

83-
subparser_node = subparsers.add_parser(
84-
'node',
85-
help='Run a Receptor node')
86-
subparser_node.add_argument(
87-
"--listen-address",
88-
help=f'Set/override IP address to listen on. If not set here or in a config file, the default is {DEFAULT_CONFIG["server"]["address"]}')
89-
subparser_node.add_argument(
90-
"--listen-port",
91-
help=f'Set/override TCP port to listen on. If not set here or in a config file, the default is {DEFAULT_CONFIG["server"]["port"]}')
92-
subparser_node.add_argument(
93-
"-p", "--peer", action='append',
94-
help=f'Set/override peer nodes/controllers to connect to. Use multiple times for multiple peers.')
95-
subparser_node.add_argument(
96-
"--node-id",
97-
help='Set/override node identifier. If unspecified here or in a config file, one will be automatically generated.')
98-
subparser_node.add_argument(
99-
"--server-disable", action="store_true", default=False,
100-
help="Disable the server function and only connect to configured peers.")
101-
subparser_node.add_argument(
102-
'--ping-interval', metavar="N", type=int,
103-
help="If specified, the node will ping all other known nodes in the mesh every N seconds."
104-
)
105-
subparser_node.set_defaults(func=run_as_node)
14+
config = ReceptorConfig(args)
10615

107-
subparser_controller = subparsers.add_parser(
108-
'controller',
109-
help='Run a Receptor controller'
110-
)
111-
subparser_controller.add_argument(
112-
'--socket-path', default='/var/run/receptor_controller.sock',
113-
help='Path to control socket'
114-
)
115-
subparser_controller.add_argument(
116-
"--listen-address",
117-
help=f'Set/override IP address to listen on. If not set here or in a config file, the default is {DEFAULT_CONFIG["server"]["address"]}')
118-
subparser_controller.add_argument(
119-
"--listen-port",
120-
help=f'Set/override TCP port to listen on. If not set here or in a config file, the default is {DEFAULT_CONFIG["server"]["port"]}')
121-
subparser_controller.add_argument(
122-
"--node-id",
123-
help='Set/override node identifier. If unspecified here or in a config file, one will be automatically generated.')
124-
subparser_controller.set_defaults(func=run_as_controller)
125-
126-
subparser_ping = subparsers.add_parser(
127-
'ping',
128-
help='Tell the local controller to ping a node'
129-
)
130-
subparser_ping.add_argument(
131-
'--socket-path', default='/var/run/receptor_controller.sock',
132-
help='Path to control socket'
133-
)
134-
subparser_ping.add_argument(
135-
'recipient',
136-
help='Node ID of the Receptor node or controller to ping'
137-
)
138-
subparser_ping.set_defaults(func=run_as_ping)
139-
140-
subparser_send = subparsers.add_parser(
141-
'send',
142-
help='Send a directive to a node'
143-
)
144-
subparser_send.add_argument(
145-
'--socket-path', default='/var/run/receptor_controller.sock',
146-
help='Path to control socket'
147-
)
148-
subparser_send.add_argument(
149-
'--directive',
150-
help='Directive to send'
151-
)
152-
subparser_send.add_argument(
153-
'--recipient',
154-
help='Node ID of the Receptor node or controller to direct'
155-
)
156-
subparser_send.add_argument(
157-
'payload',
158-
help='Payload of the directive to send. Use - for stdin.'
159-
)
160-
subparser_send.set_defaults(func=run_as_send)
161-
162-
163-
args = parser.parse_args(args)
164-
16516
logging.config.dictConfig(
16617
{
16718
'version': 1,
@@ -181,12 +32,13 @@ def main(args=None):
18132
'loggers': {
18233
'receptor': {
18334
'handlers': ['console'],
184-
'level': 'DEBUG' if args.debug else 'INFO',
35+
'level': 'DEBUG' if config.default_debug else 'INFO',
18536
},
18637
},
18738
}
18839
)
189-
args.func(args)
40+
41+
config.go()
19042

19143

19244
if __name__ == '__main__':

receptor/buffers/file.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class FileBuffer(BaseBuffer):
2121
def __init__(self, node_id, receptor):
2222
super().__init__(node_id, receptor)
2323
self.node_id = node_id
24-
self.base_path = os.path.join(os.path.expanduser(self.receptor.config.server.data_dir))
24+
self.base_path = os.path.join(os.path.expanduser(self.receptor.config.default_data_dir))
2525
self.message_path = os.path.join(self.base_path, self.receptor.node_id, "messages")
2626
self.manifest_path = os.path.join(self.base_path, self.receptor.node_id, "manifest-{}".format(node_id))
2727
if not os.path.exists(self.message_path):

0 commit comments

Comments
 (0)