Exemple #1
0
def test_prometheus_metrics_config():
    port = 2020

    # no port
    with pytest.raises(ValueError):
        PrometheusMetricsConfig(port=None, metrics_prefix=TEST_PREFIX)

    # no prefix
    with pytest.raises(ValueError):
        PrometheusMetricsConfig(port=port, metrics_prefix=None)

    prometheus_config = PrometheusMetricsConfig(port=port,
                                                metrics_prefix=TEST_PREFIX)

    assert prometheus_config.port == 2020
    assert prometheus_config.metrics_prefix == TEST_PREFIX
    assert prometheus_config.listen_address == ''

    # defaults
    assert prometheus_config.collection_interval == 90
    assert not prometheus_config.start_now
    assert prometheus_config.listen_address == ''

    # non-defaults
    collection_interval = 5
    listen_address = '111.111.111.111'
    prometheus_config = PrometheusMetricsConfig(
        port=port,
        metrics_prefix=TEST_PREFIX,
        listen_address=listen_address,
        collection_interval=collection_interval,
        start_now=True)
    assert prometheus_config.listen_address == listen_address
    assert prometheus_config.collection_interval == collection_interval
    assert prometheus_config.start_now
Exemple #2
0
def test_prometheus_metrics_config():
    listen_address = '111.111.111.111'
    port = 2020
    prometheus_config = PrometheusMetricsConfig(port=port,
                                                metrics_prefix=TEST_PREFIX,
                                                listen_address=listen_address)

    assert prometheus_config.port == 2020
    assert prometheus_config.metrics_prefix == TEST_PREFIX
    assert prometheus_config.listen_address == listen_address

    # defaults
    assert prometheus_config.collection_interval == 10
    assert not prometheus_config.start_now

    # non-defaults
    collection_interval = 5
    prometheus_config = PrometheusMetricsConfig(
        port=port,
        metrics_prefix=TEST_PREFIX,
        listen_address=listen_address,
        collection_interval=collection_interval,
        start_now=True)
    assert prometheus_config.collection_interval == collection_interval
    assert prometheus_config.start_now
Exemple #3
0
def run(general_config, character_options, config_file, interactive, dry_run,
        metrics_port, metrics_listen_address, metrics_prefix, prometheus):
    """Run an "Ursula" node."""

    worker_address = character_options.config_options.worker_address
    emitter = setup_emitter(general_config)
    _pre_launch_warnings(emitter,
                         dev=character_options.config_options.dev,
                         force=None)

    if not character_options.config_options.dev and not config_file:
        config_file = select_config_file(emitter=emitter,
                                         checksum_address=worker_address,
                                         config_class=UrsulaConfiguration)

    ursula_config, URSULA = character_options.create_character(
        emitter=emitter,
        config_file=config_file,
        json_ipc=general_config.json_ipc)

    prometheus_config = None
    if prometheus:
        prometheus_config = PrometheusMetricsConfig(
            port=metrics_port,
            metrics_prefix=metrics_prefix,
            listen_address=metrics_listen_address)

    return URSULA.run(emitter=emitter,
                      start_reactor=not dry_run,
                      interactive=interactive,
                      prometheus_config=prometheus_config)
Exemple #4
0
def run(general_config, character_options, config_file, interactive, dry_run,
        metrics_port, metrics_listen_address, metrics_prefix, prometheus):
    """Run an "Ursula" node."""

    worker_address = character_options.config_options.worker_address
    emitter = setup_emitter(general_config)
    _pre_launch_warnings(emitter,
                         dev=character_options.config_options.dev,
                         force=None)

    if not character_options.config_options.dev and not config_file:
        config_file = select_config_file(emitter=emitter,
                                         checksum_address=worker_address,
                                         config_class=UrsulaConfiguration)

    ursula_config, URSULA = character_options.create_character(
        emitter=emitter,
        config_file=config_file,
        json_ipc=general_config.json_ipc)

    prometheus_config: 'PrometheusMetricsConfig' = None
    if prometheus:
        # Locally scoped to prevent import without prometheus explicitly installed
        from nucypher.utilities.prometheus.metrics import PrometheusMetricsConfig
        prometheus_config = PrometheusMetricsConfig(
            port=metrics_port,
            metrics_prefix=metrics_prefix,
            listen_address=metrics_listen_address)

    return URSULA.run(emitter=emitter,
                      start_reactor=not dry_run,
                      interactive=interactive,
                      prometheus_config=prometheus_config)
Exemple #5
0
def run(general_config, character_options, config_file, interactive, dry_run,
        prometheus, metrics_port, metrics_listen_address, metrics_prefix,
        metrics_interval, force, ip_checkup):
    """Run an "Ursula" node."""

    worker_address = character_options.config_options.worker_address
    emitter = setup_emitter(general_config)
    dev_mode = character_options.config_options.dev
    lonely = character_options.config_options.lonely

    if prometheus and not metrics_port:
        # Require metrics port when using prometheus
        raise click.BadOptionUsage(
            option_name='metrics-port',
            message='--metrics-port is required when using --prometheus')

    _pre_launch_warnings(emitter, dev=dev_mode, force=None)

    if not config_file and not dev_mode:
        config_file = select_config_file(emitter=emitter,
                                         checksum_address=worker_address,
                                         config_class=UrsulaConfiguration)

    prometheus_config: 'PrometheusMetricsConfig' = None
    if prometheus and not dev_mode:
        # Locally scoped to prevent import without prometheus explicitly installed
        from nucypher.utilities.prometheus.metrics import PrometheusMetricsConfig
        prometheus_config = PrometheusMetricsConfig(
            port=metrics_port,
            metrics_prefix=metrics_prefix,
            listen_address=metrics_listen_address,
            collection_interval=metrics_interval)

    ursula_config, URSULA = character_options.create_character(
        emitter=emitter,
        config_file=config_file,
        json_ipc=general_config.json_ipc)

    if ip_checkup and not (dev_mode or lonely):
        # Always skip startup IP checks for dev and lonely modes.
        perform_startup_ip_check(emitter=emitter, ursula=URSULA, force=force)

    try:
        URSULA.run(emitter=emitter,
                   start_reactor=not dry_run,
                   interactive=interactive,
                   prometheus_config=prometheus_config,
                   preflight=not dev_mode)
    finally:
        if dry_run:
            URSULA.stop()
Exemple #6
0
def run(general_config, character_options, config_file, interactive, dry_run,
        prometheus, metrics_port, metrics_listen_address, metrics_prefix,
        metrics_interval):
    """Run an "Ursula" node."""

    worker_address = character_options.config_options.worker_address
    emitter = setup_emitter(general_config)
    _pre_launch_warnings(emitter,
                         dev=character_options.config_options.dev,
                         force=None)

    if not character_options.config_options.dev and not config_file:
        config_file = select_config_file(emitter=emitter,
                                         checksum_address=worker_address,
                                         config_class=UrsulaConfiguration)

    ursula_config, URSULA = character_options.create_character(
        emitter=emitter,
        config_file=config_file,
        json_ipc=general_config.json_ipc)

    prometheus_config: 'PrometheusMetricsConfig' = None
    if prometheus:
        # ensure metrics port is provided
        if not metrics_port:
            raise click.BadOptionUsage(
                option_name='metrics-port',
                message='--metrics-port is required when using --prometheus')

        # Locally scoped to prevent import without prometheus explicitly installed
        from nucypher.utilities.prometheus.metrics import PrometheusMetricsConfig
        prometheus_config = PrometheusMetricsConfig(
            port=metrics_port,
            metrics_prefix=metrics_prefix,
            listen_address=metrics_listen_address,
            collection_interval=metrics_interval)

    # TODO should we just not call run at all for "dry_run"
    try:
        URSULA.run(emitter=emitter,
                   start_reactor=not dry_run,
                   interactive=interactive,
                   prometheus_config=prometheus_config)
    finally:
        if dry_run:
            URSULA.stop()