@@ -1,17 +1,18 @@
1+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
1−{-# LANGUAGE OverloadedStrings #-}
2+{-# LANGUAGE OverloadedStrings #-}
3+{-# LANGUAGE StandaloneDeriving #-}
4+{-# OPTIONS_GHC -fno-warn-orphans #-}
7-------------------------------------------------------------------------------
10-------------------------------------------------------------------------------
8−import Blaze.ByteString.Builder
9import Control.Concurrent
11import Control.Concurrent
10−import Control.Monad.IO.Class
12+import Control.DeepSeq
11−import CriterionPlus
13+import Criterion.Main
12import Data.Aeson
14import Data.Aeson
13import Data.Monoid
15import Data.Monoid
14−import Data.Text (Text)
15import Data.Time.Calendar
16import Data.Time.Calendar
16import Data.Time.Clock
17import Data.Time.Clock
17import System.IO
18import System.IO
@@ -22,35 +23,39 @@ import Katip.Scribes.Handle
22-------------------------------------------------------------------------------
23-------------------------------------------------------------------------------
24main :: IO ()
25main :: IO ()
25−main = benchmark $
26+main = defaultMain [
26− handleScribeBench
27+ handleScribeBench
29-------------------------------------------------------------------------------
31-------------------------------------------------------------------------------
30−handleScribeBench :: Benchmark ()
32+handleScribeBench :: Benchmark
31−handleScribeBench = standoff "Katip.Scribes.Handle" $
33+handleScribeBench = bgroup "Katip.Scribes.Handle" [
34+ env setupEnv $ \ ~(Scribe push, tid) ->
32− subject "Bytestring Builder" $ do
35+ bench "Bytestring Builder" $
33− pause
36+ whnfIO $ push $ exItem tid
34− (Scribe push) <- liftIO setup
37+ ]
35− tid <- liftIO myThreadId
41+ tid <- myThreadId
36− continue
42+ return (scribe, mkThreadIdText tid)
37− whnfIO $ push $ exItem tid
40-------------------------------------------------------------------------------
45-------------------------------------------------------------------------------
41−exItem :: ThreadId -> Item ExPayload
46+exItem :: ThreadIdText -> Item ExPayload
42exItem tid = Item {
47exItem tid = Item {
43− itemApp = Namespace ["app"]
48+ _itemApp = Namespace ["app"]
44− , itemEnv = Environment "production"
49+ , _itemEnv = Environment "production"
45− , itemSeverity = Warning
50+ , _itemSeverity = WarningS
46− , itemThread = tid
51+ , _itemThread = tid
47− , itemHost = "example"
52+ , _itemHost = "example"
48− , itemProcess = CPid 123
53+ , _itemProcess = CPid 123
49− , itemPayload = ExPayload
54+ , _itemPayload = ExPayload
50− , itemMessage = "message"
55+ , _itemMessage = "message"
51− , itemTime = mkUTCTime 2015 3 14 1 5 9
56+ , _itemTime = mkUTCTime 2015 3 14 1 5 9
52− , itemNamespace = Namespace ["foo"]
57+ , _itemNamespace = Namespace ["foo"]
53− , itemLoc = Nothing
58+ , _itemLoc = Nothing
@@ -60,6 +65,8 @@ data ExPayload = ExPayload
60instance ToJSON ExPayload where
65instance ToJSON ExPayload where
61 toJSON _ = Object mempty
66 toJSON _ = Object mempty
68+instance ToObject ExPayload
63instance LogItem ExPayload where
70instance LogItem ExPayload where
64 payloadKeys _ _ = AllKeys
71 payloadKeys _ _ = AllKeys
@@ -76,4 +83,12 @@ mkUTCTime y mt d h mn s = UTCTime day dt
76setup :: IO Scribe
83setup :: IO Scribe
78 h <- openFile "/dev/null" WriteMode
85 h <- openFile "/dev/null" WriteMode
79− mkHandleScribe h Debug V0
86+ mkHandleScribe ColorIfTerminal h DebugS V0
89+-------------------------------------------------------------------------------
90+deriving instance NFData ThreadIdText
93+instance NFData Scribe where