Skip to content

Commit 8b080e6

Browse files
committed
add validator_validation_metrics
1 parent 128ab71 commit 8b080e6

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

modules/prometheus.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ def to_format(self, value):
1919

2020
METRICS = {
2121
'master_out_of_sync': Metric('validator_masterchain_out_of_sync_seconds', 'Time difference between current time and timestamp of the last known block', 'gauge'),
22-
'shard_out_of_sync': Metric('validator_shardchain_out_of_sync_blocks', 'Number of blocks validator\'s shardclient is behind the last known block', 'gauge'),
22+
'shard_out_of_sync': Metric('validator_shardchain_out_of_sync_blocks', 'Number of blocks node\'s shardclient is behind the last known block', 'gauge'),
2323
'out_of_ser': Metric('validator_out_of_serialization', 'Number of blocks last state serialization was ago', 'gauge'),
24-
'vc_up': Metric('validator_console_up', 'Is validator\'s validator client up', 'gauge'),
24+
'vc_up': Metric('validator_console_up', 'Is `validator-console` up', 'gauge'),
25+
'validator_id': Metric('validator_index', 'Validator index', 'gauge'),
26+
'validator_stake': Metric('validator_stake', 'Validator stake', 'gauge'),
2527
}
2628

2729

@@ -33,17 +35,27 @@ class PrometheusModule(MtcModule):
3335
def __init__(self, ton, local, *args, **kwargs):
3436
super().__init__(ton, local, *args, **kwargs)
3537

36-
def get_validator_status_metrics(self):
38+
def get_validator_status_metrics(self, result: list):
3739
status = self.ton.GetValidatorStatus()
38-
result = []
3940
if status.masterchain_out_of_sync is not None:
4041
result.append(METRICS['master_out_of_sync'].to_format(status.masterchain_out_of_sync))
4142
if status.shardchain_out_of_sync is not None:
4243
result.append(METRICS['shard_out_of_sync'].to_format(status.shardchain_out_of_sync))
4344
if status.masterchain_out_of_ser is not None:
4445
result.append(METRICS['out_of_ser'].to_format(status.masterchain_out_of_ser))
4546
result.append(METRICS['vc_up'].to_format(int(status.is_working)))
46-
return result
47+
48+
def get_validator_validation_metrics(self, result: list):
49+
index = self.ton.GetValidatorIndex()
50+
result.append(METRICS['validator_id'].to_format(index))
51+
config = self.ton.GetConfig34()
52+
save_elections = self.ton.GetSaveElections()
53+
elections = save_elections.get(str(config["startWorkTime"]))
54+
if elections is not None:
55+
adnl = self.ton.GetAdnlAddr()
56+
stake = elections.get(adnl, {}).get('stake')
57+
if stake:
58+
result.append(METRICS['validator_stake'].to_format(round(stake, 2)))
4759

4860
def push_metrics(self):
4961
if not self.ton.using_prometheus():
@@ -52,7 +64,9 @@ def push_metrics(self):
5264
url = self.ton.local.db.get('prometheus_url')
5365
if url is None:
5466
raise Exception('Prometheus url is not set')
55-
metrics = self.get_validator_status_metrics()
67+
metrics = []
68+
self.local.try_function(self.get_validator_status_metrics, args=[metrics])
69+
self.local.try_function(self.get_validator_validation_metrics, args=[metrics])
5670
requests.post(url, data='\n'.join(metrics).encode())
5771

5872
def add_console_commands(self, console):

0 commit comments

Comments
 (0)