aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Graylog/Gelf.hs
blob: 67e0de7e219e347a3c4099d4222b8315936ed919 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric      #-}
{-# LANGUAGE OverloadedStrings  #-}

module Graylog.Gelf where

import           Data.Aeson        (ToJSON (..), Value (..), genericToJSON,
                                    toJSON)
import           Data.Aeson.Casing
import           Data.Scientific
import           Data.Text         (Text)
import           Data.Time
import           Data.Typeable
import           Data.Vector
import           GHC.Generics

data GELF
   = GELF
      { _gelfVersion          :: Version
      , _gelfHost             :: Text
      , _gelfShortMessage     :: Text
      , _gelfFullMessage      :: Maybe Text
      , _gelfTimestamp        :: Maybe UTCTime
      , _gelfLevel            :: Maybe SyslogLevel
      , _gelfLine             :: Maybe Word
      , _gelfFile             :: Maybe Text
      , _gelfAdditionalFields :: Vector Field
      }
   deriving (Show, Typeable, Generic)

instance ToJSON GELF where
   toJSON = genericToJSON $ aesonPrefix snakeCase

--

data Version
   = Version1x1
   deriving (Eq, Show, Typeable, Generic)

instance ToJSON Version where
   toJSON Version1x1 = String "1.1"

--

data SyslogLevel
   = Emergency
   | Alert
   | Critical
   | Error
   | Warning
   | Notice
   | Informational
   | Debug
   deriving (Eq, Ord, Show, Typeable, Generic)

instance ToJSON SyslogLevel where
   toJSON Emergency     = Number 0
   toJSON Alert         = Number 1
   toJSON Critical      = Number 2
   toJSON Error         = Number 3
   toJSON Warning       = Number 4
   toJSON Notice        = Number 5
   toJSON Informational = Number 6
   toJSON Debug         = Number 7

--

data Field
   = FieldString Text
   | FieldNumber Scientific
   deriving (Eq, Show, Typeable, Generic)

instance ToJSON Field where
   toJSON (FieldString s) = String s
   toJSON (FieldNumber n) = Number n