Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 42 additions & 45 deletions chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -1291,10 +1291,7 @@ func (c *ChaosExperimentHandler) GetDBExperiment(query bson.D) (dbChaosExperimen

func (c *ChaosExperimentHandler) GetProbesInExperimentRun(ctx context.Context, projectID string, experimentRunID string, faultName string) ([]*model.GetProbesInExperimentRunResponse, error) {
var (
probeDetails []*model.GetProbesInExperimentRunResponse
probeStatusMap = make(map[string]model.ProbeVerdict)
probeDescriptionMap = make(map[string]*string)
probeModeMap = make(map[string]model.Mode)
probeDetails []*model.GetProbesInExperimentRunResponse
)

wfRun, err := c.chaosExperimentRunOperator.GetExperimentRun(bson.D{
Expand All @@ -1310,10 +1307,16 @@ func (c *ChaosExperimentHandler) GetProbesInExperimentRun(ctx context.Context, p
if _probe.FaultName == faultName {
for _, probeName := range _probe.ProbeNames {
var executionData types.ExecutionData
probeStatusMap[probeName] = model.ProbeVerdictNa
probeModeMap[probeName] = model.ModeSot
description := "Either probe is not executed or not evaluated"
probeDescriptionMap[probeName] = &description

probeVal := model.GetProbesInExperimentRunResponse{
Probe: &model.Probe{
Name: probeName,
},
Status: &model.Status{
Description: &description,
},
}

if err = json.Unmarshal([]byte(wfRun.ExecutionData), &executionData); err != nil {
return nil, errors.New("failed to unmarshal workflow manifest")
Expand All @@ -1323,65 +1326,59 @@ func (c *ChaosExperimentHandler) GetProbesInExperimentRun(ctx context.Context, p
for _, nodeData := range executionData.Nodes {
if nodeData.Name == faultName {
if nodeData.Type == "ChaosEngine" && nodeData.ChaosExp == nil {
probeStatusMap[probeName] = model.ProbeVerdictNa
probeVal.Status.Verdict = model.ProbeVerdictNa
} else if nodeData.Type == "ChaosEngine" && nodeData.ChaosExp != nil {
probeStatusMap[probeName] = model.ProbeVerdictNa
probeVal.Status.Verdict = model.ProbeVerdictNa
if nodeData.ChaosExp.ChaosResult != nil {
probeStatusMap[probeName] = model.ProbeVerdictAwaited
probeVal.Status.Verdict = model.ProbeVerdictAwaited
probeStatuses := nodeData.ChaosExp.ChaosResult.Status.ProbeStatuses

for _, probeStatus := range probeStatuses {
if probeStatus.Name == probeName {
probeModeMap[probeName] = model.Mode(probeStatus.Mode)

description := probeStatus.Status.Description
probeDescriptionMap[probeStatus.Name] = &description

switch probeStatus.Status.Verdict {
case chaosTypes.ProbeVerdictPassed:
probeStatusMap[probeName] = model.ProbeVerdictPassed
break
case chaosTypes.ProbeVerdictFailed:
probeStatusMap[probeName] = model.ProbeVerdictFailed
break
case chaosTypes.ProbeVerdictAwaited:
probeStatusMap[probeName] = model.ProbeVerdictAwaited
break
default:
probeStatusMap[probeName] = model.ProbeVerdictNa
break
}
probeVal.Mode = model.Mode(probeStatus.Mode)

description = probeStatus.Status.Description
probeVal.Status.Description = &description
probeVal.Status.Verdict = convertProbeVerdict(probeStatus.Status.Verdict)
}
}
}
}
}
}
}
probeDetails = append(probeDetails, &probeVal)
}
}
}

for _, probeName := range _probe.ProbeNames {
singleProbe, err := dbSchemaProbe.NewChaosProbeOperator(c.mongodbOperator).GetProbeByName(ctx, probeName, projectID)
if err != nil {
return nil, err
}

probeDetails = append(probeDetails, &model.GetProbesInExperimentRunResponse{
Probe: singleProbe.GetOutputProbe(),
Mode: probeModeMap[probeName],
Status: &model.Status{
Verdict: probeStatusMap[probeName],
Description: probeDescriptionMap[probeName],
},
})
}

for i, probeData := range probeDetails {
value := probeData
singleProbe, err := dbSchemaProbe.NewChaosProbeOperator(c.mongodbOperator).GetProbeByName(ctx, value.Probe.Name, projectID)
if err != nil {
return nil, err
}

probeDetails[i].Probe = singleProbe.GetOutputProbe()
}

return probeDetails, nil
}

// convertProbeVerdict maps chaosTypes verdicts to GraphQL model verdicts
func convertProbeVerdict(verdict chaosTypes.ProbeVerdict) model.ProbeVerdict {
switch verdict {
case chaosTypes.ProbeVerdictPassed:
return model.ProbeVerdictPassed
case chaosTypes.ProbeVerdictFailed:
return model.ProbeVerdictFailed
case chaosTypes.ProbeVerdictAwaited:
return model.ProbeVerdictAwaited
default:
return model.ProbeVerdictNa
}
}

// validateDuplicateExperimentName validates if the name of experiment is duplicate
func (c *ChaosExperimentHandler) validateDuplicateExperimentName(ctx context.Context, projectID, name string) error {
filterQuery := bson.D{
Expand Down
Loading