diff options
Diffstat (limited to 'src/Graylog/Types.hs')
-rw-r--r-- | src/Graylog/Types.hs | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/src/Graylog/Types.hs b/src/Graylog/Types.hs index bfee38a..8fad8cc 100644 --- a/src/Graylog/Types.hs +++ b/src/Graylog/Types.hs | |||
@@ -1,3 +1,4 @@ | |||
1 | {-# LANGUAGE LambdaCase #-} | ||
1 | {-# LANGUAGE RecordWildCards #-} | 2 | {-# LANGUAGE RecordWildCards #-} |
2 | 3 | ||
3 | module Graylog.Types | 4 | module Graylog.Types |
@@ -14,6 +15,7 @@ module Graylog.Types | |||
14 | , closeGraylog | 15 | , closeGraylog |
15 | ) where | 16 | ) where |
16 | 17 | ||
18 | import Data.List | ||
17 | import Data.Text (Text) | 19 | import Data.Text (Text) |
18 | import qualified Data.Text as T | 20 | import qualified Data.Text as T |
19 | import Network.BSD | 21 | import Network.BSD |
@@ -34,19 +36,18 @@ data Graylog | |||
34 | defaultChunkSize :: ChunkSize | 36 | defaultChunkSize :: ChunkSize |
35 | defaultChunkSize = 8192 | 37 | defaultChunkSize = 8192 |
36 | 38 | ||
37 | openGraylog :: HostName -> ServiceName -> ChunkSize -> IO (Either String Graylog) | 39 | openGraylog |
38 | openGraylog host port chksize = do | 40 | :: HostName -> ServiceName -> ChunkSize -> IO (Either String Graylog) |
39 | infos <- getAddrInfo Nothing (Just host) (Just port) | 41 | openGraylog h p cksize = getAddrInfo Nothing (Just h) (Just p) >>= \case |
40 | case infos of | 42 | [] -> return $ Left "No address info found." |
41 | [] -> return $ Left "No address info found." | 43 | infos -> |
42 | [info] -> do | 44 | case find (\i -> addrSocketType i == Datagram) infos of |
43 | sock <- socket (addrFamily info) Datagram defaultProtocol | 45 | Nothing -> return $ Left "No datagram info found for address." |
44 | connect sock (addrAddress info) | 46 | Just i -> do |
45 | hostname <- getHostName | 47 | sock <- socket (addrFamily i) Datagram defaultProtocol |
46 | return $ Right $ Graylog host port info sock (T.pack hostname) chksize | 48 | connect sock (addrAddress i) |
47 | _ -> return $ Left "Too many address infos found." | 49 | hostname <- getHostName |
50 | return $ Right $ Graylog h p i sock (T.pack hostname) cksize | ||
48 | 51 | ||
49 | closeGraylog :: Graylog -> IO () | 52 | closeGraylog :: Graylog -> IO () |
50 | closeGraylog Graylog{..} = close _graylogSocket | 53 | closeGraylog Graylog{..} = close _graylogSocket |
51 | |||
52 | |||