// Code generated by smithy-go-codegen DO NOT EDIT.

package types

import (
	smithydocument "github.com/aws/smithy-go/document"
	"time"
)

// Describes the enrollment status of an organization's member accounts in Compute
// Optimizer.
type AccountEnrollmentStatus struct {

	// The Amazon Web Services account ID.
	AccountId *string

	// The Unix epoch timestamp, in seconds, of when the account enrollment status was
	// last updated.
	LastUpdatedTimestamp *time.Time

	// The account enrollment status.
	Status Status

	// The reason for the account enrollment status. For example, an account might show
	// a status of Pending because member accounts of an organization require more time
	// to be enrolled in the service.
	StatusReason *string

	noSmithyDocumentSerde
}

// Describes the configuration of an Auto Scaling group.
type AutoScalingGroupConfiguration struct {

	// The desired capacity, or number of instances, for the Auto Scaling group.
	DesiredCapacity int32

	// The instance type for the Auto Scaling group.
	InstanceType *string

	// The maximum size, or maximum number of instances, for the Auto Scaling group.
	MaxSize int32

	// The minimum size, or minimum number of instances, for the Auto Scaling group.
	MinSize int32

	noSmithyDocumentSerde
}

// Describes an Auto Scaling group recommendation.
type AutoScalingGroupRecommendation struct {

	// The Amazon Web Services account ID of the Auto Scaling group.
	AccountId *string

	// The Amazon Resource Name (ARN) of the Auto Scaling group.
	AutoScalingGroupArn *string

	// The name of the Auto Scaling group.
	AutoScalingGroupName *string

	// An array of objects that describe the current configuration of the Auto Scaling
	// group.
	CurrentConfiguration *AutoScalingGroupConfiguration

	// The risk of the current Auto Scaling group not meeting the performance needs of
	// its workloads. The higher the risk, the more likely the current Auto Scaling
	// group configuration has insufficient capacity and cannot meet workload
	// requirements.
	CurrentPerformanceRisk CurrentPerformanceRisk

	// An object that describes the effective recommendation preferences for the Auto
	// Scaling group.
	EffectiveRecommendationPreferences *EffectiveRecommendationPreferences

	// The finding classification of the Auto Scaling group. Findings for Auto Scaling
	// groups include:
	//
	// * NotOptimized —An Auto Scaling group is considered not
	// optimized when Compute Optimizer identifies a recommendation that can provide
	// better performance for your workload.
	//
	// * Optimized —An Auto Scaling group is
	// considered optimized when Compute Optimizer determines that the group is
	// correctly provisioned to run your workload based on the chosen instance type.
	// For optimized resources, Compute Optimizer might recommend a new generation
	// instance type.
	Finding Finding

	// The applications that might be running on the instances in the Auto Scaling
	// group as inferred by Compute Optimizer. Compute Optimizer can infer if one of
	// the following applications might be running on the instances:
	//
	// * AmazonEmr -
	// Infers that Amazon EMR might be running on the instances.
	//
	// * ApacheCassandra -
	// Infers that Apache Cassandra might be running on the instances.
	//
	// * ApacheHadoop
	// - Infers that Apache Hadoop might be running on the instances.
	//
	// * Memcached -
	// Infers that Memcached might be running on the instances.
	//
	// * NGINX - Infers that
	// NGINX might be running on the instances.
	//
	// * PostgreSql - Infers that PostgreSQL
	// might be running on the instances.
	//
	// * Redis - Infers that Redis might be running
	// on the instances.
	InferredWorkloadTypes []InferredWorkloadType

	// The timestamp of when the Auto Scaling group recommendation was last generated.
	LastRefreshTimestamp *time.Time

	// The number of days for which utilization metrics were analyzed for the Auto
	// Scaling group.
	LookBackPeriodInDays float64

	// An array of objects that describe the recommendation options for the Auto
	// Scaling group.
	RecommendationOptions []AutoScalingGroupRecommendationOption

	// An array of objects that describe the utilization metrics of the Auto Scaling
	// group.
	UtilizationMetrics []UtilizationMetric

	noSmithyDocumentSerde
}

// Describes a recommendation option for an Auto Scaling group.
type AutoScalingGroupRecommendationOption struct {

	// An array of objects that describe an Auto Scaling group configuration.
	Configuration *AutoScalingGroupConfiguration

	// The level of effort required to migrate from the current instance type to the
	// recommended instance type. For example, the migration effort is Low if Amazon
	// EMR is the inferred workload type and an Amazon Web Services Graviton instance
	// type is recommended. The migration effort is Medium if a workload type couldn't
	// be inferred but an Amazon Web Services Graviton instance type is recommended.
	// The migration effort is VeryLow if both the current and recommended instance
	// types are of the same CPU architecture.
	MigrationEffort MigrationEffort

	// The performance risk of the Auto Scaling group configuration recommendation.
	// Performance risk indicates the likelihood of the recommended instance type not
	// meeting the resource needs of your workload. Compute Optimizer calculates an
	// individual performance risk score for each specification of the recommended
	// instance, including CPU, memory, EBS throughput, EBS IOPS, disk throughput, disk
	// IOPS, network throughput, and network PPS. The performance risk of the
	// recommended instance is calculated as the maximum performance risk score across
	// the analyzed resource specifications. The value ranges from 0 - 4, with 0
	// meaning that the recommended resource is predicted to always provide enough
	// hardware capability. The higher the performance risk is, the more likely you
	// should validate whether the recommendation will meet the performance
	// requirements of your workload before migrating your resource.
	PerformanceRisk float64

	// An array of objects that describe the projected utilization metrics of the Auto
	// Scaling group recommendation option. The Cpu and Memory metrics are the only
	// projected utilization metrics returned. Additionally, the Memory metric is
	// returned only for resources that have the unified CloudWatch agent installed on
	// them. For more information, see Enabling Memory Utilization with the CloudWatch
	// Agent
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
	ProjectedUtilizationMetrics []UtilizationMetric

	// The rank of the Auto Scaling group recommendation option. The top recommendation
	// option is ranked as 1.
	Rank int32

	// An object that describes the savings opportunity for the Auto Scaling group
	// recommendation option. Savings opportunity includes the estimated monthly
	// savings amount and percentage.
	SavingsOpportunity *SavingsOpportunity

	noSmithyDocumentSerde
}

// Describes the performance risk ratings for a given resource type. Resources with
// a high or medium rating are at risk of not meeting the performance needs of
// their workloads, while resources with a low rating are performing well in their
// workloads.
type CurrentPerformanceRiskRatings struct {

	// A count of the applicable resource types with a high performance risk rating.
	High int64

	// A count of the applicable resource types with a low performance risk rating.
	Low int64

	// A count of the applicable resource types with a medium performance risk rating.
	Medium int64

	// A count of the applicable resource types with a very low performance risk
	// rating.
	VeryLow int64

	noSmithyDocumentSerde
}

// Describes a filter that returns a more specific list of Amazon Elastic Block
// Store (Amazon EBS) volume recommendations. Use this filter with the
// GetEBSVolumeRecommendations action. You can use
// LambdaFunctionRecommendationFilter with the GetLambdaFunctionRecommendations
// action, JobFilter with the DescribeRecommendationExportJobs action, and Filter
// with the GetAutoScalingGroupRecommendations and GetEC2InstanceRecommendations
// actions.
type EBSFilter struct {

	// The name of the filter. Specify Finding to return recommendations with a
	// specific finding classification (for example, NotOptimized).
	Name EBSFilterName

	// The value of the filter. The valid values are Optimized, or NotOptimized.
	Values []string

	noSmithyDocumentSerde
}

// Describes a utilization metric of an Amazon Elastic Block Store (Amazon EBS)
// volume. Compare the utilization metric data of your resource against its
// projected utilization metric data to determine the performance difference
// between your current resource and the recommended option.
type EBSUtilizationMetric struct {

	// The name of the utilization metric. The following utilization metrics are
	// available:
	//
	// * VolumeReadOpsPerSecond - The completed read operations per second
	// from the volume in a specified period of time. Unit: Count
	//
	// *
	// VolumeWriteOpsPerSecond - The completed write operations per second to the
	// volume in a specified period of time. Unit: Count
	//
	// * VolumeReadBytesPerSecond -
	// The bytes read per second from the volume in a specified period of time. Unit:
	// Bytes
	//
	// * VolumeWriteBytesPerSecond - The bytes written to the volume in a
	// specified period of time. Unit: Bytes
	Name EBSMetricName

	// The statistic of the utilization metric. The Compute Optimizer API, Command Line
	// Interface (CLI), and SDKs return utilization metrics using only the Maximum
	// statistic, which is the highest value observed during the specified period. The
	// Compute Optimizer console displays graphs for some utilization metrics using the
	// Average statistic, which is the value of Sum / SampleCount during the specified
	// period. For more information, see Viewing resource recommendations
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html)
	// in the Compute Optimizer User Guide. You can also get averaged utilization
	// metric data for your resources using Amazon CloudWatch. For more information,
	// see the Amazon CloudWatch User Guide
	// (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html).
	Statistic MetricStatistic

	// The value of the utilization metric.
	Value float64

	noSmithyDocumentSerde
}

// Describes the effective recommendation preferences for a resource.
type EffectiveRecommendationPreferences struct {

	// Describes the CPU vendor and architecture for an instance or Auto Scaling group
	// recommendations. For example, when you specify AWS_ARM64 with:
	//
	// * A
	// GetEC2InstanceRecommendations or GetAutoScalingGroupRecommendations request,
	// Compute Optimizer returns recommendations that consist of Graviton2 instance
	// types only.
	//
	// * A GetEC2RecommendationProjectedMetrics request, Compute Optimizer
	// returns projected utilization metrics for Graviton2 instance type
	// recommendations only.
	//
	// * A ExportEC2InstanceRecommendations or
	// ExportAutoScalingGroupRecommendations request, Compute Optimizer exports
	// recommendations that consist of Graviton2 instance types only.
	CpuVendorArchitectures []CpuVendorArchitecture

	// Describes the activation status of the enhanced infrastructure metrics
	// preference. A status of Active confirms that the preference is applied in the
	// latest recommendation refresh, and a status of Inactive confirms that it's not
	// yet applied to recommendations. For more information, see Enhanced
	// infrastructure metrics
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
	// in the Compute Optimizer User Guide.
	EnhancedInfrastructureMetrics EnhancedInfrastructureMetrics

	// Describes the activation status of the inferred workload types preference. A
	// status of Active confirms that the preference is applied in the latest
	// recommendation refresh. A status of Inactive confirms that it's not yet applied
	// to recommendations.
	InferredWorkloadTypes InferredWorkloadTypesPreference

	noSmithyDocumentSerde
}

// Describes a filter that returns a more specific list of account enrollment
// statuses. Use this filter with the GetEnrollmentStatusesForOrganization action.
type EnrollmentFilter struct {

	// The name of the filter. Specify Status to return accounts with a specific
	// enrollment status (for example, Active).
	Name EnrollmentFilterName

	// The value of the filter. The valid values are Active, Inactive, Pending, and
	// Failed.
	Values []string

	noSmithyDocumentSerde
}

// Describes the estimated monthly savings amount possible, based on On-Demand
// instance pricing, by adopting Compute Optimizer recommendations for a given
// resource. For more information, see Estimated monthly savings and savings
// opportunities
// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/view-ec2-recommendations.html#ec2-savings-calculation)
// in the Compute Optimizer User Guide.
type EstimatedMonthlySavings struct {

	// The currency of the estimated monthly savings.
	Currency Currency

	// The value of the estimated monthly savings.
	Value float64

	noSmithyDocumentSerde
}

// Describes the destination of the recommendations export and metadata files.
type ExportDestination struct {

	// An object that describes the destination Amazon Simple Storage Service (Amazon
	// S3) bucket name and object keys of a recommendations export file, and its
	// associated metadata file.
	S3 *S3Destination

	noSmithyDocumentSerde
}

// Describes a filter that returns a more specific list of recommendations. Use
// this filter with the GetAutoScalingGroupRecommendations and
// GetEC2InstanceRecommendations actions. You can use EBSFilter with the
// GetEBSVolumeRecommendations action, LambdaFunctionRecommendationFilter with the
// GetLambdaFunctionRecommendations action, and JobFilter with the
// DescribeRecommendationExportJobs action.
type Filter struct {

	// The name of the filter. Specify Finding to return recommendations with a
	// specific finding classification (for example, Underprovisioned). Specify
	// RecommendationSourceType to return recommendations of a specific resource type
	// (for example, Ec2Instance). Specify FindingReasonCodes to return recommendations
	// with a specific finding reason code (for example, CPUUnderprovisioned).
	Name FilterName

	// The value of the filter. The valid values for this parameter are as follows,
	// depending on what you specify for the name parameter and the resource type that
	// you wish to filter results for:
	//
	// * Specify Optimized or NotOptimized if you
	// specify the name parameter as Finding and you want to filter results for Auto
	// Scaling groups.
	//
	// * Specify Underprovisioned, Overprovisioned, or Optimized if
	// you specify the name parameter as Finding and you want to filter results for EC2
	// instances.
	//
	// * Specify Ec2Instance or AutoScalingGroup if you specify the name
	// parameter as RecommendationSourceType.
	//
	// * Specify one of the following options
	// if you specify the name parameter as FindingReasonCodes:
	//
	// * CPUOverprovisioned —
	// The instance’s CPU configuration can be sized down while still meeting the
	// performance requirements of your workload.
	//
	// * CPUUnderprovisioned — The
	// instance’s CPU configuration doesn't meet the performance requirements of your
	// workload and there is an alternative instance type that provides better CPU
	// performance.
	//
	// * MemoryOverprovisioned — The instance’s memory configuration can
	// be sized down while still meeting the performance requirements of your
	// workload.
	//
	// * MemoryUnderprovisioned — The instance’s memory configuration
	// doesn't meet the performance requirements of your workload and there is an
	// alternative instance type that provides better memory performance.
	//
	// *
	// EBSThroughputOverprovisioned — The instance’s EBS throughput configuration can
	// be sized down while still meeting the performance requirements of your
	// workload.
	//
	// * EBSThroughputUnderprovisioned — The instance’s EBS throughput
	// configuration doesn't meet the performance requirements of your workload and
	// there is an alternative instance type that provides better EBS throughput
	// performance.
	//
	// * EBSIOPSOverprovisioned — The instance’s EBS IOPS configuration
	// can be sized down while still meeting the performance requirements of your
	// workload.
	//
	// * EBSIOPSUnderprovisioned — The instance’s EBS IOPS configuration
	// doesn't meet the performance requirements of your workload and there is an
	// alternative instance type that provides better EBS IOPS performance.
	//
	// *
	// NetworkBandwidthOverprovisioned — The instance’s network bandwidth configuration
	// can be sized down while still meeting the performance requirements of your
	// workload.
	//
	// * NetworkBandwidthUnderprovisioned — The instance’s network bandwidth
	// configuration doesn't meet the performance requirements of your workload and
	// there is an alternative instance type that provides better network bandwidth
	// performance. This finding reason happens when the NetworkIn or NetworkOut
	// performance of an instance is impacted.
	//
	// * NetworkPPSOverprovisioned — The
	// instance’s network PPS (packets per second) configuration can be sized down
	// while still meeting the performance requirements of your workload.
	//
	// *
	// NetworkPPSUnderprovisioned — The instance’s network PPS (packets per second)
	// configuration doesn't meet the performance requirements of your workload and
	// there is an alternative instance type that provides better network PPS
	// performance.
	//
	// * DiskIOPSOverprovisioned — The instance’s disk IOPS configuration
	// can be sized down while still meeting the performance requirements of your
	// workload.
	//
	// * DiskIOPSUnderprovisioned — The instance’s disk IOPS configuration
	// doesn't meet the performance requirements of your workload and there is an
	// alternative instance type that provides better disk IOPS performance.
	//
	// *
	// DiskThroughputOverprovisioned — The instance’s disk throughput configuration can
	// be sized down while still meeting the performance requirements of your
	// workload.
	//
	// * DiskThroughputUnderprovisioned — The instance’s disk throughput
	// configuration doesn't meet the performance requirements of your workload and
	// there is an alternative instance type that provides better disk throughput
	// performance.
	Values []string

	noSmithyDocumentSerde
}

// Describes an error experienced when getting recommendations. For example, an
// error is returned if you request recommendations for an unsupported Auto Scaling
// group, or if you request recommendations for an instance of an unsupported
// instance family.
type GetRecommendationError struct {

	// The error code.
	Code *string

	// The ID of the error.
	Identifier *string

	// The message, or reason, for the error.
	Message *string

	noSmithyDocumentSerde
}

// Describes an Amazon EC2 instance recommendation.
type InstanceRecommendation struct {

	// The Amazon Web Services account ID of the instance.
	AccountId *string

	// The instance type of the current instance.
	CurrentInstanceType *string

	// The risk of the current instance not meeting the performance needs of its
	// workloads. The higher the risk, the more likely the current instance cannot meet
	// the performance requirements of its workload.
	CurrentPerformanceRisk CurrentPerformanceRisk

	// An object that describes the effective recommendation preferences for the
	// instance.
	EffectiveRecommendationPreferences *EffectiveRecommendationPreferences

	// The finding classification of the instance. Findings for instances include:
	//
	// *
	// Underprovisioned —An instance is considered under-provisioned when at least one
	// specification of your instance, such as CPU, memory, or network, does not meet
	// the performance requirements of your workload. Under-provisioned instances may
	// lead to poor application performance.
	//
	// * Overprovisioned —An instance is
	// considered over-provisioned when at least one specification of your instance,
	// such as CPU, memory, or network, can be sized down while still meeting the
	// performance requirements of your workload, and no specification is
	// under-provisioned. Over-provisioned instances may lead to unnecessary
	// infrastructure cost.
	//
	// * Optimized —An instance is considered optimized when all
	// specifications of your instance, such as CPU, memory, and network, meet the
	// performance requirements of your workload and is not over provisioned. For
	// optimized resources, Compute Optimizer might recommend a new generation instance
	// type.
	Finding Finding

	// The reason for the finding classification of the instance. Finding reason codes
	// for instances include:
	//
	// * CPUOverprovisioned — The instance’s CPU configuration
	// can be sized down while still meeting the performance requirements of your
	// workload. This is identified by analyzing the CPUUtilization metric of the
	// current instance during the look-back period.
	//
	// * CPUUnderprovisioned — The
	// instance’s CPU configuration doesn't meet the performance requirements of your
	// workload and there is an alternative instance type that provides better CPU
	// performance. This is identified by analyzing the CPUUtilization metric of the
	// current instance during the look-back period.
	//
	// * MemoryOverprovisioned — The
	// instance’s memory configuration can be sized down while still meeting the
	// performance requirements of your workload. This is identified by analyzing the
	// memory utilization metric of the current instance during the look-back
	// period.
	//
	// * MemoryUnderprovisioned — The instance’s memory configuration doesn't
	// meet the performance requirements of your workload and there is an alternative
	// instance type that provides better memory performance. This is identified by
	// analyzing the memory utilization metric of the current instance during the
	// look-back period. Memory utilization is analyzed only for resources that have
	// the unified CloudWatch agent installed on them. For more information, see
	// Enabling memory utilization with the Amazon CloudWatch Agent
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent)
	// in the Compute Optimizer User Guide. On Linux instances, Compute Optimizer
	// analyses the mem_used_percent metric in the CWAgent namespace, or the legacy
	// MemoryUtilization metric in the System/Linux namespace. On Windows instances,
	// Compute Optimizer analyses the Memory % Committed Bytes In Use metric in the
	// CWAgent namespace.
	//
	// * EBSThroughputOverprovisioned — The instance’s EBS
	// throughput configuration can be sized down while still meeting the performance
	// requirements of your workload. This is identified by analyzing the VolumeReadOps
	// and VolumeWriteOps metrics of EBS volumes attached to the current instance
	// during the look-back period.
	//
	// * EBSThroughputUnderprovisioned — The instance’s
	// EBS throughput configuration doesn't meet the performance requirements of your
	// workload and there is an alternative instance type that provides better EBS
	// throughput performance. This is identified by analyzing the VolumeReadOps and
	// VolumeWriteOps metrics of EBS volumes attached to the current instance during
	// the look-back period.
	//
	// * EBSIOPSOverprovisioned — The instance’s EBS IOPS
	// configuration can be sized down while still meeting the performance requirements
	// of your workload. This is identified by analyzing the VolumeReadBytes and
	// VolumeWriteBytes metric of EBS volumes attached to the current instance during
	// the look-back period.
	//
	// * EBSIOPSUnderprovisioned — The instance’s EBS IOPS
	// configuration doesn't meet the performance requirements of your workload and
	// there is an alternative instance type that provides better EBS IOPS performance.
	// This is identified by analyzing the VolumeReadBytes and VolumeWriteBytes metric
	// of EBS volumes attached to the current instance during the look-back period.
	//
	// *
	// NetworkBandwidthOverprovisioned — The instance’s network bandwidth configuration
	// can be sized down while still meeting the performance requirements of your
	// workload. This is identified by analyzing the NetworkIn and NetworkOut metrics
	// of the current instance during the look-back period.
	//
	// *
	// NetworkBandwidthUnderprovisioned — The instance’s network bandwidth
	// configuration doesn't meet the performance requirements of your workload and
	// there is an alternative instance type that provides better network bandwidth
	// performance. This is identified by analyzing the NetworkIn and NetworkOut
	// metrics of the current instance during the look-back period. This finding reason
	// happens when the NetworkIn or NetworkOut performance of an instance is
	// impacted.
	//
	// * NetworkPPSOverprovisioned — The instance’s network PPS (packets per
	// second) configuration can be sized down while still meeting the performance
	// requirements of your workload. This is identified by analyzing the
	// NetworkPacketsIn and NetworkPacketsIn metrics of the current instance during the
	// look-back period.
	//
	// * NetworkPPSUnderprovisioned — The instance’s network PPS
	// (packets per second) configuration doesn't meet the performance requirements of
	// your workload and there is an alternative instance type that provides better
	// network PPS performance. This is identified by analyzing the NetworkPacketsIn
	// and NetworkPacketsIn metrics of the current instance during the look-back
	// period.
	//
	// * DiskIOPSOverprovisioned — The instance’s disk IOPS configuration can
	// be sized down while still meeting the performance requirements of your workload.
	// This is identified by analyzing the DiskReadOps and DiskWriteOps metrics of the
	// current instance during the look-back period.
	//
	// * DiskIOPSUnderprovisioned — The
	// instance’s disk IOPS configuration doesn't meet the performance requirements of
	// your workload and there is an alternative instance type that provides better
	// disk IOPS performance. This is identified by analyzing the DiskReadOps and
	// DiskWriteOps metrics of the current instance during the look-back period.
	//
	// *
	// DiskThroughputOverprovisioned — The instance’s disk throughput configuration can
	// be sized down while still meeting the performance requirements of your workload.
	// This is identified by analyzing the DiskReadBytes and DiskWriteBytes metrics of
	// the current instance during the look-back period.
	//
	// *
	// DiskThroughputUnderprovisioned — The instance’s disk throughput configuration
	// doesn't meet the performance requirements of your workload and there is an
	// alternative instance type that provides better disk throughput performance. This
	// is identified by analyzing the DiskReadBytes and DiskWriteBytes metrics of the
	// current instance during the look-back period.
	//
	// For more information about
	// instance metrics, see List the available CloudWatch metrics for your instances
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html)
	// in the Amazon Elastic Compute Cloud User Guide. For more information about EBS
	// volume metrics, see Amazon CloudWatch metrics for Amazon EBS
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cloudwatch_ebs.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	FindingReasonCodes []InstanceRecommendationFindingReasonCode

	// The applications that might be running on the instance as inferred by Compute
	// Optimizer. Compute Optimizer can infer if one of the following applications
	// might be running on the instance:
	//
	// * AmazonEmr - Infers that Amazon EMR might be
	// running on the instance.
	//
	// * ApacheCassandra - Infers that Apache Cassandra might
	// be running on the instance.
	//
	// * ApacheHadoop - Infers that Apache Hadoop might be
	// running on the instance.
	//
	// * Memcached - Infers that Memcached might be running
	// on the instance.
	//
	// * NGINX - Infers that NGINX might be running on the
	// instance.
	//
	// * PostgreSql - Infers that PostgreSQL might be running on the
	// instance.
	//
	// * Redis - Infers that Redis might be running on the instance.
	InferredWorkloadTypes []InferredWorkloadType

	// The Amazon Resource Name (ARN) of the current instance.
	InstanceArn *string

	// The name of the current instance.
	InstanceName *string

	// The timestamp of when the instance recommendation was last generated.
	LastRefreshTimestamp *time.Time

	// The number of days for which utilization metrics were analyzed for the instance.
	LookBackPeriodInDays float64

	// An array of objects that describe the recommendation options for the instance.
	RecommendationOptions []InstanceRecommendationOption

	// An array of objects that describe the source resource of the recommendation.
	RecommendationSources []RecommendationSource

	// An array of objects that describe the utilization metrics of the instance.
	UtilizationMetrics []UtilizationMetric

	noSmithyDocumentSerde
}

// Describes a recommendation option for an Amazon EC2 instance.
type InstanceRecommendationOption struct {

	// The instance type of the instance recommendation.
	InstanceType *string

	// The level of effort required to migrate from the current instance type to the
	// recommended instance type. For example, the migration effort is Low if Amazon
	// EMR is the inferred workload type and an Amazon Web Services Graviton instance
	// type is recommended. The migration effort is Medium if a workload type couldn't
	// be inferred but an Amazon Web Services Graviton instance type is recommended.
	// The migration effort is VeryLow if both the current and recommended instance
	// types are of the same CPU architecture.
	MigrationEffort MigrationEffort

	// The performance risk of the instance recommendation option. Performance risk
	// indicates the likelihood of the recommended instance type not meeting the
	// resource needs of your workload. Compute Optimizer calculates an individual
	// performance risk score for each specification of the recommended instance,
	// including CPU, memory, EBS throughput, EBS IOPS, disk throughput, disk IOPS,
	// network throughput, and network PPS. The performance risk of the recommended
	// instance is calculated as the maximum performance risk score across the analyzed
	// resource specifications. The value ranges from 0 - 4, with 0 meaning that the
	// recommended resource is predicted to always provide enough hardware capability.
	// The higher the performance risk is, the more likely you should validate whether
	// the recommendation will meet the performance requirements of your workload
	// before migrating your resource.
	PerformanceRisk float64

	// Describes the configuration differences between the current instance and the
	// recommended instance type. You should consider the configuration differences
	// before migrating your workloads from the current instance to the recommended
	// instance type. The Change the instance type guide for Linux
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-resize.html)
	// and Change the instance type guide for Windows
	// (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-resize.html)
	// provide general guidance for getting started with an instance migration.
	// Platform differences include:
	//
	// * Hypervisor — The hypervisor of the recommended
	// instance type is different than that of the current instance. For example, the
	// recommended instance type uses a Nitro hypervisor and the current instance uses
	// a Xen hypervisor. The differences that you should consider between these
	// hypervisors are covered in the Nitro Hypervisor
	// (http://aws.amazon.com/ec2/faqs/#Nitro_Hypervisor) section of the Amazon EC2
	// frequently asked questions. For more information, see Instances built on the
	// Nitro System
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)
	// in the Amazon EC2 User Guide for Linux, or Instances built on the Nitro System
	// (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#ec2-nitro-instances)
	// in the Amazon EC2 User Guide for Windows.
	//
	// * NetworkInterface — The network
	// interface of the recommended instance type is different than that of the current
	// instance. For example, the recommended instance type supports enhanced
	// networking and the current instance might not. To enable enhanced networking for
	// the recommended instance type, you must install the Elastic Network Adapter
	// (ENA) driver or the Intel 82599 Virtual Function driver. For more information,
	// see Networking and storage features
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#instance-networking-storage)
	// and Enhanced networking on Linux
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html)
	// in the Amazon EC2 User Guide for Linux, or Networking and storage features
	// (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#instance-networking-storage)
	// and Enhanced networking on Windows
	// (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/enhanced-networking.html)
	// in the Amazon EC2 User Guide for Windows.
	//
	// * StorageInterface — The storage
	// interface of the recommended instance type is different than that of the current
	// instance. For example, the recommended instance type uses an NVMe storage
	// interface and the current instance does not. To access NVMe volumes for the
	// recommended instance type, you will need to install or upgrade the NVMe driver.
	// For more information, see Networking and storage features
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#instance-networking-storage)
	// and Amazon EBS and NVMe on Linux instances
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nvme-ebs-volumes.html) in
	// the Amazon EC2 User Guide for Linux, or Networking and storage features
	// (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#instance-networking-storage)
	// and Amazon EBS and NVMe on Windows instances
	// (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/nvme-ebs-volumes.html)
	// in the Amazon EC2 User Guide for Windows.
	//
	// * InstanceStoreAvailability — The
	// recommended instance type does not support instance store volumes and the
	// current instance does. Before migrating, you might need to back up the data on
	// your instance store volumes if you want to preserve them. For more information,
	// see How do I back up an instance store volume on my Amazon EC2 instance to
	// Amazon EBS?
	// (https://aws.amazon.com/premiumsupport/knowledge-center/back-up-instance-store-ebs/)
	// in the Amazon Web Services Premium Support Knowledge Base. For more information,
	// see Networking and storage features
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#instance-networking-storage)
	// and Amazon EC2 instance store
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) in
	// the Amazon EC2 User Guide for Linux, or see Networking and storage features
	// (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#instance-networking-storage)
	// and Amazon EC2 instance store
	// (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/InstanceStorage.html) in
	// the Amazon EC2 User Guide for Windows.
	//
	// * VirtualizationType — The recommended
	// instance type uses the hardware virtual machine (HVM) virtualization type and
	// the current instance uses the paravirtual (PV) virtualization type. For more
	// information about the differences between these virtualization types, see Linux
	// AMI virtualization types
	// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html)
	// in the Amazon EC2 User Guide for Linux, or Windows AMI virtualization types
	// (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/windows-ami-version-history.html#virtualization-types)
	// in the Amazon EC2 User Guide for Windows.
	//
	// * Architecture — The CPU architecture
	// between the recommended instance type and the current instance is different. For
	// example, the recommended instance type might use an Arm CPU architecture and the
	// current instance type might use a different one, such as x86. Before migrating,
	// you should consider recompiling the software on your instance for the new
	// architecture. Alternatively, you might switch to an Amazon Machine Image (AMI)
	// that supports the new architecture. For more information about the CPU
	// architecture for each instance type, see Amazon EC2 Instance Types
	// (http://aws.amazon.com/ec2/instance-types/).
	PlatformDifferences []PlatformDifference

	// An array of objects that describe the projected utilization metrics of the
	// instance recommendation option. The Cpu and Memory metrics are the only
	// projected utilization metrics returned. Additionally, the Memory metric is
	// returned only for resources that have the unified CloudWatch agent installed on
	// them. For more information, see Enabling Memory Utilization with the CloudWatch
	// Agent
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
	ProjectedUtilizationMetrics []UtilizationMetric

	// The rank of the instance recommendation option. The top recommendation option is
	// ranked as 1.
	Rank int32

	// An object that describes the savings opportunity for the instance recommendation
	// option. Savings opportunity includes the estimated monthly savings amount and
	// percentage.
	SavingsOpportunity *SavingsOpportunity

	noSmithyDocumentSerde
}

// Describes a filter that returns a more specific list of recommendation export
// jobs. Use this filter with the DescribeRecommendationExportJobs action. You can
// use EBSFilter with the GetEBSVolumeRecommendations action,
// LambdaFunctionRecommendationFilter with the GetLambdaFunctionRecommendations
// action, and Filter with the GetAutoScalingGroupRecommendations and
// GetEC2InstanceRecommendations actions.
type JobFilter struct {

	// The name of the filter. Specify ResourceType to return export jobs of a specific
	// resource type (for example, Ec2Instance). Specify JobStatus to return export
	// jobs with a specific status (e.g, Complete).
	Name JobFilterName

	// The value of the filter. The valid values for this parameter are as follows,
	// depending on what you specify for the name parameter:
	//
	// * Specify Ec2Instance or
	// AutoScalingGroup if you specify the name parameter as ResourceType. There is no
	// filter for EBS volumes because volume recommendations cannot be exported at this
	// time.
	//
	// * Specify Queued, InProgress, Complete, or Failed if you specify the name
	// parameter as JobStatus.
	Values []string

	noSmithyDocumentSerde
}

// Describes a projected utilization metric of an Lambda function recommendation
// option.
type LambdaFunctionMemoryProjectedMetric struct {

	// The name of the projected utilization metric.
	Name LambdaFunctionMemoryMetricName

	// The statistic of the projected utilization metric.
	Statistic LambdaFunctionMemoryMetricStatistic

	// The values of the projected utilization metrics.
	Value float64

	noSmithyDocumentSerde
}

// Describes a recommendation option for an Lambda function.
type LambdaFunctionMemoryRecommendationOption struct {

	// The memory size, in MB, of the function recommendation option.
	MemorySize int32

	// An array of objects that describe the projected utilization metrics of the
	// function recommendation option.
	ProjectedUtilizationMetrics []LambdaFunctionMemoryProjectedMetric

	// The rank of the function recommendation option. The top recommendation option is
	// ranked as 1.
	Rank int32

	// An object that describes the savings opportunity for the Lambda function
	// recommendation option. Savings opportunity includes the estimated monthly
	// savings amount and percentage.
	SavingsOpportunity *SavingsOpportunity

	noSmithyDocumentSerde
}

// Describes an Lambda function recommendation.
type LambdaFunctionRecommendation struct {

	// The Amazon Web Services account ID of the function.
	AccountId *string

	// The amount of memory, in MB, that's allocated to the current function.
	CurrentMemorySize int32

	// The risk of the current Lambda function not meeting the performance needs of its
	// workloads. The higher the risk, the more likely the current Lambda function
	// requires more memory.
	CurrentPerformanceRisk CurrentPerformanceRisk

	// The finding classification of the function. Findings for functions include:
	//
	// *
	// Optimized — The function is correctly provisioned to run your workload based on
	// its current configuration and its utilization history. This finding
	// classification does not include finding reason codes.
	//
	// * NotOptimized — The
	// function is performing at a higher level (over-provisioned) or at a lower level
	// (under-provisioned) than required for your workload because its current
	// configuration is not optimal. Over-provisioned resources might lead to
	// unnecessary infrastructure cost, and under-provisioned resources might lead to
	// poor application performance. This finding classification can include the
	// MemoryUnderprovisioned and MemoryUnderprovisioned finding reason codes.
	//
	// *
	// Unavailable — Compute Optimizer was unable to generate a recommendation for the
	// function. This could be because the function has not accumulated sufficient
	// metric data, or the function does not qualify for a recommendation. This finding
	// classification can include the InsufficientData and Inconclusive finding reason
	// codes. Functions with a finding of unavailable are not returned unless you
	// specify the filter parameter with a value of Unavailable in your
	// GetLambdaFunctionRecommendations request.
	Finding LambdaFunctionRecommendationFinding

	// The reason for the finding classification of the function. Functions that have a
	// finding classification of Optimized don't have a finding reason code. Finding
	// reason codes for functions include:
	//
	// * MemoryOverprovisioned — The function is
	// over-provisioned when its memory configuration can be sized down while still
	// meeting the performance requirements of your workload. An over-provisioned
	// function might lead to unnecessary infrastructure cost. This finding reason code
	// is part of the NotOptimized finding classification.
	//
	// * MemoryUnderprovisioned —
	// The function is under-provisioned when its memory configuration doesn't meet the
	// performance requirements of the workload. An under-provisioned function might
	// lead to poor application performance. This finding reason code is part of the
	// NotOptimized finding classification.
	//
	// * InsufficientData — The function does not
	// have sufficient metric data for Compute Optimizer to generate a recommendation.
	// For more information, see the Supported resources and requirements
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html) in
	// the Compute Optimizer User Guide. This finding reason code is part of the
	// Unavailable finding classification.
	//
	// * Inconclusive — The function does not
	// qualify for a recommendation because Compute Optimizer cannot generate a
	// recommendation with a high degree of confidence. This finding reason code is
	// part of the Unavailable finding classification.
	FindingReasonCodes []LambdaFunctionRecommendationFindingReasonCode

	// The Amazon Resource Name (ARN) of the current function.
	FunctionArn *string

	// The version number of the current function.
	FunctionVersion *string

	// The timestamp of when the function recommendation was last generated.
	LastRefreshTimestamp *time.Time

	// The number of days for which utilization metrics were analyzed for the function.
	LookbackPeriodInDays float64

	// An array of objects that describe the memory configuration recommendation
	// options for the function.
	MemorySizeRecommendationOptions []LambdaFunctionMemoryRecommendationOption

	// The number of times your function code was applied during the look-back period.
	NumberOfInvocations int64

	// An array of objects that describe the utilization metrics of the function.
	UtilizationMetrics []LambdaFunctionUtilizationMetric

	noSmithyDocumentSerde
}

// Describes a filter that returns a more specific list of Lambda function
// recommendations. Use this filter with the GetLambdaFunctionRecommendations
// action. You can use EBSFilter with the GetEBSVolumeRecommendations action,
// JobFilter with the DescribeRecommendationExportJobs action, and Filter with the
// GetAutoScalingGroupRecommendations and GetEC2InstanceRecommendations actions.
type LambdaFunctionRecommendationFilter struct {

	// The name of the filter. Specify Finding to return recommendations with a
	// specific finding classification (for example, NotOptimized). Specify
	// FindingReasonCode to return recommendations with a specific finding reason code
	// (for example, MemoryUnderprovisioned).
	Name LambdaFunctionRecommendationFilterName

	// The value of the filter. The valid values for this parameter are as follows,
	// depending on what you specify for the name parameter:
	//
	// * Specify Optimized,
	// NotOptimized, or Unavailable if you specify the name parameter as Finding.
	//
	// *
	// Specify MemoryOverprovisioned, MemoryUnderprovisioned, InsufficientData, or
	// Inconclusive if you specify the name parameter as FindingReasonCode.
	Values []string

	noSmithyDocumentSerde
}

// Describes a utilization metric of an Lambda function.
type LambdaFunctionUtilizationMetric struct {

	// The name of the utilization metric. The following utilization metrics are
	// available:
	//
	// * Duration - The amount of time that your function code spends
	// processing an event.
	//
	// * Memory - The amount of memory used per invocation.
	Name LambdaFunctionMetricName

	// The statistic of the utilization metric. The Compute Optimizer API, Command Line
	// Interface (CLI), and SDKs return utilization metrics using only the Maximum
	// statistic, which is the highest value observed during the specified period. The
	// Compute Optimizer console displays graphs for some utilization metrics using the
	// Average statistic, which is the value of Sum / SampleCount during the specified
	// period. For more information, see Viewing resource recommendations
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html)
	// in the Compute Optimizer User Guide. You can also get averaged utilization
	// metric data for your resources using Amazon CloudWatch. For more information,
	// see the Amazon CloudWatch User Guide
	// (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html).
	Statistic LambdaFunctionMetricStatistic

	// The value of the utilization metric.
	Value float64

	noSmithyDocumentSerde
}

// Describes a projected utilization metric of a recommendation option, such as an
// Amazon EC2 instance. This represents the projected utilization of a
// recommendation option had you used that resource during the analyzed period.
// Compare the utilization metric data of your resource against its projected
// utilization metric data to determine the performance difference between your
// current resource and the recommended option. The Cpu and Memory metrics are the
// only projected utilization metrics returned when you run the
// GetEC2RecommendationProjectedMetrics action. Additionally, the Memory metric is
// returned only for resources that have the unified CloudWatch agent installed on
// them. For more information, see Enabling Memory Utilization with the CloudWatch
// Agent
// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
type ProjectedMetric struct {

	// The name of the projected utilization metric. The following projected
	// utilization metrics are returned:
	//
	// * Cpu - The projected percentage of allocated
	// EC2 compute units that would be in use on the recommendation option had you used
	// that resource during the analyzed period. This metric identifies the processing
	// power required to run an application on the recommendation option. Depending on
	// the instance type, tools in your operating system can show a lower percentage
	// than CloudWatch when the instance is not allocated a full processor core. Units:
	// Percent
	//
	// * Memory - The percentage of memory that would be in use on the
	// recommendation option had you used that resource during the analyzed period.
	// This metric identifies the amount of memory required to run an application on
	// the recommendation option. Units: Percent The Memory metric is returned only for
	// resources that have the unified CloudWatch agent installed on them. For more
	// information, see Enabling Memory Utilization with the CloudWatch Agent
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
	Name MetricName

	// The timestamps of the projected utilization metric.
	Timestamps []time.Time

	// The values of the projected utilization metrics.
	Values []float64

	noSmithyDocumentSerde
}

// A summary of a finding reason code.
type ReasonCodeSummary struct {

	// The name of the finding reason code.
	Name FindingReasonCode

	// The value of the finding reason code summary.
	Value float64

	noSmithyDocumentSerde
}

// Describes a recommendation export job. Use the DescribeRecommendationExportJobs
// action to view your recommendation export jobs. Use the
// ExportAutoScalingGroupRecommendations or ExportEC2InstanceRecommendations
// actions to request an export of your recommendations.
type RecommendationExportJob struct {

	// The timestamp of when the export job was created.
	CreationTimestamp *time.Time

	// An object that describes the destination of the export file.
	Destination *ExportDestination

	// The reason for an export job failure.
	FailureReason *string

	// The identification number of the export job.
	JobId *string

	// The timestamp of when the export job was last updated.
	LastUpdatedTimestamp *time.Time

	// The resource type of the exported recommendations.
	ResourceType ResourceType

	// The status of the export job.
	Status JobStatus

	noSmithyDocumentSerde
}

// Describes the recommendation preferences to return in the response of a
// GetAutoScalingGroupRecommendations, GetEC2InstanceRecommendations, and
// GetEC2RecommendationProjectedMetrics request.
type RecommendationPreferences struct {

	// Specifies the CPU vendor and architecture for Amazon EC2 instance and Auto
	// Scaling group recommendations. For example, when you specify AWS_ARM64 with:
	//
	// *
	// A GetEC2InstanceRecommendations or GetAutoScalingGroupRecommendations request,
	// Compute Optimizer returns recommendations that consist of Graviton2 instance
	// types only.
	//
	// * A GetEC2RecommendationProjectedMetrics request, Compute Optimizer
	// returns projected utilization metrics for Graviton2 instance type
	// recommendations only.
	//
	// * A ExportEC2InstanceRecommendations or
	// ExportAutoScalingGroupRecommendations request, Compute Optimizer exports
	// recommendations that consist of Graviton2 instance types only.
	CpuVendorArchitectures []CpuVendorArchitecture

	noSmithyDocumentSerde
}

// Describes a recommendation preference.
type RecommendationPreferencesDetail struct {

	// The status of the enhanced infrastructure metrics recommendation preference. A
	// status of Active confirms that the preference is applied in the latest
	// recommendation refresh, and a status of Inactive confirms that it's not yet
	// applied to recommendations. For more information, see Enhanced infrastructure
	// metrics
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
	// in the Compute Optimizer User Guide.
	EnhancedInfrastructureMetrics EnhancedInfrastructureMetrics

	// The status of the inferred workload types recommendation preference. A status of
	// Active confirms that the preference is applied in the latest recommendation
	// refresh. A status of Inactive confirms that it's not yet applied to
	// recommendations.
	InferredWorkloadTypes InferredWorkloadTypesPreference

	// The target resource type of the recommendation preference to create. The
	// Ec2Instance option encompasses standalone instances and instances that are part
	// of Auto Scaling groups. The AutoScalingGroup option encompasses only instances
	// that are part of an Auto Scaling group.
	ResourceType ResourceType

	// An object that describes the scope of the recommendation preference.
	// Recommendation preferences can be created at the organization level (for
	// management accounts of an organization only), account level, and resource level.
	// For more information, see Activating enhanced infrastructure metrics
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
	// in the Compute Optimizer User Guide.
	Scope *Scope

	noSmithyDocumentSerde
}

// Describes the source of a recommendation, such as an Amazon EC2 instance or Auto
// Scaling group.
type RecommendationSource struct {

	// The Amazon Resource Name (ARN) of the recommendation source.
	RecommendationSourceArn *string

	// The resource type of the recommendation source.
	RecommendationSourceType RecommendationSourceType

	noSmithyDocumentSerde
}

// A summary of a recommendation.
type RecommendationSummary struct {

	// The Amazon Web Services account ID of the recommendation summary.
	AccountId *string

	// An object that describes the performance risk ratings for a given resource type.
	CurrentPerformanceRiskRatings *CurrentPerformanceRiskRatings

	// The resource type that the recommendation summary applies to.
	RecommendationResourceType RecommendationSourceType

	// An object that describes the savings opportunity for a given resource type.
	// Savings opportunity includes the estimated monthly savings amount and
	// percentage.
	SavingsOpportunity *SavingsOpportunity

	// An array of objects that describe a recommendation summary.
	Summaries []Summary

	noSmithyDocumentSerde
}

// Describes a projected utilization metric of a recommendation option. The Cpu and
// Memory metrics are the only projected utilization metrics returned when you run
// the GetEC2RecommendationProjectedMetrics action. Additionally, the Memory metric
// is returned only for resources that have the unified CloudWatch agent installed
// on them. For more information, see Enabling Memory Utilization with the
// CloudWatch Agent
// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
type RecommendedOptionProjectedMetric struct {

	// An array of objects that describe a projected utilization metric.
	ProjectedMetrics []ProjectedMetric

	// The rank of the recommendation option projected metric. The top recommendation
	// option is ranked as 1. The projected metric rank correlates to the
	// recommendation option rank. For example, the projected metric ranked as 1 is
	// related to the recommendation option that is also ranked as 1 in the same
	// response.
	Rank int32

	// The recommended instance type.
	RecommendedInstanceType *string

	noSmithyDocumentSerde
}

// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket name
// and object keys of a recommendations export file, and its associated metadata
// file.
type S3Destination struct {

	// The name of the Amazon S3 bucket used as the destination of an export file.
	Bucket *string

	// The Amazon S3 bucket key of an export file. The key uniquely identifies the
	// object, or export file, in the S3 bucket.
	Key *string

	// The Amazon S3 bucket key of a metadata file. The key uniquely identifies the
	// object, or metadata file, in the S3 bucket.
	MetadataKey *string

	noSmithyDocumentSerde
}

// Describes the destination Amazon Simple Storage Service (Amazon S3) bucket name
// and key prefix for a recommendations export job. You must create the destination
// Amazon S3 bucket for your recommendations export before you create the export
// job. Compute Optimizer does not create the S3 bucket for you. After you create
// the S3 bucket, ensure that it has the required permission policy to allow
// Compute Optimizer to write the export file to it. If you plan to specify an
// object prefix when you create the export job, you must include the object prefix
// in the policy that you add to the S3 bucket. For more information, see Amazon S3
// Bucket Policy for Compute Optimizer
// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html)
// in the Compute Optimizer User Guide.
type S3DestinationConfig struct {

	// The name of the Amazon S3 bucket to use as the destination for an export job.
	Bucket *string

	// The Amazon S3 bucket prefix for an export job.
	KeyPrefix *string

	noSmithyDocumentSerde
}

// Describes the savings opportunity for recommendations of a given resource type
// or for the recommendation option of an individual resource. Savings opportunity
// represents the estimated monthly savings you can achieve by implementing a given
// Compute Optimizer recommendation. Savings opportunity data requires that you opt
// in to Cost Explorer, as well as activate Receive Amazon EC2 resource
// recommendations in the Cost Explorer preferences page. That creates a connection
// between Cost Explorer and Compute Optimizer. With this connection, Cost Explorer
// generates savings estimates considering the price of existing resources, the
// price of recommended resources, and historical usage data. Estimated monthly
// savings reflects the projected dollar savings associated with each of the
// recommendations generated. For more information, see Enabling Cost Explorer
// (https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html)
// and Optimizing your cost with Rightsizing Recommendations
// (https://docs.aws.amazon.com/cost-management/latest/userguide/ce-rightsizing.html)
// in the Cost Management User Guide.
type SavingsOpportunity struct {

	// An object that describes the estimated monthly savings amount possible, based on
	// On-Demand instance pricing, by adopting Compute Optimizer recommendations for a
	// given resource.
	EstimatedMonthlySavings *EstimatedMonthlySavings

	// The estimated monthly savings possible as a percentage of monthly cost by
	// adopting Compute Optimizer recommendations for a given resource.
	SavingsOpportunityPercentage float64

	noSmithyDocumentSerde
}

// Describes the scope of a recommendation preference. Recommendation preferences
// can be created at the organization level (for management accounts of an
// organization only), account level, and resource level. For more information, see
// Activating enhanced infrastructure metrics
// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)
// in the Compute Optimizer User Guide. You cannot create recommendation
// preferences for Auto Scaling groups at the organization and account levels. You
// can create recommendation preferences for Auto Scaling groups only at the
// resource level by specifying a scope name of ResourceArn and a scope value of
// the Auto Scaling group Amazon Resource Name (ARN). This will configure the
// preference for all instances that are part of the specified Auto Scaling group.
// You also cannot create recommendation preferences at the resource level for
// instances that are part of an Auto Scaling group. You can create recommendation
// preferences at the resource level only for standalone instances.
type Scope struct {

	// The name of the scope. The following scopes are possible:
	//
	// * Organization -
	// Specifies that the recommendation preference applies at the organization level,
	// for all member accounts of an organization.
	//
	// * AccountId - Specifies that the
	// recommendation preference applies at the account level, for all resources of a
	// given resource type in an account.
	//
	// * ResourceArn - Specifies that the
	// recommendation preference applies at the individual resource level.
	Name ScopeName

	// The value of the scope. If you specified the name of the scope as:
	//
	// *
	// Organization - The value must be ALL_ACCOUNTS.
	//
	// * AccountId - The value must be
	// a 12-digit Amazon Web Services account ID.
	//
	// * ResourceArn - The value must be
	// the Amazon Resource Name (ARN) of an EC2 instance or an Auto Scaling
	// group.
	//
	// Only EC2 instance and Auto Scaling group ARNs are currently supported.
	Value *string

	noSmithyDocumentSerde
}

// The summary of a recommendation.
type Summary struct {

	// The finding classification of the recommendation.
	Name Finding

	// An array of objects that summarize a finding reason code.
	ReasonCodeSummaries []ReasonCodeSummary

	// The value of the recommendation summary.
	Value float64

	noSmithyDocumentSerde
}

// Describes a utilization metric of a resource, such as an Amazon EC2 instance.
// Compare the utilization metric data of your resource against its projected
// utilization metric data to determine the performance difference between your
// current resource and the recommended option.
type UtilizationMetric struct {

	// The name of the utilization metric. The following utilization metrics are
	// available:
	//
	// * Cpu - The percentage of allocated EC2 compute units that are
	// currently in use on the instance. This metric identifies the processing power
	// required to run an application on the instance. Depending on the instance type,
	// tools in your operating system can show a lower percentage than CloudWatch when
	// the instance is not allocated a full processor core. Units: Percent
	//
	// * Memory -
	// The percentage of memory that is currently in use on the instance. This metric
	// identifies the amount of memory required to run an application on the instance.
	// Units: Percent The Memory metric is returned only for resources that have the
	// unified CloudWatch agent installed on them. For more information, see Enabling
	// Memory Utilization with the CloudWatch Agent
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent).
	//
	// *
	// EBS_READ_OPS_PER_SECOND - The completed read operations from all EBS volumes
	// attached to the instance in a specified period of time. Unit: Count
	//
	// *
	// EBS_WRITE_OPS_PER_SECOND - The completed write operations to all EBS volumes
	// attached to the instance in a specified period of time. Unit: Count
	//
	// *
	// EBS_READ_BYTES_PER_SECOND - The bytes read from all EBS volumes attached to the
	// instance in a specified period of time. Unit: Bytes
	//
	// *
	// EBS_WRITE_BYTES_PER_SECOND - The bytes written to all EBS volumes attached to
	// the instance in a specified period of time. Unit: Bytes
	//
	// *
	// DISK_READ_OPS_PER_SECOND - The completed read operations from all instance store
	// volumes available to the instance in a specified period of time. If there are no
	// instance store volumes, either the value is 0 or the metric is not reported.
	//
	// *
	// DISK_WRITE_OPS_PER_SECOND - The completed write operations from all instance
	// store volumes available to the instance in a specified period of time. If there
	// are no instance store volumes, either the value is 0 or the metric is not
	// reported.
	//
	// * DISK_READ_BYTES_PER_SECOND - The bytes read from all instance store
	// volumes available to the instance. This metric is used to determine the volume
	// of the data the application reads from the disk of the instance. This can be
	// used to determine the speed of the application. If there are no instance store
	// volumes, either the value is 0 or the metric is not reported.
	//
	// *
	// DISK_WRITE_BYTES_PER_SECOND - The bytes written to all instance store volumes
	// available to the instance. This metric is used to determine the volume of the
	// data the application writes onto the disk of the instance. This can be used to
	// determine the speed of the application. If there are no instance store volumes,
	// either the value is 0 or the metric is not reported.
	//
	// *
	// NETWORK_IN_BYTES_PER_SECOND - The number of bytes received by the instance on
	// all network interfaces. This metric identifies the volume of incoming network
	// traffic to a single instance.
	//
	// * NETWORK_OUT_BYTES_PER_SECOND - The number of
	// bytes sent out by the instance on all network interfaces. This metric identifies
	// the volume of outgoing network traffic from a single instance.
	//
	// *
	// NETWORK_PACKETS_IN_PER_SECOND - The number of packets received by the instance
	// on all network interfaces. This metric identifies the volume of incoming traffic
	// in terms of the number of packets on a single instance.
	//
	// *
	// NETWORK_PACKETS_OUT_PER_SECOND - The number of packets sent out by the instance
	// on all network interfaces. This metric identifies the volume of outgoing traffic
	// in terms of the number of packets on a single instance.
	Name MetricName

	// The statistic of the utilization metric. The Compute Optimizer API, Command Line
	// Interface (CLI), and SDKs return utilization metrics using only the Maximum
	// statistic, which is the highest value observed during the specified period. The
	// Compute Optimizer console displays graphs for some utilization metrics using the
	// Average statistic, which is the value of Sum / SampleCount during the specified
	// period. For more information, see Viewing resource recommendations
	// (https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html)
	// in the Compute Optimizer User Guide. You can also get averaged utilization
	// metric data for your resources using Amazon CloudWatch. For more information,
	// see the Amazon CloudWatch User Guide
	// (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html).
	Statistic MetricStatistic

	// The value of the utilization metric.
	Value float64

	noSmithyDocumentSerde
}

// Describes the configuration of an Amazon Elastic Block Store (Amazon EBS)
// volume.
type VolumeConfiguration struct {

	// The baseline IOPS of the volume.
	VolumeBaselineIOPS int32

	// The baseline throughput of the volume.
	VolumeBaselineThroughput int32

	// The burst IOPS of the volume.
	VolumeBurstIOPS int32

	// The burst throughput of the volume.
	VolumeBurstThroughput int32

	// The size of the volume, in GiB.
	VolumeSize int32

	// The volume type. This can be gp2 for General Purpose SSD, io1 or io2 for
	// Provisioned IOPS SSD, st1 for Throughput Optimized HDD, sc1 for Cold HDD, or
	// standard for Magnetic volumes.
	VolumeType *string

	noSmithyDocumentSerde
}

// Describes an Amazon Elastic Block Store (Amazon EBS) volume recommendation.
type VolumeRecommendation struct {

	// The Amazon Web Services account ID of the volume.
	AccountId *string

	// An array of objects that describe the current configuration of the volume.
	CurrentConfiguration *VolumeConfiguration

	// The risk of the current EBS volume not meeting the performance needs of its
	// workloads. The higher the risk, the more likely the current EBS volume doesn't
	// have sufficient capacity.
	CurrentPerformanceRisk CurrentPerformanceRisk

	// The finding classification of the volume. Findings for volumes include:
	//
	// *
	// NotOptimized —A volume is considered not optimized when Compute Optimizer
	// identifies a recommendation that can provide better performance for your
	// workload.
	//
	// * Optimized —An volume is considered optimized when Compute Optimizer
	// determines that the volume is correctly provisioned to run your workload based
	// on the chosen volume type. For optimized resources, Compute Optimizer might
	// recommend a new generation volume type.
	Finding EBSFinding

	// The timestamp of when the volume recommendation was last generated.
	LastRefreshTimestamp *time.Time

	// The number of days for which utilization metrics were analyzed for the volume.
	LookBackPeriodInDays float64

	// An array of objects that describe the utilization metrics of the volume.
	UtilizationMetrics []EBSUtilizationMetric

	// The Amazon Resource Name (ARN) of the current volume.
	VolumeArn *string

	// An array of objects that describe the recommendation options for the volume.
	VolumeRecommendationOptions []VolumeRecommendationOption

	noSmithyDocumentSerde
}

// Describes a recommendation option for an Amazon Elastic Block Store (Amazon EBS)
// instance.
type VolumeRecommendationOption struct {

	// An array of objects that describe a volume configuration.
	Configuration *VolumeConfiguration

	// The performance risk of the volume recommendation option. Performance risk is
	// the likelihood of the recommended volume type meeting the performance
	// requirement of your workload. The value ranges from 0 - 4, with 0 meaning that
	// the recommended resource is predicted to always provide enough hardware
	// capability. The higher the performance risk is, the more likely you should
	// validate whether the recommendation will meet the performance requirements of
	// your workload before migrating your resource.
	PerformanceRisk float64

	// The rank of the volume recommendation option. The top recommendation option is
	// ranked as 1.
	Rank int32

	// An object that describes the savings opportunity for the EBS volume
	// recommendation option. Savings opportunity includes the estimated monthly
	// savings amount and percentage.
	SavingsOpportunity *SavingsOpportunity

	noSmithyDocumentSerde
}

type noSmithyDocumentSerde = smithydocument.NoSerde
