{-# 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