# encoding: utf-8
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.

module Azure::ServiceFabric::V6_3_0_9
  module Models
    #
    # Defines all the parameters to configure a Chaos run.
    #
    class ChaosParameters

      include MsRestAzure

      # @return [String] Total time (in seconds) for which Chaos will run
      # before automatically stopping. The maximum allowed value is
      # 4,294,967,295 (System.UInt32.MaxValue). Default value: '4294967295' .
      attr_accessor :time_to_run_in_seconds

      # @return [Integer] The maximum amount of time to wait for all cluster
      # entities to become stable and healthy. Chaos executes in iterations and
      # at the start of each iteration it validates the health of cluster
      # entities.
      # During validation if a cluster entity is not stable and healthy within
      # MaxClusterStabilizationTimeoutInSeconds, Chaos generates a validation
      # failed event. Default value: 60 .
      attr_accessor :max_cluster_stabilization_timeout_in_seconds

      # @return [Integer] MaxConcurrentFaults is the maximum number of
      # concurrent faults induced per iteration.
      # Chaos executes in iterations and two consecutive iterations are
      # separated by a validation phase.
      # The higher the concurrency, the more aggressive the injection of
      # faults, leading to inducing more complex series of states to uncover
      # bugs.
      # The recommendation is to start with a value of 2 or 3 and to exercise
      # caution while moving up. Default value: 1 .
      attr_accessor :max_concurrent_faults

      # @return [Boolean] Enables or disables the move primary and move
      # secondary faults. Default value: true .
      attr_accessor :enable_move_replica_faults

      # @return [Integer] Wait time (in seconds) between consecutive faults
      # within a single iteration.
      # The larger the value, the lower the overlapping between faults and the
      # simpler the sequence of state transitions that the cluster goes
      # through.
      # The recommendation is to start with a value between 1 and 5 and
      # exercise caution while moving up. Default value: 20 .
      attr_accessor :wait_time_between_faults_in_seconds

      # @return [Integer] Time-separation (in seconds) between two consecutive
      # iterations of Chaos.
      # The larger the value, the lower the fault injection rate. Default
      # value: 30 .
      attr_accessor :wait_time_between_iterations_in_seconds

      # @return [ClusterHealthPolicy] Passed-in cluster health policy is used
      # to validate health of the cluster in between Chaos iterations. If the
      # cluster health is in error or if an unexpected exception happens during
      # fault execution--to provide the cluster with some time to
      # recuperate--Chaos will wait for 30 minutes before the next
      # health-check.
      attr_accessor :cluster_health_policy

      # @return [ChaosContext] Describes a map, which is a collection of
      # (string, string) type key-value pairs. The map can be used to record
      # information about
      # the Chaos run. There cannot be more than 100 such pairs and each string
      # (key or value) can be at most 4095 characters long.
      # This map is set by the starter of the Chaos run to optionally store the
      # context about the specific run.
      attr_accessor :context

      # @return [ChaosTargetFilter] List of cluster entities to target for
      # Chaos faults.
      # This filter can be used to target Chaos faults only to certain node
      # types or only to certain application instances. If ChaosTargetFilter is
      # not used, Chaos faults all cluster entities.
      # If ChaosTargetFilter is used, Chaos faults only the entities that meet
      # the ChaosTargetFilter specification.
      attr_accessor :chaos_target_filter


      #
      # Mapper for ChaosParameters class as Ruby Hash.
      # This will be used for serialization/deserialization.
      #
      def self.mapper()
        {
          client_side_validation: true,
          required: false,
          serialized_name: 'ChaosParameters',
          type: {
            name: 'Composite',
            class_name: 'ChaosParameters',
            model_properties: {
              time_to_run_in_seconds: {
                client_side_validation: true,
                required: false,
                serialized_name: 'TimeToRunInSeconds',
                default_value: '4294967295',
                type: {
                  name: 'String'
                }
              },
              max_cluster_stabilization_timeout_in_seconds: {
                client_side_validation: true,
                required: false,
                serialized_name: 'MaxClusterStabilizationTimeoutInSeconds',
                default_value: 60,
                constraints: {
                  InclusiveMaximum: 4294967295,
                  InclusiveMinimum: 0
                },
                type: {
                  name: 'Number'
                }
              },
              max_concurrent_faults: {
                client_side_validation: true,
                required: false,
                serialized_name: 'MaxConcurrentFaults',
                default_value: 1,
                constraints: {
                  InclusiveMaximum: 4294967295,
                  InclusiveMinimum: 0
                },
                type: {
                  name: 'Number'
                }
              },
              enable_move_replica_faults: {
                client_side_validation: true,
                required: false,
                serialized_name: 'EnableMoveReplicaFaults',
                default_value: true,
                type: {
                  name: 'Boolean'
                }
              },
              wait_time_between_faults_in_seconds: {
                client_side_validation: true,
                required: false,
                serialized_name: 'WaitTimeBetweenFaultsInSeconds',
                default_value: 20,
                constraints: {
                  InclusiveMaximum: 4294967295,
                  InclusiveMinimum: 0
                },
                type: {
                  name: 'Number'
                }
              },
              wait_time_between_iterations_in_seconds: {
                client_side_validation: true,
                required: false,
                serialized_name: 'WaitTimeBetweenIterationsInSeconds',
                default_value: 30,
                constraints: {
                  InclusiveMaximum: 4294967295,
                  InclusiveMinimum: 0
                },
                type: {
                  name: 'Number'
                }
              },
              cluster_health_policy: {
                client_side_validation: true,
                required: false,
                serialized_name: 'ClusterHealthPolicy',
                type: {
                  name: 'Composite',
                  class_name: 'ClusterHealthPolicy'
                }
              },
              context: {
                client_side_validation: true,
                required: false,
                serialized_name: 'Context',
                type: {
                  name: 'Composite',
                  class_name: 'ChaosContext'
                }
              },
              chaos_target_filter: {
                client_side_validation: true,
                required: false,
                serialized_name: 'ChaosTargetFilter',
                type: {
                  name: 'Composite',
                  class_name: 'ChaosTargetFilter'
                }
              }
            }
          }
        }
      end
    end
  end
end
