@@ -64,7 +64,6 @@ func initPrometheusMetrics() {
6464 })
6565}
6666
67-
6867// prometheusMetrics implements TxMetrics using Prometheus
6968type prometheusMetrics struct {
7069 chainID string
@@ -87,37 +86,49 @@ func (m *prometheusMetrics) attributes(accountAddress string) metric.Measurement
8786
8887// NewTxmMetrics creates a new TxMetrics instance with Prometheus and Beholder metrics
8988// meter is the OpenTelemetry meter to use for beholder metrics
89+ // Prometheus metrics are always created; beholder metrics are optional and will be nil if creation fails
9090func NewTxmMetrics (chainID string , meter metric.Meter ) (TxMetrics , error ) {
9191 initPrometheusMetrics ()
9292
9393 // Create beholder metrics directly from the provided meter (no globals)
94+ // These are optional - if any fail, we set them to nil and Prometheus metrics still work
95+ var numBroadcastedTxs metric.Int64Counter
96+ var numConfirmedTxs metric.Int64Counter
97+ var numNonceGaps metric.Int64Counter
98+ var timeUntilTxConfirmed metric.Float64Histogram
99+ var enqueueFailed metric.Int64Counter
100+ var nonceRebroadcast metric.Int64Counter
101+ var nextNonce metric.Int64Gauge
102+
103+ // Try to create all beholder metrics, but if any fail, explicitly set them to nil
104+ // This ensures Prometheus metrics still work even if beholder is unavailable
94105 numBroadcastedTxs , err := meter .Int64Counter ("txm_num_broadcasted_transactions" )
95106 if err != nil {
96- return nil , err
107+ numBroadcastedTxs = nil
97108 }
98- numConfirmedTxs , err : = meter .Int64Counter ("txm_num_confirmed_transactions" )
109+ numConfirmedTxs , err = meter .Int64Counter ("txm_num_confirmed_transactions" )
99110 if err != nil {
100- return nil , err
111+ numConfirmedTxs = nil
101112 }
102- numNonceGaps , err : = meter .Int64Counter ("txm_num_nonce_gaps" )
113+ numNonceGaps , err = meter .Int64Counter ("txm_num_nonce_gaps" )
103114 if err != nil {
104- return nil , err
115+ numNonceGaps = nil
105116 }
106- timeUntilTxConfirmed , err : = meter .Float64Histogram ("txm_time_until_tx_confirmed" )
117+ timeUntilTxConfirmed , err = meter .Float64Histogram ("txm_time_until_tx_confirmed" )
107118 if err != nil {
108- return nil , err
119+ timeUntilTxConfirmed = nil
109120 }
110- enqueueFailed , err : = meter .Int64Counter ("txm_enqueue_failed" )
121+ enqueueFailed , err = meter .Int64Counter ("txm_enqueue_failed" )
111122 if err != nil {
112- return nil , err
123+ enqueueFailed = nil
113124 }
114- nonceRebroadcast , err : = meter .Int64Counter ("txm_nonce_rebroadcast" )
125+ nonceRebroadcast , err = meter .Int64Counter ("txm_nonce_rebroadcast" )
115126 if err != nil {
116- return nil , err
127+ nonceRebroadcast = nil
117128 }
118- nextNonce , err : = meter .Int64Gauge ("txm_next_nonce" )
129+ nextNonce , err = meter .Int64Gauge ("txm_next_nonce" )
119130 if err != nil {
120- return nil , err
131+ nextNonce = nil
121132 }
122133
123134 return & prometheusMetrics {
0 commit comments