{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Amazonka.ComputeOptimizer.Types.UtilizationMetric -- Copyright : (c) 2013-2023 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) module Amazonka.ComputeOptimizer.Types.UtilizationMetric where import Amazonka.ComputeOptimizer.Types.MetricName import Amazonka.ComputeOptimizer.Types.MetricStatistic import qualified Amazonka.Core as Core import qualified Amazonka.Core.Lens.Internal as Lens import qualified Amazonka.Data as Data import qualified Amazonka.Prelude as Prelude -- | 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. -- -- /See:/ 'newUtilizationMetric' smart constructor. data UtilizationMetric = UtilizationMetric' { -- | 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 -- <https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent Enabling Memory Utilization with the CloudWatch 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. UtilizationMetric -> Maybe MetricName name :: Prelude.Maybe 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 -- <https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html Viewing resource recommendations> -- 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 -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html Amazon CloudWatch User Guide>. UtilizationMetric -> Maybe MetricStatistic statistic :: Prelude.Maybe MetricStatistic, -- | The value of the utilization metric. UtilizationMetric -> Maybe Double value :: Prelude.Maybe Prelude.Double } deriving (UtilizationMetric -> UtilizationMetric -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: UtilizationMetric -> UtilizationMetric -> Bool $c/= :: UtilizationMetric -> UtilizationMetric -> Bool == :: UtilizationMetric -> UtilizationMetric -> Bool $c== :: UtilizationMetric -> UtilizationMetric -> Bool Prelude.Eq, ReadPrec [UtilizationMetric] ReadPrec UtilizationMetric Int -> ReadS UtilizationMetric ReadS [UtilizationMetric] forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [UtilizationMetric] $creadListPrec :: ReadPrec [UtilizationMetric] readPrec :: ReadPrec UtilizationMetric $creadPrec :: ReadPrec UtilizationMetric readList :: ReadS [UtilizationMetric] $creadList :: ReadS [UtilizationMetric] readsPrec :: Int -> ReadS UtilizationMetric $creadsPrec :: Int -> ReadS UtilizationMetric Prelude.Read, Int -> UtilizationMetric -> ShowS [UtilizationMetric] -> ShowS UtilizationMetric -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [UtilizationMetric] -> ShowS $cshowList :: [UtilizationMetric] -> ShowS show :: UtilizationMetric -> String $cshow :: UtilizationMetric -> String showsPrec :: Int -> UtilizationMetric -> ShowS $cshowsPrec :: Int -> UtilizationMetric -> ShowS Prelude.Show, forall x. Rep UtilizationMetric x -> UtilizationMetric forall x. UtilizationMetric -> Rep UtilizationMetric x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep UtilizationMetric x -> UtilizationMetric $cfrom :: forall x. UtilizationMetric -> Rep UtilizationMetric x Prelude.Generic) -- | -- Create a value of 'UtilizationMetric' with all optional fields omitted. -- -- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields. -- -- The following record fields are available, with the corresponding lenses provided -- for backwards compatibility: -- -- 'name', 'utilizationMetric_name' - 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 -- <https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent Enabling Memory Utilization with the CloudWatch 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. -- -- 'statistic', 'utilizationMetric_statistic' - 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 -- <https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html Viewing resource recommendations> -- 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 -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html Amazon CloudWatch User Guide>. -- -- 'value', 'utilizationMetric_value' - The value of the utilization metric. newUtilizationMetric :: UtilizationMetric newUtilizationMetric :: UtilizationMetric newUtilizationMetric = UtilizationMetric' { $sel:name:UtilizationMetric' :: Maybe MetricName name = forall a. Maybe a Prelude.Nothing, $sel:statistic:UtilizationMetric' :: Maybe MetricStatistic statistic = forall a. Maybe a Prelude.Nothing, $sel:value:UtilizationMetric' :: Maybe Double value = forall a. Maybe a Prelude.Nothing } -- | 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 -- <https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#cw-agent Enabling Memory Utilization with the CloudWatch 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. utilizationMetric_name :: Lens.Lens' UtilizationMetric (Prelude.Maybe MetricName) utilizationMetric_name :: Lens' UtilizationMetric (Maybe MetricName) utilizationMetric_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b Lens.lens (\UtilizationMetric' {Maybe MetricName name :: Maybe MetricName $sel:name:UtilizationMetric' :: UtilizationMetric -> Maybe MetricName name} -> Maybe MetricName name) (\s :: UtilizationMetric s@UtilizationMetric' {} Maybe MetricName a -> UtilizationMetric s {$sel:name:UtilizationMetric' :: Maybe MetricName name = Maybe MetricName a} :: UtilizationMetric) -- | 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 -- <https://docs.aws.amazon.com/compute-optimizer/latest/ug/viewing-recommendations.html Viewing resource recommendations> -- 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 -- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html Amazon CloudWatch User Guide>. utilizationMetric_statistic :: Lens.Lens' UtilizationMetric (Prelude.Maybe MetricStatistic) utilizationMetric_statistic :: Lens' UtilizationMetric (Maybe MetricStatistic) utilizationMetric_statistic = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b Lens.lens (\UtilizationMetric' {Maybe MetricStatistic statistic :: Maybe MetricStatistic $sel:statistic:UtilizationMetric' :: UtilizationMetric -> Maybe MetricStatistic statistic} -> Maybe MetricStatistic statistic) (\s :: UtilizationMetric s@UtilizationMetric' {} Maybe MetricStatistic a -> UtilizationMetric s {$sel:statistic:UtilizationMetric' :: Maybe MetricStatistic statistic = Maybe MetricStatistic a} :: UtilizationMetric) -- | The value of the utilization metric. utilizationMetric_value :: Lens.Lens' UtilizationMetric (Prelude.Maybe Prelude.Double) utilizationMetric_value :: Lens' UtilizationMetric (Maybe Double) utilizationMetric_value = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b Lens.lens (\UtilizationMetric' {Maybe Double value :: Maybe Double $sel:value:UtilizationMetric' :: UtilizationMetric -> Maybe Double value} -> Maybe Double value) (\s :: UtilizationMetric s@UtilizationMetric' {} Maybe Double a -> UtilizationMetric s {$sel:value:UtilizationMetric' :: Maybe Double value = Maybe Double a} :: UtilizationMetric) instance Data.FromJSON UtilizationMetric where parseJSON :: Value -> Parser UtilizationMetric parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a Data.withObject String "UtilizationMetric" ( \Object x -> Maybe MetricName -> Maybe MetricStatistic -> Maybe Double -> UtilizationMetric UtilizationMetric' forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b Prelude.<$> (Object x forall a. FromJSON a => Object -> Key -> Parser (Maybe a) Data..:? Key "name") forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b Prelude.<*> (Object x forall a. FromJSON a => Object -> Key -> Parser (Maybe a) Data..:? Key "statistic") forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b Prelude.<*> (Object x forall a. FromJSON a => Object -> Key -> Parser (Maybe a) Data..:? Key "value") ) instance Prelude.Hashable UtilizationMetric where hashWithSalt :: Int -> UtilizationMetric -> Int hashWithSalt Int _salt UtilizationMetric' {Maybe Double Maybe MetricName Maybe MetricStatistic value :: Maybe Double statistic :: Maybe MetricStatistic name :: Maybe MetricName $sel:value:UtilizationMetric' :: UtilizationMetric -> Maybe Double $sel:statistic:UtilizationMetric' :: UtilizationMetric -> Maybe MetricStatistic $sel:name:UtilizationMetric' :: UtilizationMetric -> Maybe MetricName ..} = Int _salt forall a. Hashable a => Int -> a -> Int `Prelude.hashWithSalt` Maybe MetricName name forall a. Hashable a => Int -> a -> Int `Prelude.hashWithSalt` Maybe MetricStatistic statistic forall a. Hashable a => Int -> a -> Int `Prelude.hashWithSalt` Maybe Double value instance Prelude.NFData UtilizationMetric where rnf :: UtilizationMetric -> () rnf UtilizationMetric' {Maybe Double Maybe MetricName Maybe MetricStatistic value :: Maybe Double statistic :: Maybe MetricStatistic name :: Maybe MetricName $sel:value:UtilizationMetric' :: UtilizationMetric -> Maybe Double $sel:statistic:UtilizationMetric' :: UtilizationMetric -> Maybe MetricStatistic $sel:name:UtilizationMetric' :: UtilizationMetric -> Maybe MetricName ..} = forall a. NFData a => a -> () Prelude.rnf Maybe MetricName name seq :: forall a b. a -> b -> b `Prelude.seq` forall a. NFData a => a -> () Prelude.rnf Maybe MetricStatistic statistic seq :: forall a b. a -> b -> b `Prelude.seq` forall a. NFData a => a -> () Prelude.rnf Maybe Double value