{-# LANGUAGE OverloadedStrings #-}

{-|
Controls host muting in Datadog.
-}
module Network.Datadog.Host
( muteHost
, unmuteHost
) where


import Control.Monad (void)

import Data.Aeson
import Data.Text (Text, unpack)
import Data.Time.Clock
import Data.Time.Clock.POSIX

import Network.HTTP.Types

import Network.Datadog.Internal


muteHost :: Environment -> Text -> Maybe UTCTime -> Bool -> IO ()
-- ^ Do not allow alerts to trigger on a specific host
muteHost env hostname mtime override =
  let path = "host/" ++ unpack hostname ++ "/mute"
      q = [("override", "true") | override]
      body = object $
             prependMaybe (\a -> "end" .= (ceiling (utcTimeToPOSIXSeconds a) :: Integer)) mtime $
             prependBool override ("override" .= True)
             ["hostname" .= hostname]
  in void $ datadogHttp env path q POST $ Just $ encode body


unmuteHost :: Environment -> Text -> IO ()
-- ^ Allow alerts to trigger on a specific host
unmuteHost env hostname =
  let path = "host/" ++ unpack hostname ++ "/unmute"
      body = object ["hostname" .= hostname]
  in void $ datadogHttp env path [] POST $ Just $ encode body