diff --git a/web/clusters.go b/web/clusters.go index 61a2e1360..2d3bd2ca4 100644 --- a/web/clusters.go +++ b/web/clusters.go @@ -57,6 +57,12 @@ func NewClusterListHandler(clustersService services.ClustersService) gin.Handler return } + filterClusterNames, err := clustersService.GetAllClusterNames() + if err != nil { + _ = c.Error(err) + return + } + filterClusterTypes, err := clustersService.GetAllClusterTypes() if err != nil { _ = c.Error(err) @@ -88,6 +94,7 @@ func NewClusterListHandler(clustersService services.ClustersService) gin.Handler c.HTML(http.StatusOK, "clusters.html.tmpl", gin.H{ "ClustersTable": clusterList, "AppliedFilters": query, + "filterClusterNames": filterClusterNames, "FilterClusterTypes": filterClusterTypes, "FilterSIDs": filterSIDs, "FilterTags": filterTags, diff --git a/web/clusters_test.go b/web/clusters_test.go index 7ead9ec34..e8708940c 100644 --- a/web/clusters_test.go +++ b/web/clusters_test.go @@ -322,6 +322,10 @@ func TestClustersListHandler(t *testing.T) { mockClusterService := new(services.MockClustersService) mockClusterService.On("GetAll", mock.Anything, mock.Anything).Return(clustersList, nil) mockClusterService.On("GetCount").Return(4, nil) + mockClusterService.On("GetAllClusterNames", mock.Anything).Return( + []string{"hana_cluster", "other_cluster", "netweaver_cluster"}, + nil, + ) mockClusterService.On("GetAllClusterTypes", mock.Anything).Return( []string{models.ClusterTypeHANAScaleUp, models.ClusterTypeUnknown}, nil, diff --git a/web/services/clusters.go b/web/services/clusters.go index 44d203785..2afb49500 100644 --- a/web/services/clusters.go +++ b/web/services/clusters.go @@ -19,6 +19,7 @@ type ClustersService interface { GetAll(*ClustersFilter, *Page) (models.ClusterList, error) GetByID(string) (*models.Cluster, error) GetCount() (int, error) + GetAllClusterNames() ([]string, error) GetAllClusterTypes() ([]string, error) GetAllSIDs() ([]string, error) GetAllTags() ([]string, error) @@ -134,6 +135,21 @@ func (s *clustersService) GetCount() (int, error) { return int(count), err } +func (s *clustersService) GetAllClusterNames() ([]string, error) { + var clusterNames []string + + err := s.db.Model(&entities.Cluster{}). + Distinct(). + Pluck("name", &clusterNames). + Error + + if err != nil { + return nil, err + } + + return clusterNames, nil +} + func (s *clustersService) GetAllClusterTypes() ([]string, error) { var clusterTypes []string diff --git a/web/services/clusters_mock.go b/web/services/clusters_mock.go index 1588b4f89..e086214c7 100644 --- a/web/services/clusters_mock.go +++ b/web/services/clusters_mock.go @@ -35,6 +35,29 @@ func (_m *MockClustersService) GetAll(_a0 *ClustersFilter, _a1 *Page) (models.Cl return r0, r1 } +// GetAllClusterNames provides a mock function with given fields: +func (_m *MockClustersService) GetAllClusterNames() ([]string, error) { + ret := _m.Called() + + var r0 []string + if rf, ok := ret.Get(0).(func() []string); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]string) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // GetAllClusterTypes provides a mock function with given fields: func (_m *MockClustersService) GetAllClusterTypes() ([]string, error) { ret := _m.Called() diff --git a/web/services/clusters_test.go b/web/services/clusters_test.go index 56ccdaf12..29bb2dc18 100644 --- a/web/services/clusters_test.go +++ b/web/services/clusters_test.go @@ -238,6 +238,11 @@ func (suite *ClustersServiceTestSuite) TestClustersService_GetClustersCount() { suite.Equal(3, count) } +func (suite *ClustersServiceTestSuite) TestClustersService_GetAllClusterNames() { + clusterNames, _ := suite.clustersService.GetAllClusterNames() + suite.ElementsMatch([]string{"cluster1", "cluster2", "cluster3"}, clusterNames) +} + func (suite *ClustersServiceTestSuite) TestClustersService_GetAllClusterTypes() { clusterTypes, _ := suite.clustersService.GetAllClusterTypes() suite.ElementsMatch( diff --git a/web/templates/blocks/health_filter.html.tmpl b/web/templates/blocks/health_filter.html.tmpl index 3de5fc1ee..79329655f 100644 --- a/web/templates/blocks/health_filter.html.tmpl +++ b/web/templates/blocks/health_filter.html.tmpl @@ -1,8 +1,8 @@ {{ define "health_filter" }} - -{{- end }} \ No newline at end of file +{{- end }} diff --git a/web/templates/clusters.html.tmpl b/web/templates/clusters.html.tmpl index 8cc114a37..d0e653469 100644 --- a/web/templates/clusters.html.tmpl +++ b/web/templates/clusters.html.tmpl @@ -20,31 +20,26 @@
{{ template "health_filter" }} - - - {{- range .FilterSIDs }} diff --git a/web/templates/sap_systems.html.tmpl b/web/templates/sap_systems.html.tmpl index c7353b8cb..5f9b37d95 100644 --- a/web/templates/sap_systems.html.tmpl +++ b/web/templates/sap_systems.html.tmpl @@ -19,16 +19,13 @@
{{/* {{ template "health_filter" }} */}} -