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
21 , getCurrentTraceClient
27import Control.Distributed.Process.Internal.CQueue (enqueue)
28import Control.Distributed.Process.Internal.Trace.Types
37import Control.Distributed.Process.Internal.Types
42 , createUnencodedMessage
44import Control.Distributed.Process.Serializable
45import Data.Foldable (forM_)
46import Data.List (intersperse)
47import qualified Data.Set as Set (fromList)
48import System.Mem.Weak (deRefWeak)
50--------------------------------------------------------------------------------
52--------------------------------------------------------------------------------
54traceLog :: Tracer -> String -> IO ()
55traceLog tr s = traceMessage tr (TraceEvLog s)
62 traceLog t $ concat (intersperse d (map toS ls))
63 where toS :: TraceArg -> String
65 toS (Trace a) = show a
67traceEvent :: Tracer -> TraceEvent -> IO ()
68traceEvent tr ev = traceIt tr (createUnencodedMessage ev)
70traceMessage :: Serializable m => Tracer -> m -> IO ()
71traceMessage tr msg = traceEvent tr (TraceEvUser (createUnencodedMessage msg))
73enableTrace :: Tracer -> ProcessId -> IO ()
75 traceIt t (createUnencodedMessage ((Nothing :: Maybe (SendPort TraceOk)),
78enableTraceSync :: Tracer -> SendPort TraceOk -> ProcessId -> IO ()
79enableTraceSync t s p =
80 traceIt t (createUnencodedMessage ((Just s), (TraceEnable p)))
82disableTrace :: Tracer -> IO ()
84 traceIt t (createUnencodedMessage ((Nothing :: Maybe (SendPort TraceOk)),
87disableTraceSync :: Tracer -> SendPort TraceOk -> IO ()
89 traceIt t (createUnencodedMessage ((Just s), TraceDisable))
91setTraceFlags :: Tracer -> TraceFlags -> IO ()
93 traceIt t (createUnencodedMessage ((Nothing :: Maybe (SendPort TraceOk)), f))
95setTraceFlagsSync :: Tracer -> SendPort TraceOk -> TraceFlags -> IO ()
96setTraceFlagsSync t s f =
97 traceIt t (createUnencodedMessage ((Just s), f))
99getTraceFlags :: Tracer -> SendPort TraceFlags -> IO ()
100getTraceFlags t s = traceIt t (createUnencodedMessage s)
102getCurrentTraceClient :: Tracer -> SendPort (Maybe ProcessId) -> IO ()
103getCurrentTraceClient t s = traceIt t (createUnencodedMessage s)
105-- aux API and utilities
107class Traceable a where
108 uod :: [a] -> TraceSubject
110instance Traceable ProcessId where
111 uod = TraceProcs . Set.fromList
113instance Traceable String where
114 uod = TraceNames . Set.fromList
116traceOnly :: Traceable a => [a] -> Maybe TraceSubject
117traceOnly = Just . uod
119traceOn :: Maybe TraceSubject
120traceOn = Just TraceAll
122traceOff :: Maybe TraceSubject
125traceIt :: Tracer -> Message -> IO ()
126traceIt InactiveTracer _ = return ()
127traceIt (ActiveTracer _ wqRef) msg = do
128 mQueue <- deRefWeak wqRef
129 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