1 {-# LANGUAGE LambdaCase #-}
2 {-# LANGUAGE RecordWildCards #-}
19 import Data.Text (Text)
20 import qualified Data.Text as T
28 { _graylogHost :: String
29 , _graylogPort :: String
30 , _graylogAddress :: AddrInfo
31 , _graylogSocket :: Socket
32 , _graylogHostName :: Text
33 , _graylogChunkSize :: ChunkSize
36 defaultChunkSize :: ChunkSize
37 defaultChunkSize = 8192
40 :: HostName -> ServiceName -> ChunkSize -> IO (Either String Graylog)
41 openGraylog h p cksize = getAddrInfo Nothing (Just h) (Just p) >>= \case
42 [] -> return $ Left "No address info found."
44 case find (\i -> addrSocketType i == Datagram) infos of
45 Nothing -> return $ Left "No datagram info found for address."
47 sock <- socket (addrFamily i) Datagram defaultProtocol
48 connect sock (addrAddress i)
49 hostname <- getHostName
50 return $ Right $ Graylog h p i sock (T.pack hostname) cksize
52 closeGraylog :: Graylog -> IO ()
53 closeGraylog Graylog{..} = close _graylogSocket