]> git.immae.eu Git - github/fretlink/haskell-graylog.git/blame - src/Graylog/Gelf.hs
Allow to send metadata in a Gelf message
[github/fretlink/haskell-graylog.git] / src / Graylog / Gelf.hs
CommitLineData
52696643
A
1{-# LANGUAGE DeriveDataTypeable #-}
2{-# LANGUAGE DeriveGeneric #-}
3{-# LANGUAGE OverloadedStrings #-}
8c9d965d 4{-# LANGUAGE RecordWildCards #-}
52696643 5
d9a5d441
A
6-- | Default formatting for Graylog messages,
7-- see http://docs.graylog.org/en/latest/pages/gelf.html
52696643
A
8module Graylog.Gelf where
9
8c9d965d
TC
10import Data.Aeson (ToJSON (..), Value (..), object,
11 toJSON, (.=))
12import Data.HashMap.Strict (HashMap)
13import Data.Semigroup ((<>))
14import Data.Text (Text)
52696643
A
15import Data.Time
16import Data.Typeable
8c9d965d 17import GHC.Exts (toList)
52696643
A
18import GHC.Generics
19
20data GELF
21 = GELF
15981d57
A
22 { _gelfVersion :: Version
23 , _gelfHost :: Text
24 , _gelfShortMessage :: Text
25 , _gelfFullMessage :: Maybe Text
26 , _gelfTimestamp :: Maybe UTCTime
27 , _gelfLevel :: Maybe SyslogLevel
28 , _gelfLine :: Maybe Word
29 , _gelfFile :: Maybe Text
8c9d965d 30 , _gelfMeta :: HashMap Text Text
52696643
A
31 }
32 deriving (Show, Typeable, Generic)
33
34instance ToJSON GELF where
8c9d965d
TC
35 toJSON GELF{..} = object $ [ "version" .= _gelfVersion
36 , "host" .= _gelfHost
37 , "short_message" .= _gelfShortMessage
38 , "full_message" .= _gelfFullMessage
39 , "timestamp" .= _gelfTimestamp
40 , "level" .= _gelfLevel
41 , "line" .= _gelfLine
42 , "file" .= _gelfFile
43 ] <> toList (String <$> _gelfMeta)
52696643
A
44
45--
46
47data Version
48 = Version1x1
49 deriving (Eq, Show, Typeable, Generic)
50
51instance ToJSON Version where
52 toJSON Version1x1 = String "1.1"
53
54--
55
56data SyslogLevel
57 = Emergency
58 | Alert
59 | Critical
60 | Error
61 | Warning
62 | Notice
63 | Informational
64 | Debug
65 deriving (Eq, Ord, Show, Typeable, Generic)
66
67instance ToJSON SyslogLevel where
68 toJSON Emergency = Number 0
69 toJSON Alert = Number 1
70 toJSON Critical = Number 2
71 toJSON Error = Number 3
72 toJSON Warning = Number 4
73 toJSON Notice = Number 5
74 toJSON Informational = Number 6
75 toJSON Debug = Number 7
b23afe7b
A
76
77--
78
79simpleGelf
80 :: Text -- ^ Hostname
81 -> Text -- ^ Short message
82 -> GELF
83simpleGelf host short =
8c9d965d 84 GELF Version1x1 host short Nothing Nothing Nothing Nothing Nothing mempty