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
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
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