Line 15: | Line 15: | ||
|- | |- | ||
|<code><pre> | |<code><pre> | ||
− | + | int | |
− | + | main(int argc, Char *argv[]) | |
− | + | ||
− | + | ||
{ | { | ||
− | + | SaNameT appName = {0}; | |
− | + | SaAmfCallbacksT callbacks; | |
− | + | SaVersionT version; | |
− | + | clIocPortT iocPort; | |
− | + | SaAisErrorT rc = SA_AIS_OK; | |
+ | SaEvtChannelHandleT evtChannelHandle = 0 | ||
+ | |||
+ | SaSelectionObjectT dispatch_fd; | ||
+ | fd_set read_fds; | ||
+ | |||
/* | /* | ||
* ---BEGIN_APPLICATION_CODE--- | * ---BEGIN_APPLICATION_CODE--- | ||
*/ | */ | ||
− | + | ||
− | + | SaEvtCallbacksT evtCallbacks = { NULL, NULL }; | |
/* | /* | ||
Line 37: | Line 40: | ||
... | ... | ||
− | if ( (rc = | + | if ( (rc = saAmfInitialize(&amfHandle, &callbacks, &version)) != SA_AIS_OK) |
goto errorexit; | goto errorexit; | ||
Line 44: | Line 47: | ||
|} | |} | ||
− | In the <code> | + | In the <code>main</code> function of this example we again see a call to <code>saEvtInitialize</code>. Most everything else in the appInitialize function is the same as before in csa212, except that both callback function pointers are specified as <code>NULL</code>. This is because we neither open the event channel asynchronously, or subscribe to any events in this application. So there is no need to specify a callback to receive an event. |
{| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | {| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | ||
Line 50: | Line 53: | ||
|- | |- | ||
|<code><pre> | |<code><pre> | ||
− | + | int | |
− | + | main(int argc, Char *argv[]) | |
− | + | ||
− | + | ||
{ | { | ||
Line 59: | Line 60: | ||
// Open an event chanel so that we can subscribe to events on that channel | // Open an event chanel so that we can subscribe to events on that channel | ||
− | rc = | + | rc = saEvtChannelOpen(gTestInfo.evtInitHandle, |
− | + | &gTestInfo.evtChannelName, | |
− | + | (SA_EVT_CHANNEL_PUBLISHER | | |
− | + | SA_EVT_CHANNEL_CREATE), | |
− | + | (ClTimeT)SA_TIME_END, | |
− | + | &evtChannelHandle); | |
− | + | ||
</pre></code> | </pre></code> | ||
|} | |} | ||
− | Here we open the event channel. This is the same as in | + | Here we open the event channel. This is the same as in csa212 except that rather than opening as a SUBSCRIBER, we open as a <code>PUBLISHER</code> (by specifying <code>SA_EVT_CHANNEL_PUBLISHER</code> flag) |
{| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | {| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | ||
Line 75: | Line 75: | ||
|- | |- | ||
|<code><pre> | |<code><pre> | ||
− | + | int | |
− | + | main(int argc, Char *argv[]) | |
− | + | ||
− | + | ||
{ | { | ||
... | ... | ||
− | rc = | + | rc = saEvtEventAllocate(evtChannelHandle, &gTestInfo.eventHandle); |
− | if (rc != | + | if (rc != SA_AIS_OK) |
{ | { | ||
− | + | logrc(CL_LOG_LOG_ERROR, "Failed to allocate event [0x%x]", | |
rc); | rc); | ||
return rc; | return rc; | ||
} | } | ||
− | rc = | + | rc = saEvtEventAttributesSet(gTestInfo.eventHandle, |
− | + | NULL, | |
1, | 1, | ||
0, | 0, | ||
− | &publisherName); | + | &gTestInfo.publisherName); |
− | if (rc != | + | if (rc != SA_AIS_OK) |
{ | { | ||
− | + | logrc(CL_LOG_ERROR, "Failed to set event attributes [0x%x]", | |
rc); | rc); | ||
return rc; | return rc; | ||
Line 105: | Line 103: | ||
|} | |} | ||
− | The call to <code> | + | The call to <code>saEvtEventAllocate</code> allocates an event header. This header is identified by the event handle passed back to <code>gTestInfo.eventHandle</code>. The handle should be used any time the event header is to be used to manipulate the header, either by using <code>saEvtEventAttributesSet</code> (right below), or to send an event using the header as in <code>saEvtEventPublish</code>. The call to <code>saEvtEventAttributesSet</code> defines the <code>EVENT_TYPE</code> which is defined as 5432 in <code>common/common.h</code> and is used in the event subscriber. It also defines the priority to be 1 which is just below the highest priority of <code>CL_EVENT_HIGHEST_PRIORITY</code> which is defined as 0 where <code>CL_EVENT_LOWEST_PRIORITY</code> is defined as 3. The retention time is specified as 0 since we don't want the event to be kept around if there is no subscriber to pick it up. Finally the <code>publisherName</code> is specified because it's required. Our subscriber doesn't care who publishes the events it receives. |
{| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | {| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | ||
Line 111: | Line 109: | ||
|- | |- | ||
|<code><pre> | |<code><pre> | ||
− | + | int | |
− | + | main(int argc, Char *argv[]) | |
− | + | ||
− | + | ||
{ | { | ||
... | ... | ||
− | while (!exiting) | + | while (!gTestInfo.exiting) |
{ | { | ||
− | if (running && ha_state == CL_AMS_HA_STATE_ACTIVE) | + | if (gTestInfo.running && gTestInfo.ha_state == CL_AMS_HA_STATE_ACTIVE) |
{ | { | ||
− | + | csa213Comp_PublishEvent(); | |
} | } | ||
sleep(1); | sleep(1); | ||
Line 130: | Line 126: | ||
|} | |} | ||
− | Here is the main loop. As long as the application is running and active we make a call to <code> | + | Here is the main loop. As long as the application is running and active we make a call to <code>csa213Comp_PublishEvent</code>. The work of the application takes place in <code>csa213Comp_PublishEvent</code>, which is presented below. |
{| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | {| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | ||
Line 137: | Line 133: | ||
|<code><pre> | |<code><pre> | ||
static ClRcT | static ClRcT | ||
− | + | csa213Comp_PublishEvent() | |
{ | { | ||
− | + | SaAisErrorT rc = SA_AIS_OK; | |
ClEventIdT eventId = 0; | ClEventIdT eventId = 0; | ||
static int index = 0; | static int index = 0; | ||
− | + | SASizeT data_len = 0; | |
char *data = 0; | char *data = 0; | ||
typedef void (*Generator)(char **, ClSizeT*); | typedef void (*Generator)(char **, ClSizeT*); | ||
Line 166: | Line 162: | ||
if (data == 0 || data_len == 0) | if (data == 0 || data_len == 0) | ||
{ | { | ||
− | + | logmsg(CL_LOG_ERROR, "no event data generated"); | |
return CL_ERR_NO_MEMORY; | return CL_ERR_NO_MEMORY; | ||
} | } | ||
− | clprintf( | + | clprintf(CL_LOG_SEV_INFO,"Publishing Event: %.*s", (int)data_len, data); |
− | rc = | + | rc = saEvtEventPublish(gTestInfo.eventHandle, (void*)data, data_len, &eventId); |
clHeapFree(data); | clHeapFree(data); | ||
Line 178: | Line 174: | ||
|} | |} | ||
− | There's code to call one of a list of generator functions. The functions on the list, return a pointer and a length which are used to pass to <code> | + | There's code to call one of a list of generator functions. The functions on the list, return a pointer and a length which are used to pass to <code>saEvtEventPublish</code>. We pass the eventHandle prepared earlier with <code>saEvtEventAllocate</code> and <code>saEvtEventAttributesSet</code>. Pass the pointer and the length that we get back from the generator function. Those are used to package up the event data and send it to any subscribers. We also pass the address of the <code>eventId</code> local variable. This is required so that the <code>saEvtEventPublish</code> function can return the event ID. We don't need it, so we promptly drop it in the bit bucket. Finally, we free the data that was allocated in the generator function and passed back as we no longer need it. |
===csa213 SA Forum Compliant Event Publication=== | ===csa213 SA Forum Compliant Event Publication=== | ||
− | This sample application demonstrates the usage of SA Forum Event Service. As mentioned previously, this sample application does not deviate functionally with | + | This sample application demonstrates the usage of SA Forum Event Service. As mentioned previously, this sample application does not deviate functionally with csa213. The code differences are due to using SA Forum data types (structures) and APIs , as presented in the following two tables. (Note we have not repeated data types and APIs covered previously.) |
{| cellspacing="0" border="1" align="center" | {| cellspacing="0" border="1" align="center" | ||
Line 213: | Line 209: | ||
|} | |} | ||
− | ===How to Run | + | ===How to Run csa213 and What to Observe=== |
− | In | + | In csa213 you will be observing an event publishing application. This will be far more interesting if you observe an event subscription application at the same time. For this we will use the example from csa212. |
<ol> | <ol> | ||
− | <li>First you should start up | + | <li>First you should start up csa212 and put it in a LockAssignment state so that it can receive events. |
<code><pre> | <code><pre> | ||
# cd /root/asp/bin | # cd /root/asp/bin | ||
Line 225: | Line 221: | ||
cli[Test]-> setc 1 | cli[Test]-> setc 1 | ||
cli[Test:SCNodeI0]-> setc cpm | cli[Test:SCNodeI0]-> setc cpm | ||
− | cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg | + | cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg csa212SGI0 |
− | cli[Test:SCNodeI0:CPM]-> amsUnlock sg | + | cli[Test:SCNodeI0:CPM]-> amsUnlock sg csa212SGI0 |
</pre></code> | </pre></code> | ||
− | In the | + | In the csa212 application log you should see: |
{| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | {| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | ||
! style="color:black;background-color:#ffffaa;" align="center"| $ /root/asp/var/log/csa112CompI0Log.latest | ! style="color:black;background-color:#ffffaa;" align="center"| $ /root/asp/var/log/csa112CompI0Log.latest | ||
Line 258: | Line 254: | ||
</pre></code> | </pre></code> | ||
|} | |} | ||
− | [[File:OpenClovis_Note.png]]When running model csa212 you will | + | [[File:OpenClovis_Note.png]]When running model csa212 you will see the output described above for the the amsLockAssignment and amsUnlock commands. Unlock csa212SGI0 instead of csa112SGI0. |
− | <li>Now you can start up the event publishing application and put it in a LockAssignment state | + | <li>Now you can start up the event publishing application and put it in a LockAssignment state. |
<code><pre> | <code><pre> | ||
− | cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg | + | cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg csa213SGI0 |
− | cli[Test:SCNodeI0:CPM]-> amsUnlock sg | + | cli[Test:SCNodeI0:CPM]-> amsUnlock sg csa213SGI0 |
</pre></code> | </pre></code> | ||
− | Putting | + | Putting csa213 into a LockAssignment state caused it to begin publishing events. Using <code>tail -f /root/asp/var/log/csa213CompI0Log.latest</code> on the csa213 application log you can see the events being published. |
{| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | {| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | ||
! style="color:black;background-color:#ffffaa;" align="center"| $ /root/asp/var/log/csa113CompI0Log.latest | ! style="color:black;background-color:#ffffaa;" align="center"| $ /root/asp/var/log/csa113CompI0Log.latest | ||
Line 314: | Line 310: | ||
|} | |} | ||
− | Since the event subscriber application is also running you can see the events that it is receiving in the csa112 application log file. Again using <code>tail -f /rootasp//var/log/ | + | Since the event subscriber application is also running you can see the events that it is receiving in the csa112 application log file. Again using <code>tail -f /rootasp//var/log/csa212CompI0Log.latest</code> you can see the following: |
{| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | {| cellspacing="0" cellpadding = "0" border="0" align = "center" width="680" | ||
! style="color:black;background-color:#ffffaa;" align="center"| /root/asp/var/log/csa112CompI0Log.latest | ! style="color:black;background-color:#ffffaa;" align="center"| /root/asp/var/log/csa112CompI0Log.latest | ||
Line 340: | Line 336: | ||
<li>Now you can shut everything down in the usual manner. Note that you will be shutting down two service groups. | <li>Now you can shut everything down in the usual manner. Note that you will be shutting down two service groups. | ||
<code><pre> | <code><pre> | ||
− | cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg | + | cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg csa213SGI0 |
− | cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg | + | cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg csa212SGI0 |
− | cli[Test:SCNodeI0:CPM]-> amsLockInstantiation sg | + | cli[Test:SCNodeI0:CPM]-> amsLockInstantiation sg csa213SGI0 |
− | cli[Test:SCNodeI0:CPM]-> amsLockInstantiation sg | + | cli[Test:SCNodeI0:CPM]-> amsLockInstantiation sg csa212SGI0 |
cli[Test:SCNodeI0:CPM]-> end | cli[Test:SCNodeI0:CPM]-> end | ||
cli[Test:SCNodeI0]-> end | cli[Test:SCNodeI0]-> end | ||
Line 356: | Line 352: | ||
*events flow from the event publisher to the subscriber. | *events flow from the event publisher to the subscriber. | ||
*how to format events and send them through the event manager subsystem | *how to format events and send them through the event manager subsystem | ||
− | *For further reading, check the same sources as listed under the | + | *For further reading, check the same sources as listed under the csa212 section. |
Revision as of 06:54, 14 October 2010
Contents |
csa213 Event Publication
Objective
The objective is to learn how to write an event publishing application using Clovis' Event Manager API.
What You Will Learn
- You will learn how to publish events using Clovis' Event Manager API.
Code
clCompAppMain.c |
---|
|
In the main
function of this example we again see a call to saEvtInitialize
. Most everything else in the appInitialize function is the same as before in csa212, except that both callback function pointers are specified as NULL
. This is because we neither open the event channel asynchronously, or subscribe to any events in this application. So there is no need to specify a callback to receive an event.
clCompAppMain.c |
---|
|
Here we open the event channel. This is the same as in csa212 except that rather than opening as a SUBSCRIBER, we open as a PUBLISHER
(by specifying SA_EVT_CHANNEL_PUBLISHER
flag)
clCompAppMain.c |
---|
|
The call to saEvtEventAllocate
allocates an event header. This header is identified by the event handle passed back to gTestInfo.eventHandle
. The handle should be used any time the event header is to be used to manipulate the header, either by using saEvtEventAttributesSet
(right below), or to send an event using the header as in saEvtEventPublish
. The call to saEvtEventAttributesSet
defines the EVENT_TYPE
which is defined as 5432 in common/common.h
and is used in the event subscriber. It also defines the priority to be 1 which is just below the highest priority of CL_EVENT_HIGHEST_PRIORITY
which is defined as 0 where CL_EVENT_LOWEST_PRIORITY
is defined as 3. The retention time is specified as 0 since we don't want the event to be kept around if there is no subscriber to pick it up. Finally the publisherName
is specified because it's required. Our subscriber doesn't care who publishes the events it receives.
clCompAppMain.c |
---|
|
Here is the main loop. As long as the application is running and active we make a call to csa213Comp_PublishEvent
. The work of the application takes place in csa213Comp_PublishEvent
, which is presented below.
clCompAppMain.c |
---|
|
There's code to call one of a list of generator functions. The functions on the list, return a pointer and a length which are used to pass to saEvtEventPublish
. We pass the eventHandle prepared earlier with saEvtEventAllocate
and saEvtEventAttributesSet
. Pass the pointer and the length that we get back from the generator function. Those are used to package up the event data and send it to any subscribers. We also pass the address of the eventId
local variable. This is required so that the saEvtEventPublish
function can return the event ID. We don't need it, so we promptly drop it in the bit bucket. Finally, we free the data that was allocated in the generator function and passed back as we no longer need it.
csa213 SA Forum Compliant Event Publication
This sample application demonstrates the usage of SA Forum Event Service. As mentioned previously, this sample application does not deviate functionally with csa213. The code differences are due to using SA Forum data types (structures) and APIs , as presented in the following two tables. (Note we have not repeated data types and APIs covered previously.)
SA Forum Data Types | OpenClovis Data Types |
---|---|
SaEvtHandleT | ClEventHandleT |
SA Forum APIs | OpenClovis APIs |
---|---|
SaEvtEventAllocate | ClEventAllocate |
saEvtEventAttributesSet | clEventExtAttributesSet |
saEvtEventPublish | clEventPublish |
How to Run csa213 and What to Observe
In csa213 you will be observing an event publishing application. This will be far more interesting if you observe an event subscription application at the same time. For this we will use the example from csa212.
- First you should start up csa212 and put it in a LockAssignment state so that it can receive events.
# cd /root/asp/bin # ./asp_console cli[Test]-> setc 1 cli[Test:SCNodeI0]-> setc cpm cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg csa212SGI0 cli[Test:SCNodeI0:CPM]-> amsUnlock sg csa212SGI0
In the csa212 application log you should see:
$ /root/asp/var/log/csa112CompI0Log.latest Mon Jul 14 22:50:34 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00037 : INFO) csa112: Instantiated as component instance csa112CompI0. Mon Jul 14 22:50:34 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00038 : INFO) csa112CompI0: Waiting for CSI assignment... Mon Jul 14 22:51:20 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00041 : INFO) Component [csa112CompI0] : PID [24830]. CSI Set Received Mon Jul 14 22:51:20 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00042 : INFO) CSI Flags : [Add One] Mon Jul 14 22:51:20 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00043 : INFO) CSI Name : [csa112CSII0] Mon Jul 14 22:51:20 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00044 : INFO) Name Value Pairs : Mon Jul 14 22:51:20 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00045 : INFO) HA State : [Active] Mon Jul 14 22:51:20 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00046 : INFO) Active Descriptor : Mon Jul 14 22:51:20 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00047 : INFO) Transition Descriptor : [1] Mon Jul 14 22:51:20 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00048 : INFO) Active Component : [csa112CompI0] Mon Jul 14 22:51:20 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00049 : INFO) csa112: ACTIVE state requested; activating service
When running model csa212 you will see the output described above for the the amsLockAssignment and amsUnlock commands. Unlock csa212SGI0 instead of csa112SGI0.
- Now you can start up the event publishing application and put it in a LockAssignment state.
cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg csa213SGI0 cli[Test:SCNodeI0:CPM]-> amsUnlock sg csa213SGI0
Putting csa213 into a LockAssignment state caused it to begin publishing events. Using
tail -f /root/asp/var/log/csa213CompI0Log.latest
on the csa213 application log you can see the events being published.$ /root/asp/var/log/csa113CompI0Log.latest Mon Jul 14 22:53:54 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00028 : INFO) Component [csa113CompI0] : PID [24890]. Initializing Mon Jul 14 22:53:54 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00029 : INFO) IOC Address : 0x1 Mon Jul 14 22:53:54 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00030 : INFO) IOC Port : 0x81 Mon Jul 14 22:53:54 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00037 : INFO) Instantiated as component instance csa113CompI0. Mon Jul 14 22:53:54 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00038 : INFO) csa113CompI0: Waiting for CSI assignment... Mon Jul 14 22:53:59 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00041 : INFO) Component [csa113CompI0] : PID [24890]. CSI Set Received Mon Jul 14 22:53:59 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00042 : INFO) CSI Flags : [Add One] Mon Jul 14 22:53:59 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00043 : INFO) CSI Name : [csa113CSII0] Mon Jul 14 22:53:59 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00044 : INFO) Name Value Pairs : Mon Jul 14 22:53:59 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00045 : INFO) HA State : [Active] Mon Jul 14 22:53:59 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00046 : INFO) Active Descriptor : Mon Jul 14 22:53:59 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00047 : INFO) Transition Descriptor : [1] Mon Jul 14 22:53:59 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00048 : INFO) Active Component : [csa113CompI0] Mon Jul 14 22:53:59 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00049 : INFO) csa113: ACTIVE state requested; activating service Mon Jul 14 22:53:59 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00050 : NOTICE) Publishing Event: Mon Jul 14 22:53:59 2008 Mon Jul 14 22:54:00 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00052 : NOTICE) Publishing Event: 0.05 0.07 0.03 Mon Jul 14 22:54:01 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00054 : NOTICE) Publishing Event: Mon Jul 14 22:54:01 2008 Mon Jul 14 22:54:02 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00056 : NOTICE) Publishing Event: 0.05 0.07 0.03 Mon Jul 14 22:54:03 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00058 : NOTICE) Publishing Event: Mon Jul 14 22:54:03 2008 Mon Jul 14 22:54:04 2008 (SCNodeI0.24890 : csa113CompEO.---.---.00060 : NOTICE) Publishing Event: 0.05 0.07 0.03
Since the event subscriber application is also running you can see the events that it is receiving in the csa112 application log file. Again using
tail -f /rootasp//var/log/csa212CompI0Log.latest
you can see the following:/root/asp/var/log/csa112CompI0Log.latest Mon Jul 14 22:53:59 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00052 : NOTICE) We've got an event to receive Mon Jul 14 22:53:59 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00054 : NOTICE) received event: Mon Jul 14 22:53:59 2008 Mon Jul 14 22:54:00 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00058 : NOTICE) We've got an event to receive Mon Jul 14 22:54:00 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00060 : NOTICE) received event: 0.05 0.07 0.03 Mon Jul 14 22:54:01 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00064 : NOTICE) We've got an event to receive Mon Jul 14 22:54:01 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00066 : NOTICE) received event: Mon Jul 14 22:54:01 2008 Mon Jul 14 22:54:02 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00070 : NOTICE) We've got an event to receive Mon Jul 14 22:54:02 2008 (SCNodeI0.24830 : csa112CompEO.---.---.00072 : NOTICE) received event: 0.05 0.07 0.03
- Now you can shut everything down in the usual manner. Note that you will be shutting down two service groups.
cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg csa213SGI0 cli[Test:SCNodeI0:CPM]-> amsLockAssignment sg csa212SGI0 cli[Test:SCNodeI0:CPM]-> amsLockInstantiation sg csa213SGI0 cli[Test:SCNodeI0:CPM]-> amsLockInstantiation sg csa212SGI0 cli[Test:SCNodeI0:CPM]-> end cli[Test:SCNodeI0]-> end cli[Test]-> bye
Summary and References
We've seen how to initialize the event manager subsystem as an event publisher. We've seen:
- events flow from the event publisher to the subscriber.
- how to format events and send them through the event manager subsystem
- For further reading, check the same sources as listed under the csa212 section.