@@ -1,7 +1,7 @@
11-- | Tracing/Debugging support - Types
22module Control.Distributed.Process.Internal.Trace.Types
33 ( MxEventBus(..)
4− , TraceEvent(..)
4+ , MxEvent(..)
55 , SetTrace(..)
66 , Addressable(..)
77 , TraceSubject(..)
@@ -47,6 +47,7 @@ import Data.Typeable
4747import System.Mem.Weak (deRefWeak)
4848import Network.Transport
4949 ( ConnectionId
50+ , EndPointAddress
5051 )
5152
5253--------------------------------------------------------------------------------
@@ -56,47 +57,49 @@ import Network.Transport
5657data SetTrace = TraceEnable !ProcessId | TraceDisable
5758 deriving (Typeable, Eq, Show)
5859
60+-- TODO: MOVE the whole Trace namespace into C.D.Process.Management
61+
5962-- | An event that is fired when something /interesting/ happens.
6063-- Trace events are forwarded to a trace listener process, of which
6164-- at most one can be registered per-node.
62−data TraceEvent =
63− TraceEvSpawned ProcessId
65+data MxEvent =
66+ MxSpawned ProcessId
6467 -- ^ fired whenever a local process is spawned
65− | TraceEvRegistered ProcessId String
68+ | MxRegistered ProcessId String
6669 -- ^ fired whenever a process/name is registered (locally)
67− | TraceEvUnRegistered ProcessId String
70+ | MxUnRegistered ProcessId String
6871 -- ^ fired whenever a process/name is unregistered (locally)
69− | TraceEvDied ProcessId DiedReason
72+ | MxProcessDied ProcessId DiedReason
7073 -- ^ fired whenever a process dies
71− | TraceEvNodeDied NodeId DiedReason
74+ | MxNodeDied NodeId DiedReason
7275 -- ^ fired whenever a node /dies/ (i.e., the connection is broken/disconnected)
73− | TraceEvSent ProcessId ProcessId Message
76+ | MxSent ProcessId ProcessId Message
7477 -- ^ fired whenever a message is sent from a local process
75− | TraceEvReceived ProcessId Message
78+ | MxReceived ProcessId Message
7679 -- ^ fired whenever a message is received by a local process
77− | TraceEvConnected ConnectionId
80+ | MxConnected ConnectionId EndPointAddress
7881 -- ^ fired when a network-transport connection is first established
79− | TraceEvDisconnected ConnectionId
82+ | MxDisconnected ConnectionId EndPointAddress
8083 -- ^ fired when a network-transport connection is broken/disconnected
81− | TraceEvUser Message
84+ | MxUser Message
8285 -- ^ a user defined trace event (see 'traceMessage')
83− | TraceEvLog String
86+ | MxLog String
8487 -- ^ a /logging/ event - used for debugging purposes only
85− | TraceEvTakeover ProcessId
88+ | MxTraceTakeover ProcessId
8689 -- ^ notifies a trace listener that all subsequent traces will be sent to /pid/
87− | TraceEvDisable
90+ | MxTraceDisable
8891 -- ^ notifies a trace listener that it has been disabled/removed
8992 deriving (Typeable, Show)
9093
9194class Addressable a where
9295 resolveToPid :: a -> Maybe ProcessId
9396
94−instance Addressable TraceEvent where
95− resolveToPid (TraceEvSpawned p) = Just p
96− resolveToPid (TraceEvDied p _) = Just p
97− resolveToPid (TraceEvSent _ p _) = Just p
98− resolveToPid (TraceEvReceived p _) = Just p
99− resolveToPid _ = Nothing
97+instance Addressable MxEvent where
98+ resolveToPid (MxSpawned p) = Just p
99+ resolveToPid (MxProcessDied p _) = Just p
100+ resolveToPid (MxSent _ p _) = Just p
101+ resolveToPid (MxReceived p _) = Just p
102+ resolveToPid _ = Nothing
100103
101104-- | Defines which processes will be traced by a given 'TraceFlag',
102105-- either by name, or @ProcessId@. Choosing @TraceAll@ is /by far/
@@ -149,7 +152,7 @@ data TraceOk = TraceOk
149152--------------------------------------------------------------------------------
150153
151154traceLog :: MxEventBus -> String -> IO ()
152−traceLog tr s = publishEvent tr (unsafeCreateUnencodedMessage $ TraceEvLog s)
155+traceLog tr s = publishEvent tr (unsafeCreateUnencodedMessage $ MxLog s)
153156
154157traceLogFmt :: MxEventBus
155158 -> String
@@ -161,11 +164,11 @@ traceLogFmt t d ls =
161164 toS (TraceStr s) = s
162165 toS (Trace a) = show a
163166
164−traceEvent :: MxEventBus -> TraceEvent -> IO ()
167+traceEvent :: MxEventBus -> MxEvent -> IO ()
165168traceEvent tr ev = publishEvent tr (unsafeCreateUnencodedMessage ev)
166169
167170traceMessage :: Serializable m => MxEventBus -> m -> IO ()
168−traceMessage tr msg = traceEvent tr (TraceEvUser (unsafeCreateUnencodedMessage msg))
171+traceMessage tr msg = traceEvent tr (MxUser (unsafeCreateUnencodedMessage msg))
169172
170173enableTrace :: MxEventBus -> ProcessId -> IO ()
171174enableTrace t p =
@@ -223,38 +226,38 @@ instance Binary SetTrace where
223226 2 -> return TraceDisable
224227 _ -> error "SetTrace.get - invalid header"
225228
226−instance Binary TraceEvent where
227− put (TraceEvSpawned pid) = putWord8 1 >> put pid
228− put (TraceEvRegistered pid str) = putWord8 2 >> put pid >> put str
229− put (TraceEvUnRegistered pid str) = putWord8 3 >> put pid >> put str
230− put (TraceEvDied pid res) = putWord8 4 >> put pid >> put res
231− put (TraceEvNodeDied nid res) = putWord8 5 >> put nid >> put res
232− put (TraceEvSent to from msg) = putWord8 6 >> put to >> put from >> put msg
233− put (TraceEvReceived pid msg) = putWord8 7 >> put pid >> put msg
234− put (TraceEvConnected cid) = putWord8 8 >> put cid
235− put (TraceEvDisconnected cid) = putWord8 9 >> put cid
236− put (TraceEvUser msg) = putWord8 10 >> put msg
237− put (TraceEvLog msg) = putWord8 11 >> put msg
238− put (TraceEvTakeover pid) = putWord8 12 >> put pid
239− put TraceEvDisable = putWord8 13
229+instance Binary MxEvent where
230+ put (MxSpawned pid) = putWord8 1 >> put pid
231+ put (MxRegistered pid str) = putWord8 2 >> put pid >> put str
232+ put (MxUnRegistered pid str) = putWord8 3 >> put pid >> put str
233+ put (MxProcessDied pid res) = putWord8 4 >> put pid >> put res
234+ put (MxNodeDied nid res) = putWord8 5 >> put nid >> put res
235+ put (MxSent to from msg) = putWord8 6 >> put to >> put from >> put msg
236+ put (MxReceived pid msg) = putWord8 7 >> put pid >> put msg
237+ put (MxConnected cid epid) = putWord8 8 >> put cid >> put epid
238+ put (MxDisconnected cid epid) = putWord8 9 >> put cid >> put epid
239+ put (MxUser msg) = putWord8 10 >> put msg
240+ put (MxLog msg) = putWord8 11 >> put msg
241+ put (MxTraceTakeover pid) = putWord8 12 >> put pid
242+ put MxTraceDisable = putWord8 13
240243
241244 get = do
242245 header <- getWord8
243246 case header of
244− 1 -> TraceEvSpawned <$> get
245− 2 -> TraceEvRegistered <$> get <*> get
246− 3 -> TraceEvUnRegistered <$> get <*> get
247− 4 -> TraceEvDied <$> get <*> get
248− 5 -> TraceEvNodeDied <$> get <*> get
249− 6 -> TraceEvSent <$> get <*> get <*> get
250− 7 -> TraceEvReceived <$> get <*> get
251− 8 -> TraceEvConnected <$> get
252− 9 -> TraceEvDisconnected <$> get
253− 10 -> TraceEvUser <$> get
254− 11 -> TraceEvLog <$> get
255− 12 -> TraceEvTakeover <$> get
256− 13 -> return TraceEvDisable
257− _ -> error "TraceEvent.get - invalid header"
247+ 1 -> MxSpawned <$> get
248+ 2 -> MxRegistered <$> get <*> get
249+ 3 -> MxUnRegistered <$> get <*> get
250+ 4 -> MxProcessDied <$> get <*> get
251+ 5 -> MxNodeDied <$> get <*> get
252+ 6 -> MxSent <$> get <*> get <*> get
253+ 7 -> MxReceived <$> get <*> get
254+ 8 -> MxConnected <$> get <*> get
255+ 9 -> MxDisconnected <$> get <*> get
256+ 10 -> MxUser <$> get
257+ 11 -> MxLog <$> get
258+ 12 -> MxTraceTakeover <$> get
259+ 13 -> return MxTraceDisable
260+ _ -> error "MxEvent.get - invalid header"
258261
259262instance Binary TraceSubject where
260263 put TraceAll = putWord8 1