From 88b530ea24977081020feb2123124063e58dfc12 Mon Sep 17 00:00:00 2001
From: Steve Vinoski
Date: Fri, 27 Nov 2009 12:37:13 -0500
Subject: Teach sys:get_status/1,2 to call Mod:format_status/2
Restore the ability for gen_server and gen_fsm callback
modules to format their own state for display under the
sys:get_status/1,2 calls.
This ability is extremely useful for new behavior modules
based on gen_server or gen_fsm, so that they can display
their status in a more meaningful way than just dumping
the state record. It is also generally useful for applications
wanting to display their gen_server or gen_fsm callback module
state in something other than the default manner.
Also document the previously undocumented the
gen_server:format_status/2 and gen_fsm:format_status/2 optional
callback functions that, if exported by the callback module, are
invoked when sys:get_status/1,2 are called.
Add unit tests to ensure that format_status/2 functions exported
from a gen_fsm callback module and a gen_server callback module
are called when sys:get_status/1,2 are called.
---
lib/stdlib/doc/src/gen_fsm.xml | 30 ++++++++++++++++++++++++++++++
lib/stdlib/doc/src/gen_server.xml | 29 +++++++++++++++++++++++++++++
lib/stdlib/doc/src/sys.xml | 11 +++++++++++
3 files changed, 70 insertions(+)
(limited to 'lib/stdlib/doc/src')
diff --git a/lib/stdlib/doc/src/gen_fsm.xml b/lib/stdlib/doc/src/gen_fsm.xml
index f5d8b9bb48..739cd0bffd 100644
--- a/lib/stdlib/doc/src/gen_fsm.xml
+++ b/lib/stdlib/doc/src/gen_fsm.xml
@@ -729,6 +729,36 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
updated internal data.
+
+ Module:format_status(normal, [PDict, StateData]) -> Status
+ Optional function for providing a term describing the
+ current gen_fsm status.
+
+ PDict = [{Key, Value}]
+ StateData = term()
+ Status = [term()]
+
+
+ This callback is optional, so callback modules need not
+ export it. The gen_fsm module provides a default
+ implementation of this function that returns the callback
+ module state data.
+ This function is called by a gen_fsm process when one
+ of sys:get_status/1,2
+ is invoked to get the gen_fsm status. A callback module
+ wishing to customise the sys:get_status/1,2 return
+ value exports an instance of format_status/2 that
+ returns a term describing the current status of the
+ gen_fsm.
+ PDict is the current value of the gen_fsm's
+ process dictionary.
+ StateData is the internal state data of the
+ gen_fsm.
+ The function should return Status, a list of one or
+ more terms that customise the details of the current state
+ and status of the gen_fsm.
+
+
diff --git a/lib/stdlib/doc/src/gen_server.xml b/lib/stdlib/doc/src/gen_server.xml
index 8496802259..30c04d1d52 100644
--- a/lib/stdlib/doc/src/gen_server.xml
+++ b/lib/stdlib/doc/src/gen_server.xml
@@ -598,6 +598,35 @@ gen_server:abcast -----> Module:handle_cast/2
The function should return the updated internal state.
+
+ Module:format_status(normal, [PDict, State]) -> Status
+ Optional function for providing a term describing the
+ current gen_server status.
+
+ PDict = [{Key, Value}]
+ State = term()
+ Status = [term()]
+
+
+ This callback is optional, so callback modules need not
+ export it. The gen_server module provides a default
+ implementation of this function that returns the callback
+ module state.
+ This function is called by a gen_server process when one
+ of sys:get_status/1,2
+ is invoked to get the gen_server status. A callback module
+ wishing to customise the sys:get_status/1,2 return
+ value exports an instance of format_status/2 that
+ returns a term describing the current status of the
+ gen_server.
+ PDict is the current value of the gen_server's
+ process dictionary.
+ State is the internal state of the gen_server.
+ The function should return Status, a list of one or
+ more terms that customise the details of the current state
+ and status of the gen_server.
+
+
diff --git a/lib/stdlib/doc/src/sys.xml b/lib/stdlib/doc/src/sys.xml
index a395a8a415..51fd5ee8d4 100644
--- a/lib/stdlib/doc/src/sys.xml
+++ b/lib/stdlib/doc/src/sys.xml
@@ -237,6 +237,17 @@
Gets the status of the process.
+ The value of Misc varies for different types of
+ processes. For example, a gen_server process returns
+ the callback module's state, and a gen_fsm process
+ returns information such as its current state name. Callback
+ modules for gen_server and gen_fsm can also
+ customise the value of Misc by exporting
+ a format_status/2 function that contributes
+ module-specific information;
+ see gen_server:format_status/2
+ and gen_fsm:format_status/2
+ for more details.
--
cgit v1.2.3