2020 }, []string {"network" , "chainId" , "state" })
2121
2222 // Node Verification
23+ promNodeClientVersion = promauto .NewGaugeVec (prometheus.GaugeOpts {
24+ Name : "pool_rpc_node_client_version" ,
25+ Help : "Tracks node RPC client versions" ,
26+ }, []string {"network" , "chainID" , "nodeName" , "version" })
2327 promPoolRPCNodeVerifies = promauto .NewCounterVec (prometheus.CounterOpts {
2428 Name : "pool_rpc_node_verifies" ,
2529 Help : "The total number of chain ID verifications for the given RPC node" ,
7276
7377type GenericMultiNodeMetrics interface {
7478 RecordNodeStates (ctx context.Context , state string , count int64 )
79+ RecordNodeClientVersion (ctx context.Context , nodeName string , version string )
7580 IncrementNodeVerifies (ctx context.Context , nodeName string )
7681 IncrementNodeVerifiesFailed (ctx context.Context , nodeName string )
7782 IncrementNodeVerifiesSuccess (ctx context.Context , nodeName string )
@@ -91,6 +96,7 @@ type multiNodeMetrics struct {
9196 network string
9297 chainID string
9398 nodeStates metric.Int64Gauge
99+ nodeClientVersion metric.Int64Gauge
94100 nodeVerifies metric.Int64Counter
95101 nodeVerifiesFailed metric.Int64Counter
96102 nodeVerifiesSuccess metric.Int64Counter
@@ -105,62 +111,67 @@ type multiNodeMetrics struct {
105111}
106112
107113func NewGenericMultiNodeMetrics (network string , chainID string ) (GenericMultiNodeMetrics , error ) {
108- nodeStates , err := beholder .GetMeter ().Int64Gauge ("beholder_multi_node_states " )
114+ nodeStates , err := beholder .GetMeter ().Int64Gauge ("multi_node_states " )
109115 if err != nil {
110116 return nil , fmt .Errorf ("failed to register multinode states metric: %w" , err )
111117 }
112118
113- nodeVerifies , err := beholder .GetMeter ().Int64Counter ("beholder_pool_rpc_node_verifies" )
119+ nodeClientVersion , err := beholder .GetMeter ().Int64Gauge ("pool_rpc_node_client_version" )
120+ if err != nil {
121+ return nil , fmt .Errorf ("failed to register client version metric: %w" , err )
122+ }
123+
124+ nodeVerifies , err := beholder .GetMeter ().Int64Counter ("pool_rpc_node_verifies" )
114125 if err != nil {
115126 return nil , fmt .Errorf ("failed to register node verifies metric: %w" , err )
116127 }
117128
118- nodeVerifiesFailed , err := beholder .GetMeter ().Int64Counter ("beholder_pool_rpc_node_verifies_failed " )
129+ nodeVerifiesFailed , err := beholder .GetMeter ().Int64Counter ("pool_rpc_node_verifies_failed " )
119130 if err != nil {
120131 return nil , fmt .Errorf ("failed to register node verifies failed metric: %w" , err )
121132 }
122133
123- nodeVerifiesSuccess , err := beholder .GetMeter ().Int64Counter ("beholder_pool_rpc_node_verifies_success " )
134+ nodeVerifiesSuccess , err := beholder .GetMeter ().Int64Counter ("pool_rpc_node_verifies_success " )
124135 if err != nil {
125136 return nil , fmt .Errorf ("failed to register node verifies success metric: %w" , err )
126137 }
127138
128- nodeTransitionsToAlive , err := beholder .GetMeter ().Int64Counter ("beholder_pool_rpc_node_num_transitions_to_alive " )
139+ nodeTransitionsToAlive , err := beholder .GetMeter ().Int64Counter ("pool_rpc_node_num_transitions_to_alive " )
129140 if err != nil {
130141 return nil , fmt .Errorf ("failed to register node transitions to alive metric: %w" , err )
131142 }
132143
133- nodeTransitionsToInSync , err := beholder .GetMeter ().Int64Counter ("beholder_pool_rpc_node_num_transitions_to_in_sync " )
144+ nodeTransitionsToInSync , err := beholder .GetMeter ().Int64Counter ("pool_rpc_node_num_transitions_to_in_sync " )
134145 if err != nil {
135146 return nil , fmt .Errorf ("failed to register node transitions to in sync metric: %w" , err )
136147 }
137148
138- nodeTransitionsToOutOfSync , err := beholder .GetMeter ().Int64Counter ("beholder_pool_rpc_node_num_transitions_to_out_of_sync " )
149+ nodeTransitionsToOutOfSync , err := beholder .GetMeter ().Int64Counter ("pool_rpc_node_num_transitions_to_out_of_sync " )
139150 if err != nil {
140151 return nil , fmt .Errorf ("failed to register node transitions to out of sync metric: %w" , err )
141152 }
142153
143- nodeTransitionsToUnreachable , err := beholder .GetMeter ().Int64Counter ("beholder_pool_rpc_node_num_transitions_to_unreachable " )
154+ nodeTransitionsToUnreachable , err := beholder .GetMeter ().Int64Counter ("pool_rpc_node_num_transitions_to_unreachable " )
144155 if err != nil {
145156 return nil , fmt .Errorf ("failed to register node transitions to unreachable metric: %w" , err )
146157 }
147158
148- nodeTransitionsToInvalidChainID , err := beholder .GetMeter ().Int64Counter ("beholder_pool_rpc_node_num_transitions_to_invalid_chain_id " )
159+ nodeTransitionsToInvalidChainID , err := beholder .GetMeter ().Int64Counter ("pool_rpc_node_num_transitions_to_invalid_chain_id " )
149160 if err != nil {
150161 return nil , fmt .Errorf ("failed to register node transitions to invalid chain id metric: %w" , err )
151162 }
152163
153- nodeTransitionsToUnusable , err := beholder .GetMeter ().Int64Counter ("beholder_pool_rpc_node_num_transitions_to_unusable " )
164+ nodeTransitionsToUnusable , err := beholder .GetMeter ().Int64Counter ("pool_rpc_node_num_transitions_to_unusable " )
154165 if err != nil {
155166 return nil , fmt .Errorf ("failed to register node transitions to unusable metric: %w" , err )
156167 }
157168
158- nodeTransitionsToSyncing , err := beholder .GetMeter ().Int64Counter ("beholder_pool_rpc_node_num_transitions_to_syncing " )
169+ nodeTransitionsToSyncing , err := beholder .GetMeter ().Int64Counter ("pool_rpc_node_num_transitions_to_syncing " )
159170 if err != nil {
160171 return nil , fmt .Errorf ("failed to register node transitions to syncing metric: %w" , err )
161172 }
162173
163- invariantViolations , err := beholder .GetMeter ().Int64Counter ("beholder_multi_node_invariant_violations " )
174+ invariantViolations , err := beholder .GetMeter ().Int64Counter ("multi_node_invariant_violations " )
164175 if err != nil {
165176 return nil , fmt .Errorf ("failed to register invariant violations metric: %w" , err )
166177 }
@@ -169,6 +180,7 @@ func NewGenericMultiNodeMetrics(network string, chainID string) (GenericMultiNod
169180 network : network ,
170181 chainID : chainID ,
171182 nodeStates : nodeStates ,
183+ nodeClientVersion : nodeClientVersion ,
172184 nodeVerifies : nodeVerifies ,
173185 nodeVerifiesFailed : nodeVerifiesFailed ,
174186 nodeVerifiesSuccess : nodeVerifiesSuccess ,
@@ -191,6 +203,15 @@ func (m *multiNodeMetrics) RecordNodeStates(ctx context.Context, state string, c
191203 attribute .String ("state" , state )))
192204}
193205
206+ func (m * multiNodeMetrics ) RecordNodeClientVersion (ctx context.Context , nodeName string , version string ) {
207+ promNodeClientVersion .WithLabelValues (m .network , m .chainID , nodeName , version ).Set (1 )
208+ m .nodeClientVersion .Record (ctx , 1 , metric .WithAttributes (
209+ attribute .String ("network" , m .network ),
210+ attribute .String ("chainID" , m .chainID ),
211+ attribute .String ("nodeName" , nodeName ),
212+ attribute .String ("version" , version )))
213+ }
214+
194215func (m * multiNodeMetrics ) IncrementNodeVerifies (ctx context.Context , nodeName string ) {
195216 promPoolRPCNodeVerifies .WithLabelValues (m .network , m .chainID , nodeName ).Inc ()
196217 m .nodeVerifies .Add (ctx , 1 , metric .WithAttributes (
0 commit comments