1 {-# LANGUAGE DeriveDataTypeable #-}
2 {-# LANGUAGE DeriveGeneric #-}
3 {-# LANGUAGE OverloadedStrings #-}
5 module Graylog.Gelf where
7 import Data.Aeson (ToJSON (..), Value (..), genericToJSON,
9 import Data.Aeson.Casing
10 import Data.Scientific
11 import Data.Text (Text)
19 { _gelfVersion :: Version
21 , _gelfShortMessage :: Text
22 , _gelfFullMessage :: Maybe Text
23 , _gelfTimestamp :: Maybe UTCTime
24 , _gelfLevel :: Maybe SyslogLevel
25 , _gelfLine :: Maybe Word
26 , _gelfFile :: Maybe Text
27 , _gelfAdditionalFields :: Vector Field
29 deriving (Show, Typeable, Generic)
31 instance ToJSON GELF where
32 toJSON = genericToJSON $ aesonPrefix snakeCase
38 deriving (Eq, Show, Typeable, Generic)
40 instance ToJSON Version where
41 toJSON Version1x1 = String "1.1"
54 deriving (Eq, Ord, Show, Typeable, Generic)
56 instance ToJSON SyslogLevel where
57 toJSON Emergency = Number 0
58 toJSON Alert = Number 1
59 toJSON Critical = Number 2
60 toJSON Error = Number 3
61 toJSON Warning = Number 4
62 toJSON Notice = Number 5
63 toJSON Informational = Number 6
64 toJSON Debug = Number 7
70 | FieldNumber Scientific
71 deriving (Eq, Show, Typeable, Generic)
73 instance ToJSON Field where
74 toJSON (FieldString s) = String s
75 toJSON (FieldNumber n) = Number n