|
|
|
|
@ -49,17 +49,23 @@ def generate_hdstack(
|
|
|
|
|
output_dir,
|
|
|
|
|
instances,
|
|
|
|
|
base_server_id,
|
|
|
|
|
bridge_enabled=True,
|
|
|
|
|
):
|
|
|
|
|
"""Generate configs for an aggregator, workers, bridge, proxy and MUX."""
|
|
|
|
|
"""Generate configs for an aggregator, workers, optional bridge, proxy and MUX."""
|
|
|
|
|
instances = _validated_instances(instances)
|
|
|
|
|
base_server_id = _validated_base_id(base_server_id, instances)
|
|
|
|
|
bridge_enabled = _validated_bridge_enabled(bridge_enabled)
|
|
|
|
|
main_path = _required_file(main_config, 'main FreeDMR configuration')
|
|
|
|
|
bridge_path = None
|
|
|
|
|
rules_path = None
|
|
|
|
|
bridge_source = None
|
|
|
|
|
if bridge_enabled:
|
|
|
|
|
bridge_path = _required_file(bridge_config, 'bridge configuration')
|
|
|
|
|
rules_path = _required_file(bridge_rules, 'bridge rules')
|
|
|
|
|
bridge_source = _read_config(bridge_path)
|
|
|
|
|
output_path = Path(output_dir)
|
|
|
|
|
|
|
|
|
|
source = _read_config(main_path)
|
|
|
|
|
bridge_source = _read_config(bridge_path)
|
|
|
|
|
system = _system_template(source)
|
|
|
|
|
hbp_port = _integer(system, 'PORT', 54000, 'SYSTEM PORT')
|
|
|
|
|
generator_size = _integer(system, 'GENERATOR', 100, 'SYSTEM GENERATOR')
|
|
|
|
|
@ -95,6 +101,7 @@ def generate_hdstack(
|
|
|
|
|
report_port,
|
|
|
|
|
worker_report_ports,
|
|
|
|
|
instances,
|
|
|
|
|
bridge_enabled,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
aggregator = _support_config(source)
|
|
|
|
|
@ -169,6 +176,7 @@ def generate_hdstack(
|
|
|
|
|
report_port,
|
|
|
|
|
worker_report_ports,
|
|
|
|
|
_report_clients(source),
|
|
|
|
|
bridge_enabled,
|
|
|
|
|
),
|
|
|
|
|
encoding='utf-8',
|
|
|
|
|
)
|
|
|
|
|
@ -207,6 +215,12 @@ def _validated_base_id(value, instances):
|
|
|
|
|
return value
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _validated_bridge_enabled(value):
|
|
|
|
|
if not isinstance(value, bool):
|
|
|
|
|
raise HDStackConfigurationError('HDSTACK_BRIDGE must be 0 or 1')
|
|
|
|
|
return value
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _required_file(value, description):
|
|
|
|
|
path = Path(value)
|
|
|
|
|
if not path.is_file():
|
|
|
|
|
@ -316,6 +330,7 @@ def _validate_generated_port_collisions(
|
|
|
|
|
report_port,
|
|
|
|
|
worker_report_ports,
|
|
|
|
|
instances,
|
|
|
|
|
bridge_enabled,
|
|
|
|
|
):
|
|
|
|
|
generated = {}
|
|
|
|
|
|
|
|
|
|
@ -346,6 +361,8 @@ def _validate_generated_port_collisions(
|
|
|
|
|
reserve(port, 'worker {} reporting'.format(number))
|
|
|
|
|
|
|
|
|
|
configured = _enabled_bind_ports(source, excluded_sections=('SYSTEM', 'ECHO'))
|
|
|
|
|
bridge_ports = {}
|
|
|
|
|
if bridge_enabled:
|
|
|
|
|
bridge_ports = _enabled_bind_ports(bridge_source)
|
|
|
|
|
for port, sections in configured.items():
|
|
|
|
|
if port in generated:
|
|
|
|
|
@ -366,7 +383,7 @@ def _validate_generated_port_collisions(
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if _boolean(bridge_source, 'REPORTS', 'REPORT', True):
|
|
|
|
|
if bridge_enabled and _boolean(bridge_source, 'REPORTS', 'REPORT', True):
|
|
|
|
|
bridge_report_port = _section_integer(
|
|
|
|
|
bridge_source,
|
|
|
|
|
'REPORTS',
|
|
|
|
|
@ -463,6 +480,7 @@ def _supervisor_config(
|
|
|
|
|
report_port,
|
|
|
|
|
worker_report_ports,
|
|
|
|
|
report_clients,
|
|
|
|
|
bridge_enabled,
|
|
|
|
|
):
|
|
|
|
|
parts = [
|
|
|
|
|
'[supervisord]\n'
|
|
|
|
|
@ -488,7 +506,8 @@ def _supervisor_config(
|
|
|
|
|
20,
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
parts.extend([
|
|
|
|
|
if bridge_enabled:
|
|
|
|
|
parts.append(
|
|
|
|
|
_program(
|
|
|
|
|
'bridge',
|
|
|
|
|
'python /opt/freedmr/bridge.py -c {} -r {}'.format(
|
|
|
|
|
@ -496,7 +515,9 @@ def _supervisor_config(
|
|
|
|
|
shlex.quote(str(rules_path)),
|
|
|
|
|
),
|
|
|
|
|
30,
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
parts.extend([
|
|
|
|
|
_program(
|
|
|
|
|
'playback',
|
|
|
|
|
'/opt/freedmr/playback.py -c /opt/freedmr/loro.cfg',
|
|
|
|
|
@ -544,6 +565,7 @@ def main(argv=None):
|
|
|
|
|
parser.add_argument('--output-dir', required=True)
|
|
|
|
|
parser.add_argument('--instances', required=True, type=int)
|
|
|
|
|
parser.add_argument('--base-id', required=True, type=int)
|
|
|
|
|
parser.add_argument('--bridge-enabled', choices=('0', '1'), default='1')
|
|
|
|
|
args = parser.parse_args(argv)
|
|
|
|
|
try:
|
|
|
|
|
generate_hdstack(
|
|
|
|
|
@ -553,6 +575,7 @@ def main(argv=None):
|
|
|
|
|
args.output_dir,
|
|
|
|
|
args.instances,
|
|
|
|
|
args.base_id,
|
|
|
|
|
bridge_enabled=args.bridge_enabled == '1',
|
|
|
|
|
)
|
|
|
|
|
except HDStackConfigurationError as err:
|
|
|
|
|
parser.error(str(err))
|
|
|
|
|
|