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 }