Skip to content
This repository has been archived by the owner on Dec 21, 2023. It is now read-only.

Commit

Permalink
fix(shipyard-controller): Add time property to EventFilter (#8134)
Browse files Browse the repository at this point in the history
* not working

Signed-off-by: odubajDT <ondrej.dubaj@dynatrace.com>

* working version

Signed-off-by: odubajDT <ondrej.dubaj@dynatrace.com>

* fix test

Signed-off-by: odubajDT <ondrej.dubaj@dynatrace.com>

* polish

Signed-off-by: odubajDT <ondrej.dubaj@dynatrace.com>

* pr review

Signed-off-by: odubajDT <ondrej.dubaj@dynatrace.com>
  • Loading branch information
odubajDT committed Jun 21, 2022
1 parent f1c6c7d commit 37bb437
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 4 deletions.
3 changes: 3 additions & 0 deletions shipyard-controller/common/event.go
@@ -1,6 +1,8 @@
package common

import (
"time"

"github.com/cloudevents/sdk-go/v2/event"
)

Expand Down Expand Up @@ -33,4 +35,5 @@ type EventFilter struct {
TriggeredID *string
Source *string
KeptnContext *string
Time time.Time
}
14 changes: 12 additions & 2 deletions shipyard-controller/db/mongodb_event_repo.go
Expand Up @@ -5,16 +5,18 @@ import (
"encoding/json"
"errors"
"fmt"
"time"

"github.com/jeremywohl/flatten"
apimodels "github.com/keptn/go-utils/pkg/api/models"
"github.com/keptn/go-utils/pkg/common/timeutils"
keptnv2 "github.com/keptn/go-utils/pkg/lib/v0_2_0"
"github.com/keptn/keptn/shipyard-controller/common"
"github.com/keptn/keptn/shipyard-controller/models"
log "github.com/sirupsen/logrus"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"time"
)

const maxRepoReadRetries = 5
Expand Down Expand Up @@ -157,7 +159,9 @@ func (mdbrepo *MongoDBEventsRepo) InsertEvent(project string, event apimodels.Ke
return errors.New("invalid event type")
}

event.Time = time.Now().UTC()
if event.Time.IsZero() {
event.Time = time.Now().UTC()
}

marshal, _ := json.Marshal(event)
var eventInterface interface{}
Expand Down Expand Up @@ -374,6 +378,12 @@ func getSearchOptions(filter common.EventFilter) bson.M {
if filter.KeptnContext != nil && *filter.KeptnContext != "" {
searchOptions["shkeptncontext"] = *filter.KeptnContext
}
if !filter.Time.IsZero() {
searchOptions["time"] = bson.M{
"$lte": timeutils.GetKeptnTimeStamp(filter.Time),
}
}

return searchOptions
}

Expand Down
80 changes: 78 additions & 2 deletions shipyard-controller/db/mongodb_event_repo_test.go
Expand Up @@ -2,17 +2,93 @@ package db_test

import (
"fmt"
"testing"
"time"

"github.com/google/uuid"
apimodels "github.com/keptn/go-utils/pkg/api/models"
keptnv2 "github.com/keptn/go-utils/pkg/lib/v0_2_0"
"github.com/keptn/keptn/shipyard-controller/common"
"github.com/keptn/keptn/shipyard-controller/db"
"github.com/keptn/keptn/shipyard-controller/models"
"github.com/stretchr/testify/require"
"testing"
"time"
)

func TestMongoDBEventsRepo_InsertAndRetrieveFuture(t *testing.T) {
projectName := "my-project"
stageName := "my-stage"
serviceName := "my-service"

myEvent1 := apimodels.KeptnContextExtendedCE{
Data: keptnv2.EventData{
Project: projectName,
Stage: stageName,
Service: serviceName,
},
ID: "my-event-id-1",
Shkeptncontext: "my-keptn-context-1",
Time: time.Now().UTC(),
Type: common.Stringp(keptnv2.GetTriggeredEventType("dev.delivery")),
}

myEvent2 := apimodels.KeptnContextExtendedCE{
Data: keptnv2.EventData{
Project: projectName,
Stage: stageName,
Service: serviceName,
},
ID: "my-event-id-2",
Shkeptncontext: "my-keptn-context-2",
Time: time.Now().UTC().Add(10 * time.Second),
Type: common.Stringp(keptnv2.GetTriggeredEventType("dev.delivery")),
}

repo := db.NewMongoDBEventsRepo(db.GetMongoDBConnectionInstance())
err := repo.InsertEvent(projectName, myEvent1, "")
require.Nil(t, err)
err = repo.InsertEvent(projectName, myEvent2, "")
require.Nil(t, err)

eventTraceResult, err := repo.GetEvents(projectName, common.EventFilter{
KeptnContext: common.Stringp("my-keptn-context-1"),
Type: keptnv2.GetTriggeredEventType("dev.delivery"),
Time: time.Now().UTC().Add(1 * time.Second),
})

require.Nil(t, err)
require.Len(t, eventTraceResult, 1)
for _, event := range eventTraceResult {
require.Equal(t, "my-keptn-context-1", event.Shkeptncontext)
}

eventTraceResult, err = repo.GetEvents(projectName, common.EventFilter{
KeptnContext: common.Stringp("my-keptn-context-2"),
Type: keptnv2.GetTriggeredEventType("dev.delivery"),
Time: time.Now().UTC().Add(1 * time.Second),
})

require.NotNil(t, err)
require.ErrorIs(t, err, db.ErrNoEventFound)

eventTraceResult, err = repo.GetEvents(projectName, common.EventFilter{
KeptnContext: common.Stringp("my-keptn-context-2"),
Type: keptnv2.GetTriggeredEventType("dev.delivery"),
Time: time.Now().UTC().Add(11 * time.Second),
})

require.Nil(t, err)
require.Len(t, eventTraceResult, 1)
for _, event := range eventTraceResult {
require.Equal(t, "my-keptn-context-2", event.Shkeptncontext)
}

err = repo.DeleteEvent(projectName, "my-event-id-1", "")
require.Nil(t, err)
err = repo.DeleteEvent(projectName, "my-event-id-2", "")
require.Nil(t, err)

}

func TestMongoDBEventsRepo_InsertAndRetrieve(t *testing.T) {
projectName := "my-project"
stageName := "my-stage"
Expand Down
2 changes: 2 additions & 0 deletions shipyard-controller/handler/eventhandler.go
Expand Up @@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"net/http"
"time"

"github.com/gin-gonic/gin"
apimodels "github.com/keptn/go-utils/pkg/api/models"
Expand Down Expand Up @@ -67,6 +68,7 @@ func (eh *EventHandler) GetTriggeredEvents(c *gin.Context) {
Stage: params.Stage,
Service: params.Service,
ID: params.EventID,
Time: time.Now().UTC(),
}

if params.Project != nil && *params.Project != "" {
Expand Down

0 comments on commit 37bb437

Please sign in to comment.