fix: protect publish path from mysql exhaustion

This commit is contained in:
richjohnrambo
2026-09-27 18:35:54 +08:00
parent 36eb76a5e3
commit 3bb6774786
17 changed files with 308 additions and 21 deletions
+47
View File
@@ -0,0 +1,47 @@
package metrics
import (
"database/sql"
"testing"
"time"
)
type fixedDBStats struct {
stats sql.DBStats
}
func (s fixedDBStats) Stats() sql.DBStats { return s.stats }
func TestDBPoolCollector(t *testing.T) {
RegisterDBPool("test", fixedDBStats{stats: sql.DBStats{
MaxOpenConnections: 32,
OpenConnections: 12,
InUse: 7,
Idle: 5,
WaitCount: 9,
WaitDuration: 1500 * time.Millisecond,
}})
families, err := Registry.Gather()
if err != nil {
t.Fatal(err)
}
want := map[string]bool{
"im_db_pool_max_open_connections": false,
"im_db_pool_open_connections": false,
"im_db_pool_in_use_connections": false,
"im_db_pool_idle_connections": false,
"im_db_pool_wait_total": false,
"im_db_pool_wait_duration_seconds_total": false,
}
for _, family := range families {
if _, ok := want[family.GetName()]; ok {
want[family.GetName()] = true
}
}
for name, found := range want {
if !found {
t.Errorf("metric %s was not gathered", name)
}
}
}