{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.CloudWatch.GetMetricStatistics -- Copyright : (c) 2013-2016 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Gets statistics for the specified metric. -- -- The maximum number of data points that can be queried is 50,850, whereas the maximum number of data points returned from a single 'GetMetricStatistics' request is 1,440. If you make a request that generates more than 1,440 data points, Amazon CloudWatch returns an error. In such a case, you can alter the request by narrowing the specified time range or increasing the specified period. Alternatively, you can make multiple requests across adjacent time ranges. 'GetMetricStatistics' does not return the data in chronological order. -- -- Amazon CloudWatch aggregates data points based on the length of the 'period' that you specify. For example, if you request statistics with a one-minute granularity, Amazon CloudWatch aggregates data points with time stamps that fall within the same one-minute period. In such a case, the data points queried can greatly outnumber the data points returned. -- -- The following examples show various statistics allowed by the data point query maximum of 50,850 when you call 'GetMetricStatistics' on Amazon EC2 instances with detailed (one-minute) monitoring enabled: -- -- - Statistics for up to 400 instances for a span of one hour -- - Statistics for up to 35 instances over a span of 24 hours -- - Statistics for up to 2 instances over a span of 2 weeks -- -- For information about the namespace, metric names, and dimensions that other Amazon Web Services products use to send metrics to CloudWatch, go to in the /Amazon CloudWatch Developer Guide/. module Network.AWS.CloudWatch.GetMetricStatistics ( -- * Creating a Request getMetricStatistics , GetMetricStatistics -- * Request Lenses , gmsDimensions , gmsUnit , gmsNamespace , gmsMetricName , gmsStartTime , gmsEndTime , gmsPeriod , gmsStatistics -- * Destructuring the Response , getMetricStatisticsResponse , GetMetricStatisticsResponse -- * Response Lenses , gmsrsDatapoints , gmsrsLabel , gmsrsResponseStatus ) where import Network.AWS.CloudWatch.Types import Network.AWS.CloudWatch.Types.Product import Network.AWS.Lens import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.Response -- | /See:/ 'getMetricStatistics' smart constructor. data GetMetricStatistics = GetMetricStatistics' { _gmsDimensions :: !(Maybe [Dimension]) , _gmsUnit :: !(Maybe StandardUnit) , _gmsNamespace :: !Text , _gmsMetricName :: !Text , _gmsStartTime :: !ISO8601 , _gmsEndTime :: !ISO8601 , _gmsPeriod :: !Nat , _gmsStatistics :: !(List1 Statistic) } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'GetMetricStatistics' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'gmsDimensions' -- -- * 'gmsUnit' -- -- * 'gmsNamespace' -- -- * 'gmsMetricName' -- -- * 'gmsStartTime' -- -- * 'gmsEndTime' -- -- * 'gmsPeriod' -- -- * 'gmsStatistics' getMetricStatistics :: Text -- ^ 'gmsNamespace' -> Text -- ^ 'gmsMetricName' -> UTCTime -- ^ 'gmsStartTime' -> UTCTime -- ^ 'gmsEndTime' -> Natural -- ^ 'gmsPeriod' -> NonEmpty Statistic -- ^ 'gmsStatistics' -> GetMetricStatistics getMetricStatistics pNamespace_ pMetricName_ pStartTime_ pEndTime_ pPeriod_ pStatistics_ = GetMetricStatistics' { _gmsDimensions = Nothing , _gmsUnit = Nothing , _gmsNamespace = pNamespace_ , _gmsMetricName = pMetricName_ , _gmsStartTime = _Time # pStartTime_ , _gmsEndTime = _Time # pEndTime_ , _gmsPeriod = _Nat # pPeriod_ , _gmsStatistics = _List1 # pStatistics_ } -- | A list of dimensions describing qualities of the metric. gmsDimensions :: Lens' GetMetricStatistics [Dimension] gmsDimensions = lens _gmsDimensions (\ s a -> s{_gmsDimensions = a}) . _Default . _Coerce; -- | The unit for the metric. gmsUnit :: Lens' GetMetricStatistics (Maybe StandardUnit) gmsUnit = lens _gmsUnit (\ s a -> s{_gmsUnit = a}); -- | The namespace of the metric, with or without spaces. gmsNamespace :: Lens' GetMetricStatistics Text gmsNamespace = lens _gmsNamespace (\ s a -> s{_gmsNamespace = a}); -- | The name of the metric, with or without spaces. gmsMetricName :: Lens' GetMetricStatistics Text gmsMetricName = lens _gmsMetricName (\ s a -> s{_gmsMetricName = a}); -- | The time stamp to use for determining the first datapoint to return. The value specified is inclusive; results include datapoints with the time stamp specified. The time stamp must be in ISO 8601 UTC format (e.g., 2014-09-03T23:00:00Z). -- -- The specified start time is rounded down to the nearest value. Datapoints are returned for start times up to two weeks in the past. Specified start times that are more than two weeks in the past will not return datapoints for metrics that are older than two weeks. -- -- Data that is timestamped 24 hours or more in the past may take in excess of 48 hours to become available from submission time using 'GetMetricStatistics'. gmsStartTime :: Lens' GetMetricStatistics UTCTime gmsStartTime = lens _gmsStartTime (\ s a -> s{_gmsStartTime = a}) . _Time; -- | The time stamp to use for determining the last datapoint to return. The value specified is exclusive; results will include datapoints up to the time stamp specified. The time stamp must be in ISO 8601 UTC format (e.g., 2014-09-03T23:00:00Z). gmsEndTime :: Lens' GetMetricStatistics UTCTime gmsEndTime = lens _gmsEndTime (\ s a -> s{_gmsEndTime = a}) . _Time; -- | The granularity, in seconds, of the returned datapoints. 'Period' must be at least 60 seconds and must be a multiple of 60. The default value is 60. gmsPeriod :: Lens' GetMetricStatistics Natural gmsPeriod = lens _gmsPeriod (\ s a -> s{_gmsPeriod = a}) . _Nat; -- | The metric statistics to return. For information about specific statistics returned by GetMetricStatistics, see in the /Amazon CloudWatch Developer Guide/. gmsStatistics :: Lens' GetMetricStatistics (NonEmpty Statistic) gmsStatistics = lens _gmsStatistics (\ s a -> s{_gmsStatistics = a}) . _List1; instance AWSRequest GetMetricStatistics where type Rs GetMetricStatistics = GetMetricStatisticsResponse request = postQuery cloudWatch response = receiveXMLWrapper "GetMetricStatisticsResult" (\ s h x -> GetMetricStatisticsResponse' <$> (x .@? "Datapoints" .!@ mempty >>= may (parseXMLList "member")) <*> (x .@? "Label") <*> (pure (fromEnum s))) instance Hashable GetMetricStatistics instance NFData GetMetricStatistics instance ToHeaders GetMetricStatistics where toHeaders = const mempty instance ToPath GetMetricStatistics where toPath = const "/" instance ToQuery GetMetricStatistics where toQuery GetMetricStatistics'{..} = mconcat ["Action" =: ("GetMetricStatistics" :: ByteString), "Version" =: ("2010-08-01" :: ByteString), "Dimensions" =: toQuery (toQueryList "member" <$> _gmsDimensions), "Unit" =: _gmsUnit, "Namespace" =: _gmsNamespace, "MetricName" =: _gmsMetricName, "StartTime" =: _gmsStartTime, "EndTime" =: _gmsEndTime, "Period" =: _gmsPeriod, "Statistics" =: toQueryList "member" _gmsStatistics] -- | The output for the < GetMetricStatistics> action. -- -- /See:/ 'getMetricStatisticsResponse' smart constructor. data GetMetricStatisticsResponse = GetMetricStatisticsResponse' { _gmsrsDatapoints :: !(Maybe [Datapoint]) , _gmsrsLabel :: !(Maybe Text) , _gmsrsResponseStatus :: !Int } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'GetMetricStatisticsResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'gmsrsDatapoints' -- -- * 'gmsrsLabel' -- -- * 'gmsrsResponseStatus' getMetricStatisticsResponse :: Int -- ^ 'gmsrsResponseStatus' -> GetMetricStatisticsResponse getMetricStatisticsResponse pResponseStatus_ = GetMetricStatisticsResponse' { _gmsrsDatapoints = Nothing , _gmsrsLabel = Nothing , _gmsrsResponseStatus = pResponseStatus_ } -- | The datapoints for the specified metric. gmsrsDatapoints :: Lens' GetMetricStatisticsResponse [Datapoint] gmsrsDatapoints = lens _gmsrsDatapoints (\ s a -> s{_gmsrsDatapoints = a}) . _Default . _Coerce; -- | A label describing the specified metric. gmsrsLabel :: Lens' GetMetricStatisticsResponse (Maybe Text) gmsrsLabel = lens _gmsrsLabel (\ s a -> s{_gmsrsLabel = a}); -- | The response status code. gmsrsResponseStatus :: Lens' GetMetricStatisticsResponse Int gmsrsResponseStatus = lens _gmsrsResponseStatus (\ s a -> s{_gmsrsResponseStatus = a}); instance NFData GetMetricStatisticsResponse