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  }