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/clusters.html.tmpl b/web/templates/clusters.html.tmpl
index ef491f1f2..227f6b669 100644
--- a/web/templates/clusters.html.tmpl
+++ b/web/templates/clusters.html.tmpl
@@ -29,10 +29,8 @@