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

const models = require('./index');

/**
 * Expanded gateway status information.
 *
 */
class GatewayStatus {
  /**
   * Create a GatewayStatus.
   * @member {number} [availableMemoryMByte] The available memory on the
   * gateway host machine in megabytes.
   * @member {number} [gatewayCpuUtilizationPercent] The CPU utilization of the
   * gateway process (numeric value between 0 and 100).
   * @member {number} [totalCpuUtilizationPercent] CPU Utilization of the whole
   * system.
   * @member {string} [gatewayVersion] The version of the gateway that is
   * installed on the system.
   * @member {string} [friendlyOsName] The Plaintext description of the OS on
   * the gateway.
   * @member {date} [installedDate] The date the gateway was installed.
   * @member {number} [logicalProcessorCount] Number of logical processors in
   * the gateway system.
   * @member {string} [name] The computer name of the gateway system.
   * @member {string} [gatewayId] The gateway resource ID.
   * @member {number} [gatewayWorkingSetMByte] The working set size of the
   * gateway process in megabytes.
   * @member {date} [statusUpdated] UTC date and time when gateway status was
   * last updated.
   * @member {string} [groupPolicyError] The group policy error.
   * @member {boolean} [allowGatewayGroupPolicyStatus] Status of the
   * allowGatewayGroupPolicy setting.
   * @member {boolean} [requireMfaGroupPolicyStatus] Status of the
   * requireMfaGroupPolicy setting.
   * @member {string} [encryptionCertificateThumbprint] Thumbprint of the
   * encryption certificate.
   * @member {string} [secondaryEncryptionCertificateThumbprint] Secondary
   * thumbprint of the encryption certificate.
   * @member {object} [encryptionJwk] The encryption certificate key.
   * @member {string} [encryptionJwk.kty]
   * @member {string} [encryptionJwk.alg]
   * @member {string} [encryptionJwk.e]
   * @member {string} [encryptionJwk.n]
   * @member {object} [secondaryEncryptionJwk] The secondary encryption
   * certificate key.
   * @member {string} [secondaryEncryptionJwk.kty]
   * @member {string} [secondaryEncryptionJwk.alg]
   * @member {string} [secondaryEncryptionJwk.e]
   * @member {string} [secondaryEncryptionJwk.n]
   * @member {number} [activeMessageCount] Active message count.
   * @member {string} [latestPublishedMsiVersion] Latest published version of
   * the gateway install MSI.
   * @member {date} [publishedTimeUtc] Gateway install MSI published time.
   */
  constructor() {
  }

  /**
   * Defines the metadata of GatewayStatus
   *
   * @returns {object} metadata of GatewayStatus
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'GatewayStatus',
      type: {
        name: 'Composite',
        className: 'GatewayStatus',
        modelProperties: {
          availableMemoryMByte: {
            required: false,
            serializedName: 'availableMemoryMByte',
            type: {
              name: 'Number'
            }
          },
          gatewayCpuUtilizationPercent: {
            required: false,
            serializedName: 'gatewayCpuUtilizationPercent',
            constraints: {
              InclusiveMaximum: 100,
              InclusiveMinimum: 0
            },
            type: {
              name: 'Number'
            }
          },
          totalCpuUtilizationPercent: {
            required: false,
            serializedName: 'totalCpuUtilizationPercent',
            type: {
              name: 'Number'
            }
          },
          gatewayVersion: {
            required: false,
            serializedName: 'gatewayVersion',
            type: {
              name: 'String'
            }
          },
          friendlyOsName: {
            required: false,
            serializedName: 'friendlyOsName',
            type: {
              name: 'String'
            }
          },
          installedDate: {
            required: false,
            serializedName: 'installedDate',
            type: {
              name: 'DateTime'
            }
          },
          logicalProcessorCount: {
            required: false,
            serializedName: 'logicalProcessorCount',
            type: {
              name: 'Number'
            }
          },
          name: {
            required: false,
            serializedName: 'name',
            type: {
              name: 'String'
            }
          },
          gatewayId: {
            required: false,
            serializedName: 'gatewayId',
            type: {
              name: 'String'
            }
          },
          gatewayWorkingSetMByte: {
            required: false,
            serializedName: 'gatewayWorkingSetMByte',
            type: {
              name: 'Number'
            }
          },
          statusUpdated: {
            required: false,
            serializedName: 'statusUpdated',
            type: {
              name: 'DateTime'
            }
          },
          groupPolicyError: {
            required: false,
            serializedName: 'groupPolicyError',
            type: {
              name: 'String'
            }
          },
          allowGatewayGroupPolicyStatus: {
            required: false,
            serializedName: 'allowGatewayGroupPolicyStatus',
            type: {
              name: 'Boolean'
            }
          },
          requireMfaGroupPolicyStatus: {
            required: false,
            serializedName: 'requireMfaGroupPolicyStatus',
            type: {
              name: 'Boolean'
            }
          },
          encryptionCertificateThumbprint: {
            required: false,
            serializedName: 'encryptionCertificateThumbprint',
            type: {
              name: 'String'
            }
          },
          secondaryEncryptionCertificateThumbprint: {
            required: false,
            serializedName: 'secondaryEncryptionCertificateThumbprint',
            type: {
              name: 'String'
            }
          },
          encryptionJwk: {
            required: false,
            serializedName: 'encryptionJwk',
            type: {
              name: 'Composite',
              className: 'EncryptionJwkResource'
            }
          },
          secondaryEncryptionJwk: {
            required: false,
            serializedName: 'secondaryEncryptionJwk',
            type: {
              name: 'Composite',
              className: 'EncryptionJwkResource'
            }
          },
          activeMessageCount: {
            required: false,
            serializedName: 'activeMessageCount',
            type: {
              name: 'Number'
            }
          },
          latestPublishedMsiVersion: {
            required: false,
            serializedName: 'latestPublishedMsiVersion',
            type: {
              name: 'String'
            }
          },
          publishedTimeUtc: {
            required: false,
            serializedName: 'publishedTimeUtc',
            type: {
              name: 'DateTime'
            }
          }
        }
      }
    };
  }
}

module.exports = GatewayStatus;
