{-# LANGUAGE OverloadedStrings #-}
module Network.Datadog.Event
( EventPriority(..)
, AlertType(..)
, SourceType(..)
, EventSpec(..)
, Event(eventId', eventDetails)
, EventId
, minimalEventSpec
, createEvent
, loadEvent
, loadEvents
, AsEventPriority(..)
, AsAlertType(..)
, AsSourceType(..)
, HasTitle(..)
, HasText(..)
, HasPriority(..)
, HasDateHappened(..)
, HasAlertType(..)
, HasDetails(..)
, HasTags(..)
, HasSourceType(..)
, HasHost(..)
, HasId'(..)
) where
import Control.Monad (liftM)
import Data.Aeson hiding (Error, Success)
import Data.List (intercalate)
import Data.Text (Text)
import Data.Time.Clock
import Data.Time.Clock.POSIX
import Network.HTTP.Types
import Network.Datadog.Internal
minimalEventSpec :: Text -> Text -> UTCTime -> EventPriority -> EventSpec
minimalEventSpec specTitle specText time eventPriority = EventSpec
{ eventSpecTitle = specTitle
, eventSpecText = specText
, eventSpecDateHappened = time
, eventSpecPriority = eventPriority
, eventSpecHost = Nothing
, eventSpecTags = []
, eventSpecAlertType = Info
, eventSpecSourceType = Nothing
}
createEvent :: Environment -> EventSpec -> IO Event
createEvent env eventSpec =
let path = "events"
in liftM wrappedEvent $
datadogHttp env path [] POST (Just $ encode eventSpec) >>=
decodeDatadog "createEvent"
loadEvent :: Environment -> EventId -> IO Event
loadEvent env eventId =
let path = "events/" ++ show eventId
in liftM wrappedEvent $
datadogHttp env path [] GET Nothing >>=
decodeDatadog "loadEvent"
loadEvents :: Environment
-> (UTCTime,UTCTime)
-> Maybe EventPriority
-> [Text]
-> IO [Event]
loadEvents env (startTime, endTime) resultPriority filterTags =
let path = "events"
q = prependMaybe (\a -> ("priority", show a)) resultPriority $
prependBool (not $ null filterTags) ("tags", intercalate "," (map show filterTags))
[("start", show (floor (utcTimeToPOSIXSeconds startTime) :: Integer))
,("end", show (floor (utcTimeToPOSIXSeconds endTime) :: Integer))
]
in liftM wrappedEvents $
datadogHttp env path q GET Nothing >>=
decodeDatadog "loadEvent"