diff --git a/app/platform/service_test.go b/app/platform/service_test.go index 8654b18685..3b97b68eed 100644 --- a/app/platform/service_test.go +++ b/app/platform/service_test.go @@ -141,6 +141,7 @@ func TestMetrics(t *testing.T) { mockMetricsImpl := &mocks.MetricsInterface{} mockMetricsImpl.On("Register").Return() mockMetricsImpl.On("ObserveStoreMethodDuration", mock.Anything, mock.Anything, mock.Anything).Return() + mockMetricsImpl.On("RegisterDBCollector", mock.AnythingOfType("*sql.DB"), "master") th := Setup(t, StartMetrics(), func(ps *PlatformService) error { ps.metricsIFace = mockMetricsImpl diff --git a/einterfaces/metrics.go b/einterfaces/metrics.go index 56e6cb5aa0..fa7b5d714a 100644 --- a/einterfaces/metrics.go +++ b/einterfaces/metrics.go @@ -4,12 +4,15 @@ package einterfaces import ( + "database/sql" + "github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/shared/mlog" ) type MetricsInterface interface { Register() + RegisterDBCollector(db *sql.DB, name string) IncrementPostCreate() IncrementWebhookPost() diff --git a/einterfaces/mocks/MetricsInterface.go b/einterfaces/mocks/MetricsInterface.go index 18ae7ad658..9eb7d06b13 100644 --- a/einterfaces/mocks/MetricsInterface.go +++ b/einterfaces/mocks/MetricsInterface.go @@ -9,6 +9,8 @@ import ( mock "github.com/stretchr/testify/mock" model "github.com/mattermost/mattermost-server/v6/model" + + sql "database/sql" ) // MetricsInterface is an autogenerated mock type for the MetricsInterface type @@ -302,6 +304,11 @@ func (_m *MetricsInterface) Register() { _m.Called() } +// RegisterDBCollector provides a mock function with given fields: db, name +func (_m *MetricsInterface) RegisterDBCollector(db *sql.DB, name string) { + _m.Called(db, name) +} + // SetReplicaLagAbsolute provides a mock function with given fields: node, value func (_m *MetricsInterface) SetReplicaLagAbsolute(node string, value float64) { _m.Called(node, value) diff --git a/store/sqlstore/store.go b/store/sqlstore/store.go index 28a86886cf..4e5641c219 100644 --- a/store/sqlstore/store.go +++ b/store/sqlstore/store.go @@ -301,6 +301,9 @@ func (ss *SqlStore) initConnection() { if ss.DriverName() == model.DatabaseDriverMysql { ss.masterX.MapperFunc(noOpMapper) } + if ss.metrics != nil { + ss.metrics.RegisterDBCollector(ss.masterX.DB.DB, "master") + } if len(ss.settings.DataSourceReplicas) > 0 { ss.ReplicaXs = make([]*sqlxDBWrapper, len(ss.settings.DataSourceReplicas)) @@ -312,6 +315,9 @@ func (ss *SqlStore) initConnection() { if ss.DriverName() == model.DatabaseDriverMysql { ss.ReplicaXs[i].MapperFunc(noOpMapper) } + if ss.metrics != nil { + ss.metrics.RegisterDBCollector(ss.ReplicaXs[i].DB.DB, "replica-"+strconv.Itoa(i)) + } } } @@ -325,6 +331,9 @@ func (ss *SqlStore) initConnection() { if ss.DriverName() == model.DatabaseDriverMysql { ss.searchReplicaXs[i].MapperFunc(noOpMapper) } + if ss.metrics != nil { + ss.metrics.RegisterDBCollector(ss.searchReplicaXs[i].DB.DB, "searchreplica-"+strconv.Itoa(i)) + } } } diff --git a/store/sqlstore/store_test.go b/store/sqlstore/store_test.go index 180780661c..bfd10d14c1 100644 --- a/store/sqlstore/store_test.go +++ b/store/sqlstore/store_test.go @@ -24,6 +24,7 @@ import ( "github.com/mattermost/mattermost-server/v6/db" "github.com/mattermost/mattermost-server/v6/einterfaces/mocks" "github.com/mattermost/mattermost-server/v6/model" + "github.com/mattermost/mattermost-server/v6/plugin/plugintest/mock" "github.com/mattermost/mattermost-server/v6/store" "github.com/mattermost/mattermost-server/v6/store/searchtest" "github.com/mattermost/mattermost-server/v6/store/storetest" @@ -731,6 +732,7 @@ func TestReplicaLagQuery(t *testing.T) { defer mockMetrics.AssertExpectations(t) mockMetrics.On("SetReplicaLagAbsolute", tableName, float64(1)) mockMetrics.On("SetReplicaLagTime", tableName, float64(1)) + mockMetrics.On("RegisterDBCollector", mock.AnythingOfType("*sql.DB"), "master") store := &SqlStore{ rrCounter: 0,