diff --git a/bin/experiment/experiment.go b/bin/experiment/experiment.go index e45f32615..64b351671 100755 --- a/bin/experiment/experiment.go +++ b/bin/experiment/experiment.go @@ -67,6 +67,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/log" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel" ) func init() { @@ -93,9 +94,9 @@ func main() { ctx = telemetry.GetTraceParentContext() } - clients := cli.ClientSets{Context: ctx} + clients := cli.ClientSets{} - span := telemetry.StartTracing(clients, "ExecuteExperiment") + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "ExecuteExperiment") defer span.End() // parse the experiment name @@ -112,101 +113,101 @@ func main() { // invoke the corresponding experiment based on the (-name) flag switch *experimentName { case "container-kill": - containerKill.ContainerKill(clients) + containerKill.ContainerKill(ctx, clients) case "disk-fill": - diskFill.DiskFill(clients) + diskFill.DiskFill(ctx, clients) case "kafka-broker-pod-failure": - kafkaBrokerPodFailure.KafkaBrokerPodFailure(clients) + kafkaBrokerPodFailure.KafkaBrokerPodFailure(ctx, clients) case "kubelet-service-kill": - kubeletServiceKill.KubeletServiceKill(clients) + kubeletServiceKill.KubeletServiceKill(ctx, clients) case "docker-service-kill": - dockerServiceKill.DockerServiceKill(clients) + dockerServiceKill.DockerServiceKill(ctx, clients) case "node-cpu-hog": - nodeCPUHog.NodeCPUHog(clients) + nodeCPUHog.NodeCPUHog(ctx, clients) case "node-drain": - nodeDrain.NodeDrain(clients) + nodeDrain.NodeDrain(ctx, clients) case "node-io-stress": - nodeIOStress.NodeIOStress(clients) + nodeIOStress.NodeIOStress(ctx, clients) case "node-memory-hog": - nodeMemoryHog.NodeMemoryHog(clients) + nodeMemoryHog.NodeMemoryHog(ctx, clients) case "node-taint": - nodeTaint.NodeTaint(clients) + nodeTaint.NodeTaint(ctx, clients) case "pod-autoscaler": - podAutoscaler.PodAutoscaler(clients) + podAutoscaler.PodAutoscaler(ctx, clients) case "pod-cpu-hog-exec": - podCPUHogExec.PodCPUHogExec(clients) + podCPUHogExec.PodCPUHogExec(ctx, clients) case "pod-delete": - podDelete.PodDelete(clients) + podDelete.PodDelete(ctx, clients) case "pod-io-stress": - podIOStress.PodIOStress(clients) + podIOStress.PodIOStress(ctx, clients) case "pod-memory-hog-exec": - podMemoryHogExec.PodMemoryHogExec(clients) + podMemoryHogExec.PodMemoryHogExec(ctx, clients) case "pod-network-corruption": - podNetworkCorruption.PodNetworkCorruption(clients) + podNetworkCorruption.PodNetworkCorruption(ctx, clients) case "pod-network-duplication": - podNetworkDuplication.PodNetworkDuplication(clients) + podNetworkDuplication.PodNetworkDuplication(ctx, clients) case "pod-network-latency": - podNetworkLatency.PodNetworkLatency(clients) + podNetworkLatency.PodNetworkLatency(ctx, clients) case "pod-network-loss": - podNetworkLoss.PodNetworkLoss(clients) + podNetworkLoss.PodNetworkLoss(ctx, clients) case "pod-network-partition": - podNetworkPartition.PodNetworkPartition(clients) + podNetworkPartition.PodNetworkPartition(ctx, clients) case "pod-memory-hog": - podMemoryHog.PodMemoryHog(clients) + podMemoryHog.PodMemoryHog(ctx, clients) case "pod-cpu-hog": - podCPUHog.PodCPUHog(clients) + podCPUHog.PodCPUHog(ctx, clients) case "cassandra-pod-delete": - cassandraPodDelete.CasssandraPodDelete(clients) + cassandraPodDelete.CasssandraPodDelete(ctx, clients) case "aws-ssm-chaos-by-id": - awsSSMChaosByID.AWSSSMChaosByID(clients) + awsSSMChaosByID.AWSSSMChaosByID(ctx, clients) case "aws-ssm-chaos-by-tag": - awsSSMChaosByTag.AWSSSMChaosByTag(clients) + awsSSMChaosByTag.AWSSSMChaosByTag(ctx, clients) case "ec2-terminate-by-id": - ec2TerminateByID.EC2TerminateByID(clients) + ec2TerminateByID.EC2TerminateByID(ctx, clients) case "ec2-terminate-by-tag": - ec2TerminateByTag.EC2TerminateByTag(clients) + ec2TerminateByTag.EC2TerminateByTag(ctx, clients) case "ebs-loss-by-id": - ebsLossByID.EBSLossByID(clients) + ebsLossByID.EBSLossByID(ctx, clients) case "ebs-loss-by-tag": - ebsLossByTag.EBSLossByTag(clients) + ebsLossByTag.EBSLossByTag(ctx, clients) case "node-restart": - nodeRestart.NodeRestart(clients) + nodeRestart.NodeRestart(ctx, clients) case "pod-dns-error": - podDNSError.PodDNSError(clients) + podDNSError.PodDNSError(ctx, clients) case "pod-dns-spoof": - podDNSSpoof.PodDNSSpoof(clients) + podDNSSpoof.PodDNSSpoof(ctx, clients) case "pod-http-latency": - podHttpLatency.PodHttpLatency(clients) + podHttpLatency.PodHttpLatency(ctx, clients) case "pod-http-status-code": - podHttpStatusCode.PodHttpStatusCode(clients) + podHttpStatusCode.PodHttpStatusCode(ctx, clients) case "pod-http-modify-header": - podHttpModifyHeader.PodHttpModifyHeader(clients) + podHttpModifyHeader.PodHttpModifyHeader(ctx, clients) case "pod-http-modify-body": - podHttpModifyBody.PodHttpModifyBody(clients) + podHttpModifyBody.PodHttpModifyBody(ctx, clients) case "pod-http-reset-peer": - podHttpResetPeer.PodHttpResetPeer(clients) + podHttpResetPeer.PodHttpResetPeer(ctx, clients) case "vm-poweroff": - vmpoweroff.VMPoweroff(clients) + vmpoweroff.VMPoweroff(ctx, clients) case "azure-instance-stop": - azureInstanceStop.AzureInstanceStop(clients) + azureInstanceStop.AzureInstanceStop(ctx, clients) case "azure-disk-loss": - azureDiskLoss.AzureDiskLoss(clients) + azureDiskLoss.AzureDiskLoss(ctx, clients) case "gcp-vm-disk-loss": - gcpVMDiskLoss.VMDiskLoss(clients) + gcpVMDiskLoss.VMDiskLoss(ctx, clients) case "pod-fio-stress": - podFioStress.PodFioStress(clients) + podFioStress.PodFioStress(ctx, clients) case "gcp-vm-instance-stop": - gcpVMInstanceStop.VMInstanceStop(clients) + gcpVMInstanceStop.VMInstanceStop(ctx, clients) case "redfish-node-restart": - redfishNodeRestart.NodeRestart(clients) + redfishNodeRestart.NodeRestart(ctx, clients) case "gcp-vm-instance-stop-by-label": - gcpVMInstanceStopByLabel.GCPVMInstanceStopByLabel(clients) + gcpVMInstanceStopByLabel.GCPVMInstanceStopByLabel(ctx, clients) case "gcp-vm-disk-loss-by-label": - gcpVMDiskLossByLabel.GCPVMDiskLossByLabel(clients) + gcpVMDiskLossByLabel.GCPVMDiskLossByLabel(ctx, clients) case "spring-boot-cpu-stress", "spring-boot-memory-stress", "spring-boot-exceptions", "spring-boot-app-kill", "spring-boot-faults", "spring-boot-latency": - springBootFaults.Experiment(clients, *experimentName) + springBootFaults.Experiment(ctx, clients, *experimentName) case "k6-loadgen": - k6Loadgen.Experiment(clients) + k6Loadgen.Experiment(ctx, clients) default: log.Errorf("Unsupported -name %v, please provide the correct value of -name args", *experimentName) return diff --git a/bin/helper/helper.go b/bin/helper/helper.go index a3fa7d1e1..eac6971f0 100644 --- a/bin/helper/helper.go +++ b/bin/helper/helper.go @@ -25,6 +25,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/log" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel" ) func init() { @@ -50,9 +51,9 @@ func main() { ctx = telemetry.GetTraceParentContext() } - clients := cli.ClientSets{Context: ctx} + clients := cli.ClientSets{} - span := telemetry.StartTracing(clients, "ExecuteExperimentHelper") + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "ExecuteExperimentHelper") defer span.End() // parse the helper name diff --git a/chaoslib/litmus/aws-ssm-chaos/lib/ssm-chaos.go b/chaoslib/litmus/aws-ssm-chaos/lib/ssm-chaos.go index 9205e7f53..6c90e0ae0 100644 --- a/chaoslib/litmus/aws-ssm-chaos/lib/ssm-chaos.go +++ b/chaoslib/litmus/aws-ssm-chaos/lib/ssm-chaos.go @@ -1,12 +1,13 @@ package lib import ( + "context" "os" "strings" "time" experimentTypes "github.com/litmuschaos/litmus-go/pkg/aws-ssm/aws-ssm-chaos/types" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/cloud/aws/ssm" "github.com/litmuschaos/litmus-go/pkg/events" "github.com/litmuschaos/litmus-go/pkg/log" @@ -17,7 +18,7 @@ import ( ) // InjectChaosInSerialMode will inject the aws ssm chaos in serial mode that is one after other -func InjectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails, inject chan os.Signal) error { +func InjectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails, inject chan os.Signal) error { select { case <-inject: @@ -60,7 +61,7 @@ func InjectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 && i == 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } @@ -85,7 +86,7 @@ func InjectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // InjectChaosInParallelMode will inject the aws ssm chaos in parallel mode that is all at once -func InjectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails, inject chan os.Signal) error { +func InjectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails, inject chan os.Signal) error { select { case <-inject: @@ -125,7 +126,7 @@ func InjectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } diff --git a/chaoslib/litmus/aws-ssm-chaos/lib/ssm/aws-ssm-chaos-by-id.go b/chaoslib/litmus/aws-ssm-chaos/lib/ssm/aws-ssm-chaos-by-id.go index 9ad3c6d0a..a0b708208 100644 --- a/chaoslib/litmus/aws-ssm-chaos/lib/ssm/aws-ssm-chaos-by-id.go +++ b/chaoslib/litmus/aws-ssm-chaos/lib/ssm/aws-ssm-chaos-by-id.go @@ -1,6 +1,7 @@ package ssm import ( + "context" "fmt" "os" "os/signal" @@ -17,6 +18,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" ) var ( @@ -25,8 +27,8 @@ var ( ) // PrepareAWSSSMChaosByID contains the prepration and injection steps for the experiment -func PrepareAWSSSMChaosByID(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectAWSSSMChaosByIDChaos") +func PrepareAWSSSMChaosByID(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectAWSChaosByIDChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -63,11 +65,11 @@ func PrepareAWSSSMChaosByID(experimentsDetails *experimentTypes.ExperimentDetail switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = lib.InjectChaosInSerialMode(experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails, inject); err != nil { + if err = lib.InjectChaosInSerialMode(ctx, experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails, inject); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = lib.InjectChaosInParallelMode(experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails, inject); err != nil { + if err = lib.InjectChaosInParallelMode(ctx, experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails, inject); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: diff --git a/chaoslib/litmus/aws-ssm-chaos/lib/ssm/aws-ssm-chaos-by-tag.go b/chaoslib/litmus/aws-ssm-chaos/lib/ssm/aws-ssm-chaos-by-tag.go index f323ac08c..7fdade038 100644 --- a/chaoslib/litmus/aws-ssm-chaos/lib/ssm/aws-ssm-chaos-by-tag.go +++ b/chaoslib/litmus/aws-ssm-chaos/lib/ssm/aws-ssm-chaos-by-tag.go @@ -1,6 +1,7 @@ package ssm import ( + "context" "fmt" "os" "os/signal" @@ -17,11 +18,12 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" ) // PrepareAWSSSMChaosByTag contains the prepration and injection steps for the experiment -func PrepareAWSSSMChaosByTag(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectAWSSSMChaosByTagChaos") +func PrepareAWSSSMChaosByTag(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectAWSSSMChaosByTagChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -58,11 +60,11 @@ func PrepareAWSSSMChaosByTag(experimentsDetails *experimentTypes.ExperimentDetai switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = lib.InjectChaosInSerialMode(experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails, inject); err != nil { + if err = lib.InjectChaosInSerialMode(ctx, experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails, inject); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = lib.InjectChaosInParallelMode(experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails, inject); err != nil { + if err = lib.InjectChaosInParallelMode(ctx, experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails, inject); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: diff --git a/chaoslib/litmus/azure-disk-loss/lib/azure-disk-loss.go b/chaoslib/litmus/azure-disk-loss/lib/azure-disk-loss.go index 6fe2686db..342149990 100644 --- a/chaoslib/litmus/azure-disk-loss/lib/azure-disk-loss.go +++ b/chaoslib/litmus/azure-disk-loss/lib/azure-disk-loss.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -22,6 +23,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/litmuschaos/litmus-go/pkg/utils/retry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" ) var ( @@ -30,8 +32,8 @@ var ( ) // PrepareChaos contains the prepration and injection steps for the experiment -func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectAzureDiskLossChaos") +func PrepareChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectAzureDiskLossChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -82,11 +84,11 @@ func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, instanceNamesWithDiskNames, attachedDisksWithInstance, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, instanceNamesWithDiskNames, attachedDisksWithInstance, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, instanceNamesWithDiskNames, attachedDisksWithInstance, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, instanceNamesWithDiskNames, attachedDisksWithInstance, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -103,7 +105,7 @@ func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients } // injectChaosInParallelMode will inject the Azure disk loss chaos in parallel mode that is all at once -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesWithDiskNames map[string][]string, attachedDisksWithInstance map[string]*[]compute.DataDisk, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesWithDiskNames map[string][]string, attachedDisksWithInstance map[string]*[]compute.DataDisk, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { //ChaosStartTimeStamp contains the start timestamp, when the chaos injection begin ChaosStartTimeStamp := time.Now() @@ -142,7 +144,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet } // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } @@ -181,7 +183,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet } // injectChaosInSerialMode will inject the Azure disk loss chaos in serial mode that is one after other -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesWithDiskNames map[string][]string, attachedDisksWithInstance map[string]*[]compute.DataDisk, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesWithDiskNames map[string][]string, attachedDisksWithInstance map[string]*[]compute.DataDisk, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { //ChaosStartTimeStamp contains the start timestamp, when the chaos injection begin ChaosStartTimeStamp := time.Now() @@ -217,7 +219,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai // run the probes during chaos // the OnChaos probes execution will start in the first iteration and keep running for the entire chaos duration if len(resultDetails.ProbeDetails) != 0 && i == 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } diff --git a/chaoslib/litmus/azure-instance-stop/lib/azure-instance-stop.go b/chaoslib/litmus/azure-instance-stop/lib/azure-instance-stop.go index 7bdfc9ecc..b9c70bc23 100644 --- a/chaoslib/litmus/azure-instance-stop/lib/azure-instance-stop.go +++ b/chaoslib/litmus/azure-instance-stop/lib/azure-instance-stop.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -20,6 +21,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" ) var ( @@ -28,8 +30,8 @@ var ( ) // PrepareAzureStop will initialize instanceNameList and start chaos injection based on sequence method selected -func PrepareAzureStop(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectAzureInstanceStopChaos") +func PrepareAzureStop(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectAzureInstanceStopChaos") defer span.End() // inject channel is used to transmit signal notifications @@ -58,11 +60,11 @@ func PrepareAzureStop(experimentsDetails *experimentTypes.ExperimentDetails, cli switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, instanceNameList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, instanceNameList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, instanceNameList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, instanceNameList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -78,7 +80,7 @@ func PrepareAzureStop(experimentsDetails *experimentTypes.ExperimentDetails, cli } // injectChaosInSerialMode will inject the Azure instance termination in serial mode that is one after the other -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, instanceNameList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, instanceNameList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: // stopping the chaos execution, if abort signal received @@ -122,7 +124,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai // Run the probes during chaos // the OnChaos probes execution will start in the first iteration and keep running for the entire chaos duration if len(resultDetails.ProbeDetails) != 0 && i == 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } @@ -156,7 +158,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode will inject the Azure instance termination in parallel mode that is all at once -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, instanceNameList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, instanceNameList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: // Stopping the chaos execution, if abort signal received @@ -201,7 +203,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet // Run probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } diff --git a/chaoslib/litmus/container-kill/helper/container-kill.go b/chaoslib/litmus/container-kill/helper/container-kill.go index 0a18bfa41..6ea335467 100644 --- a/chaoslib/litmus/container-kill/helper/container-kill.go +++ b/chaoslib/litmus/container-kill/helper/container-kill.go @@ -4,13 +4,14 @@ import ( "bytes" "context" "fmt" + "os/exec" + "strconv" + "time" + "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/result" "github.com/palantir/stacktrace" "github.com/sirupsen/logrus" - "os/exec" - "strconv" - "time" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" diff --git a/chaoslib/litmus/container-kill/lib/container-kill.go b/chaoslib/litmus/container-kill/lib/container-kill.go index 95ee47c83..52c3151a6 100644 --- a/chaoslib/litmus/container-kill/lib/container-kill.go +++ b/chaoslib/litmus/container-kill/lib/container-kill.go @@ -10,6 +10,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/container-kill/types" @@ -25,8 +26,8 @@ import ( ) // PrepareContainerKill contains the preparation steps before chaos injection -func PrepareContainerKill(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectContainerKillChaos") +func PrepareContainerKill(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectContainerKillChaos") defer span.End() var err error @@ -35,7 +36,7 @@ func PrepareContainerKill(experimentsDetails *experimentTypes.ExperimentDetails, if experimentsDetails.TargetPods == "" && chaosDetails.AppDetail == nil { return cerrors.Error{ErrorCode: cerrors.ErrorTypeTargetSelection, Reason: "provide one of the appLabel or TARGET_PODS"} } - //Setup the tunables if provided in range + //Set up the tunables if provided in range SetChaosTunables(experimentsDetails) log.InfoWithValues("[Info]: The tunables are:", logrus.Fields{ @@ -71,11 +72,11 @@ func PrepareContainerKill(experimentsDetails *experimentTypes.ExperimentDetails, experimentsDetails.IsTargetContainerProvided = experimentsDetails.TargetContainer != "" switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -91,10 +92,10 @@ func PrepareContainerKill(experimentsDetails *experimentTypes.ExperimentDetails, } // injectChaosInSerialMode kill the container of all target application serially (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -109,7 +110,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai runID := stringutils.GetRunID() - if err := createHelperPod(experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer), pod.Spec.NodeName, runID); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer), pod.Spec.NodeName, runID); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -141,10 +142,10 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode kill the container of all target application in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -158,7 +159,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet targetsPerNode = append(targetsPerNode, fmt.Sprintf("%s:%s:%s", k.Name, k.Namespace, k.TargetContainer)) } - if err := createHelperPod(experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } } @@ -191,8 +192,8 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets, nodeName, runID string) error { - span := telemetry.StartTracing(clients, "CreateContainerKillHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets, nodeName, runID string) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateContainerKillHelperPod") defer span.End() privilegedEnable := false @@ -237,7 +238,7 @@ func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clie "./helpers -name container-kill", }, Resources: chaosDetails.Resources, - Env: getPodEnv(clients.Context, experimentsDetails, targets), + Env: getPodEnv(ctx, experimentsDetails, targets), VolumeMounts: []apiv1.VolumeMount{ { Name: "cri-socket", diff --git a/chaoslib/litmus/disk-fill/lib/disk-fill.go b/chaoslib/litmus/disk-fill/lib/disk-fill.go index a712ca3e0..11c9aff30 100644 --- a/chaoslib/litmus/disk-fill/lib/disk-fill.go +++ b/chaoslib/litmus/disk-fill/lib/disk-fill.go @@ -10,6 +10,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/disk-fill/types" @@ -26,8 +27,8 @@ import ( ) // PrepareDiskFill contains the preparation steps before chaos injection -func PrepareDiskFill(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectDiskFillChaos") +func PrepareDiskFill(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectDiskFillChaos") defer span.End() var err error @@ -76,11 +77,11 @@ func PrepareDiskFill(experimentsDetails *experimentTypes.ExperimentDetails, clie experimentsDetails.IsTargetContainerProvided = experimentsDetails.TargetContainer != "" switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetPodList, clients, chaosDetails, execCommandDetails, resultDetails, eventsDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetPodList, clients, chaosDetails, execCommandDetails, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetPodList, clients, chaosDetails, execCommandDetails, resultDetails, eventsDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetPodList, clients, chaosDetails, execCommandDetails, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -96,11 +97,11 @@ func PrepareDiskFill(experimentsDetails *experimentTypes.ExperimentDetails, clie } // injectChaosInSerialMode fill the ephemeral storage of all target application serially (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, execCommandDetails exec.PodDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, execCommandDetails exec.PodDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -114,7 +115,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } runID := stringutils.GetRunID() - if err := createHelperPod(experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer), pod.Spec.NodeName, runID); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer), pod.Spec.NodeName, runID); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -148,12 +149,12 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode fill the ephemeral storage of of all target application in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, execCommandDetails exec.PodDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, execCommandDetails exec.PodDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { var err error // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -167,7 +168,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet targetsPerNode = append(targetsPerNode, fmt.Sprintf("%s:%s:%s", k.Name, k.Namespace, k.TargetContainer)) } - if err := createHelperPod(experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } } @@ -200,8 +201,8 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets, appNodeName, runID string) error { - span := telemetry.StartTracing(clients, "CreateDiskFillHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets, appNodeName, runID string) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateDiskFillHelperPod") defer span.End() privilegedEnable := true @@ -245,7 +246,7 @@ func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clie "./helpers -name disk-fill", }, Resources: chaosDetails.Resources, - Env: getPodEnv(clients.Context, experimentsDetails, targets), + Env: getPodEnv(ctx, experimentsDetails, targets), VolumeMounts: []apiv1.VolumeMount{ { Name: "socket-path", diff --git a/chaoslib/litmus/docker-service-kill/lib/docker-service-kill.go b/chaoslib/litmus/docker-service-kill/lib/docker-service-kill.go index 49df6a15a..74b04c512 100644 --- a/chaoslib/litmus/docker-service-kill/lib/docker-service-kill.go +++ b/chaoslib/litmus/docker-service-kill/lib/docker-service-kill.go @@ -8,6 +8,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -24,8 +25,8 @@ import ( ) // PrepareDockerServiceKill contains prepration steps before chaos injection -func PrepareDockerServiceKill(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectDockerServiceKillChaos") +func PrepareDockerServiceKill(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectDockerServiceKillChaos") defer span.End() var err error @@ -62,7 +63,7 @@ func PrepareDockerServiceKill(experimentsDetails *experimentTypes.ExperimentDeta } // Creating the helper pod to perform docker-service-kill - if err = createHelperPod(experimentsDetails, clients, chaosDetails, experimentsDetails.TargetNode); err != nil { + if err = createHelperPod(ctx, experimentsDetails, clients, chaosDetails, experimentsDetails.TargetNode); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -77,7 +78,7 @@ func PrepareDockerServiceKill(experimentsDetails *experimentTypes.ExperimentDeta // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { common.DeleteAllHelperPodBasedOnJobCleanupPolicy(appLabel, chaosDetails, clients) return err } @@ -113,8 +114,8 @@ func PrepareDockerServiceKill(experimentsDetails *experimentTypes.ExperimentDeta } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, appNodeName string) error { - span := telemetry.StartTracing(clients, "CreateDockerServiceKillHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, appNodeName string) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateDockerServiceKillHelperPod") defer span.End() privileged := true diff --git a/chaoslib/litmus/ebs-loss/lib/ebs-loss-by-id/lib/ebs-loss-by-id.go b/chaoslib/litmus/ebs-loss/lib/ebs-loss-by-id/lib/ebs-loss-by-id.go index 6b3f12fa6..a3b48ca1e 100644 --- a/chaoslib/litmus/ebs-loss/lib/ebs-loss-by-id/lib/ebs-loss-by-id.go +++ b/chaoslib/litmus/ebs-loss/lib/ebs-loss-by-id/lib/ebs-loss-by-id.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -16,6 +17,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" ) var ( @@ -24,8 +26,8 @@ var ( ) // PrepareEBSLossByID contains the prepration and injection steps for the experiment -func PrepareEBSLossByID(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectEBSLossByIDChaos") +func PrepareEBSLossByID(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectEBSLossByIDChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -60,11 +62,11 @@ func PrepareEBSLossByID(experimentsDetails *experimentTypes.ExperimentDetails, c switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = ebsloss.InjectChaosInSerialMode(experimentsDetails, volumeIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = ebsloss.InjectChaosInSerialMode(ctx, experimentsDetails, volumeIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = ebsloss.InjectChaosInParallelMode(experimentsDetails, volumeIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = ebsloss.InjectChaosInParallelMode(ctx, experimentsDetails, volumeIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: diff --git a/chaoslib/litmus/ebs-loss/lib/ebs-loss-by-tag/lib/ebs-loss-by-tag.go b/chaoslib/litmus/ebs-loss/lib/ebs-loss-by-tag/lib/ebs-loss-by-tag.go index 4eb9addf6..ea8342909 100644 --- a/chaoslib/litmus/ebs-loss/lib/ebs-loss-by-tag/lib/ebs-loss-by-tag.go +++ b/chaoslib/litmus/ebs-loss/lib/ebs-loss-by-tag/lib/ebs-loss-by-tag.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -16,6 +17,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" ) var ( @@ -24,8 +26,8 @@ var ( ) // PrepareEBSLossByTag contains the prepration and injection steps for the experiment -func PrepareEBSLossByTag(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectEBSLossByTagChaos") +func PrepareEBSLossByTag(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectEBSLossByTagChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -58,11 +60,11 @@ func PrepareEBSLossByTag(experimentsDetails *experimentTypes.ExperimentDetails, switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = ebsloss.InjectChaosInSerialMode(experimentsDetails, targetEBSVolumeIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = ebsloss.InjectChaosInSerialMode(ctx, experimentsDetails, targetEBSVolumeIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = ebsloss.InjectChaosInParallelMode(experimentsDetails, targetEBSVolumeIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = ebsloss.InjectChaosInParallelMode(ctx, experimentsDetails, targetEBSVolumeIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: diff --git a/chaoslib/litmus/ebs-loss/lib/ebs-loss.go b/chaoslib/litmus/ebs-loss/lib/ebs-loss.go index 8fd39c06b..3d21a6b72 100644 --- a/chaoslib/litmus/ebs-loss/lib/ebs-loss.go +++ b/chaoslib/litmus/ebs-loss/lib/ebs-loss.go @@ -1,12 +1,13 @@ package lib import ( + "context" "fmt" "os" "time" "github.com/litmuschaos/litmus-go/pkg/cerrors" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" ebs "github.com/litmuschaos/litmus-go/pkg/cloud/aws/ebs" "github.com/litmuschaos/litmus-go/pkg/events" experimentTypes "github.com/litmuschaos/litmus-go/pkg/kube-aws/ebs-loss/types" @@ -18,7 +19,7 @@ import ( ) // InjectChaosInSerialMode will inject the ebs loss chaos in serial mode which means one after other -func InjectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetEBSVolumeIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func InjectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetEBSVolumeIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { //ChaosStartTimeStamp contains the start timestamp, when the chaos injection begin ChaosStartTimeStamp := time.Now() @@ -56,7 +57,7 @@ func InjectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai // run the probes during chaos // the OnChaos probes execution will start in the first iteration and keep running for the entire chaos duration if len(resultDetails.ProbeDetails) != 0 && i == 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } @@ -95,7 +96,7 @@ func InjectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // InjectChaosInParallelMode will inject the chaos in parallel mode that means all at once -func InjectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetEBSVolumeIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func InjectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetEBSVolumeIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { var ec2InstanceIDList, deviceList []string @@ -152,7 +153,7 @@ func InjectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } diff --git a/chaoslib/litmus/ec2-terminate-by-id/lib/ec2-terminate-by-id.go b/chaoslib/litmus/ec2-terminate-by-id/lib/ec2-terminate-by-id.go index c9978907a..8f30a7c24 100644 --- a/chaoslib/litmus/ec2-terminate-by-id/lib/ec2-terminate-by-id.go +++ b/chaoslib/litmus/ec2-terminate-by-id/lib/ec2-terminate-by-id.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -19,6 +20,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" ) var ( @@ -27,8 +29,8 @@ var ( ) // PrepareEC2TerminateByID contains the prepration and injection steps for the experiment -func PrepareEC2TerminateByID(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectEC2TerminateByIDChaos") +func PrepareEC2TerminateByID(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectEC2TerminateByIDChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -58,11 +60,11 @@ func PrepareEC2TerminateByID(experimentsDetails *experimentTypes.ExperimentDetai switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -78,7 +80,7 @@ func PrepareEC2TerminateByID(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInSerialMode will inject the ec2 instance termination in serial mode that is one after other -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: @@ -119,7 +121,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai // run the probes during chaos // the OnChaos probes execution will start in the first iteration and keep running for the entire chaos duration if len(resultDetails.ProbeDetails) != 0 && i == 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } @@ -150,7 +152,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode will inject the ec2 instance termination in parallel mode that is all at once -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: @@ -192,7 +194,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } diff --git a/chaoslib/litmus/ec2-terminate-by-tag/lib/ec2-terminate-by-tag.go b/chaoslib/litmus/ec2-terminate-by-tag/lib/ec2-terminate-by-tag.go index 71f47c0ae..06efa86c1 100644 --- a/chaoslib/litmus/ec2-terminate-by-tag/lib/ec2-terminate-by-tag.go +++ b/chaoslib/litmus/ec2-terminate-by-tag/lib/ec2-terminate-by-tag.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -20,13 +21,14 @@ import ( "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel" ) var inject, abort chan os.Signal // PrepareEC2TerminateByTag contains the prepration and injection steps for the experiment -func PrepareEC2TerminateByTag(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectEC2TerminateByTagChaos") +func PrepareEC2TerminateByTag(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectEC2TerminateByTagChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -53,11 +55,11 @@ func PrepareEC2TerminateByTag(experimentsDetails *experimentTypes.ExperimentDeta switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err := injectChaosInSerialMode(experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err := injectChaosInSerialMode(ctx, experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err := injectChaosInParallelMode(experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err := injectChaosInParallelMode(ctx, experimentsDetails, instanceIDList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -73,7 +75,7 @@ func PrepareEC2TerminateByTag(experimentsDetails *experimentTypes.ExperimentDeta } // injectChaosInSerialMode will inject the ce2 instance termination in serial mode that is one after other -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: @@ -114,7 +116,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai // run the probes during chaos // the OnChaos probes execution will start in the first iteration and keep running for the entire chaos duration if len(resultDetails.ProbeDetails) != 0 && i == 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } @@ -145,7 +147,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode will inject the ce2 instance termination in parallel mode that is all at once -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, instanceIDList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: @@ -185,7 +187,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } diff --git a/chaoslib/litmus/gcp-vm-disk-loss-by-label/lib/gcp-vm-disk-loss-by-label.go b/chaoslib/litmus/gcp-vm-disk-loss-by-label/lib/gcp-vm-disk-loss-by-label.go index 6648f052f..7b5ec29be 100644 --- a/chaoslib/litmus/gcp-vm-disk-loss-by-label/lib/gcp-vm-disk-loss-by-label.go +++ b/chaoslib/litmus/gcp-vm-disk-loss-by-label/lib/gcp-vm-disk-loss-by-label.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -19,6 +20,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "google.golang.org/api/compute/v1" ) @@ -28,8 +30,8 @@ var ( ) // PrepareDiskVolumeLossByLabel contains the prepration and injection steps for the experiment -func PrepareDiskVolumeLossByLabel(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectDiskVolumeLossByLabelChaos") +func PrepareDiskVolumeLossByLabel(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectDiskVolumeLossByLabelChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -66,11 +68,11 @@ func PrepareDiskVolumeLossByLabel(computeService *compute.Service, experimentsDe switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(computeService, experimentsDetails, diskVolumeNamesList, experimentsDetails.TargetDiskInstanceNamesList, experimentsDetails.Zones, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, computeService, experimentsDetails, diskVolumeNamesList, experimentsDetails.TargetDiskInstanceNamesList, experimentsDetails.Zones, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(computeService, experimentsDetails, diskVolumeNamesList, experimentsDetails.TargetDiskInstanceNamesList, experimentsDetails.Zones, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, computeService, experimentsDetails, diskVolumeNamesList, experimentsDetails.TargetDiskInstanceNamesList, experimentsDetails.Zones, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -88,7 +90,7 @@ func PrepareDiskVolumeLossByLabel(computeService *compute.Service, experimentsDe } // injectChaosInSerialMode will inject the disk loss chaos in serial mode which means one after the other -func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, targetDiskVolumeNamesList, instanceNamesList []string, zone string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, targetDiskVolumeNamesList, instanceNamesList []string, zone string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { //ChaosStartTimeStamp contains the start timestamp, when the chaos injection begin ChaosStartTimeStamp := time.Now() @@ -121,7 +123,7 @@ func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails // run the probes during chaos // the OnChaos probes execution will start in the first iteration and keep running for the entire chaos duration if len(resultDetails.ProbeDetails) != 0 && i == 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -163,7 +165,7 @@ func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails } // injectChaosInParallelMode will inject the disk loss chaos in parallel mode that means all at once -func injectChaosInParallelMode(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, targetDiskVolumeNamesList, instanceNamesList []string, zone string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, targetDiskVolumeNamesList, instanceNamesList []string, zone string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { //ChaosStartTimeStamp contains the start timestamp, when the chaos injection begin ChaosStartTimeStamp := time.Now() @@ -199,7 +201,7 @@ func injectChaosInParallelMode(computeService *compute.Service, experimentsDetai // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/gcp-vm-disk-loss/lib/gcp-vm-disk-loss.go b/chaoslib/litmus/gcp-vm-disk-loss/lib/gcp-vm-disk-loss.go index 3941b6f8a..e3bd1f817 100644 --- a/chaoslib/litmus/gcp-vm-disk-loss/lib/gcp-vm-disk-loss.go +++ b/chaoslib/litmus/gcp-vm-disk-loss/lib/gcp-vm-disk-loss.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -20,6 +21,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" "github.com/pkg/errors" + "go.opentelemetry.io/otel" "google.golang.org/api/compute/v1" ) @@ -29,8 +31,8 @@ var ( ) // PrepareDiskVolumeLoss contains the prepration and injection steps for the experiment -func PrepareDiskVolumeLoss(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectVMDiskLossChaos") +func PrepareDiskVolumeLoss(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectVMDiskLossChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -71,11 +73,11 @@ func PrepareDiskVolumeLoss(computeService *compute.Service, experimentsDetails * switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(computeService, experimentsDetails, diskNamesList, diskZonesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, computeService, experimentsDetails, diskNamesList, diskZonesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(computeService, experimentsDetails, diskNamesList, diskZonesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, computeService, experimentsDetails, diskNamesList, diskZonesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -93,7 +95,7 @@ func PrepareDiskVolumeLoss(computeService *compute.Service, experimentsDetails * } // injectChaosInSerialMode will inject the disk loss chaos in serial mode which means one after the other -func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, targetDiskVolumeNamesList, diskZonesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, targetDiskVolumeNamesList, diskZonesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { //ChaosStartTimeStamp contains the start timestamp, when the chaos injection begin ChaosStartTimeStamp := time.Now() @@ -125,7 +127,7 @@ func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails // run the probes during chaos // the OnChaos probes execution will start in the first iteration and keep running for the entire chaos duration if len(resultDetails.ProbeDetails) != 0 && i == 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -164,7 +166,7 @@ func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails } // injectChaosInParallelMode will inject the disk loss chaos in parallel mode that means all at once -func injectChaosInParallelMode(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, targetDiskVolumeNamesList, diskZonesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, targetDiskVolumeNamesList, diskZonesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { //ChaosStartTimeStamp contains the start timestamp, when the chaos injection begin ChaosStartTimeStamp := time.Now() @@ -200,7 +202,7 @@ func injectChaosInParallelMode(computeService *compute.Service, experimentsDetai // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/gcp-vm-instance-stop-by-label/lib/gcp-vm-instance-stop-by-label.go b/chaoslib/litmus/gcp-vm-instance-stop-by-label/lib/gcp-vm-instance-stop-by-label.go index b7e8fb149..86d194e74 100644 --- a/chaoslib/litmus/gcp-vm-instance-stop-by-label/lib/gcp-vm-instance-stop-by-label.go +++ b/chaoslib/litmus/gcp-vm-instance-stop-by-label/lib/gcp-vm-instance-stop-by-label.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -19,14 +20,15 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "google.golang.org/api/compute/v1" ) var inject, abort chan os.Signal // PrepareVMStopByLabel executes the experiment steps by injecting chaos into target VM instances -func PrepareVMStopByLabel(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectVMInstanceStopByLabelChaos") +func PrepareVMStopByLabel(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectVMInstanceStopByLabelChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -53,11 +55,11 @@ func PrepareVMStopByLabel(computeService *compute.Service, experimentsDetails *e switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err := injectChaosInSerialMode(computeService, experimentsDetails, instanceNamesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err := injectChaosInSerialMode(ctx, computeService, experimentsDetails, instanceNamesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err := injectChaosInParallelMode(computeService, experimentsDetails, instanceNamesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err := injectChaosInParallelMode(ctx, computeService, experimentsDetails, instanceNamesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -74,7 +76,7 @@ func PrepareVMStopByLabel(computeService *compute.Service, experimentsDetails *e } // injectChaosInSerialMode stops VM instances in serial mode i.e. one after the other -func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: @@ -115,7 +117,7 @@ func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails // run the probes during chaos // the OnChaos probes execution will start in the first iteration and keep running for the entire chaos duration if len(resultDetails.ProbeDetails) != 0 && i == 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -159,7 +161,7 @@ func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails } // injectChaosInParallelMode will inject the VM instance termination in serial mode that is one after other -func injectChaosInParallelMode(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: @@ -203,7 +205,7 @@ func injectChaosInParallelMode(computeService *compute.Service, experimentsDetai // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/gcp-vm-instance-stop/lib/gcp-vm-instance-stop.go b/chaoslib/litmus/gcp-vm-instance-stop/lib/gcp-vm-instance-stop.go index b3569cf71..35eeac647 100644 --- a/chaoslib/litmus/gcp-vm-instance-stop/lib/gcp-vm-instance-stop.go +++ b/chaoslib/litmus/gcp-vm-instance-stop/lib/gcp-vm-instance-stop.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -19,6 +20,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "google.golang.org/api/compute/v1" ) @@ -28,8 +30,8 @@ var ( ) // PrepareVMStop contains the prepration and injection steps for the experiment -func PrepareVMStop(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectVMInstanceStopChaos") +func PrepareVMStop(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectVMInstanceStopChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -58,11 +60,11 @@ func PrepareVMStop(computeService *compute.Service, experimentsDetails *experime switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(computeService, experimentsDetails, instanceNamesList, instanceZonesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, computeService, experimentsDetails, instanceNamesList, instanceZonesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(computeService, experimentsDetails, instanceNamesList, instanceZonesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, computeService, experimentsDetails, instanceNamesList, instanceZonesList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -79,7 +81,7 @@ func PrepareVMStop(computeService *compute.Service, experimentsDetails *experime } // injectChaosInSerialMode stops VM instances in serial mode i.e. one after the other -func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesList []string, instanceZonesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesList []string, instanceZonesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: @@ -120,7 +122,7 @@ func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails // run the probes during chaos // the OnChaos probes execution will start in the first iteration and keep running for the entire chaos duration if len(resultDetails.ProbeDetails) != 0 && i == 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -164,7 +166,7 @@ func injectChaosInSerialMode(computeService *compute.Service, experimentsDetails } // injectChaosInParallelMode stops VM instances in parallel mode i.e. all at once -func injectChaosInParallelMode(computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesList []string, instanceZonesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, computeService *compute.Service, experimentsDetails *experimentTypes.ExperimentDetails, instanceNamesList []string, instanceZonesList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: @@ -208,7 +210,7 @@ func injectChaosInParallelMode(computeService *compute.Service, experimentsDetai // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/http-chaos/lib/header/header.go b/chaoslib/litmus/http-chaos/lib/header/header.go index 95bef093a..ec38f6c08 100644 --- a/chaoslib/litmus/http-chaos/lib/header/header.go +++ b/chaoslib/litmus/http-chaos/lib/header/header.go @@ -1,6 +1,8 @@ package header import ( + "context" + http_chaos "github.com/litmuschaos/litmus-go/chaoslib/litmus/http-chaos/lib" "github.com/litmuschaos/litmus-go/pkg/clients" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/types" @@ -8,11 +10,12 @@ import ( "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/litmuschaos/litmus-go/pkg/types" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel" ) // PodHttpModifyHeaderChaos contains the steps to prepare and inject http modify header chaos -func PodHttpModifyHeaderChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodHTTPModifyHeaderChaos") +func PodHttpModifyHeaderChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodHTTPModifyHeaderChaos") defer span.End() log.InfoWithValues("[Info]: The chaos tunables are:", logrus.Fields{ @@ -30,5 +33,5 @@ func PodHttpModifyHeaderChaos(experimentsDetails *experimentTypes.ExperimentDeta stream = "upstream" } args := "-t header --" + stream + " -a headers='" + (experimentsDetails.HeadersMap) + "' -a mode=" + experimentsDetails.HeaderMode - return http_chaos.PrepareAndInjectChaos(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) + return http_chaos.PrepareAndInjectChaos(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) } diff --git a/chaoslib/litmus/http-chaos/lib/http-chaos.go b/chaoslib/litmus/http-chaos/lib/http-chaos.go index 3c90b0715..185033459 100644 --- a/chaoslib/litmus/http-chaos/lib/http-chaos.go +++ b/chaoslib/litmus/http-chaos/lib/http-chaos.go @@ -10,6 +10,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/types" @@ -25,7 +26,7 @@ import ( ) // PrepareAndInjectChaos contains the preparation & injection steps -func PrepareAndInjectChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails, args string) error { +func PrepareAndInjectChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails, args string) error { var err error // Get the target pod details for the chaos execution @@ -65,11 +66,11 @@ func PrepareAndInjectChaos(experimentsDetails *experimentTypes.ExperimentDetails switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetPodList, args, clients, chaosDetails, resultDetails, eventsDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetPodList, args, clients, chaosDetails, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetPodList, args, clients, chaosDetails, resultDetails, eventsDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetPodList, args, clients, chaosDetails, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -80,11 +81,11 @@ func PrepareAndInjectChaos(experimentsDetails *experimentTypes.ExperimentDetails } // injectChaosInSerialMode inject the http chaos in all target application serially (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, args string, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, args string, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -104,7 +105,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai }) runID := stringutils.GetRunID() - if err := createHelperPod(experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer), pod.Spec.NodeName, runID, args); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer), pod.Spec.NodeName, runID, args); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -137,11 +138,11 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode inject the http chaos in all target application in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, args string, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, args string, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -155,7 +156,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet targetsPerNode = append(targetsPerNode, fmt.Sprintf("%s:%s:%s", k.Name, k.Namespace, k.TargetContainer)) } - if err := createHelperPod(experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID, args); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID, args); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } } @@ -188,8 +189,8 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets, nodeName, runID, args string) error { - span := telemetry.StartTracing(clients, "InjectHTTPChaosHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets, nodeName, runID, args string) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateHTTPChaosHelperPod") defer span.End() privilegedEnable := true @@ -233,7 +234,7 @@ func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clie "./helpers -name http-chaos", }, Resources: chaosDetails.Resources, - Env: getPodEnv(clients.Context, experimentsDetails, targets, args), + Env: getPodEnv(ctx, experimentsDetails, targets, args), VolumeMounts: []apiv1.VolumeMount{ { Name: "cri-socket", diff --git a/chaoslib/litmus/http-chaos/lib/latency/latency.go b/chaoslib/litmus/http-chaos/lib/latency/latency.go index 24df1a4f2..a45432e0a 100644 --- a/chaoslib/litmus/http-chaos/lib/latency/latency.go +++ b/chaoslib/litmus/http-chaos/lib/latency/latency.go @@ -1,6 +1,7 @@ package latency import ( + "context" "strconv" http_chaos "github.com/litmuschaos/litmus-go/chaoslib/litmus/http-chaos/lib" @@ -10,11 +11,12 @@ import ( "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/litmuschaos/litmus-go/pkg/types" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel" ) // PodHttpLatencyChaos contains the steps to prepare and inject http latency chaos -func PodHttpLatencyChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodHTTPLatencyChaos") +func PodHttpLatencyChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodHTTPLatencyChaos") defer span.End() log.InfoWithValues("[Info]: The chaos tunables are:", logrus.Fields{ @@ -27,5 +29,5 @@ func PodHttpLatencyChaos(experimentsDetails *experimentTypes.ExperimentDetails, }) args := "-t latency -a latency=" + strconv.Itoa(experimentsDetails.Latency) - return http_chaos.PrepareAndInjectChaos(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) + return http_chaos.PrepareAndInjectChaos(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) } diff --git a/chaoslib/litmus/http-chaos/lib/modify-body/modify-body.go b/chaoslib/litmus/http-chaos/lib/modify-body/modify-body.go index 7a5980c6f..6093036e6 100644 --- a/chaoslib/litmus/http-chaos/lib/modify-body/modify-body.go +++ b/chaoslib/litmus/http-chaos/lib/modify-body/modify-body.go @@ -1,6 +1,7 @@ package modifybody import ( + "context" "fmt" "math" "strings" @@ -12,11 +13,12 @@ import ( "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/litmuschaos/litmus-go/pkg/types" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel" ) // PodHttpModifyBodyChaos contains the steps to prepare and inject http modify body chaos -func PodHttpModifyBodyChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodHTTPModifyBodyChaos") +func PodHttpModifyBodyChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodHTTPModifyBodyChaos") defer span.End() // responseBodyMaxLength defines the max length of response body string to be printed. It is taken as @@ -37,7 +39,7 @@ func PodHttpModifyBodyChaos(experimentsDetails *experimentTypes.ExperimentDetail args := fmt.Sprintf( `-t modify_body -a body="%v" -a content_type=%v -a content_encoding=%v`, EscapeQuotes(experimentsDetails.ResponseBody), experimentsDetails.ContentType, experimentsDetails.ContentEncoding) - return http_chaos.PrepareAndInjectChaos(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) + return http_chaos.PrepareAndInjectChaos(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) } // EscapeQuotes escapes the quotes in the given string diff --git a/chaoslib/litmus/http-chaos/lib/reset/reset.go b/chaoslib/litmus/http-chaos/lib/reset/reset.go index 3b10245cb..d8df3eb6c 100644 --- a/chaoslib/litmus/http-chaos/lib/reset/reset.go +++ b/chaoslib/litmus/http-chaos/lib/reset/reset.go @@ -1,6 +1,7 @@ package reset import ( + "context" "strconv" http_chaos "github.com/litmuschaos/litmus-go/chaoslib/litmus/http-chaos/lib" @@ -10,11 +11,12 @@ import ( "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/litmuschaos/litmus-go/pkg/types" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel" ) // PodHttpResetPeerChaos contains the steps to prepare and inject http reset peer chaos -func PodHttpResetPeerChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodHTTPResetPeerChaos") +func PodHttpResetPeerChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodHTTPResetPeerChaos") defer span.End() log.InfoWithValues("[Info]: The chaos tunables are:", logrus.Fields{ @@ -27,5 +29,5 @@ func PodHttpResetPeerChaos(experimentsDetails *experimentTypes.ExperimentDetails }) args := "-t reset_peer -a timeout=" + strconv.Itoa(experimentsDetails.ResetTimeout) - return http_chaos.PrepareAndInjectChaos(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) + return http_chaos.PrepareAndInjectChaos(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) } diff --git a/chaoslib/litmus/http-chaos/lib/statuscode/status-code.go b/chaoslib/litmus/http-chaos/lib/statuscode/status-code.go index 9c00c0ae9..c2a115a32 100644 --- a/chaoslib/litmus/http-chaos/lib/statuscode/status-code.go +++ b/chaoslib/litmus/http-chaos/lib/statuscode/status-code.go @@ -1,6 +1,7 @@ package statuscode import ( + "context" "fmt" "math" "math/rand" @@ -10,6 +11,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" + "go.opentelemetry.io/otel" http_chaos "github.com/litmuschaos/litmus-go/chaoslib/litmus/http-chaos/lib" body "github.com/litmuschaos/litmus-go/chaoslib/litmus/http-chaos/lib/modify-body" @@ -28,8 +30,8 @@ var acceptedStatusCodes = []string{ } // PodHttpStatusCodeChaos contains the steps to prepare and inject http status code chaos -func PodHttpStatusCodeChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodHTTPStatusCodeChaos") +func PodHttpStatusCodeChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodHTTPStatusCodeChaos") defer span.End() // responseBodyMaxLength defines the max length of response body string to be printed. It is taken as @@ -53,7 +55,7 @@ func PodHttpStatusCodeChaos(experimentsDetails *experimentTypes.ExperimentDetail `-t status_code -a status_code=%s -a modify_response_body=%d -a response_body="%v" -a content_type=%s -a content_encoding=%s`, experimentsDetails.StatusCode, stringBoolToInt(experimentsDetails.ModifyResponseBody), body.EscapeQuotes(experimentsDetails.ResponseBody), experimentsDetails.ContentType, experimentsDetails.ContentEncoding) - return http_chaos.PrepareAndInjectChaos(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) + return http_chaos.PrepareAndInjectChaos(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) } // GetStatusCode performs two functions: diff --git a/chaoslib/litmus/k6-loadgen/lib/k6-loadgen.go b/chaoslib/litmus/k6-loadgen/lib/k6-loadgen.go index 0ed8420b4..f89afc377 100644 --- a/chaoslib/litmus/k6-loadgen/lib/k6-loadgen.go +++ b/chaoslib/litmus/k6-loadgen/lib/k6-loadgen.go @@ -17,11 +17,12 @@ import ( "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/litmuschaos/litmus-go/pkg/utils/stringutils" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -func experimentExecution(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func experimentExecution(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { if experimentsDetails.EngineName != "" { msg := "Injecting " + experimentsDetails.ExperimentName + " chaos" types.SetEngineEventAttributes(eventsDetails, types.ChaosInject, msg, "Normal", chaosDetails) @@ -29,7 +30,7 @@ func experimentExecution(experimentsDetails *experimentTypes.ExperimentDetails, } // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -37,7 +38,7 @@ func experimentExecution(experimentsDetails *experimentTypes.ExperimentDetails, runID := stringutils.GetRunID() // creating the helper pod to perform k6-loadgen chaos - if err := createHelperPod(experimentsDetails, clients, chaosDetails, runID); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, runID); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -69,8 +70,8 @@ func experimentExecution(experimentsDetails *experimentTypes.ExperimentDetails, } // PrepareChaos contains the preparation steps before chaos injection -func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectK6LoadGenChaos") +func PrepareChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectK6LoadGenChaos") defer span.End() // Waiting for the ramp time before chaos injection @@ -80,7 +81,7 @@ func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients } // Starting the k6-loadgen experiment - if err := experimentExecution(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err := experimentExecution(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not execute chaos") } @@ -93,8 +94,8 @@ func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, runID string) error { - span := telemetry.StartTracing(clients, "CreateK6LoadGenHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, runID string) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateK6LoadGenHelperPod") defer span.End() const volumeName = "script-volume" diff --git a/chaoslib/litmus/kafka-broker-pod-failure/lib/pod-delete.go b/chaoslib/litmus/kafka-broker-pod-failure/lib/pod-delete.go index 98420c431..b5646d041 100644 --- a/chaoslib/litmus/kafka-broker-pod-failure/lib/pod-delete.go +++ b/chaoslib/litmus/kafka-broker-pod-failure/lib/pod-delete.go @@ -11,6 +11,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/litmuschaos/litmus-go/pkg/workloads" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -25,8 +26,8 @@ import ( ) // PreparePodDelete contains the prepration steps before chaos injection -func PreparePodDelete(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectKafkaPodDeleteChaos") +func PreparePodDelete(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectKafkaPodDeleteChaos") defer span.End() //Waiting for the ramp time before chaos injection @@ -37,11 +38,11 @@ func PreparePodDelete(experimentsDetails *experimentTypes.ExperimentDetails, cli switch strings.ToLower(experimentsDetails.ChaoslibDetail.Sequence) { case "serial": - if err := injectChaosInSerialMode(experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { + if err := injectChaosInSerialMode(ctx, experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err := injectChaosInParallelMode(experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { + if err := injectChaosInParallelMode(ctx, experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -57,11 +58,11 @@ func PreparePodDelete(experimentsDetails *experimentTypes.ExperimentDetails, cli } // injectChaosInSerialMode delete the kafka broker pods in serial mode(one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -152,11 +153,11 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode delete the kafka broker pods in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/kubelet-service-kill/lib/kubelet-service-kill.go b/chaoslib/litmus/kubelet-service-kill/lib/kubelet-service-kill.go index 283d7ac12..3132902b7 100644 --- a/chaoslib/litmus/kubelet-service-kill/lib/kubelet-service-kill.go +++ b/chaoslib/litmus/kubelet-service-kill/lib/kubelet-service-kill.go @@ -8,6 +8,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -24,8 +25,8 @@ import ( ) // PrepareKubeletKill contains prepration steps before chaos injection -func PrepareKubeletKill(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectKubeletServiceKillChaos") +func PrepareKubeletKill(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectKubeletServiceKillChaos") defer span.End() var err error @@ -62,7 +63,7 @@ func PrepareKubeletKill(experimentsDetails *experimentTypes.ExperimentDetails, c } // Creating the helper pod to perform node memory hog - if err = createHelperPod(experimentsDetails, clients, chaosDetails, experimentsDetails.TargetNode); err != nil { + if err = createHelperPod(ctx, experimentsDetails, clients, chaosDetails, experimentsDetails.TargetNode); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -79,7 +80,7 @@ func PrepareKubeletKill(experimentsDetails *experimentTypes.ExperimentDetails, c // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { common.DeleteAllHelperPodBasedOnJobCleanupPolicy(appLabel, chaosDetails, clients) return err } @@ -115,8 +116,8 @@ func PrepareKubeletKill(experimentsDetails *experimentTypes.ExperimentDetails, c } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, appNodeName string) error { - span := telemetry.StartTracing(clients, "CreateKubeletServiceKillHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, appNodeName string) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateKubeletServiceKillHelperPod") defer span.End() privileged := true diff --git a/chaoslib/litmus/network-chaos/lib/corruption/corruption.go b/chaoslib/litmus/network-chaos/lib/corruption/corruption.go index cd855dac1..18da21d3d 100644 --- a/chaoslib/litmus/network-chaos/lib/corruption/corruption.go +++ b/chaoslib/litmus/network-chaos/lib/corruption/corruption.go @@ -1,18 +1,21 @@ package corruption import ( + "context" + network_chaos "github.com/litmuschaos/litmus-go/chaoslib/litmus/network-chaos/lib" "github.com/litmuschaos/litmus-go/pkg/clients" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/types" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/litmuschaos/litmus-go/pkg/types" + "go.opentelemetry.io/otel" ) // PodNetworkCorruptionChaos contains the steps to prepare and inject chaos -func PodNetworkCorruptionChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodNetworkCorruptionChaos") +func PodNetworkCorruptionChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodNetworkCorruptionChaos") defer span.End() args := "corrupt " + experimentsDetails.NetworkPacketCorruptionPercentage - return network_chaos.PrepareAndInjectChaos(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) + return network_chaos.PrepareAndInjectChaos(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) } diff --git a/chaoslib/litmus/network-chaos/lib/duplication/duplication.go b/chaoslib/litmus/network-chaos/lib/duplication/duplication.go index 0d42d2ab4..e428e3cec 100644 --- a/chaoslib/litmus/network-chaos/lib/duplication/duplication.go +++ b/chaoslib/litmus/network-chaos/lib/duplication/duplication.go @@ -1,18 +1,21 @@ package duplication import ( + "context" + network_chaos "github.com/litmuschaos/litmus-go/chaoslib/litmus/network-chaos/lib" "github.com/litmuschaos/litmus-go/pkg/clients" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/types" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/litmuschaos/litmus-go/pkg/types" + "go.opentelemetry.io/otel" ) // PodNetworkDuplicationChaos contains the steps to prepare and inject chaos -func PodNetworkDuplicationChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodNetworkDuplicationChaos") +func PodNetworkDuplicationChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodNetworkDuplicationChaos") defer span.End() args := "duplicate " + experimentsDetails.NetworkPacketDuplicationPercentage - return network_chaos.PrepareAndInjectChaos(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) + return network_chaos.PrepareAndInjectChaos(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) } diff --git a/chaoslib/litmus/network-chaos/lib/latency/latency.go b/chaoslib/litmus/network-chaos/lib/latency/latency.go index 790f7cffc..817533fde 100644 --- a/chaoslib/litmus/network-chaos/lib/latency/latency.go +++ b/chaoslib/litmus/network-chaos/lib/latency/latency.go @@ -1,6 +1,7 @@ package latency import ( + "context" "strconv" network_chaos "github.com/litmuschaos/litmus-go/chaoslib/litmus/network-chaos/lib" @@ -8,13 +9,14 @@ import ( experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/types" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/litmuschaos/litmus-go/pkg/types" + "go.opentelemetry.io/otel" ) // PodNetworkLatencyChaos contains the steps to prepare and inject chaos -func PodNetworkLatencyChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodNetworkLatencyChaos") +func PodNetworkLatencyChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodNetworkLatencyChaos") defer span.End() args := "delay " + strconv.Itoa(experimentsDetails.NetworkLatency) + "ms " + strconv.Itoa(experimentsDetails.Jitter) + "ms" - return network_chaos.PrepareAndInjectChaos(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) + return network_chaos.PrepareAndInjectChaos(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) } diff --git a/chaoslib/litmus/network-chaos/lib/loss/loss.go b/chaoslib/litmus/network-chaos/lib/loss/loss.go index 424f1c9a3..a4acdb2b2 100644 --- a/chaoslib/litmus/network-chaos/lib/loss/loss.go +++ b/chaoslib/litmus/network-chaos/lib/loss/loss.go @@ -1,18 +1,21 @@ package loss import ( + "context" + network_chaos "github.com/litmuschaos/litmus-go/chaoslib/litmus/network-chaos/lib" "github.com/litmuschaos/litmus-go/pkg/clients" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/types" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/litmuschaos/litmus-go/pkg/types" + "go.opentelemetry.io/otel" ) // PodNetworkLossChaos contains the steps to prepare and inject chaos -func PodNetworkLossChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodNetworkLossChaos") +func PodNetworkLossChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodNetworkLossChaos") defer span.End() args := "loss " + experimentsDetails.NetworkPacketLossPercentage - return network_chaos.PrepareAndInjectChaos(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) + return network_chaos.PrepareAndInjectChaos(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails, args) } diff --git a/chaoslib/litmus/network-chaos/lib/network-chaos.go b/chaoslib/litmus/network-chaos/lib/network-chaos.go index 31dfffaf0..3ae0b0f17 100644 --- a/chaoslib/litmus/network-chaos/lib/network-chaos.go +++ b/chaoslib/litmus/network-chaos/lib/network-chaos.go @@ -11,6 +11,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" k8serrors "k8s.io/apimachinery/pkg/api/errors" "github.com/litmuschaos/litmus-go/pkg/clients" @@ -31,7 +32,7 @@ var destIpsSvcMesh string var destIps string // PrepareAndInjectChaos contains the preparation & injection steps -func PrepareAndInjectChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails, args string) error { +func PrepareAndInjectChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails, args string) error { var err error // Get the target pod details for the chaos execution @@ -71,11 +72,11 @@ func PrepareAndInjectChaos(experimentsDetails *experimentTypes.ExperimentDetails experimentsDetails.IsTargetContainerProvided = experimentsDetails.TargetContainer != "" switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetPodList, clients, chaosDetails, args, resultDetails, eventsDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetPodList, clients, chaosDetails, args, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetPodList, clients, chaosDetails, args, resultDetails, eventsDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetPodList, clients, chaosDetails, args, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -86,10 +87,10 @@ func PrepareAndInjectChaos(experimentsDetails *experimentTypes.ExperimentDetails } // injectChaosInSerialMode inject the network chaos in all target application serially (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, args string, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, args string, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -109,7 +110,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai runID := stringutils.GetRunID() - if err := createHelperPod(experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer, serviceMesh), pod.Spec.NodeName, runID, args); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer, serviceMesh), pod.Spec.NodeName, runID, args); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -142,12 +143,12 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode inject the network chaos in all target application in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, args string, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, args string, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { var err error // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -165,7 +166,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet targetsPerNode = append(targetsPerNode, fmt.Sprintf("%s:%s:%s:%s", k.Name, k.Namespace, k.TargetContainer, k.ServiceMesh)) } - if err := createHelperPod(experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID, args); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID, args); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } } @@ -198,8 +199,8 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets string, nodeName, runID, args string) error { - span := telemetry.StartTracing(clients, "CreateNetworkChaosHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets string, nodeName, runID, args string) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateNetworkChaosHelperPod") defer span.End() privilegedEnable := true @@ -243,7 +244,7 @@ func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clie "./helpers -name network-chaos", }, Resources: chaosDetails.Resources, - Env: getPodEnv(clients.Context, experimentsDetails, targets, args), + Env: getPodEnv(ctx, experimentsDetails, targets, args), VolumeMounts: []apiv1.VolumeMount{ { Name: "cri-socket", diff --git a/chaoslib/litmus/node-cpu-hog/lib/node-cpu-hog.go b/chaoslib/litmus/node-cpu-hog/lib/node-cpu-hog.go index cacbbb9b4..aa1685c63 100644 --- a/chaoslib/litmus/node-cpu-hog/lib/node-cpu-hog.go +++ b/chaoslib/litmus/node-cpu-hog/lib/node-cpu-hog.go @@ -9,6 +9,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -25,8 +26,8 @@ import ( ) // PrepareNodeCPUHog contains preparation steps before chaos injection -func PrepareNodeCPUHog(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectNodeCPUHogChaos") +func PrepareNodeCPUHog(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectNodeCPUHogChaos") defer span.End() //set up the tunables if provided in range @@ -65,11 +66,11 @@ func PrepareNodeCPUHog(experimentsDetails *experimentTypes.ExperimentDetails, cl switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -85,13 +86,13 @@ func PrepareNodeCPUHog(experimentsDetails *experimentTypes.ExperimentDetails, cl } // injectChaosInSerialMode stress the cpu of all the target nodes serially (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { nodeCPUCores := experimentsDetails.NodeCPUcores // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -119,7 +120,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai experimentsDetails.RunID = stringutils.GetRunID() // Creating the helper pod to perform node cpu hog - if err := createHelperPod(experimentsDetails, chaosDetails, appNode, clients); err != nil { + if err := createHelperPod(ctx, experimentsDetails, chaosDetails, appNode, clients); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -152,12 +153,12 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode stress the cpu of all the target nodes in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { nodeCPUCores := experimentsDetails.NodeCPUcores // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -185,7 +186,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet }) // Creating the helper pod to perform node cpu hog - if err := createHelperPod(experimentsDetails, chaosDetails, appNode, clients); err != nil { + if err := createHelperPod(ctx, experimentsDetails, chaosDetails, appNode, clients); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } } @@ -231,8 +232,8 @@ func setCPUCapacity(experimentsDetails *experimentTypes.ExperimentDetails, appNo } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, chaosDetails *types.ChaosDetails, appNode string, clients clients.ClientSets) error { - span := telemetry.StartTracing(clients, "CreateNodeCPUHogHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, chaosDetails *types.ChaosDetails, appNode string, clients clients.ClientSets) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateNodeCPUHogHelperPod") defer span.End() terminationGracePeriodSeconds := int64(experimentsDetails.TerminationGracePeriodSeconds) diff --git a/chaoslib/litmus/node-drain/lib/node-drain.go b/chaoslib/litmus/node-drain/lib/node-drain.go index dc9a59b34..37fcb5425 100644 --- a/chaoslib/litmus/node-drain/lib/node-drain.go +++ b/chaoslib/litmus/node-drain/lib/node-drain.go @@ -14,6 +14,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -34,8 +35,8 @@ var ( ) // PrepareNodeDrain contains the preparation steps before chaos injection -func PrepareNodeDrain(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectNodeDrainChaos") +func PrepareNodeDrain(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectNodeDrainChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -70,7 +71,7 @@ func PrepareNodeDrain(experimentsDetails *experimentTypes.ExperimentDetails, cli // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/node-io-stress/lib/node-io-stress.go b/chaoslib/litmus/node-io-stress/lib/node-io-stress.go index 1c3b1dbab..995100dba 100644 --- a/chaoslib/litmus/node-io-stress/lib/node-io-stress.go +++ b/chaoslib/litmus/node-io-stress/lib/node-io-stress.go @@ -9,6 +9,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -25,8 +26,8 @@ import ( ) // PrepareNodeIOStress contains preparation steps before chaos injection -func PrepareNodeIOStress(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectNodeIOStressChaos") +func PrepareNodeIOStress(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectNodeIOStressChaos") defer span.End() //set up the tunables if provided in range setChaosTunables(experimentsDetails) @@ -65,11 +66,11 @@ func PrepareNodeIOStress(experimentsDetails *experimentTypes.ExperimentDetails, switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -85,11 +86,11 @@ func PrepareNodeIOStress(experimentsDetails *experimentTypes.ExperimentDetails, } // injectChaosInSerialMode stress the io of all the target nodes serially (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -111,7 +112,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai experimentsDetails.RunID = stringutils.GetRunID() // Creating the helper pod to perform node io stress - if err := createHelperPod(experimentsDetails, chaosDetails, appNode, clients); err != nil { + if err := createHelperPod(ctx, experimentsDetails, chaosDetails, appNode, clients); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -143,11 +144,11 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode stress the io of all the target nodes in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -169,7 +170,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet }) // Creating the helper pod to perform node io stress - if err := createHelperPod(experimentsDetails, chaosDetails, appNode, clients); err != nil { + if err := createHelperPod(ctx, experimentsDetails, chaosDetails, appNode, clients); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } } @@ -207,8 +208,8 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, chaosDetails *types.ChaosDetails, appNode string, clients clients.ClientSets) error { - span := telemetry.StartTracing(clients, "CreateNodeIOStressHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, chaosDetails *types.ChaosDetails, appNode string, clients clients.ClientSets) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateNodeIOStressHelperPod") defer span.End() terminationGracePeriodSeconds := int64(experimentsDetails.TerminationGracePeriodSeconds) diff --git a/chaoslib/litmus/node-memory-hog/lib/node-memory-hog.go b/chaoslib/litmus/node-memory-hog/lib/node-memory-hog.go index ebe0a8cd5..1d14d0a41 100644 --- a/chaoslib/litmus/node-memory-hog/lib/node-memory-hog.go +++ b/chaoslib/litmus/node-memory-hog/lib/node-memory-hog.go @@ -9,6 +9,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -26,8 +27,8 @@ import ( ) // PrepareNodeMemoryHog contains preparation steps before chaos injection -func PrepareNodeMemoryHog(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectNodeMemoryHogChaos") +func PrepareNodeMemoryHog(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectNodeMemoryHogChaos") defer span.End() //set up the tunables if provided in range @@ -67,11 +68,11 @@ func PrepareNodeMemoryHog(experimentsDetails *experimentTypes.ExperimentDetails, switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetNodeList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -87,11 +88,11 @@ func PrepareNodeMemoryHog(experimentsDetails *experimentTypes.ExperimentDetails, } // injectChaosInSerialMode stress the memory of all the target nodes serially (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -125,7 +126,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // Creating the helper pod to perform node memory hog - if err = createHelperPod(experimentsDetails, chaosDetails, appNode, clients, MemoryConsumption); err != nil { + if err = createHelperPod(ctx, experimentsDetails, chaosDetails, appNode, clients, MemoryConsumption); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -161,11 +162,11 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode stress the memory all the target nodes in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetNodeList []string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -199,7 +200,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet } // Creating the helper pod to perform node memory hog - if err = createHelperPod(experimentsDetails, chaosDetails, appNode, clients, MemoryConsumption); err != nil { + if err = createHelperPod(ctx, experimentsDetails, chaosDetails, appNode, clients, MemoryConsumption); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } } @@ -315,8 +316,8 @@ func calculateMemoryConsumption(experimentsDetails *experimentTypes.ExperimentDe } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, chaosDetails *types.ChaosDetails, appNode string, clients clients.ClientSets, MemoryConsumption string) error { - span := telemetry.StartTracing(clients, "CreateNodeMemoryHogHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, chaosDetails *types.ChaosDetails, appNode string, clients clients.ClientSets, MemoryConsumption string) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateNodeMemoryHogHelperPod") defer span.End() terminationGracePeriodSeconds := int64(experimentsDetails.TerminationGracePeriodSeconds) diff --git a/chaoslib/litmus/node-restart/lib/node-restart.go b/chaoslib/litmus/node-restart/lib/node-restart.go index 074d502d5..5afa517be 100644 --- a/chaoslib/litmus/node-restart/lib/node-restart.go +++ b/chaoslib/litmus/node-restart/lib/node-restart.go @@ -9,6 +9,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -39,8 +40,8 @@ const ( ) // PrepareNodeRestart contains preparation steps before chaos injection -func PrepareNodeRestart(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectNodeRestartChaos") +func PrepareNodeRestart(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectNodeRestartChaos") defer span.End() //Select the node @@ -84,7 +85,7 @@ func PrepareNodeRestart(experimentsDetails *experimentTypes.ExperimentDetails, c } // Creating the helper pod to perform node restart - if err = createHelperPod(experimentsDetails, chaosDetails, clients); err != nil { + if err = createHelperPod(ctx, experimentsDetails, chaosDetails, clients); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -101,7 +102,7 @@ func PrepareNodeRestart(experimentsDetails *experimentTypes.ExperimentDetails, c // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { common.DeleteAllHelperPodBasedOnJobCleanupPolicy(appLabel, chaosDetails, clients) return err } @@ -130,11 +131,11 @@ func PrepareNodeRestart(experimentsDetails *experimentTypes.ExperimentDetails, c } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, chaosDetails *types.ChaosDetails, clients clients.ClientSets) error { +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, chaosDetails *types.ChaosDetails, clients clients.ClientSets) error { // This method is attaching emptyDir along with secret volume, and copy data from secret // to the emptyDir, because secret is mounted as readonly and with 777 perms and it can't be changed // because of: https://github.com/kubernetes/kubernetes/issues/57923 - span := telemetry.StartTracing(clients, "CreateNodeRestartHelperPod") + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateNodeRestartHelperPod") defer span.End() terminationGracePeriodSeconds := int64(experimentsDetails.TerminationGracePeriodSeconds) diff --git a/chaoslib/litmus/node-taint/lib/node-taint.go b/chaoslib/litmus/node-taint/lib/node-taint.go index 72453894a..118d6bcec 100644 --- a/chaoslib/litmus/node-taint/lib/node-taint.go +++ b/chaoslib/litmus/node-taint/lib/node-taint.go @@ -12,6 +12,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -31,8 +32,8 @@ var ( ) // PrepareNodeTaint contains the preparation steps before chaos injection -func PrepareNodeTaint(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectNodeTaintChaos") +func PrepareNodeTaint(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectNodeTaintChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -67,7 +68,7 @@ func PrepareNodeTaint(experimentsDetails *experimentTypes.ExperimentDetails, cli // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/pod-autoscaler/lib/pod-autoscaler.go b/chaoslib/litmus/pod-autoscaler/lib/pod-autoscaler.go index 2161d75fe..915f9979d 100644 --- a/chaoslib/litmus/pod-autoscaler/lib/pod-autoscaler.go +++ b/chaoslib/litmus/pod-autoscaler/lib/pod-autoscaler.go @@ -12,6 +12,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/pod-autoscaler/types" @@ -34,8 +35,8 @@ var ( ) // PreparePodAutoscaler contains the preparation steps and chaos injection steps -func PreparePodAutoscaler(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodAutoScalerChaos") +func PreparePodAutoscaler(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodAutoScalerChaos") defer span.End() //Waiting for the ramp time before chaos injection @@ -68,7 +69,7 @@ func PreparePodAutoscaler(experimentsDetails *experimentTypes.ExperimentDetails, //calling go routine which will continuously watch for the abort signal go abortPodAutoScalerChaos(appsUnderTest, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails) - if err = podAutoscalerChaosInDeployment(experimentsDetails, clients, appsUnderTest, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = podAutoscalerChaosInDeployment(ctx, experimentsDetails, clients, appsUnderTest, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not scale deployment") } @@ -95,7 +96,7 @@ func PreparePodAutoscaler(experimentsDetails *experimentTypes.ExperimentDetails, //calling go routine which will continuously watch for the abort signal go abortPodAutoScalerChaos(appsUnderTest, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails) - if err = podAutoscalerChaosInStatefulset(experimentsDetails, clients, appsUnderTest, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = podAutoscalerChaosInStatefulset(ctx, experimentsDetails, clients, appsUnderTest, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not scale statefulset") } @@ -159,7 +160,7 @@ func getStatefulsetDetails(experimentsDetails *experimentTypes.ExperimentDetails } // podAutoscalerChaosInDeployment scales up the replicas of deployment and verify the status -func podAutoscalerChaosInDeployment(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, appsUnderTest []experimentTypes.ApplicationUnderTest, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func podAutoscalerChaosInDeployment(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, appsUnderTest []experimentTypes.ApplicationUnderTest, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // Scale Application retryErr := retries.RetryOnConflict(retries.DefaultRetry, func() error { @@ -186,11 +187,11 @@ func podAutoscalerChaosInDeployment(experimentsDetails *experimentTypes.Experime } log.Info("[Info]: The application started scaling") - return deploymentStatusCheck(experimentsDetails, clients, appsUnderTest, resultDetails, eventsDetails, chaosDetails) + return deploymentStatusCheck(ctx, experimentsDetails, clients, appsUnderTest, resultDetails, eventsDetails, chaosDetails) } // podAutoscalerChaosInStatefulset scales up the replicas of statefulset and verify the status -func podAutoscalerChaosInStatefulset(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, appsUnderTest []experimentTypes.ApplicationUnderTest, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func podAutoscalerChaosInStatefulset(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, appsUnderTest []experimentTypes.ApplicationUnderTest, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // Scale Application retryErr := retries.RetryOnConflict(retries.DefaultRetry, func() error { @@ -216,11 +217,11 @@ func podAutoscalerChaosInStatefulset(experimentsDetails *experimentTypes.Experim } log.Info("[Info]: The application started scaling") - return statefulsetStatusCheck(experimentsDetails, clients, appsUnderTest, resultDetails, eventsDetails, chaosDetails) + return statefulsetStatusCheck(ctx, experimentsDetails, clients, appsUnderTest, resultDetails, eventsDetails, chaosDetails) } // deploymentStatusCheck check the status of deployment and verify the available replicas -func deploymentStatusCheck(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, appsUnderTest []experimentTypes.ApplicationUnderTest, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func deploymentStatusCheck(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, appsUnderTest []experimentTypes.ApplicationUnderTest, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { //ChaosStartTimeStamp contains the start timestamp, when the chaos injection begin ChaosStartTimeStamp := time.Now() @@ -250,7 +251,7 @@ func deploymentStatusCheck(experimentsDetails *experimentTypes.ExperimentDetails // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -265,7 +266,7 @@ func deploymentStatusCheck(experimentsDetails *experimentTypes.ExperimentDetails } // statefulsetStatusCheck check the status of statefulset and verify the available replicas -func statefulsetStatusCheck(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, appsUnderTest []experimentTypes.ApplicationUnderTest, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func statefulsetStatusCheck(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, appsUnderTest []experimentTypes.ApplicationUnderTest, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { //ChaosStartTimeStamp contains the start timestamp, when the chaos injection begin ChaosStartTimeStamp := time.Now() @@ -295,7 +296,7 @@ func statefulsetStatusCheck(experimentsDetails *experimentTypes.ExperimentDetail // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err = probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/pod-cpu-hog-exec/lib/pod-cpu-hog-exec.go b/chaoslib/litmus/pod-cpu-hog-exec/lib/pod-cpu-hog-exec.go index 8fa4eba6f..22d7234a2 100644 --- a/chaoslib/litmus/pod-cpu-hog-exec/lib/pod-cpu-hog-exec.go +++ b/chaoslib/litmus/pod-cpu-hog-exec/lib/pod-cpu-hog-exec.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -11,6 +12,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -28,8 +30,8 @@ import ( var inject chan os.Signal // PrepareCPUExecStress contains the chaos preparation and injection steps -func PrepareCPUExecStress(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectCPUExecStressChaos") +func PrepareCPUExecStress(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectCPUExecStressChaos") defer span.End() // inject channel is used to transmit signal notifications. inject = make(chan os.Signal, 1) @@ -42,7 +44,7 @@ func PrepareCPUExecStress(experimentsDetails *experimentTypes.ExperimentDetails, common.WaitForDuration(experimentsDetails.RampTime) } //Starting the CPU stress experiment - if err := experimentCPU(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err := experimentCPU(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not stress cpu") } //Waiting for the ramp time after chaos injection @@ -66,7 +68,7 @@ func stressCPU(experimentsDetails *experimentTypes.ExperimentDetails, podName, n } // experimentCPU function orchestrates the experiment by calling the StressCPU function for every core, of every container, of every pod that is targeted -func experimentCPU(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func experimentCPU(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // Get the target pod details for the chaos execution // if the target pod is not defined it will derive the random target pod list using pod affected percentage @@ -88,11 +90,11 @@ func experimentCPU(experimentsDetails *experimentTypes.ExperimentDetails, client experimentsDetails.IsTargetContainerProvided = experimentsDetails.TargetContainer != "" switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -103,11 +105,11 @@ func experimentCPU(experimentsDetails *experimentTypes.ExperimentDetails, client } // injectChaosInSerialMode stressed the cpu of all target application serially (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -200,13 +202,13 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode stressed the cpu of all target application in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // creating err channel to receive the error from the go routine stressErr := make(chan error) // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/pod-delete/lib/pod-delete.go b/chaoslib/litmus/pod-delete/lib/pod-delete.go index f66981a91..0553c403f 100644 --- a/chaoslib/litmus/pod-delete/lib/pod-delete.go +++ b/chaoslib/litmus/pod-delete/lib/pod-delete.go @@ -20,12 +20,13 @@ import ( "github.com/litmuschaos/litmus-go/pkg/workloads" "github.com/palantir/stacktrace" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // PreparePodDelete contains the preparation steps before chaos injection -func PreparePodDelete(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodDeleteChaos") +func PreparePodDelete(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodDeleteChaos") defer span.End() //Waiting for the ramp time before chaos injection @@ -44,11 +45,11 @@ func PreparePodDelete(experimentsDetails *experimentTypes.ExperimentDetails, cli switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err := injectChaosInSerialMode(experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { + if err := injectChaosInSerialMode(ctx, experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err := injectChaosInParallelMode(experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { + if err := injectChaosInParallelMode(ctx, experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -64,11 +65,11 @@ func PreparePodDelete(experimentsDetails *experimentTypes.ExperimentDetails, cli } // injectChaosInSerialMode delete the target application pods serial mode(one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -161,11 +162,11 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode delete the target application pods in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/pod-dns-chaos/lib/pod-dns-chaos.go b/chaoslib/litmus/pod-dns-chaos/lib/pod-dns-chaos.go index fe81c0d3c..a0071896c 100644 --- a/chaoslib/litmus/pod-dns-chaos/lib/pod-dns-chaos.go +++ b/chaoslib/litmus/pod-dns-chaos/lib/pod-dns-chaos.go @@ -10,6 +10,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/pod-dns-chaos/types" @@ -26,8 +27,8 @@ import ( ) // PrepareAndInjectChaos contains the preparation & injection steps -func PrepareAndInjectChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodDNSChaos") +func PrepareAndInjectChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodDNSChaos") defer span.End() // Get the target pod details for the chaos execution // if the target pod is not defined it will derive the random target pod list using pod affected percentage @@ -68,11 +69,11 @@ func PrepareAndInjectChaos(experimentsDetails *experimentTypes.ExperimentDetails experimentsDetails.IsTargetContainerProvided = experimentsDetails.TargetContainer != "" switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -83,11 +84,11 @@ func PrepareAndInjectChaos(experimentsDetails *experimentTypes.ExperimentDetails } // injectChaosInSerialMode inject the DNS Chaos in all target application serially (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -106,7 +107,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai "ContainerName": experimentsDetails.TargetContainer, }) runID := stringutils.GetRunID() - if err := createHelperPod(experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer), pod.Spec.NodeName, runID); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer), pod.Spec.NodeName, runID); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -139,12 +140,12 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode inject the DNS Chaos in all target application in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { var err error // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -158,7 +159,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet targetsPerNode = append(targetsPerNode, fmt.Sprintf("%s:%s:%s", k.Name, k.Namespace, k.TargetContainer)) } - if err := createHelperPod(experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } } @@ -195,8 +196,8 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets, nodeName, runID string) error { - span := telemetry.StartTracing(clients, "CreatePodDNSChaosHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets, nodeName, runID string) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreatePodDNSChaosHelperPod") defer span.End() privilegedEnable := true terminationGracePeriodSeconds := int64(experimentsDetails.TerminationGracePeriodSeconds) @@ -239,7 +240,7 @@ func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clie "./helpers -name dns-chaos", }, Resources: chaosDetails.Resources, - Env: getPodEnv(clients.Context, experimentsDetails, targets), + Env: getPodEnv(ctx, experimentsDetails, targets), VolumeMounts: []apiv1.VolumeMount{ { Name: "cri-socket", diff --git a/chaoslib/litmus/pod-fio-stress/lib/pod-fio-stress.go b/chaoslib/litmus/pod-fio-stress/lib/pod-fio-stress.go index 5586a6d5d..0b7cc1389 100644 --- a/chaoslib/litmus/pod-fio-stress/lib/pod-fio-stress.go +++ b/chaoslib/litmus/pod-fio-stress/lib/pod-fio-stress.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -12,6 +13,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/result" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -26,8 +28,8 @@ import ( ) // PrepareChaos contains the chaos preparation and injection steps -func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPidFIOStressChaos") +func PrepareChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPidFIOStressChaos") defer span.End() //Waiting for the ramp time before chaos injection @@ -36,7 +38,7 @@ func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients common.WaitForDuration(experimentsDetails.RampTime) } //Starting the Fio stress experiment - if err := experimentExecution(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err := experimentExecution(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not inject chaos") } //Waiting for the ramp time after chaos injection @@ -70,7 +72,7 @@ func stressStorage(experimentDetails *experimentTypes.ExperimentDetails, podName } // experimentExecution function orchestrates the experiment by calling the StressStorage function, of every container, of every pod that is targeted -func experimentExecution(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func experimentExecution(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // Get the target pod details for the chaos execution // if the target pod is not defined it will derive the random target pod list using pod affected percentage @@ -92,11 +94,11 @@ func experimentExecution(experimentsDetails *experimentTypes.ExperimentDetails, experimentsDetails.IsTargetContainerProvided = experimentsDetails.TargetContainer != "" switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -107,12 +109,12 @@ func experimentExecution(experimentsDetails *experimentTypes.ExperimentDetails, } // injectChaosInSerialMode stressed the storage of all target application in serial mode (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // creating err channel to receive the error from the go routine stressErr := make(chan error) // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -188,12 +190,12 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode stressed the storage of all target application in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // creating err channel to receive the error from the go routine stressErr := make(chan error) // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/pod-memory-hog-exec/lib/pod-memory-hog-exec.go b/chaoslib/litmus/pod-memory-hog-exec/lib/pod-memory-hog-exec.go index ac56694c9..6ae51c8f6 100644 --- a/chaoslib/litmus/pod-memory-hog-exec/lib/pod-memory-hog-exec.go +++ b/chaoslib/litmus/pod-memory-hog-exec/lib/pod-memory-hog-exec.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -12,6 +13,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" @@ -29,8 +31,8 @@ import ( var inject chan os.Signal // PrepareMemoryExecStress contains the chaos preparation and injection steps -func PrepareMemoryExecStress(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodMemoryHogChaos") +func PrepareMemoryExecStress(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodMemoryHogChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -44,7 +46,7 @@ func PrepareMemoryExecStress(experimentsDetails *experimentTypes.ExperimentDetai common.WaitForDuration(experimentsDetails.RampTime) } //Starting the Memory stress experiment - if err := experimentMemory(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err := experimentMemory(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not stress memory") } //Waiting for the ramp time after chaos injection @@ -75,7 +77,7 @@ func stressMemory(MemoryConsumption, containerName, podName, namespace string, c } // experimentMemory function orchestrates the experiment by calling the StressMemory function, of every container, of every pod that is targeted -func experimentMemory(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func experimentMemory(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // Get the target pod details for the chaos execution // if the target pod is not defined it will derive the random target pod list using pod affected percentage @@ -97,11 +99,11 @@ func experimentMemory(experimentsDetails *experimentTypes.ExperimentDetails, cli experimentsDetails.IsTargetContainerProvided = experimentsDetails.TargetContainer != "" switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetPodList, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -112,11 +114,11 @@ func experimentMemory(experimentsDetails *experimentTypes.ExperimentDetails, cli } // injectChaosInSerialMode stressed the memory of all target application serially (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -206,12 +208,12 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode stressed the memory of all target application in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList corev1.PodList, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // creating err channel to receive the error from the go routine stressErr := make(chan error) // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/pod-network-partition/lib/pod-network-partition.go b/chaoslib/litmus/pod-network-partition/lib/pod-network-partition.go index 7292c33e3..79fffbe69 100644 --- a/chaoslib/litmus/pod-network-partition/lib/pod-network-partition.go +++ b/chaoslib/litmus/pod-network-partition/lib/pod-network-partition.go @@ -12,6 +12,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/pod-network-partition/types" @@ -33,8 +34,8 @@ var ( ) // PrepareAndInjectChaos contains the prepration & injection steps -func PrepareAndInjectChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectPodNetworkPartitionChaos") +func PrepareAndInjectChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectPodNetworkPartitionChaos") defer span.End() // inject channel is used to transmit signal notifications. @@ -94,7 +95,7 @@ func PrepareAndInjectChaos(experimentsDetails *experimentTypes.ExperimentDetails // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } diff --git a/chaoslib/litmus/redfish-node-restart/lib/redfish-node-restart.go b/chaoslib/litmus/redfish-node-restart/lib/redfish-node-restart.go index a010f049a..bd76590ad 100644 --- a/chaoslib/litmus/redfish-node-restart/lib/redfish-node-restart.go +++ b/chaoslib/litmus/redfish-node-restart/lib/redfish-node-restart.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "time" @@ -14,6 +15,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" ) // injectChaos initiates node restart chaos on the target node @@ -23,11 +25,11 @@ func injectChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients } // experimentExecution function orchestrates the experiment by calling the injectChaos function -func experimentExecution(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func experimentExecution(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -48,8 +50,8 @@ func experimentExecution(experimentsDetails *experimentTypes.ExperimentDetails, } // PrepareChaos contains the chaos prepration and injection steps -func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectRedfishNodeRestartChaos") +func PrepareChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectRedfishNodeRestartChaos") defer span.End() //Waiting for the ramp time before chaos injection @@ -58,7 +60,7 @@ func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients common.WaitForDuration(experimentsDetails.RampTime) } //Starting the Redfish node restart experiment - if err := experimentExecution(experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err := experimentExecution(ctx, experimentsDetails, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return err } common.SetTargets(experimentsDetails.IPMIIP, "targeted", "node", chaosDetails) diff --git a/chaoslib/litmus/spring-boot-chaos/lib/spring-boot-chaos.go b/chaoslib/litmus/spring-boot-chaos/lib/spring-boot-chaos.go index 3e22a58fb..29fe4f7c0 100644 --- a/chaoslib/litmus/spring-boot-chaos/lib/spring-boot-chaos.go +++ b/chaoslib/litmus/spring-boot-chaos/lib/spring-boot-chaos.go @@ -2,6 +2,7 @@ package lib import ( "bytes" + "context" "encoding/json" "fmt" "net/http" @@ -14,6 +15,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" corev1 "k8s.io/api/core/v1" "github.com/litmuschaos/litmus-go/pkg/clients" @@ -52,8 +54,8 @@ func SetTargetPodList(experimentsDetails *experimentTypes.ExperimentDetails, cli } // PrepareChaos contains the preparation steps before chaos injection -func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectSpringBootChaos") +func PrepareChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectSpringBootChaos") defer span.End() // Waiting for the ramp time before chaos injection @@ -73,11 +75,11 @@ func PrepareChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err := injectChaosInSerialMode(experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { + if err := injectChaosInSerialMode(ctx, experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err := injectChaosInParallelMode(experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { + if err := injectChaosInParallelMode(ctx, experimentsDetails, clients, chaosDetails, eventsDetails, resultDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -191,7 +193,7 @@ func setChaosMonkeyAssault(chaosMonkeyPort string, chaosMonkeyPath string, assau } // disableChaosMonkey disables chaos monkey on selected pods -func disableChaosMonkey(chaosMonkeyPort string, chaosMonkeyPath string, pod corev1.Pod) error { +func disableChaosMonkey(ctx context.Context, chaosMonkeyPort string, chaosMonkeyPath string, pod corev1.Pod) error { log.Infof("[Chaos]: disabling assaults on pod %s", pod.Name) jsonValue, err := json.Marshal(revertAssault) if err != nil { @@ -215,11 +217,11 @@ func disableChaosMonkey(chaosMonkeyPort string, chaosMonkeyPath string, pod core } // injectChaosInSerialMode injects chaos monkey assault on pods in serial mode(one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -273,7 +275,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai select { case <-signChan: log.Info("[Chaos]: Revert Started") - if err := disableChaosMonkey(experimentsDetails.ChaosMonkeyPort, experimentsDetails.ChaosMonkeyPath, pod); err != nil { + if err := disableChaosMonkey(ctx, experimentsDetails.ChaosMonkeyPort, experimentsDetails.ChaosMonkeyPath, pod); err != nil { log.Errorf("Error in disabling chaos monkey, err: %v", err) } else { common.SetTargets(pod.Name, "reverted", "pod", chaosDetails) @@ -291,7 +293,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } } - if err := disableChaosMonkey(experimentsDetails.ChaosMonkeyPort, experimentsDetails.ChaosMonkeyPath, pod); err != nil { + if err := disableChaosMonkey(ctx, experimentsDetails.ChaosMonkeyPort, experimentsDetails.ChaosMonkeyPath, pod); err != nil { return err } @@ -303,11 +305,11 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode injects chaos monkey assault on pods in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, eventsDetails *types.EventDetails, resultDetails *types.ResultDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -362,7 +364,7 @@ loop: case <-signChan: log.Info("[Chaos]: Revert Started") for _, pod := range experimentsDetails.TargetPodList.Items { - if err := disableChaosMonkey(experimentsDetails.ChaosMonkeyPort, experimentsDetails.ChaosMonkeyPath, pod); err != nil { + if err := disableChaosMonkey(ctx, experimentsDetails.ChaosMonkeyPort, experimentsDetails.ChaosMonkeyPath, pod); err != nil { log.Errorf("Error in disabling chaos monkey, err: %v", err) } else { common.SetTargets(pod.Name, "reverted", "pod", chaosDetails) @@ -383,7 +385,7 @@ loop: var errorList []string for _, pod := range experimentsDetails.TargetPodList.Items { - if err := disableChaosMonkey(experimentsDetails.ChaosMonkeyPort, experimentsDetails.ChaosMonkeyPath, pod); err != nil { + if err := disableChaosMonkey(ctx, experimentsDetails.ChaosMonkeyPort, experimentsDetails.ChaosMonkeyPath, pod); err != nil { errorList = append(errorList, err.Error()) continue } diff --git a/chaoslib/litmus/stress-chaos/lib/stress-chaos.go b/chaoslib/litmus/stress-chaos/lib/stress-chaos.go index 73ef6b458..8aa6a8461 100644 --- a/chaoslib/litmus/stress-chaos/lib/stress-chaos.go +++ b/chaoslib/litmus/stress-chaos/lib/stress-chaos.go @@ -10,6 +10,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cerrors" "github.com/litmuschaos/litmus-go/pkg/telemetry" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" "github.com/litmuschaos/litmus-go/pkg/clients" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/stress-chaos/types" @@ -25,8 +26,8 @@ import ( ) // PrepareAndInjectStressChaos contains the prepration & injection steps for the stress experiments. -func PrepareAndInjectStressChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { - span := telemetry.StartTracing(clients, "InjectStressChaos") +func PrepareAndInjectStressChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectStressChaos") defer span.End() var err error //Set up the tunables if provided in range @@ -92,11 +93,11 @@ func PrepareAndInjectStressChaos(experimentsDetails *experimentTypes.ExperimentD experimentsDetails.IsTargetContainerProvided = experimentsDetails.TargetContainer != "" switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err = injectChaosInSerialMode(experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { + if err = injectChaosInSerialMode(ctx, experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err = injectChaosInParallelMode(experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { + if err = injectChaosInParallelMode(ctx, experimentsDetails, targetPodList, clients, chaosDetails, resultDetails, eventsDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -107,11 +108,11 @@ func PrepareAndInjectStressChaos(experimentsDetails *experimentTypes.ExperimentD } // injectChaosInSerialMode inject the stress chaos in all target application serially (one by one) -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -130,7 +131,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai "ContainerName": experimentsDetails.TargetContainer, }) runID := stringutils.GetRunID() - if err := createHelperPod(experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer), pod.Spec.NodeName, runID); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, fmt.Sprintf("%s:%s:%s", pod.Name, pod.Namespace, experimentsDetails.TargetContainer), pod.Spec.NodeName, runID); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } @@ -163,12 +164,12 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode inject the stress chaos in all target application in parallel mode (all at once) -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, targetPodList apiv1.PodList, clients clients.ClientSets, chaosDetails *types.ChaosDetails, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails) error { var err error // run the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return err } } @@ -182,7 +183,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet targetsPerNode = append(targetsPerNode, fmt.Sprintf("%s:%s:%s", k.Name, k.Namespace, k.TargetContainer)) } - if err := createHelperPod(experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID); err != nil { + if err := createHelperPod(ctx, experimentsDetails, clients, chaosDetails, strings.Join(targetsPerNode, ";"), node, runID); err != nil { return stacktrace.Propagate(err, "could not create helper pod") } } @@ -216,8 +217,8 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet } // createHelperPod derive the attributes for helper pod and create the helper pod -func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets, nodeName, runID string) error { - span := telemetry.StartTracing(clients, "CreateStressHelperPod") +func createHelperPod(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, chaosDetails *types.ChaosDetails, targets, nodeName, runID string) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "CreateStressHelperPod") defer span.End() privilegedEnable := true @@ -270,7 +271,7 @@ func createHelperPod(experimentsDetails *experimentTypes.ExperimentDetails, clie "./helpers -name stress-chaos", }, Resources: chaosDetails.Resources, - Env: getPodEnv(clients.Context, experimentsDetails, targets), + Env: getPodEnv(ctx, experimentsDetails, targets), VolumeMounts: []apiv1.VolumeMount{ { Name: "socket-path", diff --git a/chaoslib/litmus/vm-poweroff/lib/vm-poweroff.go b/chaoslib/litmus/vm-poweroff/lib/vm-poweroff.go index 97f59a9bb..084ceff6b 100644 --- a/chaoslib/litmus/vm-poweroff/lib/vm-poweroff.go +++ b/chaoslib/litmus/vm-poweroff/lib/vm-poweroff.go @@ -1,6 +1,7 @@ package lib import ( + "context" "fmt" "os" "os/signal" @@ -19,13 +20,14 @@ import ( "github.com/litmuschaos/litmus-go/pkg/utils/common" experimentTypes "github.com/litmuschaos/litmus-go/pkg/vmware/vm-poweroff/types" "github.com/palantir/stacktrace" + "go.opentelemetry.io/otel" ) var inject, abort chan os.Signal // InjectVMPowerOffChaos injects the chaos in serial or parallel mode -func InjectVMPowerOffChaos(experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails, cookie string) error { - span := telemetry.StartTracing(clients, "InjectVMPowerOffChaos") +func InjectVMPowerOffChaos(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails, cookie string) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "InjectVMPowerOffChaos") defer span.End() // inject channel is used to transmit signal notifications. inject = make(chan os.Signal, 1) @@ -51,11 +53,11 @@ func InjectVMPowerOffChaos(experimentsDetails *experimentTypes.ExperimentDetails switch strings.ToLower(experimentsDetails.Sequence) { case "serial": - if err := injectChaosInSerialMode(experimentsDetails, vmIdList, cookie, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err := injectChaosInSerialMode(ctx, experimentsDetails, vmIdList, cookie, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in serial mode") } case "parallel": - if err := injectChaosInParallelMode(experimentsDetails, vmIdList, cookie, clients, resultDetails, eventsDetails, chaosDetails); err != nil { + if err := injectChaosInParallelMode(ctx, experimentsDetails, vmIdList, cookie, clients, resultDetails, eventsDetails, chaosDetails); err != nil { return stacktrace.Propagate(err, "could not run chaos in parallel mode") } default: @@ -72,7 +74,7 @@ func InjectVMPowerOffChaos(experimentsDetails *experimentTypes.ExperimentDetails } // injectChaosInSerialMode stops VMs in serial mode i.e. one after the other -func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetails, vmIdList []string, cookie string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInSerialMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, vmIdList []string, cookie string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: // stopping the chaos execution, if abort signal received @@ -111,7 +113,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai //Run the probes during the chaos //The OnChaos probes execution will start in the first iteration and keep running for the entire chaos duration if len(resultDetails.ProbeDetails) != 0 && i == 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } @@ -143,7 +145,7 @@ func injectChaosInSerialMode(experimentsDetails *experimentTypes.ExperimentDetai } // injectChaosInParallelMode stops VMs in parallel mode i.e. all at once -func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDetails, vmIdList []string, cookie string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { +func injectChaosInParallelMode(ctx context.Context, experimentsDetails *experimentTypes.ExperimentDetails, vmIdList []string, cookie string, clients clients.ClientSets, resultDetails *types.ResultDetails, eventsDetails *types.EventDetails, chaosDetails *types.ChaosDetails) error { select { case <-inject: @@ -186,7 +188,7 @@ func injectChaosInParallelMode(experimentsDetails *experimentTypes.ExperimentDet //Running the probes during chaos if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { + if err := probe.RunProbes(ctx, chaosDetails, clients, resultDetails, "DuringChaos", eventsDetails); err != nil { return stacktrace.Propagate(err, "failed to run probes") } } diff --git a/experiments/aws-ssm/aws-ssm-chaos-by-id/experiment/aws-ssm-chaos-by-id.go b/experiments/aws-ssm/aws-ssm-chaos-by-id/experiment/aws-ssm-chaos-by-id.go index cf3445cf2..4edeaf6d3 100644 --- a/experiments/aws-ssm/aws-ssm-chaos-by-id/experiment/aws-ssm-chaos-by-id.go +++ b/experiments/aws-ssm/aws-ssm-chaos-by-id/experiment/aws-ssm-chaos-by-id.go @@ -1,13 +1,14 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/aws-ssm-chaos/lib/ssm" experimentEnv "github.com/litmuschaos/litmus-go/pkg/aws-ssm/aws-ssm-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/aws-ssm/aws-ssm-chaos/types" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" ec2 "github.com/litmuschaos/litmus-go/pkg/cloud/aws/ec2" "github.com/litmuschaos/litmus-go/pkg/cloud/aws/ssm" "github.com/litmuschaos/litmus-go/pkg/events" @@ -20,7 +21,7 @@ import ( ) // AWSSSMChaosByID inject the ssm chaos on ec2 instance -func AWSSSMChaosByID(clients clients.ClientSets) { +func AWSSSMChaosByID(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -80,7 +81,7 @@ func AWSSSMChaosByID(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -118,7 +119,7 @@ func AWSSSMChaosByID(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareAWSSSMChaosByID(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareAWSSSMChaosByID(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) //Delete the ssm document on the given aws service monitoring docs @@ -152,7 +153,7 @@ func AWSSSMChaosByID(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/aws-ssm/aws-ssm-chaos-by-tag/experiment/aws-ssm-chaos-by-tag.go b/experiments/aws-ssm/aws-ssm-chaos-by-tag/experiment/aws-ssm-chaos-by-tag.go index d287e4be6..1799ac322 100644 --- a/experiments/aws-ssm/aws-ssm-chaos-by-tag/experiment/aws-ssm-chaos-by-tag.go +++ b/experiments/aws-ssm/aws-ssm-chaos-by-tag/experiment/aws-ssm-chaos-by-tag.go @@ -1,13 +1,14 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/aws-ssm-chaos/lib/ssm" experimentEnv "github.com/litmuschaos/litmus-go/pkg/aws-ssm/aws-ssm-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/aws-ssm/aws-ssm-chaos/types" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" ec2 "github.com/litmuschaos/litmus-go/pkg/cloud/aws/ec2" "github.com/litmuschaos/litmus-go/pkg/cloud/aws/ssm" "github.com/litmuschaos/litmus-go/pkg/events" @@ -20,7 +21,7 @@ import ( ) // AWSSSMChaosByTag inject the ssm chaos on ec2 instance -func AWSSSMChaosByTag(clients clients.ClientSets) { +func AWSSSMChaosByTag(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -88,7 +89,7 @@ func AWSSSMChaosByTag(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -109,7 +110,7 @@ func AWSSSMChaosByTag(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareAWSSSMChaosByTag(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareAWSSSMChaosByTag(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) //Delete the ssm document on the given aws service monitoring docs @@ -143,7 +144,7 @@ func AWSSSMChaosByTag(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/azure/azure-disk-loss/experiment/azure-disk-loss.go b/experiments/azure/azure-disk-loss/experiment/azure-disk-loss.go index 9887f81bd..85507b7ad 100644 --- a/experiments/azure/azure-disk-loss/experiment/azure-disk-loss.go +++ b/experiments/azure/azure-disk-loss/experiment/azure-disk-loss.go @@ -1,13 +1,14 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/azure-disk-loss/lib" experimentEnv "github.com/litmuschaos/litmus-go/pkg/azure/disk-loss/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/azure/disk-loss/types" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" azureCommon "github.com/litmuschaos/litmus-go/pkg/cloud/azure/common" azureStatus "github.com/litmuschaos/litmus-go/pkg/cloud/azure/disk" "github.com/litmuschaos/litmus-go/pkg/events" @@ -20,7 +21,7 @@ import ( ) // AzureDiskLoss contains steps to inject chaos -func AzureDiskLoss(clients clients.ClientSets) { +func AzureDiskLoss(ctx context.Context, clients clients.ClientSets) { var err error experimentsDetails := experimentTypes.ExperimentDetails{} @@ -99,7 +100,7 @@ func AzureDiskLoss(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -120,7 +121,7 @@ func AzureDiskLoss(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err = litmusLIB.PrepareChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err = litmusLIB.PrepareChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) log.Errorf("Chaos injection failed: %v", err) return @@ -147,7 +148,7 @@ func AzureDiskLoss(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/azure/instance-stop/experiment/azure-instance-stop.go b/experiments/azure/instance-stop/experiment/azure-instance-stop.go index a934c5302..74b3424c8 100644 --- a/experiments/azure/instance-stop/experiment/azure-instance-stop.go +++ b/experiments/azure/instance-stop/experiment/azure-instance-stop.go @@ -1,13 +1,14 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/azure-instance-stop/lib" experimentEnv "github.com/litmuschaos/litmus-go/pkg/azure/instance-stop/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/azure/instance-stop/types" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" azureCommon "github.com/litmuschaos/litmus-go/pkg/cloud/azure/common" azureStatus "github.com/litmuschaos/litmus-go/pkg/cloud/azure/instance" @@ -21,7 +22,7 @@ import ( ) // AzureInstanceStop inject the azure instance stop chaos -func AzureInstanceStop(clients clients.ClientSets) { +func AzureInstanceStop(ctx context.Context, clients clients.ClientSets) { var err error experimentsDetails := experimentTypes.ExperimentDetails{} @@ -90,7 +91,7 @@ func AzureInstanceStop(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails) + err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails) if err != nil { log.Errorf("Probe Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" @@ -122,7 +123,7 @@ func AzureInstanceStop(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err = litmusLIB.PrepareAzureStop(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err = litmusLIB.PrepareAzureStop(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -149,7 +150,7 @@ func AzureInstanceStop(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails) + err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails) if err != nil { log.Errorf("Probes Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" diff --git a/experiments/baremetal/redfish-node-restart/experiment/redfish-node-restart.go b/experiments/baremetal/redfish-node-restart/experiment/redfish-node-restart.go index e0d9a1b45..7b9ae654d 100644 --- a/experiments/baremetal/redfish-node-restart/experiment/redfish-node-restart.go +++ b/experiments/baremetal/redfish-node-restart/experiment/redfish-node-restart.go @@ -1,6 +1,7 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" @@ -8,7 +9,7 @@ import ( redfishLib "github.com/litmuschaos/litmus-go/pkg/baremetal/redfish" experimentEnv "github.com/litmuschaos/litmus-go/pkg/baremetal/redfish-node-restart/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/baremetal/redfish-node-restart/types" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" "github.com/litmuschaos/litmus-go/pkg/log" "github.com/litmuschaos/litmus-go/pkg/probe" @@ -20,7 +21,7 @@ import ( ) // NodeRestart contains steps to inject chaos -func NodeRestart(clients clients.ClientSets) { +func NodeRestart(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -112,7 +113,7 @@ func NodeRestart(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "NUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -129,7 +130,7 @@ func NodeRestart(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) log.Errorf("Chaos injection failed, err: %v", err) return @@ -181,7 +182,7 @@ func NodeRestart(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "NUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/cassandra/pod-delete/experiment/pod-delete.go b/experiments/cassandra/pod-delete/experiment/pod-delete.go index c4af00d31..6e7417d48 100644 --- a/experiments/cassandra/pod-delete/experiment/pod-delete.go +++ b/experiments/cassandra/pod-delete/experiment/pod-delete.go @@ -1,6 +1,7 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" @@ -8,7 +9,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/cassandra" experimentEnv "github.com/litmuschaos/litmus-go/pkg/cassandra/pod-delete/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/cassandra/pod-delete/types" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" "github.com/litmuschaos/litmus-go/pkg/log" "github.com/litmuschaos/litmus-go/pkg/probe" @@ -20,7 +21,7 @@ import ( ) // CasssandraPodDelete inject the cassandra-pod-delete chaos -func CasssandraPodDelete(clients clients.ClientSets) { +func CasssandraPodDelete(ctx context.Context, clients clients.ClientSets) { var err error var ResourceVersionBefore string @@ -102,7 +103,7 @@ func CasssandraPodDelete(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg = common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -132,7 +133,7 @@ func CasssandraPodDelete(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err = litmusLIB.PreparePodDelete(experimentsDetails.ChaoslibDetail, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err = litmusLIB.PreparePodDelete(ctx, experimentsDetails.ChaoslibDetail, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -169,7 +170,7 @@ func CasssandraPodDelete(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg = common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/gcp/gcp-vm-disk-loss-by-label/experiment/gcp-vm-disk-loss-by-label.go b/experiments/gcp/gcp-vm-disk-loss-by-label/experiment/gcp-vm-disk-loss-by-label.go index 446d6aa3f..644aea20f 100644 --- a/experiments/gcp/gcp-vm-disk-loss-by-label/experiment/gcp-vm-disk-loss-by-label.go +++ b/experiments/gcp/gcp-vm-disk-loss-by-label/experiment/gcp-vm-disk-loss-by-label.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/gcp-vm-disk-loss-by-label/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/cloud/gcp" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/gcp/gcp-vm-disk-loss/environment" @@ -20,7 +21,7 @@ import ( ) // GCPVMDiskLossByLabel contains steps to inject chaos -func GCPVMDiskLossByLabel(clients clients.ClientSets) { +func GCPVMDiskLossByLabel(ctx context.Context, clients clients.ClientSets) { var ( computeService *compute.Service @@ -83,7 +84,7 @@ func GCPVMDiskLossByLabel(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -117,7 +118,7 @@ func GCPVMDiskLossByLabel(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareDiskVolumeLossByLabel(computeService, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareDiskVolumeLossByLabel(ctx, computeService, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -146,7 +147,7 @@ func GCPVMDiskLossByLabel(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/gcp/gcp-vm-disk-loss/experiment/gcp-vm-disk-loss.go b/experiments/gcp/gcp-vm-disk-loss/experiment/gcp-vm-disk-loss.go index abb182a9e..be1adbc8a 100644 --- a/experiments/gcp/gcp-vm-disk-loss/experiment/gcp-vm-disk-loss.go +++ b/experiments/gcp/gcp-vm-disk-loss/experiment/gcp-vm-disk-loss.go @@ -1,12 +1,13 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/gcp-vm-disk-loss/lib" "github.com/litmuschaos/litmus-go/pkg/clients" - gcp "github.com/litmuschaos/litmus-go/pkg/cloud/gcp" + "github.com/litmuschaos/litmus-go/pkg/cloud/gcp" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/gcp/gcp-vm-disk-loss/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/gcp/gcp-vm-disk-loss/types" @@ -20,7 +21,7 @@ import ( ) // VMDiskLoss injects the disk volume loss chaos -func VMDiskLoss(clients clients.ClientSets) { +func VMDiskLoss(ctx context.Context, clients clients.ClientSets) { var ( computeService *compute.Service @@ -83,7 +84,7 @@ func VMDiskLoss(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -125,7 +126,7 @@ func VMDiskLoss(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err = litmusLIB.PrepareDiskVolumeLoss(computeService, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err = litmusLIB.PrepareDiskVolumeLoss(ctx, computeService, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -152,7 +153,7 @@ func VMDiskLoss(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/gcp/gcp-vm-instance-stop-by-label/experiment/gcp-vm-instance-stop-by-label.go b/experiments/gcp/gcp-vm-instance-stop-by-label/experiment/gcp-vm-instance-stop-by-label.go index a4075b0ac..30dc7d7c5 100644 --- a/experiments/gcp/gcp-vm-instance-stop-by-label/experiment/gcp-vm-instance-stop-by-label.go +++ b/experiments/gcp/gcp-vm-instance-stop-by-label/experiment/gcp-vm-instance-stop-by-label.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/gcp-vm-instance-stop-by-label/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/cloud/gcp" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/gcp/gcp-vm-instance-stop/environment" @@ -20,7 +21,7 @@ import ( ) // GCPVMInstanceStopByLabel contains steps to inject chaos -func GCPVMInstanceStopByLabel(clients clients.ClientSets) { +func GCPVMInstanceStopByLabel(ctx context.Context, clients clients.ClientSets) { var ( computeService *compute.Service @@ -84,7 +85,7 @@ func GCPVMInstanceStopByLabel(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -118,7 +119,7 @@ func GCPVMInstanceStopByLabel(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareVMStopByLabel(computeService, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareVMStopByLabel(ctx, computeService, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -146,7 +147,7 @@ func GCPVMInstanceStopByLabel(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/gcp/gcp-vm-instance-stop/experiment/gcp-vm-instance-stop.go b/experiments/gcp/gcp-vm-instance-stop/experiment/gcp-vm-instance-stop.go index 7f3cbfb1b..8da11f7f7 100644 --- a/experiments/gcp/gcp-vm-instance-stop/experiment/gcp-vm-instance-stop.go +++ b/experiments/gcp/gcp-vm-instance-stop/experiment/gcp-vm-instance-stop.go @@ -1,6 +1,7 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" @@ -20,7 +21,7 @@ import ( ) // VMInstanceStop executes the experiment steps by injecting chaos into the specified vm instances -func VMInstanceStop(clients clients.ClientSets) { +func VMInstanceStop(ctx context.Context, clients clients.ClientSets) { var ( computeService *compute.Service @@ -83,7 +84,7 @@ func VMInstanceStop(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -119,7 +120,7 @@ func VMInstanceStop(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareVMStop(computeService, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareVMStop(ctx, computeService, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -147,7 +148,7 @@ func VMInstanceStop(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/container-kill/experiment/container-kill.go b/experiments/generic/container-kill/experiment/container-kill.go index 7c06c37fc..05d3f8f80 100644 --- a/experiments/generic/container-kill/experiment/container-kill.go +++ b/experiments/generic/container-kill/experiment/container-kill.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/container-kill/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/container-kill/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/container-kill/types" @@ -19,7 +20,7 @@ import ( ) // ContainerKill inject the container-kill chaos -func ContainerKill(clients clients.ClientSets) { +func ContainerKill(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -90,7 +91,7 @@ func ContainerKill(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg = common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -106,7 +107,7 @@ func ContainerKill(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareContainerKill(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareContainerKill(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -134,7 +135,7 @@ func ContainerKill(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg = common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/disk-fill/experiment/disk-fill.go b/experiments/generic/disk-fill/experiment/disk-fill.go index 4e8a73741..19546d0e6 100644 --- a/experiments/generic/disk-fill/experiment/disk-fill.go +++ b/experiments/generic/disk-fill/experiment/disk-fill.go @@ -1,9 +1,12 @@ package experiment import ( + "context" + "os" + "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/disk-fill/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/disk-fill/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/disk-fill/types" @@ -14,11 +17,10 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/litmuschaos/litmus-go/pkg/utils/common" "github.com/sirupsen/logrus" - "os" ) // DiskFill inject the disk-fill chaos -func DiskFill(clients clients.ClientSets) { +func DiskFill(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -88,7 +90,7 @@ func DiskFill(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg = common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -104,7 +106,7 @@ func DiskFill(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareDiskFill(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareDiskFill(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -132,7 +134,7 @@ func DiskFill(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg = common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/docker-service-kill/experiment/docker-service-kill.go b/experiments/generic/docker-service-kill/experiment/docker-service-kill.go index f93156e4f..06ed1d565 100644 --- a/experiments/generic/docker-service-kill/experiment/docker-service-kill.go +++ b/experiments/generic/docker-service-kill/experiment/docker-service-kill.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/docker-service-kill/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/docker-service-kill/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/docker-service-kill/types" @@ -19,7 +20,7 @@ import ( ) // DockerServiceKill inject the docker-service-kill chaos -func DockerServiceKill(clients clients.ClientSets) { +func DockerServiceKill(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -107,7 +108,7 @@ func DockerServiceKill(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -123,7 +124,7 @@ func DockerServiceKill(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareDockerServiceKill(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareDockerServiceKill(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) log.Errorf("Chaos injection failed, err: %v", err) return @@ -167,7 +168,7 @@ func DockerServiceKill(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/kubelet-service-kill/experiment/kubelet-service-kill.go b/experiments/generic/kubelet-service-kill/experiment/kubelet-service-kill.go index 2aaebafd1..c78f065ed 100644 --- a/experiments/generic/kubelet-service-kill/experiment/kubelet-service-kill.go +++ b/experiments/generic/kubelet-service-kill/experiment/kubelet-service-kill.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/kubelet-service-kill/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/kubelet-service-kill/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/kubelet-service-kill/types" @@ -19,7 +20,7 @@ import ( ) // KubeletServiceKill inject the kubelet-service-kill chaos -func KubeletServiceKill(clients clients.ClientSets) { +func KubeletServiceKill(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -107,7 +108,7 @@ func KubeletServiceKill(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -123,7 +124,7 @@ func KubeletServiceKill(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareKubeletKill(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareKubeletKill(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -167,7 +168,7 @@ func KubeletServiceKill(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/node-cpu-hog/experiment/node-cpu-hog.go b/experiments/generic/node-cpu-hog/experiment/node-cpu-hog.go index a035acfdf..5fbd0248a 100644 --- a/experiments/generic/node-cpu-hog/experiment/node-cpu-hog.go +++ b/experiments/generic/node-cpu-hog/experiment/node-cpu-hog.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/node-cpu-hog/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/node-cpu-hog/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/node-cpu-hog/types" @@ -19,7 +20,7 @@ import ( ) // NodeCPUHog inject the node-cpu-hog chaos -func NodeCPUHog(clients clients.ClientSets) { +func NodeCPUHog(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -108,7 +109,7 @@ func NodeCPUHog(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -124,7 +125,7 @@ func NodeCPUHog(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareNodeCPUHog(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareNodeCPUHog(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("[Error]: CPU hog failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -168,7 +169,7 @@ func NodeCPUHog(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/node-drain/experiment/node-drain.go b/experiments/generic/node-drain/experiment/node-drain.go index 8e709bcd2..9b6533b17 100644 --- a/experiments/generic/node-drain/experiment/node-drain.go +++ b/experiments/generic/node-drain/experiment/node-drain.go @@ -1,6 +1,7 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" @@ -19,7 +20,7 @@ import ( ) // NodeDrain inject the node-drain chaos -func NodeDrain(clients clients.ClientSets) { +func NodeDrain(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -107,7 +108,7 @@ func NodeDrain(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -123,7 +124,7 @@ func NodeDrain(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareNodeDrain(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareNodeDrain(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -167,7 +168,7 @@ func NodeDrain(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/node-io-stress/experiment/node-io-stress.go b/experiments/generic/node-io-stress/experiment/node-io-stress.go index 1b76fa841..a58e0f2e5 100644 --- a/experiments/generic/node-io-stress/experiment/node-io-stress.go +++ b/experiments/generic/node-io-stress/experiment/node-io-stress.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/node-io-stress/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/node-io-stress/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/node-io-stress/types" @@ -19,7 +20,7 @@ import ( ) // NodeIOStress inject the node-io-stress chaos -func NodeIOStress(clients clients.ClientSets) { +func NodeIOStress(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -110,7 +111,7 @@ func NodeIOStress(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -126,7 +127,7 @@ func NodeIOStress(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareNodeIOStress(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareNodeIOStress(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("[Error]: node io stress failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -170,7 +171,7 @@ func NodeIOStress(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/node-memory-hog/experiment/node-memory-hog.go b/experiments/generic/node-memory-hog/experiment/node-memory-hog.go index 3c5dea5b8..cd040c5a0 100644 --- a/experiments/generic/node-memory-hog/experiment/node-memory-hog.go +++ b/experiments/generic/node-memory-hog/experiment/node-memory-hog.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/node-memory-hog/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/node-memory-hog/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/node-memory-hog/types" @@ -19,7 +20,7 @@ import ( ) // NodeMemoryHog inject the node-memory-hog chaos -func NodeMemoryHog(clients clients.ClientSets) { +func NodeMemoryHog(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -109,7 +110,7 @@ func NodeMemoryHog(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -125,7 +126,7 @@ func NodeMemoryHog(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareNodeMemoryHog(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareNodeMemoryHog(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("[Error]: node memory hog failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -169,7 +170,7 @@ func NodeMemoryHog(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/node-restart/experiment/node-restart.go b/experiments/generic/node-restart/experiment/node-restart.go index cf6084a07..788836f76 100644 --- a/experiments/generic/node-restart/experiment/node-restart.go +++ b/experiments/generic/node-restart/experiment/node-restart.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/node-restart/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/node-restart/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/node-restart/types" @@ -19,7 +20,7 @@ import ( ) // NodeRestart inject the node-restart chaos -func NodeRestart(clients clients.ClientSets) { +func NodeRestart(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -107,7 +108,7 @@ func NodeRestart(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -123,7 +124,7 @@ func NodeRestart(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareNodeRestart(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareNodeRestart(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("[Error]: Node restart failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -167,7 +168,7 @@ func NodeRestart(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/node-taint/experiment/node-taint.go b/experiments/generic/node-taint/experiment/node-taint.go index 834c36119..9468e1c9d 100644 --- a/experiments/generic/node-taint/experiment/node-taint.go +++ b/experiments/generic/node-taint/experiment/node-taint.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/node-taint/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/node-taint/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/node-taint/types" @@ -19,7 +20,7 @@ import ( ) // NodeTaint inject the node-taint chaos -func NodeTaint(clients clients.ClientSets) { +func NodeTaint(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -108,7 +109,7 @@ func NodeTaint(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -124,7 +125,7 @@ func NodeTaint(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareNodeTaint(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareNodeTaint(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -168,7 +169,7 @@ func NodeTaint(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "NUT: Ready, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-autoscaler/experiment/pod-autoscaler.go b/experiments/generic/pod-autoscaler/experiment/pod-autoscaler.go index 5930959db..b7b78b8c5 100644 --- a/experiments/generic/pod-autoscaler/experiment/pod-autoscaler.go +++ b/experiments/generic/pod-autoscaler/experiment/pod-autoscaler.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/pod-autoscaler/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/pod-autoscaler/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/pod-autoscaler/types" @@ -19,7 +20,7 @@ import ( ) // PodAutoscaler inject the pod-autoscaler chaos -func PodAutoscaler(clients clients.ClientSets) { +func PodAutoscaler(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -91,7 +92,7 @@ func PodAutoscaler(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -107,7 +108,7 @@ func PodAutoscaler(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PreparePodAutoscaler(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PreparePodAutoscaler(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -136,7 +137,7 @@ func PodAutoscaler(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-cpu-hog-exec/experiment/pod-cpu-hog-exec.go b/experiments/generic/pod-cpu-hog-exec/experiment/pod-cpu-hog-exec.go index 49b7c2b75..396d74c04 100644 --- a/experiments/generic/pod-cpu-hog-exec/experiment/pod-cpu-hog-exec.go +++ b/experiments/generic/pod-cpu-hog-exec/experiment/pod-cpu-hog-exec.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/pod-cpu-hog-exec/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/pod-cpu-hog-exec/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/pod-cpu-hog-exec/types" @@ -19,7 +20,7 @@ import ( ) // PodCPUHogExec inject the pod-cpu-hog-exec chaos -func PodCPUHogExec(clients clients.ClientSets) { +func PodCPUHogExec(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -90,7 +91,7 @@ func PodCPUHogExec(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -106,7 +107,7 @@ func PodCPUHogExec(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareCPUExecStress(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareCPUExecStress(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("[Error]: CPU hog failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -134,7 +135,7 @@ func PodCPUHogExec(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-cpu-hog/experiment/pod-cpu-hog.go b/experiments/generic/pod-cpu-hog/experiment/pod-cpu-hog.go index ded331c6c..6ad9c212a 100644 --- a/experiments/generic/pod-cpu-hog/experiment/pod-cpu-hog.go +++ b/experiments/generic/pod-cpu-hog/experiment/pod-cpu-hog.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/stress-chaos/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/stress-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/stress-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodCPUHog inject the pod-cpu-hog chaos -func PodCPUHog(clients clients.ClientSets) { +func PodCPUHog(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -90,7 +91,7 @@ func PodCPUHog(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -106,7 +107,7 @@ func PodCPUHog(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareAndInjectStressChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareAndInjectStressChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("[Error]: CPU hog failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -134,7 +135,7 @@ func PodCPUHog(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-delete/experiment/pod-delete.go b/experiments/generic/pod-delete/experiment/pod-delete.go index 7fcf048f9..0fb445f15 100644 --- a/experiments/generic/pod-delete/experiment/pod-delete.go +++ b/experiments/generic/pod-delete/experiment/pod-delete.go @@ -1,6 +1,7 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" @@ -19,7 +20,7 @@ import ( ) // PodDelete inject the pod-delete chaos -func PodDelete(clients clients.ClientSets) { +func PodDelete(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} eventsDetails := types.EventDetails{} @@ -95,7 +96,7 @@ func PodDelete(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg = common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -113,7 +114,7 @@ func PodDelete(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PreparePodDelete(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PreparePodDelete(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -141,7 +142,7 @@ func PodDelete(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg = common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-dns-error/experiment/pod-dns-error.go b/experiments/generic/pod-dns-error/experiment/pod-dns-error.go index 4442365c9..a7c739f65 100644 --- a/experiments/generic/pod-dns-error/experiment/pod-dns-error.go +++ b/experiments/generic/pod-dns-error/experiment/pod-dns-error.go @@ -1,6 +1,7 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" @@ -19,7 +20,7 @@ import ( ) // PodDNSError contains steps to inject chaos -func PodDNSError(clients clients.ClientSets) { +func PodDNSError(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -91,7 +92,7 @@ func PodDNSError(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -107,7 +108,7 @@ func PodDNSError(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareAndInjectChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareAndInjectChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -135,7 +136,7 @@ func PodDNSError(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-dns-spoof/experiment/pod-dns-spoof.go b/experiments/generic/pod-dns-spoof/experiment/pod-dns-spoof.go index 277680572..145376a64 100644 --- a/experiments/generic/pod-dns-spoof/experiment/pod-dns-spoof.go +++ b/experiments/generic/pod-dns-spoof/experiment/pod-dns-spoof.go @@ -1,6 +1,7 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" @@ -19,7 +20,7 @@ import ( ) // PodDNSSpoof contains steps to inject chaos -func PodDNSSpoof(clients clients.ClientSets) { +func PodDNSSpoof(ctx context.Context, clients clients.ClientSets) { var err error experimentsDetails := experimentTypes.ExperimentDetails{} @@ -92,7 +93,7 @@ func PodDNSSpoof(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails) + err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails) if err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") @@ -109,7 +110,7 @@ func PodDNSSpoof(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err = litmusLIB.PrepareAndInjectChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err = litmusLIB.PrepareAndInjectChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -137,7 +138,7 @@ func PodDNSSpoof(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-fio-stress/experiment/pod-fio-stress.go b/experiments/generic/pod-fio-stress/experiment/pod-fio-stress.go index 2f7348a66..e23a4df08 100644 --- a/experiments/generic/pod-fio-stress/experiment/pod-fio-stress.go +++ b/experiments/generic/pod-fio-stress/experiment/pod-fio-stress.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/pod-fio-stress/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/pod-fio-stress/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/pod-fio-stress/types" @@ -19,7 +20,7 @@ import ( ) // Experiment contains steps to inject chaos -func PodFioStress(clients clients.ClientSets) { +func PodFioStress(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -89,7 +90,7 @@ func PodFioStress(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -105,7 +106,7 @@ func PodFioStress(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) log.Errorf("Chaos injection failed, err: %v", err) return @@ -133,7 +134,7 @@ func PodFioStress(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-http-latency/experiment/pod-http-latency.go b/experiments/generic/pod-http-latency/experiment/pod-http-latency.go index 03bee5023..7f8a9f1cb 100644 --- a/experiments/generic/pod-http-latency/experiment/pod-http-latency.go +++ b/experiments/generic/pod-http-latency/experiment/pod-http-latency.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/http-chaos/lib/latency" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodHttpLatency inject the pod-http-latency chaos -func PodHttpLatency(clients clients.ClientSets) { +func PodHttpLatency(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -90,7 +91,7 @@ func PodHttpLatency(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -106,7 +107,7 @@ func PodHttpLatency(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PodHttpLatencyChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PodHttpLatencyChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -134,7 +135,7 @@ func PodHttpLatency(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-http-modify-body/experiment/pod-http-modify-body.go b/experiments/generic/pod-http-modify-body/experiment/pod-http-modify-body.go index c68b40595..782d539f4 100644 --- a/experiments/generic/pod-http-modify-body/experiment/pod-http-modify-body.go +++ b/experiments/generic/pod-http-modify-body/experiment/pod-http-modify-body.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/http-chaos/lib/modify-body" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodHttpModifyBody contains steps to inject chaos -func PodHttpModifyBody(clients clients.ClientSets) { +func PodHttpModifyBody(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -90,7 +91,7 @@ func PodHttpModifyBody(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -106,7 +107,7 @@ func PodHttpModifyBody(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PodHttpModifyBodyChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PodHttpModifyBodyChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -134,7 +135,7 @@ func PodHttpModifyBody(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-http-modify-header/experiment/pod-http-modify-header.go b/experiments/generic/pod-http-modify-header/experiment/pod-http-modify-header.go index cfb634457..f05053481 100644 --- a/experiments/generic/pod-http-modify-header/experiment/pod-http-modify-header.go +++ b/experiments/generic/pod-http-modify-header/experiment/pod-http-modify-header.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/http-chaos/lib/header" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodHttpModifyHeader inject the pod-http-modify-header chaos -func PodHttpModifyHeader(clients clients.ClientSets) { +func PodHttpModifyHeader(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -90,7 +91,7 @@ func PodHttpModifyHeader(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -106,7 +107,7 @@ func PodHttpModifyHeader(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PodHttpModifyHeaderChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PodHttpModifyHeaderChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -134,7 +135,7 @@ func PodHttpModifyHeader(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-http-reset-peer/experiment/pod-http-reset-peer.go b/experiments/generic/pod-http-reset-peer/experiment/pod-http-reset-peer.go index 76188c3a1..d5df84fd4 100644 --- a/experiments/generic/pod-http-reset-peer/experiment/pod-http-reset-peer.go +++ b/experiments/generic/pod-http-reset-peer/experiment/pod-http-reset-peer.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/http-chaos/lib/reset" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodHttpResetPeer contains steps to inject chaos -func PodHttpResetPeer(clients clients.ClientSets) { +func PodHttpResetPeer(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -90,7 +91,7 @@ func PodHttpResetPeer(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -106,7 +107,7 @@ func PodHttpResetPeer(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PodHttpResetPeerChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PodHttpResetPeerChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -134,7 +135,7 @@ func PodHttpResetPeer(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-http-status-code/experiment/pod-http-status-code.go b/experiments/generic/pod-http-status-code/experiment/pod-http-status-code.go index b37de87df..447b3ef13 100644 --- a/experiments/generic/pod-http-status-code/experiment/pod-http-status-code.go +++ b/experiments/generic/pod-http-status-code/experiment/pod-http-status-code.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/http-chaos/lib/statuscode" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/http-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodHttpStatusCode contains steps to inject chaos -func PodHttpStatusCode(clients clients.ClientSets) { +func PodHttpStatusCode(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -98,7 +99,7 @@ func PodHttpStatusCode(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -114,7 +115,7 @@ func PodHttpStatusCode(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PodHttpStatusCodeChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PodHttpStatusCodeChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -142,7 +143,7 @@ func PodHttpStatusCode(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-io-stress/experiment/pod-io-stress.go b/experiments/generic/pod-io-stress/experiment/pod-io-stress.go index eb6dcdb3f..95b964754 100644 --- a/experiments/generic/pod-io-stress/experiment/pod-io-stress.go +++ b/experiments/generic/pod-io-stress/experiment/pod-io-stress.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/stress-chaos/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/stress-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/stress-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodIOStress inject the pod-io-stress chaos -func PodIOStress(clients clients.ClientSets) { +func PodIOStress(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -90,7 +91,7 @@ func PodIOStress(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -106,7 +107,7 @@ func PodIOStress(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareAndInjectStressChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareAndInjectStressChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("[Error]: Pod IO Stress failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -134,7 +135,7 @@ func PodIOStress(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-memory-hog-exec/experiment/pod-memory-hog-exec.go b/experiments/generic/pod-memory-hog-exec/experiment/pod-memory-hog-exec.go index f3a1d4a4f..7cad3f0e3 100644 --- a/experiments/generic/pod-memory-hog-exec/experiment/pod-memory-hog-exec.go +++ b/experiments/generic/pod-memory-hog-exec/experiment/pod-memory-hog-exec.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/pod-memory-hog-exec/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/pod-memory-hog-exec/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/pod-memory-hog-exec/types" @@ -19,7 +20,7 @@ import ( ) // PodMemoryHogExec inject the pod-memory-hog-exec chaos -func PodMemoryHogExec(clients clients.ClientSets) { +func PodMemoryHogExec(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -90,7 +91,7 @@ func PodMemoryHogExec(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -106,7 +107,7 @@ func PodMemoryHogExec(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareMemoryExecStress(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareMemoryExecStress(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("[Error]: pod memory hog failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -134,7 +135,7 @@ func PodMemoryHogExec(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-memory-hog/experiment/pod-memory-hog.go b/experiments/generic/pod-memory-hog/experiment/pod-memory-hog.go index a4bf3cc57..128e177f4 100644 --- a/experiments/generic/pod-memory-hog/experiment/pod-memory-hog.go +++ b/experiments/generic/pod-memory-hog/experiment/pod-memory-hog.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/stress-chaos/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/stress-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/stress-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodMemoryHog inject the pod-memory-hog chaos -func PodMemoryHog(clients clients.ClientSets) { +func PodMemoryHog(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -90,7 +91,7 @@ func PodMemoryHog(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -106,7 +107,7 @@ func PodMemoryHog(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareAndInjectStressChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareAndInjectStressChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("[Error]: pod memory hog failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -134,7 +135,7 @@ func PodMemoryHog(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-network-corruption/experiment/pod-network-corruption.go b/experiments/generic/pod-network-corruption/experiment/pod-network-corruption.go index d3276dbfd..183b2021b 100644 --- a/experiments/generic/pod-network-corruption/experiment/pod-network-corruption.go +++ b/experiments/generic/pod-network-corruption/experiment/pod-network-corruption.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/network-chaos/lib/corruption" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodNetworkCorruption inject the pod-network-corruption chaos -func PodNetworkCorruption(clients clients.ClientSets) { +func PodNetworkCorruption(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -91,7 +92,7 @@ func PodNetworkCorruption(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -107,7 +108,7 @@ func PodNetworkCorruption(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PodNetworkCorruptionChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PodNetworkCorruptionChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -135,7 +136,7 @@ func PodNetworkCorruption(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-network-duplication/experiment/pod-network-duplication.go b/experiments/generic/pod-network-duplication/experiment/pod-network-duplication.go index f37c46369..f1e42c839 100644 --- a/experiments/generic/pod-network-duplication/experiment/pod-network-duplication.go +++ b/experiments/generic/pod-network-duplication/experiment/pod-network-duplication.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/network-chaos/lib/duplication" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodNetworkDuplication inject the pod-network-duplication chaos -func PodNetworkDuplication(clients clients.ClientSets) { +func PodNetworkDuplication(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -91,7 +92,7 @@ func PodNetworkDuplication(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -107,7 +108,7 @@ func PodNetworkDuplication(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PodNetworkDuplicationChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PodNetworkDuplicationChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -135,7 +136,7 @@ func PodNetworkDuplication(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-network-latency/experiment/pod-network-latency.go b/experiments/generic/pod-network-latency/experiment/pod-network-latency.go index a4ca95682..efa7699a0 100644 --- a/experiments/generic/pod-network-latency/experiment/pod-network-latency.go +++ b/experiments/generic/pod-network-latency/experiment/pod-network-latency.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/network-chaos/lib/latency" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodNetworkLatency inject the pod-network-latency chaos -func PodNetworkLatency(clients clients.ClientSets) { +func PodNetworkLatency(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -90,7 +91,7 @@ func PodNetworkLatency(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -107,7 +108,7 @@ func PodNetworkLatency(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PodNetworkLatencyChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PodNetworkLatencyChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -135,7 +136,7 @@ func PodNetworkLatency(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-network-loss/experiment/pod-network-loss.go b/experiments/generic/pod-network-loss/experiment/pod-network-loss.go index 926459318..cfb538156 100644 --- a/experiments/generic/pod-network-loss/experiment/pod-network-loss.go +++ b/experiments/generic/pod-network-loss/experiment/pod-network-loss.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/network-chaos/lib/loss" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/network-chaos/types" @@ -19,7 +20,7 @@ import ( ) // PodNetworkLoss inject the pod-network-loss chaos -func PodNetworkLoss(clients clients.ClientSets) { +func PodNetworkLoss(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} chaosDetails := types.ChaosDetails{} @@ -90,7 +91,7 @@ func PodNetworkLoss(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -106,7 +107,7 @@ func PodNetworkLoss(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PodNetworkLossChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PodNetworkLossChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -134,7 +135,7 @@ func PodNetworkLoss(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/generic/pod-network-partition/experiment/pod-network-partition.go b/experiments/generic/pod-network-partition/experiment/pod-network-partition.go index c0c300b86..44e73cd67 100644 --- a/experiments/generic/pod-network-partition/experiment/pod-network-partition.go +++ b/experiments/generic/pod-network-partition/experiment/pod-network-partition.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/pod-network-partition/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/generic/pod-network-partition/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/generic/pod-network-partition/types" @@ -19,7 +20,7 @@ import ( ) // PodNetworkPartition inject the pod-network-partition chaos -func PodNetworkPartition(clients clients.ClientSets) { +func PodNetworkPartition(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -89,7 +90,7 @@ func PodNetworkPartition(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -105,7 +106,7 @@ func PodNetworkPartition(clients clients.ClientSets) { } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareAndInjectChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareAndInjectChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) log.Errorf("Chaos injection failed, err: %v", err) return @@ -133,7 +134,7 @@ func PodNetworkPartition(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/kafka/kafka-broker-pod-failure/experiment/kafka-broker-pod-failure.go b/experiments/kafka/kafka-broker-pod-failure/experiment/kafka-broker-pod-failure.go index 7bf9204c2..ef33545cf 100644 --- a/experiments/kafka/kafka-broker-pod-failure/experiment/kafka-broker-pod-failure.go +++ b/experiments/kafka/kafka-broker-pod-failure/experiment/kafka-broker-pod-failure.go @@ -1,12 +1,13 @@ package experiment import ( + "context" "os" "strings" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" kafkaPodDelete "github.com/litmuschaos/litmus-go/chaoslib/litmus/kafka-broker-pod-failure/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" "github.com/litmuschaos/litmus-go/pkg/kafka" experimentEnv "github.com/litmuschaos/litmus-go/pkg/kafka/environment" @@ -21,7 +22,7 @@ import ( ) // KafkaBrokerPodFailure derive and kill the kafka broker leader -func KafkaBrokerPodFailure(clients clients.ClientSets) { +func KafkaBrokerPodFailure(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -89,7 +90,7 @@ func KafkaBrokerPodFailure(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -125,7 +126,7 @@ func KafkaBrokerPodFailure(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err := kafkaPodDelete.PreparePodDelete(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := kafkaPodDelete.PreparePodDelete(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -154,7 +155,7 @@ func KafkaBrokerPodFailure(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := common.GetStatusMessage(chaosDetails.DefaultHealthCheck, "AUT: Running", "Unsuccessful") types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/kube-aws/ebs-loss-by-id/experiment/ebs-loss-by-id.go b/experiments/kube-aws/ebs-loss-by-id/experiment/ebs-loss-by-id.go index 5f64c7e4f..20d3cc248 100644 --- a/experiments/kube-aws/ebs-loss-by-id/experiment/ebs-loss-by-id.go +++ b/experiments/kube-aws/ebs-loss-by-id/experiment/ebs-loss-by-id.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/ebs-loss/lib/ebs-loss-by-id/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" aws "github.com/litmuschaos/litmus-go/pkg/cloud/aws/ebs" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/kube-aws/ebs-loss/environment" @@ -19,7 +20,7 @@ import ( ) // EBSLossByID inject the ebs volume loss chaos -func EBSLossByID(clients clients.ClientSets) { +func EBSLossByID(ctx context.Context, clients clients.ClientSets) { var err error experimentsDetails := experimentTypes.ExperimentDetails{} @@ -90,7 +91,7 @@ func EBSLossByID(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -111,7 +112,7 @@ func EBSLossByID(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err = litmusLIB.PrepareEBSLossByID(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err = litmusLIB.PrepareEBSLossByID(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -137,7 +138,7 @@ func EBSLossByID(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/kube-aws/ebs-loss-by-tag/experiment/ebs-loss-by-tag.go b/experiments/kube-aws/ebs-loss-by-tag/experiment/ebs-loss-by-tag.go index 96a7323e6..44f201efa 100644 --- a/experiments/kube-aws/ebs-loss-by-tag/experiment/ebs-loss-by-tag.go +++ b/experiments/kube-aws/ebs-loss-by-tag/experiment/ebs-loss-by-tag.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/ebs-loss/lib/ebs-loss-by-tag/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" aws "github.com/litmuschaos/litmus-go/pkg/cloud/aws/ebs" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/kube-aws/ebs-loss/environment" @@ -19,7 +20,7 @@ import ( ) // EBSLossByTag inject the ebs volume loss chaos -func EBSLossByTag(clients clients.ClientSets) { +func EBSLossByTag(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -88,7 +89,7 @@ func EBSLossByTag(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -109,7 +110,7 @@ func EBSLossByTag(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareEBSLossByTag(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareEBSLossByTag(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -135,7 +136,7 @@ func EBSLossByTag(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/kube-aws/ec2-terminate-by-id/experiment/ec2-terminate-by-id.go b/experiments/kube-aws/ec2-terminate-by-id/experiment/ec2-terminate-by-id.go index 5db97c1e4..95010a803 100644 --- a/experiments/kube-aws/ec2-terminate-by-id/experiment/ec2-terminate-by-id.go +++ b/experiments/kube-aws/ec2-terminate-by-id/experiment/ec2-terminate-by-id.go @@ -1,12 +1,13 @@ package experiment import ( + "context" "os" "strings" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/ec2-terminate-by-id/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" aws "github.com/litmuschaos/litmus-go/pkg/cloud/aws/ec2" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/kube-aws/ec2-terminate-by-id/environment" @@ -20,7 +21,7 @@ import ( ) // EC2TerminateByID inject the ebs volume loss chaos -func EC2TerminateByID(clients clients.ClientSets) { +func EC2TerminateByID(ctx context.Context, clients clients.ClientSets) { var ( err error @@ -86,7 +87,7 @@ func EC2TerminateByID(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -129,7 +130,7 @@ func EC2TerminateByID(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err = litmusLIB.PrepareEC2TerminateByID(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err = litmusLIB.PrepareEC2TerminateByID(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -167,7 +168,7 @@ func EC2TerminateByID(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/kube-aws/ec2-terminate-by-tag/experiment/ec2-terminate-tag.go b/experiments/kube-aws/ec2-terminate-by-tag/experiment/ec2-terminate-tag.go index 9fa3b9ff5..5d4a0ee8e 100644 --- a/experiments/kube-aws/ec2-terminate-by-tag/experiment/ec2-terminate-tag.go +++ b/experiments/kube-aws/ec2-terminate-by-tag/experiment/ec2-terminate-tag.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/ec2-terminate-by-tag/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" aws "github.com/litmuschaos/litmus-go/pkg/cloud/aws/ec2" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/kube-aws/ec2-terminate-by-tag/environment" @@ -19,7 +20,7 @@ import ( ) // EC2TerminateByTag inject the ebs volume loss chaos -func EC2TerminateByTag(clients clients.ClientSets) { +func EC2TerminateByTag(ctx context.Context, clients clients.ClientSets) { var ( err error @@ -86,7 +87,7 @@ func EC2TerminateByTag(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -125,7 +126,7 @@ func EC2TerminateByTag(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err = litmusLIB.PrepareEC2TerminateByTag(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err = litmusLIB.PrepareEC2TerminateByTag(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -162,7 +163,7 @@ func EC2TerminateByTag(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/load/k6-loadgen/experiment/k6-loadgen.go b/experiments/load/k6-loadgen/experiment/k6-loadgen.go index 5b8b10db7..0a62d3949 100644 --- a/experiments/load/k6-loadgen/experiment/k6-loadgen.go +++ b/experiments/load/k6-loadgen/experiment/k6-loadgen.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/k6-loadgen/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/events" experimentEnv "github.com/litmuschaos/litmus-go/pkg/load/k6-loadgen/environment" experimentTypes "github.com/litmuschaos/litmus-go/pkg/load/k6-loadgen/types" @@ -19,7 +20,7 @@ import ( ) // Experiment contains steps to inject chaos -func Experiment(clients clients.ClientSets) { +func Experiment(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -89,7 +90,7 @@ func Experiment(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -104,7 +105,7 @@ func Experiment(clients clients.ClientSets) { events.GenerateEvents(&eventsDetails, clients, &chaosDetails, "ChaosEngine") } chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -131,7 +132,7 @@ func Experiment(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/spring-boot/spring-boot-faults/experiment/spring-boot-faults.go b/experiments/spring-boot/spring-boot-faults/experiment/spring-boot-faults.go index 7e3dc57e2..45d27ef62 100644 --- a/experiments/spring-boot/spring-boot-faults/experiment/spring-boot-faults.go +++ b/experiments/spring-boot/spring-boot-faults/experiment/spring-boot-faults.go @@ -1,6 +1,7 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" @@ -19,7 +20,7 @@ import ( ) // Experiment contains steps to inject chaos -func Experiment(clients clients.ClientSets, expName string) { +func Experiment(ctx context.Context, clients clients.ClientSets, expName string) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -113,7 +114,7 @@ func Experiment(clients clients.ClientSets, expName string) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -130,7 +131,7 @@ func Experiment(clients clients.ClientSets, expName string) { chaosDetails.Phase = types.ChaosInjectPhase - if err := litmusLIB.PrepareChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { + if err := litmusLIB.PrepareChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails); err != nil { log.Errorf("Chaos injection failed, err: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -159,7 +160,7 @@ func Experiment(clients clients.ClientSets, expName string) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err := probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err := probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed, err: %v", err) msg := "AUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/experiments/vmware/vm-poweroff/experiment/vm-poweroff.go b/experiments/vmware/vm-poweroff/experiment/vm-poweroff.go index bee4d4193..551d717d0 100644 --- a/experiments/vmware/vm-poweroff/experiment/vm-poweroff.go +++ b/experiments/vmware/vm-poweroff/experiment/vm-poweroff.go @@ -1,11 +1,12 @@ package experiment import ( + "context" "os" "github.com/litmuschaos/chaos-operator/api/litmuschaos/v1alpha1" litmusLIB "github.com/litmuschaos/litmus-go/chaoslib/litmus/vm-poweroff/lib" - clients "github.com/litmuschaos/litmus-go/pkg/clients" + "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/cloud/vmware" "github.com/litmuschaos/litmus-go/pkg/events" "github.com/litmuschaos/litmus-go/pkg/log" @@ -22,7 +23,7 @@ import ( var err error // VMPoweroff contains steps to inject vm-power-off chaos -func VMPoweroff(clients clients.ClientSets) { +func VMPoweroff(ctx context.Context, clients clients.ClientSets) { experimentsDetails := experimentTypes.ExperimentDetails{} resultDetails := types.ResultDetails{} @@ -110,7 +111,7 @@ func VMPoweroff(clients clients.ClientSets) { // run the probes in the pre-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PreChaos", &eventsDetails); err != nil { log.Errorf("Probe Failed: %v", err) msg := "IUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PreChaosCheck, msg, "Warning", &chaosDetails) @@ -131,7 +132,7 @@ func VMPoweroff(clients clients.ClientSets) { chaosDetails.Phase = types.ChaosInjectPhase - if err = litmusLIB.InjectVMPowerOffChaos(&experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails, cookie); err != nil { + if err = litmusLIB.InjectVMPowerOffChaos(ctx, &experimentsDetails, clients, &resultDetails, &eventsDetails, &chaosDetails, cookie); err != nil { log.Errorf("Chaos injection failed: %v", err) result.RecordAfterFailure(&chaosDetails, &resultDetails, err, clients, &eventsDetails) return @@ -159,7 +160,7 @@ func VMPoweroff(clients clients.ClientSets) { // run the probes in the post-chaos check if len(resultDetails.ProbeDetails) != 0 { - if err = probe.RunProbes(&chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { + if err = probe.RunProbes(ctx, &chaosDetails, clients, &resultDetails, "PostChaos", &eventsDetails); err != nil { log.Errorf("Probes Failed: %v", err) msg := "IUT: Running, Probes: Unsuccessful" types.SetEngineEventAttributes(&eventsDetails, types.PostChaosCheck, msg, "Warning", &chaosDetails) diff --git a/pkg/clients/clientset.go b/pkg/clients/clientset.go index 6d7cfee22..5cc252638 100644 --- a/pkg/clients/clientset.go +++ b/pkg/clients/clientset.go @@ -1,7 +1,6 @@ package clients import ( - "context" "flag" chaosClient "github.com/litmuschaos/chaos-operator/pkg/client/clientset/versioned/typed/litmuschaos/v1alpha1" @@ -21,7 +20,6 @@ type ClientSets struct { LitmusClient *chaosClient.LitmuschaosV1alpha1Client KubeConfig *rest.Config DynamicClient dynamic.Interface - Context context.Context } // GenerateClientSetFromKubeConfig will generation both ClientSets (k8s, and Litmus) as well as the KubeConfig diff --git a/pkg/probe/probe.go b/pkg/probe/probe.go index 4ca818b40..fe6e1a271 100644 --- a/pkg/probe/probe.go +++ b/pkg/probe/probe.go @@ -17,6 +17,7 @@ import ( "github.com/litmuschaos/litmus-go/pkg/types" "github.com/palantir/stacktrace" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -24,8 +25,8 @@ var err error // RunProbes contains the steps to trigger the probes // It contains steps to trigger all three probes: k8sprobe, httpprobe, cmdprobe -func RunProbes(chaosDetails *types.ChaosDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, phase string, eventsDetails *types.EventDetails) error { - span := telemetry.StartTracing(clients, "RunProbes") +func RunProbes(ctx context.Context, chaosDetails *types.ChaosDetails, clients clients.ClientSets, resultDetails *types.ResultDetails, phase string, eventsDetails *types.EventDetails) error { + ctx, span := otel.Tracer(telemetry.TracerName).Start(ctx, "RunProbes") defer span.End() // get the probes details from the chaosengine diff --git a/pkg/telemetry/tracing.go b/pkg/telemetry/tracing.go index 3787178fc..83c24e852 100644 --- a/pkg/telemetry/tracing.go +++ b/pkg/telemetry/tracing.go @@ -5,11 +5,9 @@ import ( "encoding/json" "os" - "github.com/litmuschaos/litmus-go/pkg/clients" "github.com/litmuschaos/litmus-go/pkg/log" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/propagation" - "go.opentelemetry.io/otel/trace" ) const ( @@ -17,12 +15,6 @@ const ( TraceParent = "TRACE_PARENT" ) -func StartTracing(clients clients.ClientSets, spanName string) trace.Span { - ctx, span := otel.Tracer(TracerName).Start(clients.Context, spanName) - clients.Context = ctx - return span -} - func GetTraceParentContext() context.Context { traceParent := os.Getenv(TraceParent)