module AWS.RDS.Event
( describeEvents
) where
import Control.Applicative ((<$>), (<*>))
import Data.Conduit
import Data.Text (Text)
import Data.Time (UTCTime)
import qualified Data.XML.Types as XML
import AWS.Lib.Parser
import AWS.Lib.Query
import AWS.RDS.Internal
import AWS.RDS.Types
import AWS.Util (toText)
describeEvents
:: (MonadBaseControl IO m, MonadResource m)
=> Maybe Text
-> Maybe SourceType
-> Maybe Int
-> Maybe UTCTime
-> Maybe UTCTime
-> [Text]
-> Maybe Text
-> Maybe Int
-> RDS m [Event]
describeEvents sid stype d start end categories marker maxRecords =
rdsQuery "DescribeEvents" params $
elements "Event" eventSink
where
params =
[ "SourceIdentifier" |=? sid
, "SourceType" |=? sourceTypeToText <$> stype
, "Duration" |=? toText <$> d
, "StartTime" |=? toText <$> start
, "EndTime" |=? toText <$> end
, "EventCategories" |.+ "member" |.#= categories
, "Marker" |=? marker
, "MaxRecords" |=? toText <$> maxRecords
]
sourceTypeToText :: SourceType -> Text
sourceTypeToText SourceTypeDBInstance = "db-instance"
sourceTypeToText SourceTypeDBParameterGroup = "db-parameter-group"
sourceTypeToText SourceTypeDBSecurityGroup = "db-security-group"
sourceTypeToText SourceTypeDBSnapshot = "db-snapshot"
eventSink
:: MonadThrow m
=> GLSink XML.Event m Event
eventSink = Event
<$> getT "Message"
<*> getT "SourceType"
<*> listConsumer "EventCategories" (getT "EventCategory")
<*> getT "Date"
<*> getT "SourceIdentifier"