forked from purescript/purescript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLogging.hs
More file actions
41 lines (34 loc) · 1.48 KB
/
Logging.hs
File metadata and controls
41 lines (34 loc) · 1.48 KB
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
{-# LANGUAGE PackageImports #-}
module Language.PureScript.Ide.Logging
( runLogger
, logPerf
, displayTimeSpec
, labelTimespec
) where
import Protolude
import "monad-logger" Control.Monad.Logger
import qualified Data.Text as T
import Language.PureScript.Ide.Types
import System.Clock
import Text.Printf
runLogger :: MonadIO m => IdeLogLevel -> LoggingT m a -> m a
runLogger logLevel' =
runStdoutLoggingT . filterLogger (\_ logLevel ->
case logLevel' of
LogAll -> True
LogDefault -> not (logLevel == LevelOther "perf" || logLevel == LevelDebug)
LogNone -> False
LogDebug -> not (logLevel == LevelOther "perf")
LogPerf -> logLevel == LevelOther "perf")
labelTimespec :: Text -> TimeSpec -> Text
labelTimespec label duration = label <> ": " <> displayTimeSpec duration
logPerf :: (MonadIO m, MonadLogger m) => (TimeSpec -> Text) -> m t -> m t
logPerf format f = do
start <- liftIO (getTime Monotonic)
result <- f
end <- liftIO (getTime Monotonic)
logOtherN (LevelOther "perf") (format (diffTimeSpec start end))
pure result
displayTimeSpec :: TimeSpec -> Text
displayTimeSpec ts =
T.pack (printf "%0.2f" (fromIntegral (toNanoSecs ts) / 1000000 :: Double)) <> "ms"