예제 #1
0
파일: metrics.py 프로젝트: KPrasch/nucypher
def create_metrics_collectors(ursula: 'Ursula',
                              metrics_prefix: str) -> List[MetricsCollector]:
    """Create collectors used to obtain metrics."""
    collectors: List[MetricsCollector] = [
        UrsulaInfoMetricsCollector(ursula=ursula)
    ]

    if not ursula.federated_only:
        # Blockchain prometheus
        collectors.append(
            BlockchainMetricsCollector(
                eth_provider_uri=ursula.eth_provider_uri))

        # Staker prometheus
        collectors.append(
            StakerMetricsCollector(domain=ursula.domain,
                                   staker_address=ursula.checksum_address,
                                   contract_registry=ursula.registry))

        # Operator prometheus
        collectors.append(
            OperatorMetricsCollector(domain=ursula.domain,
                                     operator_address=ursula.operator_address,
                                     contract_registry=ursula.registry))

        #
        # Events
        #

        # Staking Events
        staking_events_collectors = create_staking_events_metric_collectors(
            ursula=ursula, metrics_prefix=metrics_prefix)
        collectors.extend(staking_events_collectors)

    return collectors
예제 #2
0
def create_metrics_collectors(ursula: 'Ursula',
                              metrics_prefix: str) -> List[MetricsCollector]:
    """Create collectors used to obtain metrics."""
    collectors: List[MetricsCollector] = [
        UrsulaInfoMetricsCollector(ursula=ursula)
    ]

    if not ursula.federated_only:
        # Blockchain prometheus
        collectors.append(
            BlockchainMetricsCollector(provider_uri=ursula.provider_uri))

        # Staker prometheus
        collectors.append(
            StakerMetricsCollector(domain=ursula.domain,
                                   staker_address=ursula.checksum_address,
                                   contract_registry=ursula.registry))

        # Worker prometheus
        collectors.append(
            WorkerMetricsCollector(domain=ursula.domain,
                                   worker_address=ursula.worker_address,
                                   contract_registry=ursula.registry))

        #
        # Events
        #

        # Staking Events
        staking_events_collectors = create_staking_events_metric_collectors(
            ursula=ursula, metrics_prefix=metrics_prefix)
        collectors.extend(staking_events_collectors)

        # Policy Events
        policy_events_collectors = create_policy_events_metric_collectors(
            ursula=ursula, metrics_prefix=metrics_prefix)
        collectors.extend(policy_events_collectors)

        #
        # WorkLock information - only collected for mainnet
        #
        if ursula.domain == NetworksInventory.MAINNET:
            # WorkLock metrics
            collectors.append(
                WorkLockMetricsCollector(
                    staker_address=ursula.checksum_address,
                    contract_registry=ursula.registry))

            # WorkLock Events
            worklock_events_collectors = create_worklock_events_metric_collectors(
                ursula=ursula, metrics_prefix=metrics_prefix)
            collectors.extend(worklock_events_collectors)

    return collectors
예제 #3
0
def test_staker_metrics_collector(test_registry, stakers):
    staker = random.choice(stakers)
    collector = StakerMetricsCollector(domain=staker.network,
                                       staker_address=staker.checksum_address,
                                       contract_registry=test_registry)
    collector_registry = CollectorRegistry()
    prefix = 'test_staker_metrics_collector'
    collector.initialize(metrics_prefix=prefix, registry=collector_registry)
    collector.collect()

    current_period = collector_registry.get_sample_value(f'{prefix}_current_period')
    assert current_period == staker.staking_agent.get_current_period()

    # only floats can be stored
    eth_balance = collector_registry.get_sample_value(f'{prefix}_staker_eth_balance')
    assert eth_balance == float(staker.eth_balance)

    nu_balance = collector_registry.get_sample_value(f'{prefix}_staker_token_balance')
    assert nu_balance == float(int(staker.token_balance))

    sub_stakes_count = collector_registry.get_sample_value(f'{prefix}_substakes_count')
    assert sub_stakes_count == \
           staker.staking_agent.contract.functions.getSubStakesLength(staker.checksum_address).call()

    locked_tokens = collector_registry.get_sample_value(f'{prefix}_active_stake')
    assert locked_tokens == float(staker.locked_tokens().to_nunits())

    owned_tokens = collector_registry.get_sample_value(f'{prefix}_owned_tokens')
    assert owned_tokens == float(staker.owned_tokens().to_nunits())

    unlocked_tokens = collector_registry.get_sample_value(f'{prefix}_unlocked_tokens')
    assert unlocked_tokens == (owned_tokens - locked_tokens)

    missing_commitments = collector_registry.get_sample_value(f'{prefix}_missing_commitments')
    assert missing_commitments == staker.missing_commitments