aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrewRademacher <andrew.rademacher@smrxt.com>2016-02-24 21:02:15 -0600
committerAndrewRademacher <andrew.rademacher@smrxt.com>2016-02-24 21:02:15 -0600
commitc91dbdc0f5be0f1ec6a0cafc441eef0aa6da58d7 (patch)
treed6ebba7852d875b1ef2e6275f0c106941f842f1c
parent2ff46fce748b0e813f13f03c034065092145a28d (diff)
downloadhaskell-graylog-c91dbdc0f5be0f1ec6a0cafc441eef0aa6da58d7.tar.gz
haskell-graylog-c91dbdc0f5be0f1ec6a0cafc441eef0aa6da58d7.tar.zst
haskell-graylog-c91dbdc0f5be0f1ec6a0cafc441eef0aa6da58d7.zip
Defined sendLog function.
-rw-r--r--graylog.cabal2
-rw-r--r--src/Graylog/Types.hs26
-rw-r--r--src/Graylog/UDP.hs19
3 files changed, 34 insertions, 13 deletions
diff --git a/graylog.cabal b/graylog.cabal
index cab25b9..3eaa812 100644
--- a/graylog.cabal
+++ b/graylog.cabal
@@ -27,6 +27,8 @@ library
27 27
28 , aeson 28 , aeson
29 , aeson-casing 29 , aeson-casing
30 , bytestring
31 , mwc-random
30 , network 32 , network
31 , scientific 33 , scientific
32 , text 34 , text
diff --git a/src/Graylog/Types.hs b/src/Graylog/Types.hs
index e18826b..bfee38a 100644
--- a/src/Graylog/Types.hs
+++ b/src/Graylog/Types.hs
@@ -5,7 +5,11 @@ module Graylog.Types
5 , _graylogHost 5 , _graylogHost
6 , _graylogPort 6 , _graylogPort
7 , _graylogAddress 7 , _graylogAddress
8 , _graylogSocket
9 , _graylogHostName
10 , ChunkSize
8 11
12 , defaultChunkSize
9 , openGraylog 13 , openGraylog
10 , closeGraylog 14 , closeGraylog
11 ) where 15 ) where
@@ -15,17 +19,23 @@ import qualified Data.Text as T
15import Network.BSD 19import Network.BSD
16import Network.Socket 20import Network.Socket
17 21
22type ChunkSize = Word
23
18data Graylog 24data Graylog
19 = Graylog 25 = Graylog
20 { _graylogHost :: String 26 { _graylogHost :: String
21 , _graylogPort :: String 27 , _graylogPort :: String
22 , _graylogAddress :: AddrInfo 28 , _graylogAddress :: AddrInfo
23 , _graylogSocket :: Socket 29 , _graylogSocket :: Socket
24 , _graylogHostName :: Text 30 , _graylogHostName :: Text
31 , _graylogChunkSize :: ChunkSize
25 } 32 }
26 33
27openGraylog :: HostName -> ServiceName -> IO (Either String Graylog) 34defaultChunkSize :: ChunkSize
28openGraylog host port = do 35defaultChunkSize = 8192
36
37openGraylog :: HostName -> ServiceName -> ChunkSize -> IO (Either String Graylog)
38openGraylog host port chksize = do
29 infos <- getAddrInfo Nothing (Just host) (Just port) 39 infos <- getAddrInfo Nothing (Just host) (Just port)
30 case infos of 40 case infos of
31 [] -> return $ Left "No address info found." 41 [] -> return $ Left "No address info found."
@@ -33,7 +43,7 @@ openGraylog host port = do
33 sock <- socket (addrFamily info) Datagram defaultProtocol 43 sock <- socket (addrFamily info) Datagram defaultProtocol
34 connect sock (addrAddress info) 44 connect sock (addrAddress info)
35 hostname <- getHostName 45 hostname <- getHostName
36 return $ Right $ Graylog host port info sock (T.pack hostname) 46 return $ Right $ Graylog host port info sock (T.pack hostname) chksize
37 _ -> return $ Left "Too many address infos found." 47 _ -> return $ Left "Too many address infos found."
38 48
39closeGraylog :: Graylog -> IO () 49closeGraylog :: Graylog -> IO ()
diff --git a/src/Graylog/UDP.hs b/src/Graylog/UDP.hs
index 00b6a12..dc172b9 100644
--- a/src/Graylog/UDP.hs
+++ b/src/Graylog/UDP.hs
@@ -1,13 +1,22 @@
1module Graylog.UDP 1module Graylog.UDP
2 ( Graylog (..) 2 ( sendLog
3 , sendLog
4 3
5 , module Export 4 , module Export
6 ) where 5 ) where
7 6
8import Graylog.Gelf as Export 7import Data.Aeson
9import Graylog.Types as Export 8import qualified Data.ByteString.Lazy as LBS
9import Network.Socket.ByteString.Lazy
10import System.Random.MWC
11
12import Graylog.Gelf as Export
13import Graylog.Types as Export
10 14
11sendLog :: Graylog -> GELF -> IO () 15sendLog :: Graylog -> GELF -> IO ()
12sendLog glog msg = undefined 16sendLog glog msg = mapM_ (send $ _graylogSocket glog) cks
17 where
18 raw = encode msg
19 cks = chunky raw
13 20
21chunky :: LBS.ByteString -> [LBS.ByteString]
22chunky = undefined