]> git.immae.eu Git - github/fretlink/haskell-graylog.git/blame - src/Graylog/Types.hs
Defined sendLog function.
[github/fretlink/haskell-graylog.git] / src / Graylog / Types.hs
CommitLineData
2ff46fce
A
1{-# LANGUAGE RecordWildCards #-}
2
3module Graylog.Types
4 ( Graylog
5 , _graylogHost
6 , _graylogPort
7 , _graylogAddress
c91dbdc0
A
8 , _graylogSocket
9 , _graylogHostName
10 , ChunkSize
2ff46fce 11
c91dbdc0 12 , defaultChunkSize
2ff46fce
A
13 , openGraylog
14 , closeGraylog
15 ) where
16
17import Data.Text (Text)
18import qualified Data.Text as T
19import Network.BSD
20import Network.Socket
21
c91dbdc0
A
22type ChunkSize = Word
23
2ff46fce
A
24data Graylog
25 = Graylog
c91dbdc0
A
26 { _graylogHost :: String
27 , _graylogPort :: String
28 , _graylogAddress :: AddrInfo
29 , _graylogSocket :: Socket
30 , _graylogHostName :: Text
31 , _graylogChunkSize :: ChunkSize
2ff46fce
A
32 }
33
c91dbdc0
A
34defaultChunkSize :: ChunkSize
35defaultChunkSize = 8192
36
37openGraylog :: HostName -> ServiceName -> ChunkSize -> IO (Either String Graylog)
38openGraylog host port chksize = do
2ff46fce
A
39 infos <- getAddrInfo Nothing (Just host) (Just port)
40 case infos of
41 [] -> return $ Left "No address info found."
42 [info] -> do
43 sock <- socket (addrFamily info) Datagram defaultProtocol
44 connect sock (addrAddress info)
45 hostname <- getHostName
c91dbdc0 46 return $ Right $ Graylog host port info sock (T.pack hostname) chksize
2ff46fce
A
47 _ -> return $ Left "Too many address infos found."
48
49closeGraylog :: Graylog -> IO ()
50closeGraylog Graylog{..} = close _graylogSocket
51
52