]> git.immae.eu Git - github/fretlink/haskell-graylog.git/blame - src/Graylog/Gelf.hs
Added readme, license, and light commenting.
[github/fretlink/haskell-graylog.git] / src / Graylog / Gelf.hs
CommitLineData
52696643
A
1{-# LANGUAGE DeriveDataTypeable #-}
2{-# LANGUAGE DeriveGeneric #-}
3{-# LANGUAGE OverloadedStrings #-}
4
d9a5d441
A
5-- | Default formatting for Graylog messages,
6-- see http://docs.graylog.org/en/latest/pages/gelf.html
52696643
A
7module Graylog.Gelf where
8
9import Data.Aeson (ToJSON (..), Value (..), genericToJSON,
10 toJSON)
11import Data.Aeson.Casing
52696643
A
12import Data.Text (Text)
13import Data.Time
14import Data.Typeable
52696643
A
15import GHC.Generics
16
17data GELF
18 = GELF
15981d57
A
19 { _gelfVersion :: Version
20 , _gelfHost :: Text
21 , _gelfShortMessage :: Text
22 , _gelfFullMessage :: Maybe Text
23 , _gelfTimestamp :: Maybe UTCTime
24 , _gelfLevel :: Maybe SyslogLevel
25 , _gelfLine :: Maybe Word
26 , _gelfFile :: Maybe Text
52696643
A
27 }
28 deriving (Show, Typeable, Generic)
29
30instance ToJSON GELF where
31 toJSON = genericToJSON $ aesonPrefix snakeCase
32
33--
34
35data Version
36 = Version1x1
37 deriving (Eq, Show, Typeable, Generic)
38
39instance ToJSON Version where
40 toJSON Version1x1 = String "1.1"
41
42--
43
44data SyslogLevel
45 = Emergency
46 | Alert
47 | Critical
48 | Error
49 | Warning
50 | Notice
51 | Informational
52 | Debug
53 deriving (Eq, Ord, Show, Typeable, Generic)
54
55instance ToJSON SyslogLevel where
56 toJSON Emergency = Number 0
57 toJSON Alert = Number 1
58 toJSON Critical = Number 2
59 toJSON Error = Number 3
60 toJSON Warning = Number 4
61 toJSON Notice = Number 5
62 toJSON Informational = Number 6
63 toJSON Debug = Number 7
b23afe7b
A
64
65--
66
67simpleGelf
68 :: Text -- ^ Hostname
69 -> Text -- ^ Short message
70 -> GELF
71simpleGelf host short =
72 GELF Version1x1 host short Nothing Nothing Nothing Nothing Nothing