github.com/kubeshop/testkube@v1.17.23/internal/graphql/services/executors.go (about)

     1  package services
     2  
     3  import (
     4  	"context"
     5  
     6  	executorsclientv1 "github.com/kubeshop/testkube-operator/pkg/client/executors/v1"
     7  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
     8  	executorsmapper "github.com/kubeshop/testkube/pkg/mapper/executors"
     9  )
    10  
    11  //go:generate mockgen -destination=./mock_executors.go -package=services "github.com/kubeshop/testkube/internal/graphql/services" ExecutorsService
    12  type ExecutorsService interface {
    13  	List(selector string) ([]testkube.ExecutorDetails, error)
    14  	SubscribeList(ctx context.Context, selector string) (<-chan []testkube.ExecutorDetails, error)
    15  }
    16  
    17  type executorsService struct {
    18  	ServiceBase
    19  	client *executorsclientv1.ExecutorsClient
    20  }
    21  
    22  func NewExecutorsService(service Service, client *executorsclientv1.ExecutorsClient) ExecutorsService {
    23  	return &executorsService{ServiceBase: ServiceBase{Service: service}, client: client}
    24  }
    25  
    26  func (s *executorsService) List(selector string) ([]testkube.ExecutorDetails, error) {
    27  	execs, err := s.client.List(selector)
    28  	if err != nil {
    29  		return nil, err
    30  	}
    31  	return Map(execs.Items, executorsmapper.MapExecutorCRDToExecutorDetails), nil
    32  }
    33  
    34  func (s *executorsService) SubscribeList(ctx context.Context, selector string) (<-chan []testkube.ExecutorDetails, error) {
    35  	return HandleSubscription(ctx, "events.executor.>", s, func() ([]testkube.ExecutorDetails, error) {
    36  		return s.List(selector)
    37  	})
    38  }