From 84cbc6c5a131b0382eecd173f88c7fb526550df8 Mon Sep 17 00:00:00 2001 From: Jacek Wysocki Date: Fri, 9 Aug 2024 07:42:52 +0200 Subject: [PATCH] feat: filters for tags --- pkg/repository/testworkflow/filter.go | 12 +++++++++++- pkg/repository/testworkflow/interface.go | 2 ++ pkg/repository/testworkflow/mongo.go | 11 +++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pkg/repository/testworkflow/filter.go b/pkg/repository/testworkflow/filter.go index bce5557a5c8..6a496006cb4 100644 --- a/pkg/repository/testworkflow/filter.go +++ b/pkg/repository/testworkflow/filter.go @@ -16,10 +16,12 @@ type FilterImpl struct { FPageSize int FTextSearch string FSelector string + FRunnerIds []string + FTags map[string]string } func NewExecutionsFilter() *FilterImpl { - result := FilterImpl{FPage: 0, FPageSize: PageDefaultLimit} + result := FilterImpl{FPage: 0, FPageSize: PageDefaultLimit, FTags: make(map[string]string)} return &result } @@ -130,3 +132,11 @@ func (f FilterImpl) TextSearch() string { func (f FilterImpl) Selector() string { return f.FSelector } + +func (f FilterImpl) RunnerIds() []string { + return f.FRunnerIds +} + +func (f FilterImpl) Tags() map[string]string { + return f.FTags +} diff --git a/pkg/repository/testworkflow/interface.go b/pkg/repository/testworkflow/interface.go index cea8a37053e..ed1efb9480d 100644 --- a/pkg/repository/testworkflow/interface.go +++ b/pkg/repository/testworkflow/interface.go @@ -26,6 +26,8 @@ type Filter interface { TextSearchDefined() bool TextSearch() string Selector() string + RunnerIds() []string + Tags() map[string]string } //go:generate mockgen -destination=./mock_repository.go -package=testworkflow "github.com/kubeshop/testkube/pkg/repository/testworkflow" Repository diff --git a/pkg/repository/testworkflow/mongo.go b/pkg/repository/testworkflow/mongo.go index 4d6183ef160..878912556f5 100644 --- a/pkg/repository/testworkflow/mongo.go +++ b/pkg/repository/testworkflow/mongo.go @@ -360,6 +360,17 @@ func composeQueryAndOpts(filter Filter) (bson.M, *options.FindOptions) { } } + if len(filter.RunnerIds()) > 0 { + query["runningcontext.runnerids"] = bson.M{"$in": filter.RunnerIds()} + } + + // this one needs wildard index or changing the model to {k:X v:Y} + if len(filter.Tags()) > 0 { + for k, v := range filter.Tags() { + query["runningcontext.tags."+k] = v + } + } + opts.SetSkip(int64(filter.Page() * filter.PageSize())) opts.SetLimit(int64(filter.PageSize())) opts.SetSort(bson.D{{Key: "scheduledat", Value: -1}})