Skip to content

Commit 08957e8

Browse files
committed
refactor: unify backend k8s objects handler for UI
1 parent 3fe3595 commit 08957e8

10 files changed

Lines changed: 83 additions & 216 deletions

kof-operator/cmd/main.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,13 @@ func main() {
156156
httpServer.Router.GET("/api/targets", handlers.PrometheusHandler)
157157
httpServer.Router.GET("/api/collectors/metrics", handlers.CollectorHandler)
158158
httpServer.Router.GET("/api/victoria/metrics", handlers.VictoriaHandler)
159-
httpServer.Router.GET("/api/cluster-deployments", handlers.ClusterDeploymentHandler)
160-
httpServer.Router.GET("/api/cluster-summaries", handlers.ClusterSummariesHandler)
161-
httpServer.Router.GET("/api/multi-cluster-services", handlers.MultiClusterServicesHandler)
162-
httpServer.Router.GET("/api/state-management-providers", handlers.StateManagementProvidersHandler)
159+
httpServer.Router.GET("/api/cluster-deployments", handlers.K8sObjectsHandler[*kcmv1beta1.ClusterDeploymentList])
160+
httpServer.Router.GET("/api/cluster-summaries", handlers.K8sObjectsHandler[*sveltosv1beta1.ClusterSummaryList])
161+
httpServer.Router.GET("/api/multi-cluster-services", handlers.K8sObjectsHandler[*kcmv1beta1.MultiClusterServiceList])
162+
httpServer.Router.GET(
163+
"/api/state-management-providers",
164+
handlers.K8sObjectsHandler[*kcmv1beta1.StateManagementProviderList],
165+
)
163166
httpServer.Router.NotFound(handlers.NotFoundHandler)
164167
setupLog.Info(fmt.Sprintf("Starting http server on :%s", httpServerPort))
165168
var wg sync.WaitGroup

kof-operator/internal/k8s/cluster_summary.go

Lines changed: 0 additions & 14 deletions
This file was deleted.

kof-operator/internal/k8s/multi_cluster_service.go

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package k8s
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"reflect"
7+
8+
"sigs.k8s.io/controller-runtime/pkg/client"
9+
)
10+
11+
func GetObjectsList[ObjListT client.ObjectList](ctx context.Context, c client.Client) (ObjListT, error) {
12+
var objList ObjListT
13+
objType := reflect.TypeOf(objList)
14+
if objType.Kind() != reflect.Ptr || objType.Elem().Kind() != reflect.Struct {
15+
var zero ObjListT
16+
return zero, fmt.Errorf("ObjListT must be a pointer to a struct that implements client.ObjectList, got %v", objType)
17+
}
18+
listPtr := reflect.New(objType.Elem()).Interface().(client.ObjectList)
19+
err := c.List(ctx, listPtr)
20+
return listPtr.(ObjListT), err
21+
}

kof-operator/internal/k8s/state_management_provider.go

Lines changed: 0 additions & 14 deletions
This file was deleted.

kof-operator/internal/server/handlers/cluster_deployments_handler.go

Lines changed: 0 additions & 43 deletions
This file was deleted.

kof-operator/internal/server/handlers/cluster_summaries_handler.go

Lines changed: 0 additions & 42 deletions
This file was deleted.
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package handlers
2+
3+
import (
4+
"fmt"
5+
"net/http"
6+
7+
"github.com/k0rdent/kof/kof-operator/internal/k8s"
8+
"github.com/k0rdent/kof/kof-operator/internal/server"
9+
"k8s.io/apimachinery/pkg/api/meta"
10+
"k8s.io/apimachinery/pkg/runtime"
11+
"sigs.k8s.io/controller-runtime/pkg/client"
12+
)
13+
14+
type K8sObjectsResponse struct {
15+
Items map[string]client.Object `json:"items"`
16+
}
17+
18+
func K8sObjectsHandler[ObjListT client.ObjectList](res *server.Response, req *http.Request) {
19+
ctx := req.Context()
20+
21+
kubeClient, err := k8s.NewClient()
22+
if err != nil {
23+
res.Logger.Error(err, "Failed to create kube client")
24+
res.Fail(server.BasicInternalErrorMessage, http.StatusInternalServerError)
25+
return
26+
}
27+
28+
objectList, err := k8s.GetObjectsList[ObjListT](ctx, kubeClient.Client)
29+
if err != nil {
30+
res.Logger.Error(err, "Failed to get objects list")
31+
res.Fail(server.BasicInternalErrorMessage, http.StatusInternalServerError)
32+
return
33+
}
34+
35+
objectsMap := make(map[string]client.Object)
36+
37+
if err := meta.EachListItem(objectList, func(o runtime.Object) error {
38+
obj, ok := o.(client.Object)
39+
if !ok {
40+
return fmt.Errorf("object is not a client.Object")
41+
}
42+
43+
obj.SetManagedFields(nil)
44+
objectsMap[string(obj.GetUID())] = obj
45+
return nil
46+
}); err != nil {
47+
res.Logger.Error(err, "Failed to iterate over list items")
48+
res.Fail(server.BasicInternalErrorMessage, http.StatusInternalServerError)
49+
return
50+
}
51+
52+
res.Send(&K8sObjectsResponse{
53+
Items: objectsMap,
54+
}, http.StatusOK)
55+
}

kof-operator/internal/server/handlers/multi_cluster_service_handler.go

Lines changed: 0 additions & 42 deletions
This file was deleted.

kof-operator/internal/server/handlers/state_management_providers_handler.go

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)