Преглед изворни кода

add count result to list kube events endpoint

Alexander Belanger пре 4 година
родитељ
комит
cb386b14dc

+ 8 - 3
api/server/handlers/kube_events/list.go

@@ -38,17 +38,22 @@ func (c *ListKubeEventsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
 		return
 	}
 
-	kubeEvents, err := c.Repo().KubeEvent().ListEventsByProjectID(proj.ID, cluster.ID, request)
+	kubeEvents, count, err := c.Repo().KubeEvent().ListEventsByProjectID(proj.ID, cluster.ID, request)
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
 		return
 	}
 
-	resp := make([]*types.KubeEvent, 0)
+	resp := &types.ListKubeEventsResponse{
+		Count:      count,
+		Limit:      request.Limit,
+		Skip:       request.Skip,
+		KubeEvents: []*types.KubeEvent{},
+	}
 
 	for _, kubeEvent := range kubeEvents {
-		resp = append(resp, kubeEvent.ToKubeEventType())
+		resp.KubeEvents = append(resp.KubeEvents, kubeEvent.ToKubeEventType())
 	}
 
 	c.WriteResult(w, r, resp)

+ 8 - 0
api/types/kube_events.go

@@ -69,6 +69,14 @@ type ListKubeEventRequest struct {
 	ResourceType string `schema:"resource_type"`
 }
 
+type ListKubeEventsResponse struct {
+	Count int64 `json:"count"`
+	Limit int   `json:"limit"`
+	Skip  int   `json:"skip"`
+
+	KubeEvents []*KubeEvent `json:"kube_events"`
+}
+
 type GetKubeEventLogsRequest struct {
 	Timestamp int `schema:"timestamp"`
 }

+ 1 - 1
internal/repository/event.go

@@ -23,6 +23,6 @@ type KubeEventRepository interface {
 		projectID uint,
 		clusterID uint,
 		opts *types.ListKubeEventRequest,
-	) ([]*models.KubeEvent, error)
+	) ([]*models.KubeEvent, int64, error)
 	DeleteEvent(id uint) error
 }

+ 12 - 5
internal/repository/gorm/event.go

@@ -152,7 +152,7 @@ func (repo *KubeEventRepository) ListEventsByProjectID(
 	projectID uint,
 	clusterID uint,
 	opts *types.ListKubeEventRequest,
-) ([]*models.KubeEvent, error) {
+) ([]*models.KubeEvent, int64, error) {
 	listOpts := opts
 
 	if listOpts.Limit == 0 {
@@ -179,18 +179,25 @@ func (repo *KubeEventRepository) ListEventsByProjectID(
 		)
 	}
 
-	query = query.Limit(listOpts.Limit).Offset(listOpts.Skip)
-
 	if listOpts.SortBy == "timestamp" {
 		// sort by the updated_at field
 		query = query.Order("updated_at desc").Order("id desc")
 	}
 
+	// get the count before limit and offset
+	var count int64
+
+	if err := query.Model([]*models.KubeEvent{}).Count(&count).Error; err != nil {
+		return nil, 0, err
+	}
+
+	query = query.Limit(listOpts.Limit).Offset(listOpts.Skip)
+
 	if err := query.Find(&events).Error; err != nil {
-		return nil, err
+		return nil, 0, err
 	}
 
-	return events, nil
+	return events, count, nil
 }
 
 // AppendSubEvent will add a subevent to an existing event

+ 1 - 6
internal/repository/gorm/event_test.go

@@ -1,7 +1,6 @@
 package gorm_test
 
 import (
-	"encoding/json"
 	"fmt"
 	"testing"
 	"time"
@@ -46,10 +45,6 @@ func TestCreateKubeEvent(t *testing.T) {
 		Timestamp: time.Now(),
 	}
 
-	bytes, err := json.Marshal(subEvent)
-
-	t.Errorf("BYTES ARE %s", string(bytes))
-
 	copySubEvent := *subEvent
 	copySubEvent.KubeEventID = 1
 
@@ -179,7 +174,7 @@ func TestListKubeEventsByProjectIDWithSortBy(t *testing.T) {
 func testListKubeEventsByProjectID(tester *tester, t *testing.T, clusterID uint, decrypt bool, opts *types.ListKubeEventRequest, expKubeEvents []*models.KubeEvent) {
 	t.Helper()
 
-	events, err := tester.repo.KubeEvent().ListEventsByProjectID(
+	events, _, err := tester.repo.KubeEvent().ListEventsByProjectID(
 		tester.initProjects[0].Model.ID,
 		clusterID,
 		opts,

+ 1 - 1
internal/repository/test/event.go

@@ -62,7 +62,7 @@ func (n *KubeEventRepository) ListEventsByProjectID(
 	projectID uint,
 	clusterID uint,
 	opts *types.ListKubeEventRequest,
-) ([]*models.KubeEvent, error) {
+) ([]*models.KubeEvent, int64, error) {
 	panic("not implemented") // TODO: Implement
 }