Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}
h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}
.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}
.tabSelected{color:[[ColorPalette::PrimaryDark]];
background:[[ColorPalette::TertiaryPale]];
border-left:1px solid [[ColorPalette::TertiaryLight]];
border-top:1px solid [[ColorPalette::TertiaryLight]];
border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}
#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}
.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}
#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}
.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}
.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
.tiddler .defaultCommand {font-weight:bold;}
.shadow .title {color:[[ColorPalette::TertiaryDark]];}
.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}
.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}
.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}
.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}
.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}
.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}
.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}
.imageLink, #displayArea .imageLink {background:transparent;}
.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}
.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}
.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}
.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}
.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}
body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}
h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}
hr {height:1px;}
a {text-decoration:none;}
dt {font-weight:bold;}
ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}
.txtOptionInput {width:11em;}
#contentWrapper .chkOptionInput {border:0;}
.externalLink {text-decoration:underline;}
.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}
.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}
/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}
#mainMenu .tiddlyLinkExisting,
#mainMenu .tiddlyLinkNonExisting,
#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}
.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}
.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}
#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}
#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}
#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}
.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}
.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
#displayArea {margin:1em 17em 0 14em;}
.toolbar {text-align:right; font-size:.9em;}
.tiddler {padding:1em 1em 0;}
.missing .viewer,.missing .title {font-style:italic;}
.title {font-size:1.6em; font-weight:bold;}
.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}
.tiddler .button {padding:0.2em 0.4em;}
.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}
.footer {font-size:.9em;}
.footer li {display:inline;}
.annotation {padding:0.5em; margin:0.5em;}
* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}
.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}
.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}
.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}
.fieldsetFix {border:0; padding:0; margin:1px 0px;}
.sparkline {line-height:1em;}
.sparktick {outline:0;}
.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}
* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}
.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser
Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])
<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]
----
Also see [[AdvancedOptions]]
The //monitor// application is built as an ~OpenDDS and a Qt4 application. It uses ~OpenDDS to subscribe to the monitor data and the DDS specified Builtin Topic data. It uses Qt4 as the GUI. Building will require setting the ''qt4'' feature for MPC. This can be set in the //$~ACE_ROOT/include/makeinclude/platform_macros.GNU// configuration file, or set on the individual command lines during the build process (recommended). The following assumes that the //platform_macros.GNU// file does ''not'' have the ''qt4'' feature set, as it is not required for any of the dependent software.
The following steps should be followed:
* Ensure that the [[dependent|Dependencies]] header files and libraries are available.
* Ensure that the build [[environment|Setup]] is setup correctly. Then work within the application directory:
{{{
> cd $DDS_ROOT/tools/monitor
}}}
For Windows:
{{{
> cd %DDS_ROOT%\tools\monitor
}}}
* Create the makefiles / project files:
{{{
> $ACE_ROOT/bin/mwc.pl -type gnuace -features qt4=1
}}}
For Windows:
{{{
> %ACE_ROOT%\bin\mwc.pl -type vc9 -features qt4=1
}}}
Replace "vc9" with "vc8" or "vc71" as needed.
* Build the application:
{{{
> make qt4=1
> make qt4=1 depend
}}}
For Windows, build using Visual Studio.
The //monitor// application will be installed to the $~DDS_ROOT/bin directory and can be invoked from there.
Background: #fff
Foreground: #000
PrimaryPale: #eee
PrimaryLight: #ccc
PrimaryMid: #600
PrimaryDark: #600
SecondaryPale: #eee
SecondaryLight: #ccc
SecondaryMid: #999
SecondaryDark: #666
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Common IDL used to define the data published as Monitor Topics is included here for reference. All of this IDL resides within the ''~OpenDDS::DCPS'' module.
{{{
const long MONITOR_DOMAIN_ID = -999;
const long MONITOR_TRANSPORT_ID = 999;
const string SERVICE_PARTICIPANT_MONITOR_TOPIC = "Service Participant Monitor";
const string DOMAIN_PARTICIPANT_MONITOR_TOPIC = "Domain Participant Monitor";
const string TOPIC_MONITOR_TOPIC = "Topic Monitor";
const string PUBLISHER_MONITOR_TOPIC = "Publisher Monitor";
const string SUBSCRIBER_MONITOR_TOPIC = "Subscriber Monitor";
const string DATA_WRITER_MONITOR_TOPIC = "Data Writer Monitor";
const string DATA_WRITER_PERIODIC_MONITOR_TOPIC = "Data Writer Periodic Monitor";
const string DATA_READER_MONITOR_TOPIC = "Data Reader Monitor";
const string DATA_READER_PERIODIC_MONITOR_TOPIC = "Data Reader Periodic Monitor";
const string TRANSPORT_MONITOR_TOPIC = "Transport Monitor";
struct Statistics {
unsigned long n;
double maximum;
double minimum;
double mean;
double variance;
};
typedef sequence<unsigned long> ULongSeq;
typedef sequence<string> StringSeq;
//typedef sequence<GUID_t> GUIDSeq;
enum ValueEnumType { INTEGER_TYPE, DOUBLE_TYPE, STRING_TYPE,
STATISTICS_TYPE, STRING_LIST_TYPE };
union ValueUnion switch (ValueEnumType) {
case INTEGER_TYPE: long integer_value;
case DOUBLE_TYPE: double double_value;
case STRING_TYPE: string string_value;
case STATISTICS_TYPE: Statistics stat_value;
case STRING_LIST_TYPE: StringSeq string_seq_value;
};
struct NameValuePair {
string name;
ValueUnion value;
};
typedef sequence<NameValuePair> NVPSeq;
enum ReportType {
SERVICE_PARTICIPANT_REPORT_TYPE,
DOMAIN_PARTICIPANT_REPORT_TYPE,
TOPIC_REPORT_TYPE,
PUBLISHER_REPORT_TYPE,
SUBSCRIBER_REPORT_TYPE,
DATA_WRITER_REPORT_TYPE,
DATA_WRITER_PERIODIC_REPORT_TYPE,
DATA_READER_REPORT_TYPE,
DATA_READER_PERIODIC_REPORT_TYPE,
TRANSPORT_REPORT_TYPE
};
union GenericReport switch (ReportType) {
case SERVICE_PARTICIPANT_REPORT_TYPE:
ServiceParticipantReport sp_report;
case DOMAIN_PARTICIPANT_REPORT_TYPE:
DomainParticipantReport dp_report;
case TOPIC_REPORT_TYPE:
TopicReport topic_report;
case PUBLISHER_REPORT_TYPE:
PublisherReport publisher_report;
case SUBSCRIBER_REPORT_TYPE:
SubscriberReport subscriber_report;
case DATA_WRITER_REPORT_TYPE:
DataWriterReport dw_report;
case DATA_WRITER_PERIODIC_REPORT_TYPE:
DataWriterPeriodicReport dw_per_report;
case DATA_READER_REPORT_TYPE:
DataReaderReport dr_report;
case DATA_READER_PERIODIC_REPORT_TYPE:
DataReaderPeriodicReport dr_per_report;
case TRANSPORT_REPORT_TYPE:
TransportReport transport_report;
};
interface ProcessMonitor {
// Pass a name that acts as a global identifier for a given
// entity or individual statistic. Need to define the actual
// format for this name, but concatenating the entity identifiers
// together with "/" separators should work. Passing an empty
// string would retrieve the ServiceParticipant information
// (which would list the Domain Participants).
GenericReport retrieve_report(in string name);
// Allow global enabling disabling of report collection for
// this process.
void enable_report_collection();
void disable_report_collection();
// Allow global enabling/disabling of report publication
// for this process.
void enable_report_publishing();
void diable_report_publishing();
// Set the period between publishing samples
void set_publishing_period(in DDS::Duration_t period);
DDS::Duration_t get_publishing_period();
};
}}}
The information hierarchy displayed in the tree view of the application [[GUI]] starts with the host at the top level. Each executing process that publishes monitor information will appear within the host on which they are executing. The data displayed is derived from [[Monitor Data Topics|MonitorTopics]] distributed in the ~OpenDDS specific ''~MONITOR_DOMAIN_ID'' and the DDS specification defined Builtin Topic data. The information hierarchy is summarized in the following table. The table includes references to the IDL data defintions for the data that will be displayed.
The Monitor Topics include a variable field that allows the application programmer to extend the topics if desired. Arbitrary name/value pairs can be added to the data for distribution and will be displayed by the //monitor// application. The data is defined in IDL with each topic constructed of portions of the [[common IDL|CommonIdl]] definitions. These IDL definitions are all within the ''~OpenDDS::DCPS'' IDL module. They are all defined within the file located at //$~DDS_ROOT/dds/monitor/monitor.idl//.
The Builtin Topics are defined in the DDS specification. The table below includes links to the specific IDL for the Builtin Topic data for reference. ~OpenDDS uses the IDL defined in //$~DDS_ROOT/dds/~DdsDcpsInfrastructure.idl// for the Builtin Topic definitions.
{{centeredTable{
| Displayed Monitor Information |c
| Type | Contains | Multiplicity | Links to | Data | Description |
|host |process | //n// | n/a |[[Monitor Topic Data|ServiceData]] |Each host with processes publishing ~OpenDDS monitor topics.<br>The value for the tree node is the hostname as it is published in the monitor topics |
|process |~DomainParticipant | //n// | n/a |[[Monitor Topic Data|ServiceData]] |Each process publishing ~OpenDDS monitor topics.<br>The value for the tree node is the process Id value as it is published in the monitor topics |
|~|transport | //n// | n/a |~|~|
|transport |type | 1 | n/a |[[Monitor Topic Data|TransportData]] |Each transport active within a process.<br>The value for the tree node is the ~TransportIndex value for the transport instance in hexadecimal format |
|~DomainParticipant |~DomainId | 1 | n/a |[[Monitor Topic Data|DomainData]],<br>[[Builtin Topic Data|ParticipantBuiltinData]] |Each ~DomainParticipant within a process.<br>The value for the tree node is the 16 byte GUID value for the ~DomainParticipant in a hexadecimal format |
|~|Topic | //n// | n/a |~|~|
|~|Publisher | //n// | n/a |~|~|
|~|Subscriber | //n// | n/a |~|~|
|~|~QoS | 1 | n/a |~|~|
|Topic |Topic name | 1 | n/a |[[Monitor Topic Data|TopicData]],<br>[[Builtin Topic Data|TopicBuiltinData]] |Each Topic within a ~DomainParticipant.<br>The value for the tree node is the 16 byte GUID value for the Topic in a hexadecimal format |
|~|Data type | 1 | n/a |~|~|
|~|~QoS | 1 | n/a |~|~|
|Publisher |transport | 1 |host.process.transport |width: 10em;[[Monitor Topic Data|PublisherData]],<br>[[Builtin Topic Data|PublicationBuiltinData]] |Each Publisher within a ~DomainParticipant.<br>The value for the tree node is the 16 byte GUID value for the Publisher in a hexadecimal format |
|~|writer | //n// | n/a |~|~|
|~|~QoS | 1 | n/a |~|~|
|Subscriber |transport | 1 |host.process.transport |[[Monitor Topic Data|SubscriberData]],<br>[[Builtin Topic Data|SubscriptionBuiltinData]] |Each Subscriber within a ~DomainParticipant.<br>The value for the tree node is the 16 byte GUID value for the Subscriber in a hexadecimal format |
|~|reader | //n// | n/a |~|~|
|~|~QoS | 1 | n/a |~|~|
|Writer |Topic name | 1 |~DomainParticipant.topic.topicname |[[Monitor Topic Data|WriterData]],<br>[[Builtin Topic Data|PublicationBuiltinData]] |Each Writer within a Publisher. The readers are the ~DataReader entities associated with the ~DataWriter entitiy represented by this tree node.<br>The value for the tree node is the 16 byte GUID value for the ~DataWriter in a hexadecimal format |
|~|Reader | //n// |Subscriber.reader |~|~|
|~|~QoS | 1 | n/a |~|~|
|Reader |Topic name | 1 |~DomainParticipant.topic.topicname |[[Monitor Topic Data|ReaderData]],<br>[[Builtin Topic Data|SubscriptionBuiltinData]] |Each Reader within a Subscriber. The writers are the ~DataWriter entities associated with the ~DataReader entitiy represented by this tree node.<br>The value for the tree node is the 16 byte GUID value for the ~DataReader in a hexadecimal format |
|~|Writer | //n// |Publisher.writer |~|~|
|~|~QoS | 1 | n/a |~|~|
}}}
The //links// column in the table indicates which, if any, fields contained by the element are references to data contained at a separate location. For example, each Publisher and Subscriber contains a transport, which is a link to the actual transport described separately and contained within the process.
The //monitor// application has the same dependencies as the [[OpenDDS|http://www.opendds.org/]] libraries. These include the ''ACE'' and ''TAO'' libraries as well as ~OpenDDS itself. Since the //monitor// application is included in the ~OpenDDS distribution, the application and ~OpenDDS versions will be compatible. Follow the [[directions|http://www.opendds.org/building.html]] for building ~OpenDDS to build all of these dependent libraries.
In addition to ~OpenDDS, the //monitor// application uses the [[Qt4|http://qt.nokia.com]] GUI libraries. The best way to install these is to use whatever package manager or installer your system has available and install the development header files and libraries into system locations. If this is not possible, obtain and install a local copy from the [[Qt4|http://qt.nokia.com/downloads]] website.
The IDL used to define the data published as the ~DomainParticipantReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct DomainParticipantReport {
string host;
long pid;
GUID_t dp_id;
DDS::DomainId_t domain_id;
GUIDSeq topics;
NVPSeq values;
};
}}}
The Graphical User Interface (GUI) for the //monitor// application is a simple window with three pushbuttons, a pulldown combo-box and a tree viewer with two columns:
{{imgcenter{[img[images/gui.png]]}}}
The elements of the GUI are summarized in the following table:
| GUI Elements |c
| Element | Type | Description |
| ''Quit'' | pushbutton |This will exit the application. |
| ''Add'' | pushbutton |This is used to add repositories ~IORs to the list of available repository ~IORs to which the monitor application can attach. The selection is made by a popup selection dialog. The currently available IOR values are located as the values in the "Current Repository" pulldown list. |
| ''Remove'' | pushbutton |This is used to remove the currently selected repository IOR from the combo-box pulldown list. When this is done, the currently displayed data is discarded and the new selection (the previous in the list, if any) will be attached and its data displayed. |
| ''Element'' | column |This is the column identifying the data being displayed. The elements are the data from the monitor data hierarchy. |
| ''Value'' | column |This is the column with the data values being displayed. |
| display area | tree view |This is where the data is displayed as tree graph with element names and values. |
| ''Current Repository:'' | combo box |This is the mechanism to attach and detach from specific ~OpenDDS repositories. There is always a ''<detached>'' selection which when selected results in no repository being attached to and no data displayed. When a selection other than ''<detached>'' is made, the repository reached at the displayed IOR will have its data examined and displayed. |
The repository selection dialog is a simple selection dialog allowing the entry of a string based IOR, either as a //corbaloc// value or a stringified IOR pasted in, or a file based IOR from a file selection dialog:
{{imgcenter{[img[images/select-repo.png]]}}}
The elements of the dialog are summarized in the following table:
{{centeredTable{
| Dialog Elements |c
| Element | Type | Description |
| ''IOR'' | text entry |This allows capture of a string IOR, in either //corbaloc// format (started by default) or as a stringified IOR pasted directly into the text entry widget. |
| ''File'' | pushbuttom |This starts a standard system file selection dialog to locate and select a file containing an IOR value. |
| ''Cancel'' | pushbutton |Exits the dialog without adding an entry to the repository IOR list. |
| ''Ok'' | pushbutton |Adds the IOR value to the repository list and exits. |
}}}
An example of the application attached to a repository and displaying data from two processes is shown below. The displayed [[data|Data]] is described separately.
{{imgcenter{
[img[images/monitor-tree.png]]
}}}
[[Quick Start]]
[[GUI]]
[[Dependencies]]
[[Setup]]
[[Building]]
[[Data]]
The //monitor// application subscribes to all of the available monitor application topics. These topics include static topics as well as dynamic topics. The static topics are published at the beginning and end of the lifetime of the corresponding Entity and the periodic topics are published at a rate determined by the configuration, with a default of once per second. The topics are:
# [[ServiceParticipantReport|ServiceData]] - contains static information about the application process ~ServiceParticipant.
# [[DomainParticipantReport|DomainData]] - contains static information about each active ~DomainParticipant.
# [[TransportReport|TransportData]] - contains static information about each active transport instance.
# [[TopicReport|TopicData]] - contains static information about each active Topic.
# [[PublisherReport|PublisherData]] - contains static information about each active Publisher.
# [[SubscriberReport|SubscriberData]] - contains static information about each active Subscriber.
# [[DataWriterReport|WriterData]] - contains static information about each active writer.
# [[DataWriterPeriodicReport|WriterData]] - contains dynamic information about each active writer.
# [[DataReaderReport|ReaderData]] - contains staticinformation about each active reader.
# [[DataReaderPeriodicReport|ReaderData]] - contains dynamic information about each active reader.
OpenDDS is an open source C++ implementation of the Object Management Group (OMG) Data Distribution Service (DDS). OpenDDS also supports Java bindings through JNI and can be included with JBoss (ESB) frameworks by means of a JMS wrapper. OpenDDS leverages the ADAPTIVE Communication Environment (ACE) to provide a cross platform environment.
OpenDDS is supported by [[Object Computing, Inc.|http://www.objectcomputing.com/]]
<!--{{{-->
<div class='header'>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
<div class='footer'>$Id: userguide.html 103 2010-10-05 18:45:41Z martinezm $</div>
</div>
<!--}}}-->
The Builtin Topic data IDL for participants is included here for reference.
{{{
struct ParticipantBuiltinTopicData {
BuiltinTopicKey_t key;
UserDataQosPolicy user_data;
};
}}}
The Builtin Topic data IDL for publications is included here for reference. Publication data includes Quality of Service policy values for both the Publisher and the ~DataWriter Entities that comprise the publication.
{{{
struct PublicationBuiltinTopicData {
BuiltinTopicKey_t key;
BuiltinTopicKey_t participant_key;
string topic_name;
string type_name;
DurabilityQosPolicy durability;
DurabilityServiceQosPolicy durability_service;
DeadlineQosPolicy deadline;
LatencyBudgetQosPolicy latency_budget;
LivelinessQosPolicy liveliness;
ReliabilityQosPolicy reliability;
LifespanQosPolicy lifespan;
UserDataQosPolicy user_data;
OwnershipQosPolicy ownership;
OwnershipStrengthQosPolicy ownership_strength;
DestinationOrderQosPolicy destination_order;
PresentationQosPolicy presentation;
PartitionQosPolicy partition;
TopicDataQosPolicy topic_data;
GroupDataQosPolicy group_data;
};
}}}
<div class='viewer' id='contentWrapper'><small><a href="index.html">Home</a> > %1</small><h1 class='publishLogo'>%0</h1>
<div id='publishContentWrapper'>
<h2>%1</h2>
<ul>%2
</ul>
<small>Published: %6</small>
</div></div>
/***
|''Name:''|Publish Macro|
|''Version:''|2.4.1 (2 July 2008)|
|''Source''|http://jackparke.googlepages.com/jtw.html#PublishMacro ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23PublishMacro]])|
|''Author:''|[[Jack]]|
|''Type:''|Macro|
!Description
<<doPublish>> tiddlers tagged with these tags <<option txtPublishTags>> (comma seperated) as HTML pages to the subfolder 'publish' (you must create this). Use the [[PublishTemplateHead]] and [[PublishTemplateBody]] templates to style your pages and the [[PublishIndexTemplate]] to define an index page. For publishing individual tiddlers the [[PublishTemplateBodySingle]] template is used.
!Usage
To publish all tagged tiddlers:
{{{<<doPublish>>}}} <<doPublish>>
To publish a single tiddler, use the {{{<<publishTiddler>>}}} macro or add the "publishTiddler" command to your ViewTemplate
!Template placeholders
|!Placeholder|!Meaning|
|%0|Your SiteTitle "<<tiddler SiteTitle>>"|
|%1|The current tiddler title|
|%2|The rendered tiddler HTML|
|%3|CSV list of tags|
|%4|Tiddler modifier|
|%5|Tiddler modified date|
|%6|Tiddler creation date|
|%7|Tiddler wiki text|
!Revision History
* Original by [[Jack]] 24 May 2006
* Updated 2 Jan 2007
* Refactored 4 Jan 2007
* Small improvements
* Publish single tiddlers
* Template placeholder %7 for tiddler's wiki text
!Code
***/
//{{{
version.extensions.doPublish = {
major: 2,
minor: 4,
revision: 1,
date: new Date("July 2, 2008")
};
config.macros.doPublish = {
label: "publish",
prompt: "Publish Tiddlers as HTML files"
};
if (config.options.txtPublishTags == undefined) config.options.txtPublishTags = "Publish";
config.shadowTiddlers.PublishTemplateHead = '<title>%0 - %1</title>\n<link rel="stylesheet" type="text/css" href="style.css"/>\n<meta name="keywords" content="%3"/>'
config.shadowTiddlers.PublishTemplateBody = '<div class=\'viewer\' id=\'contentWrapper\'><small><a href=\"./publish/index.html\">Home</a> > %1</small><h1>%0</h1>\n<h2>%1</h2>\n%2\n<hr>Tags: %3\n<hr>%4, %5 (created %6)\n</div>\n'
config.shadowTiddlers.PublishTemplateBodySingle = '<h1>%0</h1>\n<h2>%1</h2>\n%2\n<hr>Tags: %3\n<hr>%4, %5 (created %6)\n</div>\n'
config.shadowTiddlers.PublishIndexTemplate = '<div class=\'viewer\' id=\'contentWrapper\'><small><a href="./publish/index.html">Home</a> > %1</small><h1>%0</h1><h2>%1</h2>\n<ul>%2\n</ul>\n<small>Published: %6</small>\n</div>\n';
config.macros.doPublish.handler = function(place)
{
if (!readOnly)
createTiddlyButton(place, this.label, this.prompt,
function() {
doPublish();
return false;
},
null, null, this.accessKey);
}
config.macros.publishTiddler = {
label : 'publish',
prompt : 'Publish this tiddler as an HTML file.',
handler : function(place,macroName,params,wikifier,paramString,tiddler)
{
var btn = createTiddlyButton(place, this.label, this.prompt,
function(e) {
if(!e) var e = window.event;
publishTiddler(this.getAttribute('tiddler'))
return false;
},
null, null, this.accessKey);
btn.setAttribute('tiddler', tiddler.title);
}}
config.commands.publishTiddler = {handler : function(event,src,title) {publishTiddler(title);},text: "publish", tooltip: "Publish this tiddler as HTML"};
function publishTiddler(title) {
//debugger
var PublishFolder = getWikiPath('publish');
var place = document.getElementById(story.container)
var HTMLTemplateHead = store.getTiddlerText("PublishTemplateHead");
var HTMLTemplateBody = store.getTiddlerText("PublishTemplateBodySingle") || store.getTiddlerText("PublishTemplateBody");
HTMLTemplateBody = renderTemplate(HTMLTemplateBody)
HTMLTemplateBody = wiki2Web(HTMLTemplateBody);
var tiddler = store.getTiddler(title);
var tiddlerText = store.getValue(tiddler, 'text');
var tiddlerHTML = wikifyStatic(tiddlerText);
var HTML = '<html>\n\<head>\n' + HTMLTemplateHead + '\n</head>\n<body>\n' + HTMLTemplateBody + '\n</body>\n</html>';
HTML = HTML.format([
wikifyPlain("SiteTitle").htmlEncode(),
tiddler.title.htmlEncode(),
wiki2Web(tiddlerHTML),
tiddler.tags.join(", "),
tiddler.modifier,
tiddler.modified.toLocaleString(),
tiddler.created.toLocaleString(),
tiddlerText
]);
saveFile(PublishFolder + tiddler.title.filenameEncode() + ".html", HTML);
//story.closeTiddler(tiddler.title);
var indexWin = window.open((PublishFolder + title.filenameEncode() + ".html").replace(/\\/g, "/"), null);
indexWin.focus();
}
function doPublish() {
var savedTiddlers = [];
var tiddlers = store.getTiddlers("title");
var place = document.getElementById(story.container)
var HTMLTemplateHead = store.getTiddlerText("PublishTemplateHead");
var HTMLTemplateBody = store.getTiddlerText("PublishTemplateBody");
HTMLTemplateBody = renderTemplate(HTMLTemplateBody)
HTMLTemplateBody = wiki2Web(HTMLTemplateBody);
var PublishTags = config.options.txtPublishTags || "publish";
PublishTags = PublishTags.split(",")
var PublishFolder = getWikiPath('publish');
if (!PublishFolder) return;
var indexFile = "";
var indexFileTemplate = store.getTiddlerText("PublishIndexTemplate");
// This does not allow <<myMacro>> but wants <div macro="myMacro">
indexFileTemplate = renderTemplate(indexFileTemplate)
// This option allows WIKI-syntax but is limited in it's HTML capabilities
//indexFileTemplate = wikifyStatic(indexFileTemplate)
for (var t = 0; t < tiddlers.length; t++) {
var tiddler = tiddlers[t];
if (tiddler.tags.containsAny(PublishTags)) {
var tiddlerText = store.getValue(tiddler, 'text');
var tiddlerHTML = wikifyStatic(tiddlerText);
var HTML = '<html>\n\<head>\n' + HTMLTemplateHead + '\n</head>\n<body>\n' + HTMLTemplateBody + '\n</body>\n</html>';
HTML = HTML.format([
wikifyPlain("SiteTitle").htmlEncode(),
tiddler.title.htmlEncode(),
wiki2Web(tiddlerHTML),
tiddler.tags.join(", "),
tiddler.modifier,
tiddler.modified.toLocaleString(),
tiddler.created.toLocaleString(),
tiddlerText
]);
//saveFile(PublishFolder + tiddler.created.formatString("YYYY0MM0DD") + ".html", HTML);
saveFile(PublishFolder + tiddler.title.filenameEncode() + ".html", HTML);
indexFile += "<li><a href=\"" + tiddler.title.filenameEncode() + ".html" + "\" class=\"tiddlyLink tiddlyLinkExisting\">" + tiddler.title + "</a></li>\n";
story.closeTiddler(tiddler.title);
}
}
indexFileTemplate = '<html>\n\<head>\n' + HTMLTemplateHead + '\n</head>\n<body>\n' + indexFileTemplate + '\n</body>\n</html>';
indexFileTemplate = indexFileTemplate.format([wikifyPlain("SiteTitle").htmlEncode(), wikifyPlain("SiteSubtitle").htmlEncode(), "%2", "", "", "", (new Date()).toLocaleString()])
indexFile = indexFileTemplate.replace("%2", indexFile)
indexFile = wiki2Web(indexFile);
saveFile(PublishFolder + "index.html", indexFile)
saveFile(PublishFolder + "style.css", store.getTiddlerText("StyleSheet") + store.getTiddlerText("StyleSheetLayout") + store.getTiddlerText("StyleSheetColors"))
var indexWin = window.open("file://" + PublishFolder.replace(/\\/g, "/") + "index.html", null);
indexWin.focus();
}
function renderTemplate(html) {
var result = document.createElement("div");
result.innerHTML = html;
applyHtmlMacros(result, null);
var temp = result.innerHTML;
//result.parentNode.removeChild(result);
return temp;
}
// Convert wikified text to html
function wiki2Web(wikiHTML) {
//var regexpLinks = new RegExp("<a tiddlylink=.*?</a>", "img");
var regexpLinks = /<a[^>]+tiddlylink\s*=\s*["']?\s*?([^ "'>]*)\s*["']?[^>]*>[^<]+<\/a>/img;
var result = wikiHTML.match(regexpLinks);
if (result) {
for (i = 0; i < result.length; i++) {
var className = result[i].match(/ class="(.*?)"/i) ? result[i].match(/ class="(.*?)"/i)[1] : "";
var tiddlerName = result[i].match(/ tiddlylink="(.*?)"/i)[1];
var url = tiddlerName.htmlDecode().filenameEncode() + ".html";
var tiddlerLabel = result[i].match(/">(.*?)<\/a>/i)[1];
if (!className.match(/tiddlyLinkNonExisting/i))
wikiHTML = wikiHTML.myReplace(result[i], "<a class=\"" + className + "\" href=\"" + url + "\">" + tiddlerLabel + "</a>");
else
wikiHTML = wikiHTML.myReplace(result[i], "<a class=\"" + className + "\" title=\"Page does not exist\" href=\"#\">" + tiddlerName + "</a>");
}
wikiHTML = wikiHTML.replace(/ href="http:\/\//gi, " target=\"_blank\" href=\"http://");
}
return wikiHTML
}
function getWikiPath(folderName) {
var originalPath = document.location.toString();
if (originalPath.substr(0, 5) != 'file:') {
alert(config.messages.notFileUrlError);
if (store.tiddlerExists(config.messages.saveInstructions))
story.displayTiddler(null, config.messages.saveInstructions);
return;
}
var localPath = getLocalPath(originalPath);
var backSlash = localPath.lastIndexOf('\\') == -1 ? '/': '\\';
var dirPathPos = localPath.lastIndexOf(backSlash);
var subPath = localPath.substr(0, dirPathPos) + backSlash + (folderName ? folderName + backSlash: '');
return subPath;
}
// Replace without regex
String.prototype.myReplace = function(sea, rep) {
var t1 = this.indexOf(sea);
var t2 = parseInt(this.indexOf(sea)) + parseInt(sea.length);
var t3 = this.length;
return this.substring(0, t1) + rep + this.substring(t2, t3)
}
// Convert illegal characters to underscores
String.prototype.filenameEncode = function()
{
return (this.toLowerCase().replace(/[^a-z0-9_-]/g, "_"));
}
//}}}
<div class='viewer' id='contentWrapper'><small><a href="./publish/index.html">Home</a> > %1</small><h1>%0</h1>
<h2>%1</h2>
%2
<hr>Tags: %3
<hr>%4, %5 (created %6)
</div>
<h1>%0</h1>
<h2>%1</h2>
%2
<hr>Tags: %3
<hr>%4, %5 (created %6)
</div>
The IDL used to define the data published as the ~PublisherReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct PublisherReport {
DDS::InstanceHandle_t handle;
GUID_t dp_id;
unsigned long transport_id;
GUIDSeq writers;
NVPSeq values;
};
}}}
The //monitor// tool is provided to inspect information available about an operating ~OpenDDS system. The viewer attaches to a single ~OpenDDS repostiory at a time and subscribes to both the DDS specification defined Builtin Topics and the ~OpenDDS specific Monitor topics. It is possible to switch from viewing the information from one repository to another while the monitor is running.
To execute the application, do the following:
* Make sure that the application is [[built|Building]].
* Make sure that the [[environment|Setup]] is setup correctly for execution.
* Start the application:
{{{
> monitor
}}}
* Attach to a running ~OpenDDS service
** Add the repository:
***from main window, select the [Add] pushbutton, this will open a "Select Repository" dialog
***from "Select Repository" dialog, select an IOR, either as a string or file selection, the accept the selection using the [Ok] pushbutton
** Select the repository
***from the main window, select the newly added repository IOR from the "Current Repository:" pulldown
The IDL used to define the data published as the ~DataReaderReport and the ~DataReaderPeriodicReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct DataReaderAssociation {
GUID_t dw_id;
short state;
};
typedef sequence<DataReaderAssociation> DRAssociations;
struct DataReaderReport {
GUID_t dp_id;
DDS::InstanceHandle_t sub_handle;
GUID_t dr_id;
GUID_t topic_id;
DDS::InstanceHandleSeq instances;
DRAssociations associations;
NVPSeq values;
};
struct DataReaderAssociationPeriodic {
GUID_t dw_id;
unsigned long samples_available;
// Stats latency_stats;
};
typedef sequence<DataReaderAssociationPeriodic> DRAssociationsPeriodic;
struct DataReaderPeriodicReport {
GUID_t dr_id;
DRAssociationsPeriodic associations;
NVPSeq values;
};
}}}
The IDL used to define the data published as the ~ServiceParticipantReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct ServiceParticipantReport {
string host;
long pid;
GUIDSeq domain_participants;
ULongSeq transports;
NVPSeq values;
};
}}}
Establishing the environment for building and executing the //monitor// application consists of setting specific environment variables. The environment required to execute the application is a subset of the environment required to build the application.
!Build Environment
The build environment includes the environment needed to build the ACE+TAO+~OpenDDS libraries as well as the additional environment needed to build the //monitor// application itself. The ACE+TAO+~OpenDDS build environment is described in the [[OpenDDS build instructions|http://www.opendds.org/building.html]] but is summarized here for reference.
| ACE+TAO+~OpenDDS Build Environment |c
| Variable | Status | Value | Description |
|~ACE_ROOT | Required |Must include the base directory of the ACE software installation. This is typically the ~ACE_wrappers directory where the installation was performed. |This is the base of the ACE installation and all ACE software - header files and libraries - will be located relative to this directory. |
|~TAO_ROOT | Required |Must include the base directory of the TAO software installation. This is typically the ~ACE_wrappers/TAO directory where the installation was performed. |This is the base of the TAO installation and all TAO software - header files and libraries - will be located relative to this directory. |
|~DDS_ROOT | Required |Must include the base directory of the ~OpenDDS software installation. This is typically the directory into which the ~OpenDDS installation was performed. |This is the base of the ~OpenDDS installation and all ~OpenDDS software - header files and libraries - will be located relative to this directory. |
|PATH | Required |Must include the path to the ACE and TAO command executables.<br>Must also include the path to the ~OpenDDS command executables. |This is the path searched for commands to execute. |
|~LD_LIBRARY_PATH | Required |Must include directory with ACE+TAO libraries and directory with ~OpenDDS libraries |This contains the path searched for dynamically linked libraries at compile and load time for the application. All of the libraries that will be linked at compile time must be reachable via either the standard path or be included in directories found in this path. |
In addition to the ACE+TAO+~OpenDDS build environment, additional environment variables are needed for building the //monitor// application. There are described in the following table.
| //monitor// Build Environment |c
| Variable | Status | Value | Description |
|QTDIR | Required |Must contain the base of the Qt4 software installation. |This is the base of the Qt4 installation and all Qt4 software - headers and libraries - will be found relative to this directory, with the possible exception noted below for the ~QT4_INCDIR variable. |
|~QT4_INCDIR | Optional |May contain a separate directory where the Qt4 software header files are located. |Some system installations have the include files located under a separate base directory from the libraries. For example, Ubuntu 9.10 locates the Qt4 software libraries relative to the ///usr// directory, but the include files are located relative to the ///usr/include/qt4// directory instead of the expected ///usr/include// directory. Setting this variable accommodates installations with this feature. |
|~QT_CFG | Optional |Determines library names for Qt. |If your Qt4 installation uses a suffix for the library names (for example, ~QtCore4.lib), set this variable to that suffix (for example, 4). |
!Execution Environment
To execute the //monitor// application, the following environment variables need to be set:
| //monitor// Execution Environment |c
| Variable | Status | Value | Description |
|PATH | Optional |Should include the path to the application executable. |This is the path searched for commands to execute. If this command path is not set, then a full path (relative or absolute) to the executable must be specified when starting the application. |
|~LD_LIBRARY_PATH | Required |Must include directory with ACE+TAO libraries and directory with ~OpenDDS libraries |This contains the path searched for dynamically linked libraries at load time for the application. All of the libraries that were linked at compile time must be reachable via either the standard path or be included in directories found in this path. |
<<search>><<closeAll>><<permaview>><<newTiddler>><<saveChanges>><<doPublish>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
Monitor Data Viewer
http://www.objectcomputing.com/
{{imgcenter{[img[images/splash.jpg]]}}}
The image is a spectrogram of "~OpenDDS" being spoken aloud. There is no particular reason for using this as the splash image.
a:hover {
text-decoration: none;
}
.publishLogo {
position: relative;
background-color:[[ColorPalette::Background]];
background-image: url(images/opendds.png);
background-position: left;
background-repeat: no-repeat;
color:[[ColorPalette::SecondaryDark]];
padding: 20px 0 5px 72px;
border-bottom: 1px solid [[ColorPalette::SecondaryLight]];
}
.headerForeground {
position: relative;
background-color:[[ColorPalette::Background]];
background-image: url(images/opendds.png);
background-position: left;
background-repeat: no-repeat;
color:[[ColorPalette::SecondaryDark]];
padding: 20px 0 5px 72px;
border-bottom: 1px solid [[ColorPalette::SecondaryLight]];
}
.siteSubtitle {
position: relative;
background-color:[[ColorPalette::Background]];
background-image: url(images/sgram.png);
background-position: right;
background-repeat: no-repeat;
color:[[ColorPalette::SecondaryDark]];
padding: 20px 150px 5px 50px;
border-bottom: 1px solid [[ColorPalette::SecondaryLight]];
}
.headerForeground a {
color:[[ColorPalette::SecondaryDark]];
font-weight: bold;
}
.footer {
border-top: 1px solid [[ColorPalette::SecondaryLight]];
color:[[ColorPalette::SecondaryLight]];
margin-top: 20px;
font-size: 1.1em;
}
.siteTitle {
font-weight: bold;
}
#mainMenu {
padding: 25px 0 0 20px;
}
.toolbar {
float: right;
}
.imgcenter {
display: block;
text-align: center;
margin-left: auto;
margin-right: auto;
}
.viewer div.centeredTable table {
margin: 0 auto;
text-align: left;
}
#publishContentWrapper {margin: 0 5em 0 5em; padding: 0;}
th { border-style: inset;}
td { border-style: inset; vertical-align: top;}
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
a {color:[[ColorPalette::PrimaryMid]];}
a:hover {/*background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];*/}
a img {border:0;}
h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}
.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}
.tabSelected{color:[[ColorPalette::PrimaryDark]];
background:[[ColorPalette::TertiaryPale]];
border-left:1px solid [[ColorPalette::TertiaryLight]];
border-top:1px solid [[ColorPalette::TertiaryLight]];
border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}
#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}
.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}
#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}
.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}
.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
.tiddler .defaultCommand {font-weight:bold;}
.shadow .title {color:[[ColorPalette::TertiaryDark]];}
.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}
.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}
.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}
.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}
.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}
.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}
.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}
.imageLink, #displayArea .imageLink {background:transparent;}
.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}
.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}
.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}
.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}
.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
The IDL used to define the data published as the ~SubscriberReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct SubscriberReport {
DDS::InstanceHandle_t handle;
GUID_t dp_id;
unsigned long transport_id;
GUIDSeq readers;
NVPSeq values;
};
}}}
The Builtin Topic data IDL for subscriptions is included here for reference. Subscription data includes Quality of Service policy values for both the Subscriber and the ~DataReader Entities that comprise the subscription.
{{{
struct SubscriptionBuiltinTopicData {
BuiltinTopicKey_t key;
BuiltinTopicKey_t participant_key;
string topic_name;
string type_name;
DurabilityQosPolicy durability;
DeadlineQosPolicy deadline;
LatencyBudgetQosPolicy latency_budget;
LivelinessQosPolicy liveliness;
ReliabilityQosPolicy reliability;
OwnershipQosPolicy ownership;
DestinationOrderQosPolicy destination_order;
UserDataQosPolicy user_data;
TimeBasedFilterQosPolicy time_based_filter;
PresentationQosPolicy presentation;
PartitionQosPolicy partition;
TopicDataQosPolicy topic_data;
GroupDataQosPolicy group_data;
};
}}}
The Builtin Topic data IDL for topics is included here for reference.
{{{
struct TopicBuiltinTopicData {
BuiltinTopicKey_t key;
string name;
string type_name;
DurabilityQosPolicy durability;
DurabilityServiceQosPolicy durability_service;
DeadlineQosPolicy deadline;
LatencyBudgetQosPolicy latency_budget;
LivelinessQosPolicy liveliness;
ReliabilityQosPolicy reliability;
TransportPriorityQosPolicy transport_priority;
LifespanQosPolicy lifespan;
DestinationOrderQosPolicy destination_order;
HistoryQosPolicy history;
ResourceLimitsQosPolicy resource_limits;
OwnershipQosPolicy ownership;
TopicDataQosPolicy topic_data;
};
}}}
The IDL used to define the data published as the ~TopicReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct TopicReport {
GUID_t dp_id;
GUID_t topic_id;
string topic_name;
string type_name;
NVPSeq values;
};
}}}
The IDL used to define the data published as the ~TransportReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct TransportReport {
string host;
long pid;
unsigned long transport_id;
string transport_type;
NVPSeq values;
};
}}}
The IDL used to define the data published as the ~DataWriterReport and the ~DataWriterPeriodicReport is included here for reference. This IDL resides within the ''~OpenDDS::DCPS'' module and uses types and values defined in the [[common IDL|CommonIdl]].
{{{
struct DataWriterAssociation {
GUID_t dr_id;
};
typedef sequence<DataWriterAssociation> DWAssociations;
struct DataWriterReport {
GUID_t dp_id;
DDS::InstanceHandle_t pub_handle;
GUID_t dw_id;
GUID_t topic_id;
DDS::InstanceHandleSeq instances;
DWAssociations associations;
NVPSeq values;
};
struct DataWriterAssociationPeriodic {
GUID_t dr_id;
unsigned long sequence_number;
};
typedef sequence<DataWriterAssociationPeriodic> DWAssociationsPeriodic;
struct DataWriterPeriodicReport {
GUID_t dw_id;
unsigned long data_dropped_count;
unsigned long data_delivered_count;
unsigned long control_dropped_count;
unsigned long control_delivered_count;
DWAssociationsPeriodic associations;
NVPSeq values;
};
}}}