github.com/kubeshop/testkube@v1.17.23/internal/app/api/v1/labels.go (about) 1 package v1 2 3 import ( 4 "fmt" 5 "net/http" 6 7 "github.com/gofiber/fiber/v2" 8 ) 9 10 func (s TestkubeAPI) ListLabelsHandler() fiber.Handler { 11 return func(c *fiber.Ctx) error { 12 labels := make(map[string][]string) 13 sources := append(*s.LabelSources, s.TestsClient, s.TestsSuitesClient) 14 15 for _, source := range sources { 16 nextLabels, err := source.ListLabels() 17 if err != nil { 18 return s.Error(c, http.StatusBadGateway, fmt.Errorf("failed to list labels: %w", err)) 19 } 20 21 for key, testValues := range nextLabels { 22 valuesMap := make(map[string]struct{}) 23 if values, ok := labels[key]; ok { 24 for _, v := range values { 25 valuesMap[v] = struct{}{} 26 } 27 } 28 29 for _, label := range testValues { 30 if _, ok := valuesMap[label]; !ok { 31 labels[key] = append(labels[key], label) 32 valuesMap[label] = struct{}{} 33 } 34 } 35 } 36 } 37 38 return c.JSON(labels) 39 } 40 }