module Network.StatsD.Event
( Event(..), event
) where
import Network.StatsD.Datagram
import Network.StatsD.Tags
import Data.Monoid
import Data.Text (Text)
import qualified Data.Text as T
import Data.Text.Lazy.Builder as TB
data Event = Event
{ eTitle :: Text
, eText :: Text
, eDate :: Maybe Text
, eHostname :: Maybe Text
, eAggrKey :: Maybe Text
, ePriority :: Maybe Text
, eSourceType :: Maybe Text
, eAlertType :: Maybe Text
, eTags :: [(Text, Text)]
} deriving (Show)
event :: Text -> Text -> Event
event title text = Event
{ eTitle = title
, eText = text
, eDate = Nothing
, eHostname = Nothing
, eAggrKey = Nothing
, ePriority = Nothing
, eSourceType = Nothing
, eAlertType = Nothing
, eTags = []
}
instance ToDatagram Event where
toDatagram (Event{..}) =
let header =
[ TB.fromText "_e{"
, TB.fromString . show $ T.length eTitle
, TB.singleton ','
, TB.fromString . show $ T.length eText
, TB.fromText "}:"
, TB.fromText eTitle
, TB.singleton '|'
, TB.fromText eText
]
in Datagram $ mconcat
[ mconcat header
, mprefixed 'd' eDate
, mprefixed 'h' eHostname
, mprefixed 'k' eAggrKey
, mprefixed 'p' ePriority
, mprefixed 's' eSourceType
, mprefixed 't' eAlertType
, tags eTags
]
instance Tagged Event where
getTags = eTags
setTags e ts = e { eTags = ts }