/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
 */

'use strict';

/**
 * 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 {
  /**
   * Create a HealthInformation.
   * @property {string} sourceId The source name that identifies the
   * client/watchdog/system component that generated the health information.
   * @property {string} property 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.
   * @property {string} 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'
   * @property {moment.duration} [timeToLiveInMilliSeconds] 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.
   * @property {string} [description] 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.
   * @property {string} [sequenceNumber] 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.
   * @property {boolean} [removeWhenExpired] 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.
   */
  constructor() {
  }

  /**
   * Defines the metadata of HealthInformation
   *
   * @returns {object} metadata of HealthInformation
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'HealthInformation',
      type: {
        name: 'Composite',
        className: 'HealthInformation',
        modelProperties: {
          sourceId: {
            required: true,
            serializedName: 'SourceId',
            type: {
              name: 'String'
            }
          },
          property: {
            required: true,
            serializedName: 'Property',
            type: {
              name: 'String'
            }
          },
          healthState: {
            required: true,
            serializedName: 'HealthState',
            type: {
              name: 'String'
            }
          },
          timeToLiveInMilliSeconds: {
            required: false,
            serializedName: 'TimeToLiveInMilliSeconds',
            type: {
              name: 'TimeSpan'
            }
          },
          description: {
            required: false,
            serializedName: 'Description',
            type: {
              name: 'String'
            }
          },
          sequenceNumber: {
            required: false,
            serializedName: 'SequenceNumber',
            type: {
              name: 'String'
            }
          },
          removeWhenExpired: {
            required: false,
            serializedName: 'RemoveWhenExpired',
            type: {
              name: 'Boolean'
            }
          }
        }
      }
    };
  }
}

module.exports = HealthInformation;
