diff --git a/app/busy_test.go b/app/busy_test.go index 8c64d123740..3bd8db79d31 100644 --- a/app/busy_test.go +++ b/app/busy_test.go @@ -124,3 +124,4 @@ func (c *ClusterMock) GetPluginStatuses() (model.PluginStatuses, *model.AppError func (c *ClusterMock) ConfigChanged(previousConfig *model.Config, newConfig *model.Config, sendToOtherServer bool) *model.AppError { return nil } +func (c *ClusterMock) HealthScore() int { return 0 } diff --git a/app/server.go b/app/server.go index 9aeec92bdc9..4799933f376 100644 --- a/app/server.go +++ b/app/server.go @@ -1242,6 +1242,10 @@ func (s *Server) TotalWebsocketConnections() int { return int(count) } +func (s *Server) ClusterHealthScore() int { + return s.Cluster.HealthScore() +} + func (s *Server) ensureDiagnosticId() { if s.diagnosticId != "" { return diff --git a/einterfaces/cluster.go b/einterfaces/cluster.go index 2d537002990..e2b4bb10d77 100644 --- a/einterfaces/cluster.go +++ b/einterfaces/cluster.go @@ -15,6 +15,10 @@ type ClusterInterface interface { RegisterClusterMessageHandler(event string, crm ClusterMessageHandler) GetClusterId() string IsLeader() bool + // HealthScore returns a number which is indicative of how well an instance is meeting + // the soft real-time requirements of the protocol. Lower numbers are better, + // and zero means "totally healthy". + HealthScore() int GetMyClusterInfo() *model.ClusterInfo GetClusterInfos() []*model.ClusterInfo SendClusterMessage(cluster *model.ClusterMessage) diff --git a/einterfaces/mocks/ClusterInterface.go b/einterfaces/mocks/ClusterInterface.go index dba35b98293..8e181529683 100644 --- a/einterfaces/mocks/ClusterInterface.go +++ b/einterfaces/mocks/ClusterInterface.go @@ -153,6 +153,20 @@ func (_m *ClusterInterface) GetPluginStatuses() (model.PluginStatuses, *model.Ap return r0, r1 } +// HealthScore provides a mock function with given fields: +func (_m *ClusterInterface) HealthScore() int { + ret := _m.Called() + + var r0 int + if rf, ok := ret.Get(0).(func() int); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(int) + } + + return r0 +} + // IsLeader provides a mock function with given fields: func (_m *ClusterInterface) IsLeader() bool { ret := _m.Called() diff --git a/testlib/cluster.go b/testlib/cluster.go index a6bfd5b2403..e9d091753a4 100644 --- a/testlib/cluster.go +++ b/testlib/cluster.go @@ -21,6 +21,10 @@ func (c *FakeClusterInterface) RegisterClusterMessageHandler(event string, crm e c.clusterMessageHandler = crm } +func (c *FakeClusterInterface) HealthScore() int { + return 0 +} + func (c *FakeClusterInterface) GetClusterId() string { return "" } func (c *FakeClusterInterface) IsLeader() bool { return false }