# 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::V7_0_0_42
  module Models
    #
    # Represents common health report information. It is included in all health
    # reports sent to health store and in all health events returned by health
    # queries.
    #
    class HealthInformation

      include MsRestAzure

      # @return [String] The source name that identifies the
      # client/watchdog/system component that generated the health information.
      attr_accessor :source_id

      # @return [String] The property of the health information. An entity can
      # have health reports for different properties.
      # The property is a string and not a fixed enumeration to allow the
      # reporter flexibility to categorize the state condition that triggers
      # the report.
      # For example, a reporter with SourceId "LocalWatchdog" can monitor the
      # state of the available disk on a node,
      # so it can report "AvailableDisk" property on that node.
      # The same reporter can monitor the node connectivity, so it can report a
      # property "Connectivity" on the same node.
      # In the health store, these reports are treated as separate health
      # events for the specified node.
      #
      # Together with the SourceId, the property uniquely identifies the health
      # information.
      attr_accessor :property

      # @return [HealthState] The health state of a Service Fabric entity such
      # as Cluster, Node, Application, Service, Partition, Replica etc.
      # Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
      attr_accessor :health_state

      # @return [Duration] The duration for which this health report is valid.
      # This field uses ISO8601 format for specifying the duration.
      # When clients report periodically, they should send reports with higher
      # frequency than time to live.
      # If clients report on transition, they can set the time to live to
      # infinite.
      # When time to live expires, the health event that contains the health
      # information
      # is either removed from health store, if RemoveWhenExpired is true, or
      # evaluated at error, if RemoveWhenExpired false.
      #
      # If not specified, time to live defaults to infinite value.
      attr_accessor :time_to_live_in_milli_seconds

      # @return [String] The description of the health information. It
      # represents free text used to add human readable information about the
      # report.
      # The maximum string length for the description is 4096 characters.
      # If the provided string is longer, it will be automatically truncated.
      # When truncated, the last characters of the description contain a marker
      # "[Truncated]", and total string size is 4096 characters.
      # The presence of the marker indicates to users that truncation occurred.
      # Note that when truncated, the description has less than 4096 characters
      # from the original string.
      attr_accessor :description

      # @return [String] The sequence number for this health report as a
      # numeric string.
      # The report sequence number is used by the health store to detect stale
      # reports.
      # If not specified, a sequence number is auto-generated by the health
      # client when a report is added.
      attr_accessor :sequence_number

      # @return [Boolean] Value that indicates whether the report is removed
      # from health store when it expires.
      # If set to true, the report is removed from the health store after it
      # expires.
      # If set to false, the report is treated as an error when expired. The
      # value of this property is false by default.
      # When clients report periodically, they should set RemoveWhenExpired
      # false (default).
      # This way, if the reporter has issues (e.g. deadlock) and can't report,
      # the entity is evaluated at error when the health report expires.
      # This flags the entity as being in Error health state.
      attr_accessor :remove_when_expired

      # @return [String] A health report ID which identifies the health report
      # and can be used to find more detailed information about a specific
      # health event at
      # aka.ms/sfhealthid
      attr_accessor :health_report_id


      #
      # Mapper for HealthInformation class as Ruby Hash.
      # This will be used for serialization/deserialization.
      #
      def self.mapper()
        {
          client_side_validation: true,
          required: false,
          serialized_name: 'HealthInformation',
          type: {
            name: 'Composite',
            class_name: 'HealthInformation',
            model_properties: {
              source_id: {
                client_side_validation: true,
                required: true,
                serialized_name: 'SourceId',
                type: {
                  name: 'String'
                }
              },
              property: {
                client_side_validation: true,
                required: true,
                serialized_name: 'Property',
                type: {
                  name: 'String'
                }
              },
              health_state: {
                client_side_validation: true,
                required: true,
                serialized_name: 'HealthState',
                type: {
                  name: 'String'
                }
              },
              time_to_live_in_milli_seconds: {
                client_side_validation: true,
                required: false,
                serialized_name: 'TimeToLiveInMilliSeconds',
                type: {
                  name: 'TimeSpan'
                }
              },
              description: {
                client_side_validation: true,
                required: false,
                serialized_name: 'Description',
                type: {
                  name: 'String'
                }
              },
              sequence_number: {
                client_side_validation: true,
                required: false,
                serialized_name: 'SequenceNumber',
                type: {
                  name: 'String'
                }
              },
              remove_when_expired: {
                client_side_validation: true,
                required: false,
                serialized_name: 'RemoveWhenExpired',
                type: {
                  name: 'Boolean'
                }
              },
              health_report_id: {
                client_side_validation: true,
                required: false,
                serialized_name: 'HealthReportId',
                type: {
                  name: 'String'
                }
              }
            }
          }
        }
      end
    end
  end
end
