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