]>
Commit | Line | Data |
---|---|---|
b23afe7b | 1 | {-# LANGUAGE LambdaCase #-} |
2ff46fce A |
2 | {-# LANGUAGE RecordWildCards #-} |
3 | ||
4 | module 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 | 18 | import Data.List |
2ff46fce A |
19 | import Data.Text (Text) |
20 | import qualified Data.Text as T | |
21 | import Network.BSD | |
22 | import Network.Socket | |
23 | ||
c91dbdc0 A |
24 | type ChunkSize = Word |
25 | ||
2ff46fce A |
26 | data 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 |
36 | defaultChunkSize :: ChunkSize |
37 | defaultChunkSize = 8192 | |
38 | ||
b23afe7b A |
39 | openGraylog |
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." | |
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 | |
52 | closeGraylog :: Graylog -> IO () | |
53 | closeGraylog Graylog{..} = close _graylogSocket |