feat: expose mysql transaction retry metrics

This commit is contained in:
2026-09-20 21:52:17 +08:00
parent a1e6fcc07f
commit ac8cc1260b
10 changed files with 55 additions and 4 deletions

View File

@@ -102,6 +102,9 @@ func (r *Registry) RecordBatch(component string, started time.Time, err error) {
// RecordDatabase reads the local connection-pool snapshot; it issues no SQL.
func (r *Registry) RecordDatabase(s sql.DBStats) {
if r == nil {
return
}
r.SetGauge("orbit_db_connections_open", float64(s.OpenConnections), nil)
r.SetGauge("orbit_db_connections_in_use", float64(s.InUse), nil)
r.SetGauge("orbit_db_connections_idle", float64(s.Idle), nil)
@@ -109,3 +112,18 @@ func (r *Registry) RecordDatabase(s sql.DBStats) {
r.SetCounter("orbit_db_wait_count_total", float64(s.WaitCount), nil)
r.SetCounter("orbit_db_wait_duration_seconds_total", s.WaitDuration.Seconds(), nil)
}
// TransactionStats 是本进程提交前事务重试的累计观测值。
type TransactionStats struct {
Retries uint64 // 已实际执行的重试次数。
Exhausted uint64 // 达到重试上限的事务次数。
}
// RecordTransactionStats records bounded database transaction retry counters.
func (r *Registry) RecordTransactionStats(stats TransactionStats) {
if r == nil {
return
}
r.SetCounter("orbit_db_transaction_retries_total", float64(stats.Retries), nil)
r.SetCounter("orbit_db_transaction_retry_exhausted_total", float64(stats.Exhausted), nil)
}