def main(args=sys.argv[1:]): opts = parse_args(args) verbose_level = opts.verbose init_console_logging(verbose_level=verbose_level) try: path_config = load_path_config(config_dir=opts.config_dir) except LocalConfigurationError as local_config_err: LOGGER.error(str(local_config_err)) sys.exit(1) for line in path_config.to_toml_string(): LOGGER.info("config [path]: %s", line) # Process initial initialization errors, delaying the sys.exit(1) until # all errors have been reported to the user (via LOGGER.error()). This # is intended to provide enough information to the user so they can correct # multiple errors before restarting the validator. init_errors = False if not check_directory(path=path_config.data_dir, human_readable_name='Data'): init_errors = True if not check_directory(path=path_config.log_dir, human_readable_name='Log'): init_errors = True try: identity_signing_key = load_identity_signing_key( key_dir=path_config.key_dir, key_name='validator') except LocalConfigurationError as e: LOGGER.error(str(e)) init_errors = True if init_errors: LOGGER.error("Initialization errors occurred (see previous log " "ERROR messages), shutting down.") sys.exit(1) validator = Validator(opts.network_endpoint, opts.component_endpoint, opts.peers, path_config.data_dir, identity_signing_key) # pylint: disable=broad-except try: validator.start() except KeyboardInterrupt: print("Interrupted!", file=sys.stderr) sys.exit(1) except LocalConfigurationError as local_config_err: LOGGER.error(str(local_config_err)) sys.exit(1) except GenesisError as genesis_err: LOGGER.error(str(genesis_err)) sys.exit(1) except Exception as e: LOGGER.exception(e) sys.exit(1)
def main(args=sys.argv[1:]): opts = parse_args(args) verbose_level = opts.verbose # Determine if any args which support delimited lists should be # modified if opts.peers: opts.peers = _split_comma_append_args(opts.peers) if opts.join: opts.join = _split_comma_append_args(opts.join) init_console_logging(verbose_level=verbose_level) try: path_config = load_path_config(config_dir=opts.config_dir) except LocalConfigurationError as local_config_err: LOGGER.error(str(local_config_err)) sys.exit(1) # Process initial initialization errors, delaying the sys.exit(1) until # all errors have been reported to the user (via LOGGER.error()). This # is intended to provide enough information to the user so they can correct # multiple errors before restarting the validator. init_errors = False try: identity_signing_key = load_identity_signing_key( key_dir=path_config.key_dir, key_name='validator') pubkey = signing.generate_pubkey(identity_signing_key) except LocalConfigurationError as e: log_configuration(log_dir=path_config.log_dir, name="validator") LOGGER.error(str(e)) init_errors = True log_config = get_log_config() if not init_errors: if log_config is not None: log_configuration(log_config=log_config) if log_config.get('root') is not None: init_console_logging(verbose_level=verbose_level) else: log_configuration(log_dir=path_config.log_dir, name="validator-" + pubkey[:8]) for line in path_config.to_toml_string(): LOGGER.info("config [path]: %s", line) if not check_directory(path=path_config.data_dir, human_readable_name='Data'): init_errors = True if not check_directory(path=path_config.log_dir, human_readable_name='Log'): init_errors = True if init_errors: LOGGER.error("Initialization errors occurred (see previous log " "ERROR messages), shutting down.") sys.exit(1) validator = Validator(opts.network_endpoint, opts.component_endpoint, opts.public_uri, opts.peering, opts.join, opts.peers, path_config.data_dir, identity_signing_key) # pylint: disable=broad-except try: validator.start() except KeyboardInterrupt: LOGGER.info("Initiating graceful " "shutdown (press Ctrl+C again to force)") except LocalConfigurationError as local_config_err: LOGGER.error(str(local_config_err)) sys.exit(1) except GenesisError as genesis_err: LOGGER.error(str(genesis_err)) sys.exit(1) except Exception as e: LOGGER.exception(e) sys.exit(1) finally: validator.stop()
def main(args=None): if args is None: args = sys.argv[1:] opts = parse_args(args) verbose_level = opts.verbose # Determine if any args which support delimited lists should be # modified if opts.peers: opts.peers = _split_comma_append_args(opts.peers) if opts.seeds: opts.seeds = _split_comma_append_args(opts.seeds) init_console_logging(verbose_level=verbose_level) try: path_config = load_path_config(config_dir=opts.config_dir) except LocalConfigurationError as local_config_err: LOGGER.error(str(local_config_err)) sys.exit(1) try: opts_config = create_validator_config(opts) validator_config = \ load_validator_config(opts_config, path_config.config_dir) except LocalConfigurationError as local_config_err: LOGGER.error(str(local_config_err)) sys.exit(1) # Process initial initialization errors, delaying the sys.exit(1) until # all errors have been reported to the user (via LOGGER.error()). This # is intended to provide enough information to the user so they can correct # multiple errors before restarting the validator. init_errors = False try: identity_signing_key = load_identity_signing_key( key_dir=path_config.key_dir, key_name='validator') pubkey = signing.generate_pubkey(identity_signing_key) except LocalConfigurationError as e: log_configuration(log_dir=path_config.log_dir, name="validator") LOGGER.error(str(e)) init_errors = True log_config = get_log_config() if not init_errors: if log_config is not None: log_configuration(log_config=log_config) if log_config.get('root') is not None: init_console_logging(verbose_level=verbose_level) else: log_configuration(log_dir=path_config.log_dir, name="validator-" + pubkey[:8]) for line in path_config.to_toml_string(): LOGGER.info("config [path]: %s", line) if not check_directory(path=path_config.data_dir, human_readable_name='Data'): init_errors = True if not check_directory(path=path_config.log_dir, human_readable_name='Log'): init_errors = True endpoint = validator_config.endpoint if endpoint is None: # Need to use join here to get the string "0.0.0.0". Otherwise, # bandit thinks we are binding to all interfaces and returns a # Medium security risk. interfaces = ["*", ".".join(["0", "0", "0", "0"])] interfaces += netifaces.interfaces() endpoint = validator_config.bind_network for interface in interfaces: if interface in validator_config.bind_network: LOGGER.error("Endpoint must be set when using %s", interface) init_errors = True break if init_errors: LOGGER.error("Initialization errors occurred (see previous log " "ERROR messages), shutting down.") sys.exit(1) bind_network = validator_config.bind_network bind_component = validator_config.bind_component if "tcp://" not in bind_network: bind_network = "tcp://" + bind_network if "tcp://" not in bind_component: bind_component = "tcp://" + bind_component if validator_config.network_public_key is None or \ validator_config.network_private_key is None: LOGGER.warning("Network key pair is not configured, Network " "communications between validators will not be " "authenticated or encrypted.") validator = Validator(bind_network, bind_component, endpoint, validator_config.peering, validator_config.seeds, validator_config.peers, path_config.data_dir, path_config.config_dir, identity_signing_key, validator_config.scheduler, validator_config.permissions, validator_config.network_public_key, validator_config.network_private_key) # pylint: disable=broad-except try: validator.start() except KeyboardInterrupt: LOGGER.info("Initiating graceful " "shutdown (press Ctrl+C again to force)") except LocalConfigurationError as local_config_err: LOGGER.error(str(local_config_err)) sys.exit(1) except GenesisError as genesis_err: LOGGER.error(str(genesis_err)) sys.exit(1) except Exception as e: LOGGER.exception(e) sys.exit(1) finally: validator.stop()
def main(args=None): if args is None: args = sys.argv[1:] opts = parse_args(args) verbose_level = opts.verbose # Determine if any args which support delimited lists should be # modified if opts.peers: opts.peers = _split_comma_append_args(opts.peers) if opts.seeds: opts.seeds = _split_comma_append_args(opts.seeds) init_console_logging(verbose_level=verbose_level) try: path_config = load_path_config(config_dir=opts.config_dir) except LocalConfigurationError as local_config_err: LOGGER.error(str(local_config_err)) sys.exit(1) try: opts_config = create_validator_config(opts) validator_config = \ load_validator_config(opts_config, path_config.config_dir) except LocalConfigurationError as local_config_err: LOGGER.error(str(local_config_err)) sys.exit(1) # Process initial initialization errors, delaying the sys.exit(1) until # all errors have been reported to the user (via LOGGER.error()). This # is intended to provide enough information to the user so they can correct # multiple errors before restarting the validator. init_errors = False try: identity_signing_key = load_identity_signing_key( key_dir=path_config.key_dir, key_name='validator') pubkey = signing.generate_pubkey(identity_signing_key) except LocalConfigurationError as e: log_configuration(log_dir=path_config.log_dir, name="validator") LOGGER.error(str(e)) init_errors = True log_config = get_log_config() if not init_errors: if log_config is not None: log_configuration(log_config=log_config) if log_config.get('root') is not None: init_console_logging(verbose_level=verbose_level) else: log_configuration(log_dir=path_config.log_dir, name="validator-" + pubkey[:8]) for line in path_config.to_toml_string(): LOGGER.info("config [path]: %s", line) if not check_directory(path=path_config.data_dir, human_readable_name='Data'): init_errors = True if not check_directory(path=path_config.log_dir, human_readable_name='Log'): init_errors = True endpoint = validator_config.endpoint if endpoint is None: # Need to use join here to get the string "0.0.0.0". Otherwise, # bandit thinks we are binding to all interfaces and returns a # Medium security risk. interfaces = ["*", ".".join(["0", "0", "0", "0"])] interfaces += netifaces.interfaces() endpoint = validator_config.bind_network for interface in interfaces: if interface in validator_config.bind_network: LOGGER.error("Endpoint must be set when using %s", interface) init_errors = True break if init_errors: LOGGER.error("Initialization errors occurred (see previous log " "ERROR messages), shutting down.") sys.exit(1) bind_network = validator_config.bind_network bind_component = validator_config.bind_component if "tcp://" not in bind_network: bind_network = "tcp://" + bind_network if "tcp://" not in bind_component: bind_component = "tcp://" + bind_component if validator_config.network_public_key is None or \ validator_config.network_private_key is None: LOGGER.warning("Network key pair is not configured, Network " "communications between validators will not be " "authenticated or encrypted.") validator = Validator(bind_network, bind_component, endpoint, validator_config.peering, validator_config.seeds, validator_config.peers, path_config.data_dir, path_config.config_dir, identity_signing_key, validator_config.network_public_key, validator_config.network_private_key) # pylint: disable=broad-except try: validator.start() except KeyboardInterrupt: LOGGER.info("Initiating graceful " "shutdown (press Ctrl+C again to force)") except LocalConfigurationError as local_config_err: LOGGER.error(str(local_config_err)) sys.exit(1) except GenesisError as genesis_err: LOGGER.error(str(genesis_err)) sys.exit(1) except Exception as e: LOGGER.exception(e) sys.exit(1) finally: validator.stop()