diff --git a/cmd/soju/main.go b/cmd/soju/main.go index e679181..e8ef6d7 100644 --- a/cmd/soju/main.go +++ b/cmd/soju/main.go @@ -316,7 +316,9 @@ func main() { } if db, ok := db.(soju.MetricsCollectorDatabase); ok && srv.MetricsRegistry != nil { - srv.MetricsRegistry.MustRegister(db.MetricsCollector()) + if err := db.RegisterMetrics(srv.MetricsRegistry); err != nil { + log.Fatalf("failed to register database metrics: %v", err) + } } sigCh := make(chan os.Signal, 1) diff --git a/db.go b/db.go index a227978..6dcab77 100644 --- a/db.go +++ b/db.go @@ -35,7 +35,7 @@ type Database interface { type MetricsCollectorDatabase interface { Database - MetricsCollector() prometheus.Collector + RegisterMetrics(r prometheus.Registerer) error } func OpenDB(driver, source string) (Database, error) { diff --git a/db_postgres.go b/db_postgres.go index 008fdef..da0b5ba 100644 --- a/db_postgres.go +++ b/db_postgres.go @@ -176,8 +176,8 @@ func (db *PostgresDB) Close() error { return db.db.Close() } -func (db *PostgresDB) MetricsCollector() prometheus.Collector { - return promcollectors.NewDBStatsCollector(db.db, "main") +func (db *PostgresDB) RegisterMetrics(r prometheus.Registerer) error { + return r.Register(promcollectors.NewDBStatsCollector(db.db, "main")) } func (db *PostgresDB) Stats(ctx context.Context) (*DatabaseStats, error) { diff --git a/db_sqlite.go b/db_sqlite.go index 44556eb..89c9478 100644 --- a/db_sqlite.go +++ b/db_sqlite.go @@ -259,8 +259,8 @@ func (db *SqliteDB) upgrade() error { return tx.Commit() } -func (db *SqliteDB) MetricsCollector() prometheus.Collector { - return promcollectors.NewDBStatsCollector(db.db, "main") +func (db *SqliteDB) RegisterMetrics(r prometheus.Registerer) error { + return r.Register(promcollectors.NewDBStatsCollector(db.db, "main")) } func (db *SqliteDB) Stats(ctx context.Context) (*DatabaseStats, error) {