Skip to content

Commit

Permalink
feat: Automatically generate probes when creating a chaos experiment …
Browse files Browse the repository at this point in the history
…using a YAML file. (#4366)

* feat: auto generate probes

Signed-off-by: namkyu1999 <[email protected]>

* fix: change bson format

Signed-off-by: namkyu1999 <[email protected]>

* fix: insert context as parameter

Signed-off-by: namkyu1999 <[email protected]>

* fix: fix function parameter

Signed-off-by: namkyu1999 <[email protected]>

* feat: add insert annotations func

Signed-off-by: namkyu1999 <[email protected]>

* fix: organize code

Signed-off-by: namkyu1999 <[email protected]>

* fix: update fe changes

Signed-off-by: namkyu1999 <[email protected]>

* chore: fe format

Signed-off-by: namkyu1999 <[email protected]>

* fix: move functions to utils file

Signed-off-by: namkyu1999 <[email protected]>

* fix: pass testcases

Signed-off-by: namkyu1999 <[email protected]>

---------

Signed-off-by: namkyu1999 <[email protected]>
  • Loading branch information
namkyu1999 authored Feb 7, 2024
1 parent 9e56c6c commit 3e858b2
Show file tree
Hide file tree
Showing 21 changed files with 484 additions and 146 deletions.
27 changes: 9 additions & 18 deletions chaoscenter/graphql/server/graph/probe.resolvers.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ import (
"context"
"errors"

"github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/handler"

"github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model"
"github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/authorization"
"github.com/sirupsen/logrus"
Expand Down Expand Up @@ -53,8 +51,8 @@ func (r *mutationResolver) AddProbe(ctx context.Context, request model.ProbeRequ
logrus.WithFields(logFields).Error(err)
return nil, errors.New(err)
}
p := handler.NewProbeRepository(projectID)
response, err := p.AddProbe(ctx, request)

response, err := r.probeService.AddProbe(ctx, request, projectID)
if err != nil {
logrus.WithFields(logFields).Error(err)
return nil, err
Expand All @@ -78,8 +76,7 @@ func (r *mutationResolver) UpdateProbe(ctx context.Context, request model.ProbeR
return "", err
}

p := handler.NewProbeRepository(projectID)
response, err := p.UpdateProbe(ctx, request)
response, err := r.probeService.UpdateProbe(ctx, request, projectID)
if err != nil {
logrus.WithFields(logFields).Error(err)
return "", err
Expand All @@ -103,8 +100,7 @@ func (r *mutationResolver) DeleteProbe(ctx context.Context, probeName string, pr
return false, err
}

p := handler.NewProbeRepository(projectID)
response, err := p.DeleteProbe(ctx, probeName)
response, err := r.probeService.DeleteProbe(ctx, probeName, projectID)
if err != nil {
logrus.WithFields(logFields).Error(err)
return false, err
Expand All @@ -127,8 +123,7 @@ func (r *queryResolver) ListProbes(ctx context.Context, projectID string, infras
return nil, err
}

p := handler.NewProbeRepository(projectID)
response, err := p.ListProbes(ctx, probeNames, infrastructureType, filter)
response, err := r.probeService.ListProbes(ctx, probeNames, infrastructureType, filter, projectID)
if err != nil {
logrus.WithFields(logFields).Error(err)
return nil, err
Expand All @@ -152,8 +147,7 @@ func (r *queryResolver) GetProbe(ctx context.Context, projectID string, probeNam
return nil, err
}

p := handler.NewProbeRepository(projectID)
response, err := p.GetProbe(ctx, probeName)
response, err := r.probeService.GetProbe(ctx, probeName, projectID)
if err != nil {
logrus.WithFields(logFields).Error(err)
return nil, err
Expand All @@ -177,8 +171,7 @@ func (r *queryResolver) GetProbeYaml(ctx context.Context, projectID string, requ
return "", err
}

p := handler.NewProbeRepository(projectID)
response, err := p.GetProbeYAMLData(ctx, request)
response, err := r.probeService.GetProbeYAMLData(ctx, request, projectID)
if err != nil {
logrus.WithFields(logFields).Error(err)
return "", err
Expand All @@ -202,8 +195,7 @@ func (r *queryResolver) GetProbeReference(ctx context.Context, projectID string,
return nil, err
}

p := handler.NewProbeRepository(projectID)
response, err := p.GetProbeReference(ctx, probeName)
response, err := r.probeService.GetProbeReference(ctx, probeName, projectID)
if err != nil {
logrus.WithFields(logFields).Error(err)
return nil, err
Expand Down Expand Up @@ -251,8 +243,7 @@ func (r *queryResolver) ValidateUniqueProbe(ctx context.Context, projectID strin
return false, err
}

p := handler.NewProbeRepository(projectID)
response, err := p.ValidateUniqueProbe(ctx, probeName)
response, err := r.probeService.ValidateUniqueProbe(ctx, probeName, projectID)
if err != nil {
logrus.WithFields(logFields).Error(err)
return false, err
Expand Down
6 changes: 5 additions & 1 deletion chaoscenter/graphql/server/graph/resolver.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
envHandler "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/environment/handler"
gitops3 "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/gitops"
"github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/image_registry"
probe "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/probe/handler"
)

// This file will not be regenerated automatically.
Expand All @@ -40,6 +41,7 @@ type Resolver struct {
chaosExperimentHandler handler.ChaosExperimentHandler
chaosExperimentRunHandler runHandler.ChaosExperimentRunHandler
environmentService envHandler.EnvironmentHandler
probeService probe.Service
}

func NewConfig(mongodbOperator mongodb.MongoOperator) generated.Config {
Expand All @@ -53,9 +55,10 @@ func NewConfig(mongodbOperator mongodb.MongoOperator) generated.Config {
EnvironmentOperator := environments.NewEnvironmentOperator(mongodbOperator)

//service
probeService := probe.NewProbeService()
chaosHubService := chaoshub.NewService(chaosHubOperator)
chaosInfrastructureService := chaos_infrastructure.NewChaosInfrastructureService(chaosInfraOperator, EnvironmentOperator)
chaosExperimentService := chaos_experiment2.NewChaosExperimentService(chaosExperimentOperator, chaosInfraOperator, chaosExperimentRunOperator)
chaosExperimentService := chaos_experiment2.NewChaosExperimentService(chaosExperimentOperator, chaosInfraOperator, chaosExperimentRunOperator, probeService)
chaosExperimentRunService := chaos_experiment_run2.NewChaosExperimentRunService(chaosExperimentOperator, chaosInfraOperator, chaosExperimentRunOperator)
gitOpsService := gitops3.NewGitOpsService(gitopsOperator, chaosExperimentService, *chaosExperimentOperator)
imageRegistryService := image_registry.NewImageRegistryService(imageRegistryOperator)
Expand All @@ -76,6 +79,7 @@ func NewConfig(mongodbOperator mongodb.MongoOperator) generated.Config {
gitopsService: gitOpsService,
chaosExperimentHandler: *chaosExperimentHandler,
chaosExperimentRunHandler: *choasExperimentRunHandler,
probeService: probeService,
}}

config.Directives.Authorized = func(ctx context.Context, obj interface{}, next graphql.Resolver) (interface{}, error) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,12 +102,15 @@ func (c *ChaosExperimentHandler) SaveChaosExperiment(ctx context.Context, reques
Tags: request.Tags,
}

newRequest, wfType, err := c.chaosExperimentService.ProcessExperiment(&chaosWfReq, projectID, revID)
newRequest, wfType, err := c.chaosExperimentService.ProcessExperiment(ctx, &chaosWfReq, projectID, revID)
if err != nil {
return "", err
}
tkn := ctx.Value(authorization.AuthKey).(string)
username, err := authorization.GetUsername(tkn)
if err != nil {
return "", err
}
// Updating the existing experiment
if wfDetails.ExperimentID == request.ID {
logrus.WithFields(logFields).Info("request received to update k8s chaos experiment")
Expand Down Expand Up @@ -152,7 +155,7 @@ func (c *ChaosExperimentHandler) CreateChaosExperiment(ctx context.Context, requ
return nil, err
}

newRequest, wfType, err := c.chaosExperimentService.ProcessExperiment(request, projectID, revID)
newRequest, wfType, err := c.chaosExperimentService.ProcessExperiment(ctx, request, projectID, revID)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -240,7 +243,7 @@ func (c *ChaosExperimentHandler) UpdateChaosExperiment(ctx context.Context, requ
return nil, err
}

newRequest, wfType, err := c.chaosExperimentService.ProcessExperiment(request, projectID, revID)
newRequest, wfType, err := c.chaosExperimentService.ProcessExperiment(ctx, request, projectID, revID)
if err != nil {
return nil, err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ func TestChaosExperimentHandler_SaveChaosExperiment(t *testing.T) {
singleResult := mongo.NewSingleResultFromDocument(findResult[0], nil, nil)
mockServices.MongodbOperator.On("Get", mock.Anything, mongodb.ChaosExperimentCollection, mock.Anything).Return(singleResult, nil).Once()

mockServices.ChaosExperimentService.On("ProcessExperiment", request2, mock.Anything, mock.Anything).Return(request2, &experimentType, nil).Once()
mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, request2, mock.Anything, mock.Anything).Return(request2, &experimentType, nil).Once()

mockServices.ChaosExperimentService.On("ProcessExperimentUpdate", request2, mock.Anything, mock.Anything, mock.Anything, false, mock.Anything, mock.Anything).Return(nil).Once()
},
Expand Down Expand Up @@ -165,7 +165,7 @@ func TestChaosExperimentHandler_SaveChaosExperiment(t *testing.T) {
singleResult := mongo.NewSingleResultFromDocument(findResult[0], nil, nil)
mockServices.MongodbOperator.On("Get", mock.Anything, mongodb.ChaosExperimentCollection, mock.Anything).Return(singleResult, nil).Once()

mockServices.ChaosExperimentService.On("ProcessExperiment", request2, mock.Anything, mock.Anything).Return(request2, &experimentType, errors.New("Incorrect request format")).Once()
mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, request2, mock.Anything, mock.Anything).Return(request2, &experimentType, errors.New("Incorrect request format")).Once()
},
wantErr: true,
},
Expand All @@ -192,7 +192,7 @@ func TestChaosExperimentHandler_SaveChaosExperiment(t *testing.T) {
singleResult := mongo.NewSingleResultFromDocument(findResult[0], nil, nil)
mockServices.MongodbOperator.On("Get", mock.Anything, mongodb.ChaosExperimentCollection, mock.Anything).Return(singleResult, nil).Once()

mockServices.ChaosExperimentService.On("ProcessExperiment", request2, mock.Anything, mock.Anything).Return(request2, &experimentType, nil).Once()
mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, request2, mock.Anything, mock.Anything).Return(request2, &experimentType, nil).Once()

mockServices.ChaosExperimentService.On("ProcessExperimentUpdate", request2, mock.Anything, mock.Anything, mock.Anything, false, mock.Anything, mock.Anything).Return(nil).Once()
},
Expand Down Expand Up @@ -372,7 +372,7 @@ func TestChaosExperimentHandler_UpdateChaosExperiment(t *testing.T) {
given: func(request *model.ChaosExperimentRequest, mockServices *MockServices) {
ctx = context.WithValue(ctx, authorization.AuthKey, username)
mockServices.MongodbOperator.On("CountDocuments", ctx, mongodb.ChaosExperimentCollection, mock.Anything, mock.Anything).Return(int64(0), nil).Once()
mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, mock.Anything, mock.Anything).Return(request, &experimentType, nil).Once()
mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(request, &experimentType, nil).Once()
mockServices.ChaosExperimentService.On("ProcessExperimentUpdate", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil).Once()
},
wantErr: false,
Expand All @@ -390,7 +390,7 @@ func TestChaosExperimentHandler_UpdateChaosExperiment(t *testing.T) {
given: func(request *model.ChaosExperimentRequest, mockServices *MockServices) {
ctx = context.WithValue(ctx, authorization.AuthKey, username)
mockServices.MongodbOperator.On("CountDocuments", ctx, mongodb.ChaosExperimentCollection, mock.Anything, mock.Anything).Return(int64(0), nil).Once()
mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, mock.Anything, mock.Anything).Return(request, &experimentType, errors.New("Incorrect request format")).Once()
mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(request, &experimentType, errors.New("Incorrect request format")).Once()
},
wantErr: true,
},
Expand All @@ -409,7 +409,7 @@ func TestChaosExperimentHandler_UpdateChaosExperiment(t *testing.T) {

mockServices.MongodbOperator.On("CountDocuments", ctx, mongodb.ChaosExperimentCollection, mock.Anything, mock.Anything).Return(int64(0), nil).Once()

mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, mock.Anything, mock.Anything).Return(request, &experimentType, nil).Once()
mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(request, &experimentType, nil).Once()

mockServices.ChaosExperimentService.On("ProcessExperimentUpdate", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("experiment update failed")).Once()
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
annotations:
probeRef: '[{"name":"http-probe"}]'
generateName: nginx-chaos
name: nginx-chaos
namespace: default
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosSchedule
metadata:
annotations:
probeRef: '[{"name":"http-probe"}]'
name: schedule-nginx
generateName: schedule-nginx
spec:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ spec:
kind: ChaosEngine
metadata:
annotations:
probeRef: '[{"name":"http-probe"}]'
namespace: "{{workflow.parameters.adminModeNamespace}}"
labels:
workflow_run_id: "{{workflow.uid}}"
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ spec:
kind: ChaosEngine
metadata:
annotations:
probeRef: '[{"name":"http-probe"}]'
namespace: "{{workflow.parameters.adminModeNamespace}}"
labels:
workflow_run_id: "{{workflow.uid}}"
Expand Down
Loading

0 comments on commit 3e858b2

Please sign in to comment.