github.com/kubeshop/testkube@v1.17.23/internal/app/api/v1/configs.go (about)

     1  package v1
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	"github.com/gofiber/fiber/v2"
     8  	"go.mongodb.org/mongo-driver/mongo"
     9  
    10  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
    11  )
    12  
    13  // GetConfigsHandler returns configuration
    14  func (s TestkubeAPI) GetConfigsHandler() fiber.Handler {
    15  	return func(c *fiber.Ctx) error {
    16  		ctx := c.Context()
    17  		config, err := s.ConfigMap.Get(ctx)
    18  		if err != nil {
    19  			if err == mongo.ErrNoDocuments {
    20  				return s.Error(c, http.StatusNotFound, fmt.Errorf("failed to get config: db found no config: %w", err))
    21  			}
    22  			return s.Error(c, http.StatusInternalServerError, fmt.Errorf("failed to get config: %w", err))
    23  		}
    24  		return c.JSON(config)
    25  	}
    26  }
    27  
    28  // UpdateConfigsHandler update configuration handler
    29  func (s TestkubeAPI) UpdateConfigsHandler() fiber.Handler {
    30  	return func(c *fiber.Ctx) error {
    31  		ctx := c.Context()
    32  		errPrefix := "failed to update config"
    33  
    34  		config, err := s.ConfigMap.Get(ctx)
    35  		if err != nil {
    36  			if err == mongo.ErrNoDocuments {
    37  				return s.Error(c, http.StatusNotFound, fmt.Errorf("%s: db found no config: %w", errPrefix, err))
    38  			}
    39  			return s.Error(c, http.StatusInternalServerError, fmt.Errorf("%s: unable to get config: %w", errPrefix, err))
    40  		}
    41  
    42  		var request testkube.Config
    43  		err = c.BodyParser(&request)
    44  		if err != nil {
    45  			return s.Error(c, http.StatusBadRequest, fmt.Errorf("%s: config request body invalid: %w", errPrefix, err))
    46  		}
    47  		s.Log.Warnw("#######", "request", config)
    48  		config.EnableTelemetry = request.EnableTelemetry
    49  		s.Log.Warnw("#######", "request", config)
    50  		_, err = s.ConfigMap.Upsert(ctx, config)
    51  		if err != nil {
    52  			return s.Error(c, http.StatusInternalServerError, fmt.Errorf("%s: db could not update config: %w", errPrefix, err))
    53  		}
    54  		return c.JSON(config)
    55  	}
    56  }