arbor-datadog-0.1.0.0: src/Arbor/Network/StatsD/Options.hs
{-# LANGUAGE DeriveGeneric #-}
module Arbor.Network.StatsD.Options
( StatsTag(..)
, StatsConfig(..)
, SampleRate(..)
, statsConfigParser
)
where
import Arbor.Network.StatsD.Type (SampleRate (..))
import Data.Monoid ((<>))
import Data.Text (Text)
import GHC.Generics (Generic)
import Network.Socket (HostName)
import Options.Applicative
import qualified Data.Text as Text
newtype StatsTag = StatsTag (Text, Text) deriving (Show, Eq, Generic)
data StatsConfig = StatsConfig
{ host :: HostName
, port :: Int
, tags :: [StatsTag]
, sampleRate :: SampleRate
} deriving (Show, Generic)
statsConfigParser :: Parser StatsConfig
statsConfigParser = StatsConfig
<$> strOption
( long "statsd-host"
<> metavar "HOST_NAME"
<> showDefault <> value "localhost"
<> help "StatsD host name or IP address"
<> hidden)
<*> option auto
( long "statsd-port"
<> metavar "PORT"
<> showDefault <> value 8125
<> help "StatsD port"
<> hidden)
<*> ( string2Tags <$> strOption
( long "statsd-tags"
<> metavar "TAGS"
<> showDefault <> value []
<> help "StatsD tags"))
<*> ( SampleRate <$> option auto
( long "statsd-sample-rate"
<> metavar "SAMPLE_RATE"
<> showDefault <> value 0.01
<> help "StatsD sample rate"
<> hidden))
string2Tags :: String -> [StatsTag]
string2Tags s = StatsTag . splitTag <$> splitTags
where splitTags = Text.split (==',') (Text.pack s)
splitTag t = Text.drop 1 <$> Text.break (==':') t