]> git.immae.eu Git - github/fretlink/haskell-graylog.git/blame - src/Graylog/Types.hs
Successful test of un-chunked message.
[github/fretlink/haskell-graylog.git] / src / Graylog / Types.hs
CommitLineData
b23afe7b 1{-# LANGUAGE LambdaCase #-}
2ff46fce
A
2{-# LANGUAGE RecordWildCards #-}
3
4module Graylog.Types
5 ( Graylog
6 , _graylogHost
7 , _graylogPort
8 , _graylogAddress
c91dbdc0
A
9 , _graylogSocket
10 , _graylogHostName
11 , ChunkSize
2ff46fce 12
c91dbdc0 13 , defaultChunkSize
2ff46fce
A
14 , openGraylog
15 , closeGraylog
16 ) where
17
b23afe7b 18import Data.List
2ff46fce
A
19import Data.Text (Text)
20import qualified Data.Text as T
21import Network.BSD
22import Network.Socket
23
c91dbdc0
A
24type ChunkSize = Word
25
2ff46fce
A
26data Graylog
27 = Graylog
c91dbdc0
A
28 { _graylogHost :: String
29 , _graylogPort :: String
30 , _graylogAddress :: AddrInfo
31 , _graylogSocket :: Socket
32 , _graylogHostName :: Text
33 , _graylogChunkSize :: ChunkSize
2ff46fce
A
34 }
35
c91dbdc0
A
36defaultChunkSize :: ChunkSize
37defaultChunkSize = 8192
38
b23afe7b
A
39openGraylog
40 :: HostName -> ServiceName -> ChunkSize -> IO (Either String Graylog)
41openGraylog h p cksize = getAddrInfo Nothing (Just h) (Just p) >>= \case
42 [] -> return $ Left "No address info found."
43 infos ->
44 case find (\i -> addrSocketType i == Datagram) infos of
45 Nothing -> return $ Left "No datagram info found for address."
46 Just i -> do
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
2ff46fce
A
51
52closeGraylog :: Graylog -> IO ()
53closeGraylog Graylog{..} = close _graylogSocket