Esempio n. 1
0
def run(options, design):
    options = parser.parse_args()

    logger.from_argparse(logger, options)
    logger.set_level(logging.FATAL, 'http')
    logger.set_level(logging.FATAL, 'transport')

    filename = options.design
    if not pathlib.Path(filename).exists():
        parser.error('file, `%s` does not exists.' % filename)

    if not pathlib.Path(filename).is_file():
        parser.error('file, `%s` is not valid file.' % filename)

    design = load_design(filename)

    log = logger.get_logger(__name__)
    log_state = logger.get_logger('consensus.state')

    log.info('design loaded:\n%s',
             pprint.pformat(convert_namedtuple_to_dict(design), width=1))

    log.debug('trying to run %d / %d (faulty nodes / all nodes)',
              len(design.faulties), len(design.nodes))

    run_func = run_default
    if options.case is not None:
        try:
            os.chdir(pathlib.Path(options.case).absolute())
            sys.path.insert(0, '.')

            run_func = getattr(get_module('main'), 'run', None)
        except (FileNotFoundError, AttributeError):
            log.debug('failed to load case, %s', options.case)
        else:
            log.debug('loaded case from %s', options.case)

    blockchains = run_func(options, design)

    prev = None
    while True:
        time.sleep(1)

        now = set(
            map(lambda x: (x.consensus.node.name, x.consensus), blockchains))
        if now == prev:
            continue

        prev = now
        log_current_state(now, design, log_state)

    return
Esempio n. 2
0
import sys
import logging
import pathlib

sys.path.insert(0, str(pathlib.Path('.').resolve() / 'src'))

from bos_consensus.util import logger, LOG_LEVEL_METRIC  # noqa

logger.set_level(logging.FATAL, 'http')
logger.set_level(LOG_LEVEL_METRIC, 'consensus')
logging.getLogger('urllib3').setLevel(logging.FATAL)
Esempio n. 3
0
    consensus = consensus_module.IsaacConsensus(
        node,
        config.threshold,
        tuple(map(lambda x: Node(x.extras['name'], x), config.validators)),
    )

    log.metric(node=node.name, data=node.to_dict())

    transport = NETWORK_MODULE.Transport(bind=('0.0.0.0', config.port))

    blockchain = Blockchain(consensus, transport)

    base_server = BaseServer(blockchain)
    base_server.start()

    return


if __name__ == '__main__':
    options = parser.parse_args()
    logger.from_argparse(logger, options)

    log = logger.get_logger(__name__)
    logger.set_level(logging.FATAL, 'http')
    logger.set_level(logging.FATAL, 'ping')

    log.debug('options: %s', options)
    log.debug('log settings: %s', logger.info)

    main(options)
Esempio n. 4
0
            PRINTER.colored('Yes' if can_pass else 'No',
                            color='green' if can_pass else 'red'),
            fmt='%15s | %s',
            print=True,
        )
        PRINTER.line('=')
        PRINTER.print()

    return


if __name__ == '__main__':
    options = parser.parse_args()

    logger.from_argparse(logger, options)
    logger.set_level(logging.FATAL, 'http')
    logger.set_level(logging.FATAL, 'transport')

    if not pathlib.Path(options.design).exists():
        parser.error('file, `%s` does not exists.' % options.design)

    if not pathlib.Path(options.design).is_file():
        parser.error('file, `%s` is not valid file.' % options.design)

    design = load_design(options.design)

    log = logger.get_logger(__name__)
    log_state = logger.get_logger('consensus.state')

    log.debug('options: %s', options)
    return


def log_nodes_state(blockchains, design, log_state):
    now = set(map(lambda x: (x.consensus.node.name, x.consensus), blockchains))
    log_current_state(now, design, log_state)

    return


if __name__ == '__main__':
    options = parser.parse_args()

    logger.from_argparse(logger, options)
    logger.set_level(logging.FATAL, 'local')
    logger.set_level(logging.FATAL, 'transport')

    design = load_design(options.design)

    log = logger.get_logger(__name__)
    log_state = logger.get_logger('consensus.state')

    log.info('design loaded:\n%s',
             pprint.pformat(convert_namedtuple_to_dict(design), width=1))

    log.debug('trying to run %d / %d (faulty nodes / all nodes)',
              len(design.faulties), len(design.nodes))

    run_func = run
    if options.case is not None: