amazonka-waf-1.3.7: gen/Network/AWS/WAF/GetSampledRequests.hs
{-# 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.WAF.GetSampledRequests
-- Copyright : (c) 2013-2015 Brendan Hay
-- License : Mozilla Public License, v. 2.0.
-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets detailed information about a specified number of requests--a
-- sample--that AWS WAF randomly selects from among the first 5,000
-- requests that your AWS resource received during a time range that you
-- choose. You can specify a sample size of up to 100 requests, and you can
-- specify any time range in the previous three hours.
--
-- 'GetSampledRequests' returns a time range, which is usually the time
-- range that you specified. However, if your resource (such as a
-- CloudFront distribution) received 5,000 requests before the specified
-- time range elapsed, 'GetSampledRequests' returns an updated time range.
-- This new time range indicates the actual period during which AWS WAF
-- selected the requests in the sample.
--
-- /See:/ <http://docs.aws.amazon.com/waf/latest/APIReference/API_GetSampledRequests.html AWS API Reference> for GetSampledRequests.
module Network.AWS.WAF.GetSampledRequests
(
-- * Creating a Request
getSampledRequests
, GetSampledRequests
-- * Request Lenses
, gsrWebACLId
, gsrRuleId
, gsrTimeWindow
, gsrMaxItems
-- * Destructuring the Response
, getSampledRequestsResponse
, GetSampledRequestsResponse
-- * Response Lenses
, gsrrsSampledRequests
, gsrrsPopulationSize
, gsrrsTimeWindow
, gsrrsResponseStatus
) where
import Network.AWS.Lens
import Network.AWS.Prelude
import Network.AWS.Request
import Network.AWS.Response
import Network.AWS.WAF.Types
import Network.AWS.WAF.Types.Product
-- | /See:/ 'getSampledRequests' smart constructor.
data GetSampledRequests = GetSampledRequests'
{ _gsrWebACLId :: !Text
, _gsrRuleId :: !Text
, _gsrTimeWindow :: !TimeWindow
, _gsrMaxItems :: !Nat
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'GetSampledRequests' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'gsrWebACLId'
--
-- * 'gsrRuleId'
--
-- * 'gsrTimeWindow'
--
-- * 'gsrMaxItems'
getSampledRequests
:: Text -- ^ 'gsrWebACLId'
-> Text -- ^ 'gsrRuleId'
-> TimeWindow -- ^ 'gsrTimeWindow'
-> Natural -- ^ 'gsrMaxItems'
-> GetSampledRequests
getSampledRequests pWebACLId_ pRuleId_ pTimeWindow_ pMaxItems_ =
GetSampledRequests'
{ _gsrWebACLId = pWebACLId_
, _gsrRuleId = pRuleId_
, _gsrTimeWindow = pTimeWindow_
, _gsrMaxItems = _Nat # pMaxItems_
}
-- | The 'WebACLId' of the 'WebACL' for which you want 'GetSampledRequests'
-- to return a sample of requests.
gsrWebACLId :: Lens' GetSampledRequests Text
gsrWebACLId = lens _gsrWebACLId (\ s a -> s{_gsrWebACLId = a});
-- | 'RuleId' is one of two values:
--
-- - The 'RuleId' of the 'Rule' for which you want 'GetSampledRequests'
-- to return a sample of requests.
-- - 'Default_Action', which causes 'GetSampledRequests' to return a
-- sample of the requests that didn\'t match any of the rules in the
-- specified 'WebACL'.
gsrRuleId :: Lens' GetSampledRequests Text
gsrRuleId = lens _gsrRuleId (\ s a -> s{_gsrRuleId = a});
-- | The start date and time and the end date and time of the range for which
-- you want 'GetSampledRequests' to return a sample of requests. Specify
-- the date and time in Unix time format (in seconds). You can specify any
-- time range in the previous three hours.
gsrTimeWindow :: Lens' GetSampledRequests TimeWindow
gsrTimeWindow = lens _gsrTimeWindow (\ s a -> s{_gsrTimeWindow = a});
-- | The number of requests that you want AWS WAF to return from among the
-- first 5,000 requests that your AWS resource received during the time
-- range. If your resource received fewer requests than the value of
-- 'MaxItems', 'GetSampledRequests' returns information about all of them.
gsrMaxItems :: Lens' GetSampledRequests Natural
gsrMaxItems = lens _gsrMaxItems (\ s a -> s{_gsrMaxItems = a}) . _Nat;
instance AWSRequest GetSampledRequests where
type Rs GetSampledRequests =
GetSampledRequestsResponse
request = postJSON wAF
response
= receiveJSON
(\ s h x ->
GetSampledRequestsResponse' <$>
(x .?> "SampledRequests" .!@ mempty) <*>
(x .?> "PopulationSize")
<*> (x .?> "TimeWindow")
<*> (pure (fromEnum s)))
instance ToHeaders GetSampledRequests where
toHeaders
= const
(mconcat
["X-Amz-Target" =#
("AWSWAF_20150824.GetSampledRequests" :: ByteString),
"Content-Type" =#
("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON GetSampledRequests where
toJSON GetSampledRequests'{..}
= object
(catMaybes
[Just ("WebAclId" .= _gsrWebACLId),
Just ("RuleId" .= _gsrRuleId),
Just ("TimeWindow" .= _gsrTimeWindow),
Just ("MaxItems" .= _gsrMaxItems)])
instance ToPath GetSampledRequests where
toPath = const "/"
instance ToQuery GetSampledRequests where
toQuery = const mempty
-- | /See:/ 'getSampledRequestsResponse' smart constructor.
data GetSampledRequestsResponse = GetSampledRequestsResponse'
{ _gsrrsSampledRequests :: !(Maybe [SampledHTTPRequest])
, _gsrrsPopulationSize :: !(Maybe Integer)
, _gsrrsTimeWindow :: !(Maybe TimeWindow)
, _gsrrsResponseStatus :: !Int
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'GetSampledRequestsResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'gsrrsSampledRequests'
--
-- * 'gsrrsPopulationSize'
--
-- * 'gsrrsTimeWindow'
--
-- * 'gsrrsResponseStatus'
getSampledRequestsResponse
:: Int -- ^ 'gsrrsResponseStatus'
-> GetSampledRequestsResponse
getSampledRequestsResponse pResponseStatus_ =
GetSampledRequestsResponse'
{ _gsrrsSampledRequests = Nothing
, _gsrrsPopulationSize = Nothing
, _gsrrsTimeWindow = Nothing
, _gsrrsResponseStatus = pResponseStatus_
}
-- | A complex type that contains detailed information about each of the
-- requests in the sample.
gsrrsSampledRequests :: Lens' GetSampledRequestsResponse [SampledHTTPRequest]
gsrrsSampledRequests = lens _gsrrsSampledRequests (\ s a -> s{_gsrrsSampledRequests = a}) . _Default . _Coerce;
-- | The total number of requests from which 'GetSampledRequests' got a
-- sample of 'MaxItems' requests. If 'PopulationSize' is less than
-- 'MaxItems', the sample includes every request that your AWS resource
-- received during the specified time range.
gsrrsPopulationSize :: Lens' GetSampledRequestsResponse (Maybe Integer)
gsrrsPopulationSize = lens _gsrrsPopulationSize (\ s a -> s{_gsrrsPopulationSize = a});
-- | Usually, 'TimeWindow' is the time range that you specified in the
-- 'GetSampledRequests' request. However, if your AWS resource received
-- more than 5,000 requests during the time range that you specified in the
-- request, 'GetSampledRequests' returns the time range for the first 5,000
-- requests.
gsrrsTimeWindow :: Lens' GetSampledRequestsResponse (Maybe TimeWindow)
gsrrsTimeWindow = lens _gsrrsTimeWindow (\ s a -> s{_gsrrsTimeWindow = a});
-- | The response status code.
gsrrsResponseStatus :: Lens' GetSampledRequestsResponse Int
gsrrsResponseStatus = lens _gsrrsResponseStatus (\ s a -> s{_gsrrsResponseStatus = a});