<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>GearBox Project</title> <link rel="icon" href="gbx_icon_cardbox_sky.png" type="image/png"> <link rel="shortcut icon" href="gbx_icon_cardbox_sky.png" type="image/png"> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> <!-- Google Analytics --> <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> var pageTracker = _gat._getTracker("UA-3583782-1"); pageTracker._initData(); pageTracker._trackPageview(); </script> <!-- Returning you to your regular programming --> </head><body> <!-- Header --> <table border="0" cellspacing="0" cellpadding="0"> <tr><!-- create row --> <!-- spacer cell --> <!-- #CC CC CC --> <td rowspan="1" colspan="1" bgcolor="#EEEEEE"> </td> <!-- menu cell --> <td width="170" rowspan="1" colspan="1" align="left" valign="top" bgcolor="#EEEEEE"> <p> </p> <p align="center"><a href="index.html"><img src="gbx_logo_cardbox_sky_150x150.png"></a></p><br> <strong>INTRODUCTION</strong><br> <strong><a href="gbx_doc_overview.html" style="text-decoration:none">Overview</a></strong><br> <strong><a href="gbx_doc_getting.html" style="text-decoration:none">Download and Install</a></strong><br> <!-- <strong><a href="gbx_doc_quickstart.html" style="text-decoration:none">Quick Start</a></strong><br> --> <strong><a href="gbx_doc_documentation.html" style="text-decoration:none">Documentation</a></strong><br> <strong><a href="gbx_doc_publications.html" style="text-decoration:none">Publications</a></strong><br> <br> <strong>REPOSITORY</strong><br> <strong><a href="group__gbx__libs.html" style="text-decoration:none">Libraries</a></strong><br> <!-- <strong><a href="group__gbx__utils.html" style="text-decoration:none">Utilities</a></strong><br> --> <br> <strong>DEVELOPER</strong><br> <!--<strong><a href="gbx_doc_tutorials.html" style="text-decoration:none">Tutorials</a></strong><br> <strong><a href="group__gbx__examples.html" style="text-decoration:none">Examples</a></strong><br>--> <strong><a href="gbx_doc_devguide.html" style="text-decoration:none">Dev Guide</a></strong><br> <!-- <strong><a href="gbx_doc_faq.html" style="text-decoration:none">FAQ</a></strong><br> --> <strong><a href="http://cdash.acfr.usyd.edu.au/index.php?project=Gearbox" style="text-decoration:none">Dashboard</a></strong><br> <!--<strong><a href="http://wiki2.cas.edu.au/orca">Wiki</a></strong><br> login/pass: orca/orca<br>--> <br> <strong>PEOPLE</strong><br> <strong><a href="gbx_doc_contributors.html" style="text-decoration:none">Contributors</a></strong><br> <strong><a href="gbx_doc_users.html" style="text-decoration:none">Users</a></strong><br> <br> <a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=216468&type=2" width="125" height="37" border="0" alt="SourceForge.net Logo" /></a><br> <strong><a href="http://sourceforge.net/projects/gearbox">Project</a></strong><br> <strong><a href="http://sourceforge.net/project/showfiles.php?group_id=216468">Download</a></strong><br> <!--<strong><a href="http://sourceforge.net/tracker/?group_id=216468">Bugs/Feedback</a></strong><br>--> <strong><a href="http://sourceforge.net/mail/?group_id=216468">Mailing lists</a></strong></p> <p> </p> </td><!-- /menu cell --> <!-- one grey spacer cells --> <td rowspan="1" colspan="1" bgcolor="#EEEEEE"> </td> <!-- one white spacer cells --> <td rowspan="1" colspan="1"> </td> <!-- main content cell --> <td rowspan="1" colspan="1" align="left" valign="top"> <!-- Generated by Doxygen 1.6.2-20100208 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> <li><a href="dirs.html"><span>Directories</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="annotated.html"><span>Class List</span></a></li> <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> <div class="navpath"><a class="el" href="namespacegbxutilacfr.html">gbxutilacfr</a>::<a class="el" href="classgbxutilacfr_1_1Status.html">Status</a> </div> </div> <div class="contents"> <h1>gbxutilacfr::Status Class Reference</h1><!-- doxytag: class="gbxutilacfr::Status" --> <p>Local interface to component status. <a href="#_details">More...</a></p> <p><code>#include <<a class="el" href="status_8h_source.html">status.h</a>></code></p> <p>Inherited by <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html">gbxutilacfr::TrivialStatus</a>.</p> <p><a href="classgbxutilacfr_1_1Status-members.html">List of all members.</a></p> <table border="0" cellpadding="0" cellspacing="0"> <tr><td colspan="2"><h2>Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#a1f708c8e4a5dc7678aa3cbc8ccb2c089">addSubsystem</a> (const std::string &subsystem, double maxHeartbeatIntervalSec=-1.0, <a class="el" href="namespacegbxutilacfr.html#a83955362590d05dc433ff5ba377a704b">SubsystemType</a> type=SubsystemStandard)=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#a548f87215c41609b329408fb47e064e3">removeSubsystem</a> (const std::string &subsystem)=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cb2d340b81b99e4d6153f9dd0164806"></a><!-- doxytag: member="gbxutilacfr::Status::subsystems" ref="a2cb2d340b81b99e4d6153f9dd0164806" args="()=0" --> virtual std::vector< std::string > </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#a2cb2d340b81b99e4d6153f9dd0164806">subsystems</a> ()=0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Returns a list of subsystem names. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="structgbxutilacfr_1_1SubsystemStatus.html">SubsystemStatus</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#a14db6c5b67e09db0e9065aa28f18ff21">subsystemStatus</a> (const std::string &subsystem)=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4c879ad08b236c28b1572340678b7bd"></a><!-- doxytag: member="gbxutilacfr::Status::infrastructureState" ref="ab4c879ad08b236c28b1572340678b7bd" args="()=0" --> virtual <a class="el" href="namespacegbxutilacfr.html#ac09bf420d1b5cd55c617623abbc4587a">SubsystemState</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#ab4c879ad08b236c28b1572340678b7bd">infrastructureState</a> ()=0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Returns state of the component infrastructure. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#a1b1ff1a1206ff6d8f336a52b40e20a81">setMaxHeartbeatInterval</a> (const std::string &subsystem, double intervalSec)=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c09d654350aa21fa9a7cd082927ecb9"></a><!-- doxytag: member="gbxutilacfr::Status::setSubsystemType" ref="a6c09d654350aa21fa9a7cd082927ecb9" args="(const std::string &subsystem, SubsystemType type)=0" --> virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#a6c09d654350aa21fa9a7cd082927ecb9">setSubsystemType</a> (const std::string &subsystem, <a class="el" href="namespacegbxutilacfr.html#a83955362590d05dc433ff5ba377a704b">SubsystemType</a> type)=0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Sets the subsystem type which describes the expected behavior of the subsystem. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#afce01428dd3f25b59e4864c72774e760">setSubsystemStatus</a> (const std::string &subsystem, <a class="el" href="namespacegbxutilacfr.html#ac09bf420d1b5cd55c617623abbc4587a">SubsystemState</a> state, <a class="el" href="namespacegbxutilacfr.html#a0571161a2ff12c42ebcf2179f88c8a7b">SubsystemHealth</a> health, const std::string &message="")=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#aac485fed7c0dfa6601140495b5be4e80">initialising</a> (const std::string &subsystem, const std::string &message="")=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#a884035256364070f948689576fa6c5a5">working</a> (const std::string &subsystem, const std::string &message="")=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#a48d816e2189a76049565505fa4a1951b">finalising</a> (const std::string &subsystem, const std::string &message="")=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#af5c36a594c2edaa044837656ec0ac8c6">ok</a> (const std::string &subsystem, const std::string &message="")=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#a9a5b84a1cca2bab77df26d8d539ed0ee">warning</a> (const std::string &subsystem, const std::string &message)=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#adc4866108a8cf874bd22992a890ae566">fault</a> (const std::string &subsystem, const std::string &message)=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#ac8b5c54748f01fa8335280288aef531f">heartbeat</a> (const std::string &subsystem)=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#ad5b71c356d338e7d3e540aab5221a75d">message</a> (const std::string &subsystem, const std::string &message)=0</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af7693d5fd5ac5cb760564a8e443d6a94"></a><!-- doxytag: member="gbxutilacfr::Status::infrastructureInitialising" ref="af7693d5fd5ac5cb760564a8e443d6a94" args="()=0" --> virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#af7693d5fd5ac5cb760564a8e443d6a94">infrastructureInitialising</a> ()=0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Sets state of component infrastructure to Initialising. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18e5eb3a217ba8e5128d3d7de16e76f5"></a><!-- doxytag: member="gbxutilacfr::Status::infrastructureWorking" ref="a18e5eb3a217ba8e5128d3d7de16e76f5" args="()=0" --> virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#a18e5eb3a217ba8e5128d3d7de16e76f5">infrastructureWorking</a> ()=0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Sets state of component infrastructure to Working. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4314483906965a168c24101518662ee4"></a><!-- doxytag: member="gbxutilacfr::Status::infrastructureFinalising" ref="a4314483906965a168c24101518662ee4" args="()=0" --> virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#a4314483906965a168c24101518662ee4">infrastructureFinalising</a> ()=0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Sets state of component infrastructure to Finalising. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classgbxutilacfr_1_1Status.html#aae4fe09753ae295fb0d9493f1316a51b">process</a> ()=0</td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <p>Local interface to component status. </p> <dl class="user"><dt><b>Overview</b></dt><dd></dd></dl> <p><a class="el" href="classgbxutilacfr_1_1Status.html" title="Local interface to component status.">Status</a> provides a machine-readable interface such that tools external to the component can monitor its status. A single <a class="el" href="classgbxutilacfr_1_1Status.html" title="Local interface to component status.">Status</a> object is meant to be shared by all threads in the library, so the implementation must be thread-safe. The idea is that <a class="el" href="classgbxutilacfr_1_1Status.html" title="Local interface to component status.">Status</a> tracks the state of a number of subsystems (most often one per thread).</p> <p>Each subsystem should first call <a class="el" href="classgbxutilacfr_1_1Status.html#a1f708c8e4a5dc7678aa3cbc8ccb2c089">addSubsystem()</a>, to make the <a class="el" href="classgbxutilacfr_1_1Status.html" title="Local interface to component status.">Status</a> engine aware that it exists. If any other function is called before the subsystem is added, a <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">gbxutilacfr::Exception</a> is thrown.</p> <p>The default initial status of a subsystem is <code>Idle</code> with health <code>OK</code>.</p> <p>After registering a subsystem, a subsystem can report its state and health. Each of the calls is sufficient to let the <a class="el" href="classgbxutilacfr_1_1Status.html" title="Local interface to component status.">Status</a> engine know that the subsystem is alive. The special call <a class="el" href="classgbxutilacfr_1_1Status.html#ac8b5c54748f01fa8335280288aef531f">heartbeat()</a> lets <a class="el" href="classgbxutilacfr_1_1Status.html" title="Local interface to component status.">Status</a> know that the subsystem is alive without modifying its status.</p> <p>The 'maxHeartbeatIntervalSec' parameter tells the <a class="el" href="classgbxutilacfr_1_1Status.html" title="Local interface to component status.">Status</a> engine how often it should expect to hear from the subsystem. If no message is received from a subsystem for longer than <code>maxHeartbeatIntervalSec</code>, it is assumed that the subsystem has stalled (hung).</p> <dl class="user"><dt><b>State Machine</b></dt><dd></dd></dl> <p>The state machine of a subsystem is a chain of state transitions with one extra link: </p> <div class="fragment"><pre class="fragment"> Idle --> Initialising --> Working --> Finalising --> Shutdown |___________________________^ </pre></div><p> The following represents the Subsystem state machine in the format of State Machine Compiler (see smc.sf.net) : </p> <div class="fragment"><pre class="fragment"> Idle Entry { init(); } { init Initialising {} } Initialising Entry { initialise(); } { [ !isStopping ] finished Working {} [ isStopping ] finished Finalising {} } Working Entry { work(); } { finished Finalising {} } Finalising Entry { finalise(); } { finished Shutdown {} } Shutdown { } </pre></div><dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="classgbxutilacfr_1_1Tracer.html" title="Local and remote tracing.">Tracer</a> </dd> <dd> <a class="el" href="classgbxutilacfr_1_1SubStatus.html" title="Convenience class which maniupulates the status of a subsystem.">SubStatus</a> </dd></dl> <hr/><h2>Member Function Documentation</h2> <a class="anchor" id="a1f708c8e4a5dc7678aa3cbc8ccb2c089"></a><!-- doxytag: member="gbxutilacfr::Status::addSubsystem" ref="a1f708c8e4a5dc7678aa3cbc8ccb2c089" args="(const std::string &subsystem, double maxHeartbeatIntervalSec=-1.0, SubsystemType type=SubsystemStandard)=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::addSubsystem </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double </td> <td class="paramname"> <em>maxHeartbeatIntervalSec</em> = <code>-1.0</code>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="namespacegbxutilacfr.html#a83955362590d05dc433ff5ba377a704b">SubsystemType</a> </td> <td class="paramname"> <em>type</em> = <code>SubsystemStandard</code></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Adds a new subsystem to the system status descriptor. This command must be called before actually modifying the subsystem status, i.e. all other status commands will raise an exception if a subsystem with that name does not already exists.</p> <p>An <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> is also raised when trying to add a subsystem with an existing name.</p> <p>It is possible to specify the maximum expected interval between heartbeats. See <a class="el" href="classgbxutilacfr_1_1Status.html#a1b1ff1a1206ff6d8f336a52b40e20a81">setMaxHeartbeatInterval()</a> for details.</p> <p>It is also possible to describe the expected behavior of the subsystem by specifying SubsystemType. See <a class="el" href="classgbxutilacfr_1_1Status.html#a6c09d654350aa21fa9a7cd082927ecb9" title="Sets the subsystem type which describes the expected behavior of the subsystem.">setSubsystemType()</a> for details.</p> <p>The initial status of the new subsystem is the same as produced by the empty constructor of <a class="el" href="structgbxutilacfr_1_1SubsystemStatus.html" title="Status for a single subsystem.">SubsystemStatus</a>. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#abe8b8746c3501f9ccfc7bca6e18d827f">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="adc4866108a8cf874bd22992a890ae566"></a><!-- doxytag: member="gbxutilacfr::Status::fault" ref="adc4866108a8cf874bd22992a890ae566" args="(const std::string &subsystem, const std::string &message)=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::fault </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>message</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Sets subsystem health to Fault. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> if the subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#a78e60a644303b88decb62a572ae6347d">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="a48d816e2189a76049565505fa4a1951b"></a><!-- doxytag: member="gbxutilacfr::Status::finalising" ref="a48d816e2189a76049565505fa4a1951b" args="(const std::string &subsystem, const std::string &message="")=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::finalising </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>message</em> = <code>""</code></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Sets state of the subsystem to Finalising. The old message is cleared if a new one is not supplied. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> if the subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#ac10944d5e25ad92fda77f760d3634e8c">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="ac8b5c54748f01fa8335280288aef531f"></a><!-- doxytag: member="gbxutilacfr::Status::heartbeat" ref="ac8b5c54748f01fa8335280288aef531f" args="(const std::string &subsystem)=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::heartbeat </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em></td> <td> ) </td> <td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Record heartbeat from a subsystem: let <a class="el" href="classgbxutilacfr_1_1Status.html" title="Local interface to component status.">Status</a> know the subsystem is alive without modifying its status. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> if the subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#aec41b1a88b529dd85cddcf948a0051c9">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="aac485fed7c0dfa6601140495b5be4e80"></a><!-- doxytag: member="gbxutilacfr::Status::initialising" ref="aac485fed7c0dfa6601140495b5be4e80" args="(const std::string &subsystem, const std::string &message="")=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::initialising </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>message</em> = <code>""</code></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Sets state of the subsystem to Initialising. The old message is cleared if a new one is not supplied. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> if the subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#a2f6d7fbb93262dbbb941f96050ea5a8f">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="ad5b71c356d338e7d3e540aab5221a75d"></a><!-- doxytag: member="gbxutilacfr::Status::message" ref="ad5b71c356d338e7d3e540aab5221a75d" args="(const std::string &subsystem, const std::string &message)=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::message </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>message</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Change the human-readable message for a subsystem but keep the previous state and health information. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> if the subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#aaaddd4a06d83adb543971752e6962cac">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="af5c36a594c2edaa044837656ec0ac8c6"></a><!-- doxytag: member="gbxutilacfr::Status::ok" ref="af5c36a594c2edaa044837656ec0ac8c6" args="(const std::string &subsystem, const std::string &message="")=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::ok </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>message</em> = <code>""</code></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Sets subsystem health to Ok. The old message is cleared if a new one is not supplied. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> if the subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#a6748d13b335bee6312633f3b7a1c28b5">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="aae4fe09753ae295fb0d9493f1316a51b"></a><!-- doxytag: member="gbxutilacfr::Status::process" ref="aae4fe09753ae295fb0d9493f1316a51b" args="()=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::process </td> <td>(</td> <td class="paramname"></td> <td> ) </td> <td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>This function must be called periodically in order for status publishing to happen and stalled susbsystems identified. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#a815e879294b6e6b3cfdf424487e6afcc">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="a548f87215c41609b329408fb47e064e3"></a><!-- doxytag: member="gbxutilacfr::Status::removeSubsystem" ref="a548f87215c41609b329408fb47e064e3" args="(const std::string &subsystem)=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::removeSubsystem </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em></td> <td> ) </td> <td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Removes a subsystem from the status descriptor. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> if the subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#ad76e6ec9ebe22eb1276b8514d7646c40">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="a1b1ff1a1206ff6d8f336a52b40e20a81"></a><!-- doxytag: member="gbxutilacfr::Status::setMaxHeartbeatInterval" ref="a1b1ff1a1206ff6d8f336a52b40e20a81" args="(const std::string &subsystem, double intervalSec)=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::setMaxHeartbeatInterval </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double </td> <td class="paramname"> <em>intervalSec</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Sets the maximum expected interval between heartbeats (in seconds). When time since the last heartbeat exceeds the specified value, the subsystem is considered stalled. Negative interval means infinite interval. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> if the subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#ac44c93f3419bcc334d1b5f52a6aa2d47">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="afce01428dd3f25b59e4864c72774e760"></a><!-- doxytag: member="gbxutilacfr::Status::setSubsystemStatus" ref="afce01428dd3f25b59e4864c72774e760" args="(const std::string &subsystem, SubsystemState state, SubsystemHealth health, const std::string &message="")=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::setSubsystemStatus </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="namespacegbxutilacfr.html#ac09bf420d1b5cd55c617623abbc4587a">SubsystemState</a> </td> <td class="paramname"> <em>state</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="namespacegbxutilacfr.html#a0571161a2ff12c42ebcf2179f88c8a7b">SubsystemHealth</a> </td> <td class="paramname"> <em>health</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>message</em> = <code>""</code></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Sets the status of a subsystem (both state and health) in an atomic operation. Use this method when both state and health have changed. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> if the subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#ade2a6797c8dceeed49811f544f8821a1">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="a14db6c5b67e09db0e9065aa28f18ff21"></a><!-- doxytag: member="gbxutilacfr::Status::subsystemStatus" ref="a14db6c5b67e09db0e9065aa28f18ff21" args="(const std::string &subsystem)=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual <a class="el" href="structgbxutilacfr_1_1SubsystemStatus.html">SubsystemStatus</a> gbxutilacfr::Status::subsystemStatus </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em></td> <td> ) </td> <td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Returns status of the subsystem with the given name. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> when the specified subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#ab07187abe677a3dfbf0c429dd9cc95ce">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="a9a5b84a1cca2bab77df26d8d539ed0ee"></a><!-- doxytag: member="gbxutilacfr::Status::warning" ref="a9a5b84a1cca2bab77df26d8d539ed0ee" args="(const std::string &subsystem, const std::string &message)=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::warning </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>message</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Sets subsystem health to Warning. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> if the subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#ab220a9166c3a3bd1cd4df31e491e4136">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <a class="anchor" id="a884035256364070f948689576fa6c5a5"></a><!-- doxytag: member="gbxutilacfr::Status::working" ref="a884035256364070f948689576fa6c5a5" args="(const std::string &subsystem, const std::string &message="")=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void gbxutilacfr::Status::working </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>subsystem</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const std::string & </td> <td class="paramname"> <em>message</em> = <code>""</code></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Sets state of the subsystem to Working. The old message is cleared if a new one is not supplied. Throws <a class="el" href="classgbxutilacfr_1_1Exception.html" title="Base class for all GbxUtilAcfr exceptions.">Exception</a> if the subsystem does not exist. </p> <p>Implemented in <a class="el" href="classgbxutilacfr_1_1TrivialStatus.html#a75eb599945a6ad0dde46d08bfb99337d">gbxutilacfr::TrivialStatus</a>.</p> </div> </div> <hr/>The documentation for this class was generated from the following file:<ul> <li><a class="el" href="status_8h_source.html">status.h</a></li> </ul> </div> </td> <td colspan="1"> </td> </tr> </table> <!-- end of table --> <hr size="1"><address style="align: right;"><small>Generated for GearBox by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.5 </small></address> </body> </html>