]> git.immae.eu Git - github/fretlink/haskell-graylog.git/commitdiff
Defined Graylog type to contain connection informaiton.
authorAndrewRademacher <andrew.rademacher@smrxt.com>
Thu, 25 Feb 2016 02:39:47 +0000 (20:39 -0600)
committerAndrewRademacher <andrew.rademacher@smrxt.com>
Thu, 25 Feb 2016 02:39:47 +0000 (20:39 -0600)
graylog.cabal
src/Graylog/Types.hs [new file with mode: 0644]
src/Graylog/UDP.hs

index b3c1a5308b8e6710dba02a1dbe8982db545de785..cab25b9f3e777b6319ecba77d1d164b34d16b33d 100644 (file)
@@ -17,6 +17,9 @@ library
    default-language:    Haskell2010
 
    exposed-modules:     Graylog.Gelf
+                     ,  Graylog.UDP
+
+   other-modules:       Graylog.Types
 
    ghc-options:         -Wall -rtsopts
 
diff --git a/src/Graylog/Types.hs b/src/Graylog/Types.hs
new file mode 100644 (file)
index 0000000..e18826b
--- /dev/null
@@ -0,0 +1,42 @@
+{-# LANGUAGE RecordWildCards #-}
+
+module Graylog.Types
+   ( Graylog
+   , _graylogHost
+   , _graylogPort
+   , _graylogAddress
+
+   , openGraylog
+   , closeGraylog
+   ) where
+
+import           Data.Text      (Text)
+import qualified Data.Text      as T
+import           Network.BSD
+import           Network.Socket
+
+data Graylog
+   = Graylog
+      { _graylogHost     :: String
+      , _graylogPort     :: String
+      , _graylogAddress  :: AddrInfo
+      , _graylogSocket   :: Socket
+      , _graylogHostName :: Text
+      }
+
+openGraylog :: HostName -> ServiceName -> IO (Either String Graylog)
+openGraylog host port = do
+   infos <- getAddrInfo Nothing (Just host) (Just port)
+   case infos of
+      []     -> return $ Left "No address info found."
+      [info] -> do
+         sock <- socket (addrFamily info) Datagram defaultProtocol
+         connect sock (addrAddress info)
+         hostname <- getHostName
+         return $ Right $ Graylog host port info sock (T.pack hostname)
+      _      -> return $ Left "Too many address infos found."
+
+closeGraylog :: Graylog -> IO ()
+closeGraylog Graylog{..} = close _graylogSocket
+
+
index 6aec108e111bdfe164e451e253d0886ef747a7d9..00b6a1244d395004b35d0647a189d4930e10b803 100644 (file)
@@ -2,18 +2,12 @@ module Graylog.UDP
    ( Graylog (..)
    , sendLog
 
-   , module Graylog.Gelf
+   , module Export
    ) where
 
-import           Network.Socket
-
-import           Graylog.Gelf
-
-data Graylog
-   = Graylog
-      { _graylogHost :: String
-      , _graylogPort :: String
-      }
+import           Graylog.Gelf  as Export
+import           Graylog.Types as Export
 
 sendLog :: Graylog -> GELF -> IO ()
 sendLog glog msg = undefined
+