]>
Commit | Line | Data |
---|---|---|
2ff46fce A |
1 | {-# LANGUAGE RecordWildCards #-} |
2 | ||
3 | module 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 | ||
17 | import Data.Text (Text) | |
18 | import qualified Data.Text as T | |
19 | import Network.BSD | |
20 | import Network.Socket | |
21 | ||
c91dbdc0 A |
22 | type ChunkSize = Word |
23 | ||
2ff46fce A |
24 | data 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 |
34 | defaultChunkSize :: ChunkSize |
35 | defaultChunkSize = 8192 | |
36 | ||
37 | openGraylog :: HostName -> ServiceName -> ChunkSize -> IO (Either String Graylog) | |
38 | openGraylog 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 | ||
49 | closeGraylog :: Graylog -> IO () | |
50 | closeGraylog Graylog{..} = close _graylogSocket | |
51 | ||
52 |