1-- | Keeps the tracing API calls separate from the Tracer implementation,
2-- which allows us to avoid a nasty import cycle between tracing and
3-- the messaging primitives that rely on it
4module Control.Distributed.Process.Internal.Trace.Primitives
7 -- * Sending Trace Data
12 -- * Configuring A Tracer
26import Control.Distributed.Process.Internal.CQueue (enqueue)
27import Control.Distributed.Process.Internal.Trace.Types
36import Control.Distributed.Process.Internal.Types
41 , createUnencodedMessage
43import Control.Distributed.Process.Serializable
44import Data.Foldable (forM_)
45import Data.List (intersperse)
46import qualified Data.Set as Set (fromList)
47import System.Mem.Weak (deRefWeak)
49--------------------------------------------------------------------------------
51--------------------------------------------------------------------------------
53traceLog :: Tracer -> String -> IO ()
54traceLog tr s = traceMessage tr (TraceEvLog s)
61 traceLog t $ concat (intersperse d (map toS ls))
62 where toS :: TraceArg -> String
64 toS (Trace a) = show a
66traceEvent :: Tracer -> TraceEvent -> IO ()
67traceEvent tr ev = traceIt tr (createUnencodedMessage ev)
69traceMessage :: Serializable m => Tracer -> m -> IO ()
70traceMessage tr msg = traceEvent tr (TraceEvUser (createUnencodedMessage msg))
72enableTrace :: Tracer -> ProcessId -> IO ()
74 traceIt t (createUnencodedMessage ((Nothing :: Maybe (SendPort TraceOk)),
77enableTraceSync :: Tracer -> SendPort TraceOk -> ProcessId -> IO ()
78enableTraceSync t s p =
79 traceIt t (createUnencodedMessage ((Just s), (TraceEnable p)))
81disableTrace :: Tracer -> IO ()
83 traceIt t (createUnencodedMessage ((Nothing :: Maybe (SendPort TraceOk)),
86disableTraceSync :: Tracer -> SendPort TraceOk -> IO ()
88 traceIt t (createUnencodedMessage ((Just s), TraceDisable))
90setTraceFlags :: Tracer -> TraceFlags -> IO ()
92 traceIt t (createUnencodedMessage ((Nothing :: Maybe (SendPort TraceOk)), f))
94setTraceFlagsSync :: Tracer -> SendPort TraceOk -> TraceFlags -> IO ()
95setTraceFlagsSync t s f =
96 traceIt t (createUnencodedMessage ((Just s), f))
98getTraceFlags :: Tracer -> SendPort TraceFlags -> IO ()
99getTraceFlags t s = traceIt t (createUnencodedMessage s)
101-- aux API and utilities
103class Traceable a where
104 uod :: [a] -> TraceSubject
106instance Traceable ProcessId where
107 uod = TraceProcs . Set.fromList
109instance Traceable String where
110 uod = TraceNames . Set.fromList
112traceOnly :: Traceable a => [a] -> Maybe TraceSubject
113traceOnly = Just . uod
115traceOn :: Maybe TraceSubject
116traceOn = Just TraceAll
118traceOff :: Maybe TraceSubject
121traceIt :: Tracer -> Message -> IO ()
122traceIt InactiveTracer _ = return ()
123traceIt (ActiveTracer _ wqRef) msg = do
124 mQueue <- deRefWeak wqRef
125 forM_ mQueue $ \queue -> enqueue queue msg
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list