@@ -1,7 +1,7 @@
1-- | Tracing/Debugging support - Types
1-- | Tracing/Debugging support - Types
2module Control.Distributed.Process.Internal.Trace.Types
2module Control.Distributed.Process.Internal.Trace.Types
3 ( MxEventBus(..)
3 ( MxEventBus(..)
4− , TraceEvent(..)
4+ , MxEvent(..)
5 , SetTrace(..)
5 , SetTrace(..)
6 , Addressable(..)
6 , Addressable(..)
7 , TraceSubject(..)
7 , TraceSubject(..)
@@ -47,6 +47,7 @@ import Data.Typeable
47import System.Mem.Weak (deRefWeak)
47import System.Mem.Weak (deRefWeak)
48import Network.Transport
48import Network.Transport
49 ( ConnectionId
49 ( ConnectionId
52--------------------------------------------------------------------------------
53--------------------------------------------------------------------------------
@@ -56,47 +57,49 @@ import Network.Transport
56data SetTrace = TraceEnable !ProcessId | TraceDisable
57data SetTrace = TraceEnable !ProcessId | TraceDisable
57 deriving (Typeable, Eq, Show)
58 deriving (Typeable, Eq, Show)
60+-- TODO: MOVE the whole Trace namespace into C.D.Process.Management
59-- | An event that is fired when something /interesting/ happens.
62-- | An event that is fired when something /interesting/ happens.
60-- Trace events are forwarded to a trace listener process, of which
63-- Trace events are forwarded to a trace listener process, of which
61-- at most one can be registered per-node.
64-- at most one can be registered per-node.
62−data TraceEvent =
65+data MxEvent =
63− TraceEvSpawned ProcessId
66+ MxSpawned ProcessId
64 -- ^ fired whenever a local process is spawned
67 -- ^ fired whenever a local process is spawned
65− | TraceEvRegistered ProcessId String
68+ | MxRegistered ProcessId String
66 -- ^ fired whenever a process/name is registered (locally)
69 -- ^ fired whenever a process/name is registered (locally)
67− | TraceEvUnRegistered ProcessId String
70+ | MxUnRegistered ProcessId String
68 -- ^ fired whenever a process/name is unregistered (locally)
71 -- ^ fired whenever a process/name is unregistered (locally)
69− | TraceEvDied ProcessId DiedReason
72+ | MxProcessDied ProcessId DiedReason
70 -- ^ fired whenever a process dies
73 -- ^ fired whenever a process dies
71− | TraceEvNodeDied NodeId DiedReason
74+ | MxNodeDied NodeId DiedReason
72 -- ^ fired whenever a node /dies/ (i.e., the connection is broken/disconnected)
75 -- ^ fired whenever a node /dies/ (i.e., the connection is broken/disconnected)
73− | TraceEvSent ProcessId ProcessId Message
76+ | MxSent ProcessId ProcessId Message
74 -- ^ fired whenever a message is sent from a local process
77 -- ^ fired whenever a message is sent from a local process
75− | TraceEvReceived ProcessId Message
78+ | MxReceived ProcessId Message
76 -- ^ fired whenever a message is received by a local process
79 -- ^ fired whenever a message is received by a local process
77− | TraceEvConnected ConnectionId
80+ | MxConnected ConnectionId EndPointAddress
78 -- ^ fired when a network-transport connection is first established
81 -- ^ fired when a network-transport connection is first established
79− | TraceEvDisconnected ConnectionId
82+ | MxDisconnected ConnectionId EndPointAddress
80 -- ^ fired when a network-transport connection is broken/disconnected
83 -- ^ fired when a network-transport connection is broken/disconnected
81− | TraceEvUser Message
84+ | MxUser Message
82 -- ^ a user defined trace event (see 'traceMessage')
85 -- ^ a user defined trace event (see 'traceMessage')
83− | TraceEvLog String
86+ | MxLog String
84 -- ^ a /logging/ event - used for debugging purposes only
87 -- ^ a /logging/ event - used for debugging purposes only
85− | TraceEvTakeover ProcessId
88+ | MxTraceTakeover ProcessId
86 -- ^ notifies a trace listener that all subsequent traces will be sent to /pid/
89 -- ^ notifies a trace listener that all subsequent traces will be sent to /pid/
87− | TraceEvDisable
90+ | MxTraceDisable
88 -- ^ notifies a trace listener that it has been disabled/removed
91 -- ^ notifies a trace listener that it has been disabled/removed
89 deriving (Typeable, Show)
92 deriving (Typeable, Show)
91class Addressable a where
94class Addressable a where
92 resolveToPid :: a -> Maybe ProcessId
95 resolveToPid :: a -> Maybe ProcessId
94−instance Addressable TraceEvent where
97+instance Addressable MxEvent where
95− resolveToPid (TraceEvSpawned p) = Just p
98+ resolveToPid (MxSpawned p) = Just p
96− resolveToPid (TraceEvDied p _) = Just p
99+ resolveToPid (MxProcessDied p _) = Just p
97− resolveToPid (TraceEvSent _ p _) = Just p
100+ resolveToPid (MxSent _ p _) = Just p
98− resolveToPid (TraceEvReceived p _) = Just p
101+ resolveToPid (MxReceived p _) = Just p
99− resolveToPid _ = Nothing
102+ resolveToPid _ = Nothing
101-- | Defines which processes will be traced by a given 'TraceFlag',
104-- | Defines which processes will be traced by a given 'TraceFlag',
102-- either by name, or @ProcessId@. Choosing @TraceAll@ is /by far/
105-- either by name, or @ProcessId@. Choosing @TraceAll@ is /by far/
@@ -149,7 +152,7 @@ data TraceOk = TraceOk
149--------------------------------------------------------------------------------
152--------------------------------------------------------------------------------
151traceLog :: MxEventBus -> String -> IO ()
154traceLog :: MxEventBus -> String -> IO ()
152−traceLog tr s = publishEvent tr (unsafeCreateUnencodedMessage $ TraceEvLog s)
155+traceLog tr s = publishEvent tr (unsafeCreateUnencodedMessage $ MxLog s)
154traceLogFmt :: MxEventBus
157traceLogFmt :: MxEventBus
155 -> String
158 -> String
@@ -161,11 +164,11 @@ traceLogFmt t d ls =
161 toS (TraceStr s) = s
164 toS (TraceStr s) = s
162 toS (Trace a) = show a
165 toS (Trace a) = show a
164−traceEvent :: MxEventBus -> TraceEvent -> IO ()
167+traceEvent :: MxEventBus -> MxEvent -> IO ()
165traceEvent tr ev = publishEvent tr (unsafeCreateUnencodedMessage ev)
168traceEvent tr ev = publishEvent tr (unsafeCreateUnencodedMessage ev)
167traceMessage :: Serializable m => MxEventBus -> m -> IO ()
170traceMessage :: Serializable m => MxEventBus -> m -> IO ()
168−traceMessage tr msg = traceEvent tr (TraceEvUser (unsafeCreateUnencodedMessage msg))
171+traceMessage tr msg = traceEvent tr (MxUser (unsafeCreateUnencodedMessage msg))
170enableTrace :: MxEventBus -> ProcessId -> IO ()
173enableTrace :: MxEventBus -> ProcessId -> IO ()
171enableTrace t p =
174enableTrace t p =
@@ -223,38 +226,38 @@ instance Binary SetTrace where
223 2 -> return TraceDisable
226 2 -> return TraceDisable
224 _ -> error "SetTrace.get - invalid header"
227 _ -> error "SetTrace.get - invalid header"
226−instance Binary TraceEvent where
229+instance Binary MxEvent where
227− put (TraceEvSpawned pid) = putWord8 1 >> put pid
230+ put (MxSpawned pid) = putWord8 1 >> put pid
228− put (TraceEvRegistered pid str) = putWord8 2 >> put pid >> put str
231+ put (MxRegistered pid str) = putWord8 2 >> put pid >> put str
229− put (TraceEvUnRegistered pid str) = putWord8 3 >> put pid >> put str
232+ put (MxUnRegistered pid str) = putWord8 3 >> put pid >> put str
230− put (TraceEvDied pid res) = putWord8 4 >> put pid >> put res
233+ put (MxProcessDied pid res) = putWord8 4 >> put pid >> put res
231− put (TraceEvNodeDied nid res) = putWord8 5 >> put nid >> put res
234+ put (MxNodeDied nid res) = putWord8 5 >> put nid >> put res
232− put (TraceEvSent to from msg) = putWord8 6 >> put to >> put from >> put msg
235+ put (MxSent to from msg) = putWord8 6 >> put to >> put from >> put msg
233− put (TraceEvReceived pid msg) = putWord8 7 >> put pid >> put msg
236+ put (MxReceived pid msg) = putWord8 7 >> put pid >> put msg
234− put (TraceEvConnected cid) = putWord8 8 >> put cid
237+ put (MxConnected cid epid) = putWord8 8 >> put cid >> put epid
235− put (TraceEvDisconnected cid) = putWord8 9 >> put cid
238+ put (MxDisconnected cid epid) = putWord8 9 >> put cid >> put epid
236− put (TraceEvUser msg) = putWord8 10 >> put msg
239+ put (MxUser msg) = putWord8 10 >> put msg
237− put (TraceEvLog msg) = putWord8 11 >> put msg
240+ put (MxLog msg) = putWord8 11 >> put msg
238− put (TraceEvTakeover pid) = putWord8 12 >> put pid
241+ put (MxTraceTakeover pid) = putWord8 12 >> put pid
239− put TraceEvDisable = putWord8 13
242+ put MxTraceDisable = putWord8 13
242 header <- getWord8
245 header <- getWord8
243 case header of
246 case header of
244− 1 -> TraceEvSpawned <$> get
247+ 1 -> MxSpawned <$> get
245− 2 -> TraceEvRegistered <$> get <*> get
248+ 2 -> MxRegistered <$> get <*> get
246− 3 -> TraceEvUnRegistered <$> get <*> get
249+ 3 -> MxUnRegistered <$> get <*> get
247− 4 -> TraceEvDied <$> get <*> get
250+ 4 -> MxProcessDied <$> get <*> get
248− 5 -> TraceEvNodeDied <$> get <*> get
251+ 5 -> MxNodeDied <$> get <*> get
249− 6 -> TraceEvSent <$> get <*> get <*> get
252+ 6 -> MxSent <$> get <*> get <*> get
250− 7 -> TraceEvReceived <$> get <*> get
253+ 7 -> MxReceived <$> get <*> get
251− 8 -> TraceEvConnected <$> get
254+ 8 -> MxConnected <$> get <*> get
252− 9 -> TraceEvDisconnected <$> get
255+ 9 -> MxDisconnected <$> get <*> get
253− 10 -> TraceEvUser <$> get
256+ 10 -> MxUser <$> get
254− 11 -> TraceEvLog <$> get
257+ 11 -> MxLog <$> get
255− 12 -> TraceEvTakeover <$> get
258+ 12 -> MxTraceTakeover <$> get
256− 13 -> return TraceEvDisable
259+ 13 -> return MxTraceDisable
257− _ -> error "TraceEvent.get - invalid header"
260+ _ -> error "MxEvent.get - invalid header"
259instance Binary TraceSubject where
262instance Binary TraceSubject where
260 put TraceAll = putWord8 1
263 put TraceAll = putWord8 1