{-|
<https://datadoghq.com Datadog> is a monitoring service for IT, Operations and
Development teams who write and run applications at scale, and want to turn the
massive amounts of data produced by their apps, tools and services into
actionable insight.
-}
module Network.Datadog
( Keys(..)
, loadKeysFromEnv
, Environment
, createEnvironment
, withDatadog
, writeCredentials
, readWriteCredentials
, module Network.Datadog.Check
, module Network.Datadog.Downtime
, module Network.Datadog.Event
, module Network.Datadog.Host
, module Network.Datadog.Metrics
, module Network.Datadog.Monitor
) where


import qualified Data.Text as T
import           Data.Text.Encoding (encodeUtf8)

import Network.HTTP.Client (newManager)
import Network.HTTP.Client.TLS (tlsManagerSettings)

import System.Environment (getEnv)

import Network.Datadog.Check
import Network.Datadog.Downtime
import Network.Datadog.Event
import Network.Datadog.Host
import Network.Datadog.Metrics
import Network.Datadog.Monitor
import Network.Datadog.Internal

-- | Load Datadog keys from environment variables.
--
-- The keys will be read from the enviornment variables
-- `DATADOG_API_KEY` and `DATADOG_APP_KEY`. If the keys cannot be read, this
-- function will throw an 'IOException'.
loadKeysFromEnv :: IO Keys
loadKeysFromEnv :: IO Keys
loadKeysFromEnv = do
  String
api <- String -> IO String
getEnv String
"DATADOG_API_KEY"
  String
app <- String -> IO String
getEnv String
"DATADOG_APP_KEY"
  Keys -> IO Keys
forall (m :: * -> *) a. Monad m => a -> m a
return (Keys -> IO Keys) -> Keys -> IO Keys
forall a b. (a -> b) -> a -> b
$ String -> String -> Keys
Keys String
api String
app

-- | Create a new environment using authentication keys, defaulting to the
-- Datadog documented default API URL.
createEnvironment :: Keys -> IO Environment
createEnvironment :: Keys -> IO Environment
createEnvironment Keys
keys = (Manager -> Environment) -> IO Manager -> IO Environment
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Keys -> String -> Manager -> Environment
Environment Keys
keys String
"https://api.datadoghq.com/api/v1/") IO Manager
managerIO
  where managerIO :: IO Manager
managerIO = ManagerSettings -> IO Manager
newManager ManagerSettings
tlsManagerSettings

withDatadog :: DatadogCredentials k => k -> (DatadogClient k -> IO a) -> IO a
withDatadog :: k -> (DatadogClient k -> IO a) -> IO a
withDatadog k
k DatadogClient k -> IO a
f = ManagerSettings -> IO Manager
newManager ManagerSettings
tlsManagerSettings IO Manager -> (Manager -> IO a) -> IO a
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Manager
man -> DatadogClient k -> IO a
f (DatadogClient k -> IO a) -> DatadogClient k -> IO a
forall a b. (a -> b) -> a -> b
$ Manager -> k -> DatadogClient k
forall a. Manager -> a -> DatadogClient a
DatadogClient Manager
man k
k

writeCredentials :: T.Text -> Write
writeCredentials :: Text -> Write
writeCredentials = ByteString -> Write
Write (ByteString -> Write) -> (Text -> ByteString) -> Text -> Write
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
encodeUtf8

readWriteCredentials :: T.Text -> T.Text -> ReadWrite
readWriteCredentials :: Text -> Text -> ReadWrite
readWriteCredentials Text
r Text
w = ByteString -> ByteString -> ReadWrite
ReadWrite (Text -> ByteString
encodeUtf8 Text
w) (Text -> ByteString
encodeUtf8 Text
r)