/*
 * 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';

/**
 * A disk assessed for an assessment.
 *
 */
class AssessedDisk {
  /**
   * Create a AssessedDisk.
   * @member {string} [name] Name of the assessed disk.
   * @member {number} [gigabytesProvisioned] Gigabytes of storage provisioned
   * for this disk.
   * @member {number} [gigabytesConsumed] Gigabytes of storage consumed by this
   * disk.
   * @member {number} [megabytesPerSecondOfRead] Disk throughput in MegaBytes
   * per second.
   * @member {number} [megabytesPerSecondOfReadDataPointsExpected] Expected
   * data points for MegaBytes per second of read.
   * @member {number} [megabytesPerSecondOfReadDataPointsReceived] Received
   * data points for MegaBytes per second of read.
   * @member {number} [megabytesPerSecondOfWrite] Disk throughput in MegaBytes
   * per second.
   * @member {number} [megabytesPerSecondOfWriteDataPointsExpected] Expected
   * data points for MegaBytes per second of write.
   * @member {number} [megabytesPerSecondOfWriteDataPointsReceived] Received
   * data points for MegaBytes per second of write.
   * @member {number} [numberOfReadOperationsPerSecond] Number of read
   * operations per second for the disk.
   * @member {number} [numberOfReadOperationsPerSecondDataPointsExpected]
   * Expected number of data points for read operations per second.
   * @member {number} [numberOfReadOperationsPerSecondDataPointsReceived]
   * Received number of data points for read operations per second.
   * @member {number} [numberOfWriteOperationsPerSecond] Number of read and
   * write operations per second for the disk.
   * @member {number} [numberOfWriteOperationsPerSecondDataPointsExpected]
   * Expected number of data points for write operations per second.
   * @member {number} [numberOfWriteOperationsPerSecondDataPointsReceived]
   * Received number of data points for write operations per second.
   * @member {number} [monthlyStorageCost] Estimated aggregate storage cost for
   * a 31-day month for this disk.
   * @member {string} [recommendedDiskType] Storage type selected for this
   * disk. Possible values include: 'Unknown', 'Standard', 'Premium'
   * @member {string} [recommendedDiskSize] Recommended Azure size for the
   * disk, given utilization data and preferences set on Assessment. Possible
   * values include: 'Unknown', 'Standard_S4', 'Standard_S6', 'Standard_S10',
   * 'Standard_S20', 'Standard_S30', 'Standard_S40', 'Standard_S50',
   * 'Premium_P4', 'Premium_P6', 'Premium_P10', 'Premium_P20', 'Premium_P30',
   * 'Premium_P40', 'Premium_P50'
   * @member {number} [gigabytesForRecommendedDiskSize] Gigabytes of storage
   * provided by the recommended Azure disk size.
   * @member {string} [suitability] Whether this disk is suitable for Azure.
   * Possible values include: 'Unknown', 'NotSuitable', 'Suitable',
   * 'ConditionallySuitable', 'ReadinessUnknown'
   * @member {string} [suitabilityExplanation] If disk is suitable, this
   * explains the reasons and mitigation steps. Possible values include:
   * 'Unknown', 'NotApplicable', 'DiskSizeGreaterThanSupported',
   * 'NoSuitableDiskSizeForIops', 'NoSuitableDiskSizeForThroughput',
   * 'NoDiskSizeFoundInSelectedLocation',
   * 'NoDiskSizeFoundForSelectedRedundancy',
   * 'InternalErrorOccurredForDiskEvaluation'
   */
  constructor() {
  }

  /**
   * Defines the metadata of AssessedDisk
   *
   * @returns {object} metadata of AssessedDisk
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'AssessedDisk',
      type: {
        name: 'Composite',
        className: 'AssessedDisk',
        modelProperties: {
          name: {
            required: false,
            readOnly: true,
            serializedName: 'name',
            type: {
              name: 'String'
            }
          },
          gigabytesProvisioned: {
            required: false,
            readOnly: true,
            serializedName: 'gigabytesProvisioned',
            type: {
              name: 'Number'
            }
          },
          gigabytesConsumed: {
            required: false,
            readOnly: true,
            serializedName: 'gigabytesConsumed',
            type: {
              name: 'Number'
            }
          },
          megabytesPerSecondOfRead: {
            required: false,
            readOnly: true,
            serializedName: 'megabytesPerSecondOfRead',
            type: {
              name: 'Number'
            }
          },
          megabytesPerSecondOfReadDataPointsExpected: {
            required: false,
            readOnly: true,
            serializedName: 'megabytesPerSecondOfReadDataPointsExpected',
            type: {
              name: 'Number'
            }
          },
          megabytesPerSecondOfReadDataPointsReceived: {
            required: false,
            readOnly: true,
            serializedName: 'megabytesPerSecondOfReadDataPointsReceived',
            type: {
              name: 'Number'
            }
          },
          megabytesPerSecondOfWrite: {
            required: false,
            readOnly: true,
            serializedName: 'megabytesPerSecondOfWrite',
            type: {
              name: 'Number'
            }
          },
          megabytesPerSecondOfWriteDataPointsExpected: {
            required: false,
            readOnly: true,
            serializedName: 'megabytesPerSecondOfWriteDataPointsExpected',
            type: {
              name: 'Number'
            }
          },
          megabytesPerSecondOfWriteDataPointsReceived: {
            required: false,
            readOnly: true,
            serializedName: 'megabytesPerSecondOfWriteDataPointsReceived',
            type: {
              name: 'Number'
            }
          },
          numberOfReadOperationsPerSecond: {
            required: false,
            readOnly: true,
            serializedName: 'numberOfReadOperationsPerSecond',
            type: {
              name: 'Number'
            }
          },
          numberOfReadOperationsPerSecondDataPointsExpected: {
            required: false,
            readOnly: true,
            serializedName: 'numberOfReadOperationsPerSecondDataPointsExpected',
            type: {
              name: 'Number'
            }
          },
          numberOfReadOperationsPerSecondDataPointsReceived: {
            required: false,
            readOnly: true,
            serializedName: 'numberOfReadOperationsPerSecondDataPointsReceived',
            type: {
              name: 'Number'
            }
          },
          numberOfWriteOperationsPerSecond: {
            required: false,
            readOnly: true,
            serializedName: 'numberOfWriteOperationsPerSecond',
            type: {
              name: 'Number'
            }
          },
          numberOfWriteOperationsPerSecondDataPointsExpected: {
            required: false,
            readOnly: true,
            serializedName: 'numberOfWriteOperationsPerSecondDataPointsExpected',
            type: {
              name: 'Number'
            }
          },
          numberOfWriteOperationsPerSecondDataPointsReceived: {
            required: false,
            readOnly: true,
            serializedName: 'numberOfWriteOperationsPerSecondDataPointsReceived',
            type: {
              name: 'Number'
            }
          },
          monthlyStorageCost: {
            required: false,
            readOnly: true,
            serializedName: 'monthlyStorageCost',
            type: {
              name: 'Number'
            }
          },
          recommendedDiskType: {
            required: false,
            readOnly: true,
            serializedName: 'recommendedDiskType',
            type: {
              name: 'String'
            }
          },
          recommendedDiskSize: {
            required: false,
            readOnly: true,
            serializedName: 'recommendedDiskSize',
            type: {
              name: 'String'
            }
          },
          gigabytesForRecommendedDiskSize: {
            required: false,
            readOnly: true,
            serializedName: 'gigabytesForRecommendedDiskSize',
            type: {
              name: 'Number'
            }
          },
          suitability: {
            required: false,
            readOnly: true,
            serializedName: 'suitability',
            type: {
              name: 'String'
            }
          },
          suitabilityExplanation: {
            required: false,
            readOnly: true,
            serializedName: 'suitabilityExplanation',
            type: {
              name: 'String'
            }
          }
        }
      }
    };
  }
}

module.exports = AssessedDisk;
