amazonka-datapipeline-0.0.0: gen/Network/AWS/DataPipeline/PollForTask.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-- Module : Network.AWS.DataPipeline.PollForTask
-- Copyright : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
-- License : This Source Code Form is subject to the terms of
-- the Mozilla Public License, v. 2.0.
-- A copy of the MPL can be found in the LICENSE file or
-- you can obtain it at http://mozilla.org/MPL/2.0/.
-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability : experimental
-- Portability : non-portable (GHC extensions)
-- | Task runners call this action to receive a task to perform from AWS Data
-- Pipeline. The task runner specifies which tasks it can perform by setting a
-- value for the workerGroup parameter of the PollForTask call. The task
-- returned by PollForTask may come from any of the pipelines that match the
-- workerGroup value passed in by the task runner and that was launched using
-- the IAM user credentials specified by the task runner. If tasks are ready
-- in the work queue, PollForTask returns a response immediately. If no tasks
-- are available in the queue, PollForTask uses long-polling and holds on to a
-- poll connection for up to a 90 seconds during which time the first newly
-- scheduled task is handed to the task runner. To accomodate this, set the
-- socket timeout in your task runner to 90 seconds. The task runner should
-- not call PollForTask again on the same workerGroup until it receives a
-- response, and this may take up to 90 seconds.
--
-- <http://docs.aws.amazon.com/datapipeline/latest/APIReference/API_PollForTask.html>
module Network.AWS.DataPipeline.PollForTask
(
-- * Request
PollForTask
-- ** Request constructor
, pollForTask
-- ** Request lenses
, pftHostname
, pftInstanceIdentity
, pftWorkerGroup
-- * Response
, PollForTaskResponse
-- ** Response constructor
, pollForTaskResponse
-- ** Response lenses
, pftrTaskObject
) where
import Network.AWS.Prelude
import Network.AWS.Request.JSON
import Network.AWS.DataPipeline.Types
import qualified GHC.Exts
data PollForTask = PollForTask
{ _pftHostname :: Maybe Text
, _pftInstanceIdentity :: Maybe InstanceIdentity
, _pftWorkerGroup :: Text
} deriving (Eq, Show)
-- | 'PollForTask' constructor.
--
-- The fields accessible through corresponding lenses are:
--
-- * 'pftHostname' @::@ 'Maybe' 'Text'
--
-- * 'pftInstanceIdentity' @::@ 'Maybe' 'InstanceIdentity'
--
-- * 'pftWorkerGroup' @::@ 'Text'
--
pollForTask :: Text -- ^ 'pftWorkerGroup'
-> PollForTask
pollForTask p1 = PollForTask
{ _pftWorkerGroup = p1
, _pftHostname = Nothing
, _pftInstanceIdentity = Nothing
}
-- | The public DNS name of the calling task runner.
pftHostname :: Lens' PollForTask (Maybe Text)
pftHostname = lens _pftHostname (\s a -> s { _pftHostname = a })
-- | Identity information for the Amazon EC2 instance that is hosting the task
-- runner. You can get this value by calling the URI,
-- http://169.254.169.254/latest/meta-data/instance-id, from the EC2
-- instance. For more information, go to Instance Metadata in the Amazon
-- Elastic Compute Cloud User Guide. Passing in this value proves that your
-- task runner is running on an EC2 instance, and ensures the proper AWS
-- Data Pipeline service charges are applied to your pipeline.
pftInstanceIdentity :: Lens' PollForTask (Maybe InstanceIdentity)
pftInstanceIdentity =
lens _pftInstanceIdentity (\s a -> s { _pftInstanceIdentity = a })
-- | Indicates the type of task the task runner is configured to accept and
-- process. The worker group is set as a field on objects in the pipeline
-- when they are created. You can only specify a single value for
-- workerGroup in the call to PollForTask. There are no wildcard values
-- permitted in workerGroup, the string must be an exact, case-sensitive,
-- match.
pftWorkerGroup :: Lens' PollForTask Text
pftWorkerGroup = lens _pftWorkerGroup (\s a -> s { _pftWorkerGroup = a })
newtype PollForTaskResponse = PollForTaskResponse
{ _pftrTaskObject :: Maybe TaskObject
} deriving (Eq, Show)
-- | 'PollForTaskResponse' constructor.
--
-- The fields accessible through corresponding lenses are:
--
-- * 'pftrTaskObject' @::@ 'Maybe' 'TaskObject'
--
pollForTaskResponse :: PollForTaskResponse
pollForTaskResponse = PollForTaskResponse
{ _pftrTaskObject = Nothing
}
-- | An instance of PollForTaskResult, which contains an instance of
-- TaskObject. The returned object contains all the information needed to
-- complete the task that is being assigned to the task runner. One of the
-- fields returned in this object is taskId, which contains an identifier
-- for the task being assigned. The calling task runner uses taskId in
-- subsequent calls to ReportTaskProgress and SetTaskStatus.
pftrTaskObject :: Lens' PollForTaskResponse (Maybe TaskObject)
pftrTaskObject = lens _pftrTaskObject (\s a -> s { _pftrTaskObject = a })
instance ToPath PollForTask where
toPath = const "/"
instance ToQuery PollForTask where
toQuery = const mempty
instance ToHeaders PollForTask
instance ToJSON PollForTask where
toJSON PollForTask{..} = object
[ "workerGroup" .= _pftWorkerGroup
, "hostname" .= _pftHostname
, "instanceIdentity" .= _pftInstanceIdentity
]
instance AWSRequest PollForTask where
type Sv PollForTask = DataPipeline
type Rs PollForTask = PollForTaskResponse
request = post "PollForTask"
response = jsonResponse
instance FromJSON PollForTaskResponse where
parseJSON = withObject "PollForTaskResponse" $ \o -> PollForTaskResponse
<$> o .:? "taskObject"