Creating custom reports
Naming your XML files
Naming the files is important as it specified the order in which the files are processed. This order is important as later definitions for a named report override those loaded earlier.
The directories are parsed in alphabetical order, with numbers before letters. The standard reports are contained in a file called 00reports.xml.
Writing the custom reports files
The custom reports are defined in simple XML files, the elements of which are described in this topic.
Elements of the XML files
The root element of each reports.xml file must be <reports version="2.0">. The <reports> element can have several types of elements:
- Standard reports:
- <report>: a report. See <report> elements.
- <chart>: a chart. See <chart> elements.
- Channels:
- <chart-channel>: a simple chart channel. See <chart-channel> elements.
- <chart-multi-channel>: a chart channel with multiple values per column. See <chart-multi-channel> elements.
- <report-channel>: a channel containing a list of charts and reports. See <report-channel> elements.
- <summary-channel>: a channel containing node kind counts. See <summary-channel> elements.
- <time-series-channel>: a chart channel containing values over time. See <time-series-channel> elements.
- <video-channel>: a video channel. See <video-channel> elements.
- <web-channel>: a channel containing a web feed. See <web-channel> elements.
- Page information:
- <page>: the selection of channels on one page. See <page> elements.
<report> elements
A <report> element requires a name attribute giving a unique name to the report.
Tag | Details |
|---|---|
Title | Provides the main page title for the report. This tag is mandatory. |
Description | Populates the title attribute of the HTML link. Presented as a tooltip. Also shown as a subtitle in the following example is the main page title. This tag is mandatory. |
Kind | Kind to use in search. Multiple kinds can be specified in a comma-separated list or by using the * wildcard. |
Flags | Any flags to include in the search query. This tag takes an optional keyword attribute which, when given value False, prevents the addition of the FLAGS( prefix and ) postfix. The attribute is normally used if parameters are used to control the flags. |
With | Any with functions to evaluate in the search query. |
Where | Any conditions in the search query. This tag takes a couple of options attributes:
|
Order-by | Sort results of a query by specified order. |
Show | List of attributes to display. This tag takes an optional keyword attribute which, when given value False, prevents the addition of the SHOW keyword. |
Url | Redirect the browser when the report is selected. |
Imports | List of <import> each of which contains a Python module to import. These are used by the <parameters> for <convert>, <default> and <eval> described in the following section. |
Parameters | List of <parameter> each of which contains an interactive parameter filled in by the user. These are described in detail in the following section. |
<parameter> element
Interactive parameters are defined using <parameter> elements. They must have a name, representing the name of the parameter, that is unique in the report.
Tag | Details |
|---|---|
Title | Label of the parameter shown when it is rendered in a form. This tag is mandatory. |
Type | Type of control widget to use for the parameter in the form and is detailed in the following section. This tag is mandatory. |
Key | References a replacement construct in the constructed query. |
Where | Query fragment to add to where clause of the parent element's search string. The reports system inserts the value of the parameter using string substitution with a key of value. |
When the query is built from parameters all the parameters are evaluated as specified by <type>. If a parameter has a where clause it is substituted into the where clause with a key of value. All parameters without a key are then joined together using AND and inserted either at the beginning (<where start="True"> specified) or end of the where clause in the report. The complete query is then constructed. If there are any parameters with a key the completed query has those parameters inserted using string substitution with the specified key of the parameter.
The <type> tag must have a name attribute which specifies the type of the parameter. It should have one of the following values:
- TextField: a text entry field.
- SelectField: a list.
- RelationshipSearchField: a popover node-selection field.
- DateTimeField: a time field.
The tags that can be used with <type> depend upon these values.
Tag | Details |
|---|---|
All | If type is SelectField add an All option to the select list (the default). When given value False prevents the addition of the 'All' option. |
Convert | Function used to convert the default value and user-typed value for use in the query. For example, the function could be common.timeutil.convertFromUnix. This will convert the value to UNIX form, which can then be added to the query. Referenced functions should be fully specified, and the packages and modules required should appear in <imports> elements, described in the previous section. Functions are referenced rather than called so do not need parentheses. The function can also be a lambda function taking one parameter. |
Default | Expression that defines a default value for the parameter. Referenced functions should be fully specified, and the packages and modules required should appear in <imports> elements, described in the previous section. |
Escape | Escape string value. By default string values are escaped. When given value False prevents the escaping. |
Kind | If type is RelationshipSearchField is used to determine which source kind when finding a list of relationships defined in the taxonomy. |
Size | If type is TextField specifies the size of the text field otherwise specifies the number of visible options in the list. |
Options | If the type is SelectField then there are several ways to specify the selection options:
|
Validate | How to validate the parameter. Currently supports:
|
Bringing all this together, the following element defines a parameter that appears in the UI labeled Type as a list with three specified values and no All entry. The <where> tag means that should the user choose Host then kind(#) = 'Host' will be added to the report query.
<title>Type</title>
<type name="SelectField">
<all>False</all>
<options>
<option value="Host">Host</option>
<option value="SoftwareProductVersion">Software Product Version</option>
<option value="BusinessApplicationInstance">Application Instance</option>
</options>
</type>
<where>kind(#)='%(value)s'</where>
</parameter>
The following report will count the number of instances of software instances on the host optionally limiting the software instances to a particular type chosen by the user from a list.
<title>Software Inventory</title>
<description>Shows summary of distribution of a piece of software</description>
<kind>SoftwareInstance</kind>
<show>
type AS "_|Type|_",
product_version AS "_|Product Version|_"
PROCESS WITH
countUnique(1,0)
</show>
<parameters>
<parameter name="Software_Report_InstanceSummary_type">
<title>Product type</title>
<type name="SelectField">
<options>
<query>
SEARCH SoftwareInstance
ORDER BY type
SHOW type
PROCESS WITH unique()
</query>
</options>
</type>
<where>type = %(value)s</where>
</parameter>
</parameters>
</report>
<chart> elements
The <chart> element in fundamentally the same as the <report> element with the following changes:
- the default type of chart can be specified by adding the default attribute to <chart>,
- the <show> tag is used to determine the click-through columns of the chart.
Additional tags are:
Tag | Details |
|---|---|
Split | Indicates the column to chart. This tag takes an optional columns attribute which specifies the number of columns generated by the split. For example, |
Y-axis-title | Indicates the title of the y axis column. This will default to Count unless the <split> provides a second column. |
For single columns the supported charts are:
- pie (default)
- bar
- column
For two columns the supported charts are:
- line (default)
- column
The following chart will show a count of different OS classifications. By default a pie chart will be shown and when clicked through a summary report for the appropriate hosts. When displaying bar and column charts the y-axis will be labeled Hosts.
<title>Host OS Classification</title>
<description>Show count of Hosts for each OS Classification</description>
<kind>Host</kind>
<order-by>os_class</order-by>
<split>os_class AS "_|OS Class|_"</split>
<y-axis-title>_|Hosts|_</y-axis-title>
<show>SUMMARY</show>
</chart>
<chart-channel> elements
The <chart-channel> element requires a name attribute giving a unique name to the chart channel. An optional default attribute gives the initial chart type.
Tag | Details |
|---|---|
Title | Channel title. This tag is mandatory. |
Description | Shown when editing the channels. This tag is mandatory. |
Kind | Kind to use in search. Multiple kinds can be specified in a comma-separated list or by using the * wildcard. |
With | Any with functions to evaluate in the search query. |
Where | Any conditions in the search query. |
Order-by | Sort results of a query by specified order. |
Split | Indicates the column to the chart. The title of the column is used as the axis title. |
Show | List of attributes to display when click-through chart. |
The following channel shows a pie chart of software product categories:
<title>Software Products By Category</title>
<description>Shows a list of the Software by Category</description>
<split>explode(#Element:Maintainer:Pattern:Pattern.categories) AS 'Software Category'</split>
<kind>SoftwareInstance</kind>
<show>
summary,
#Element:Maintainer:Pattern:Pattern.categories AS 'Software Category'
</show>
</chart-channel>
<chart-multi-channel> elements
The <chart-multi-channel> element requires a name attribute giving a unique name to the chart multi-channel. An optional default attribute gives the initial chart type; default="column" displays the legend, default="column_nolegend" hides the legend.
Tag | Details |
|---|---|
Title | Channel title. This tag is mandatory. |
Description | Shown when editing the channels. This tag is mandatory. |
Kind | Kind to use in search. Multiple kinds can be specified in a comma-separated list or by using the * wildcard. |
With | Any with functions to evaluate in the search query. |
Where | Any conditions in the search query. |
Order-by | Sort results of a query by specified order. |
Split | Indicates the column to the chart. The title of the column is used as the axis title. There must be 2 <split> tags. |
Show | List of attributes to display when click-through chart. |
The following channel shows a column chart of database versions with a column for each product type. Each column contains a list of found versions.
<title>Database versions</title>
<description>Number and version of all the Database instances</description>
<split>type</split>
<split>(product_version or 'Unknown')</split>
<kind>Pattern</kind>
<where>
'Relational Database Management Systems' in categories
TRAVERSE Pattern:Maintainer:Element:SoftwareInstance
</where>
<show>SUMMARY</show>
</chart-multi-channel>
<report-channel> elements
The <report-channel> element requires a name attribute giving a unique name to the report channel.
Tag | Details |
|---|---|
Title | Channel title. This tag is mandatory. |
Description | Shown when editing the channels. This tag is mandatory. |
Image | Image to show for the channel. |
Chart | Chart name. The chart definition must appear before this reference. Multiple <chart> tags can be specified. |
Report | Report name. The report definition must appear before this reference. Multiple <report> tags can be specified. |
The following channel contains a link to a report and chart.
<title>Network Policies</title>
<description>Shows a list of Network Infrastructure Reports</description>
<report>Infrastructure.Report.NetworkMismatchSummary</report>
<chart>Infrastructure.Chart.IPAddressDistribution</chart>
</report-channel>
<summary-channel> elements
The <summary-channel> element requires a name attribute giving a unique name to the summary channel.
Tag | Details |
|---|---|
Title | Channel title. This tag is mandatory. |
Description | Shown when editing the channels. This tag is mandatory. |
Image | Image to show for the channel. |
Kind-count | Node kind for which to show count. Multiple <kind-count> entries can be specified. |
The following channel shows the number of Business Application Instance and Software Instance nodes.
<title>Application Summary</title>
<description>_|Shows a summary of Applications|_</description>
<image>applications</image>
<kind-count>BusinessApplicationInstance</kind-count>
<kind-count>SoftwareInstance</kind-count>
</summary-channel>
<time-series-channel> elements
The <time-series-channel> element requires a name attribute giving a unique name to the time series channel.
This is identical to <chart-channel> with two exceptions:
- It performs a historical search and partitions the result into a number of buckets. By default, this is 5 but can be overridden by specifying the time-series attribute on the <time-series-channel> element.
- <split> is optional and if not present the chart will be based on the number of the specified node kind rather than the value of the specified attribute.
The following channel shows the number of Hosts for each UNIX OS over time.
<title>UNIX Operating Systems</title>
<description>Shows a count of Hosts for each UNIX OS</description>
<split>os_type as "OS Version"</split>
<kind>Host</kind>
<where>os_class = "UNIX"</where>
<order-by>os_type</order-by>
<show>SUMMARY</show>
</time-series-channel>
<video-channel> elements
The <video-channel> element requires a name attribute giving a unique name to the video channel.
Tag | Details |
|---|---|
Title | Channel title. This tag is mandatory. |
Description | Shown when editing the channels. This tag is mandatory. |
Image | Image to show for the channel. |
Src | Video source. This tag is mandatory. |
The following channel shows a video feed for creating host profiles.
<title>Feature Tutorial: Host Profiles</title>
<description>Video Tutorial that explains the Host Profiles feature</description>
<src>/videos/HostProfiles.swf</src>
</video-channel>
<web-channel> elements
The <web-channel> element requires a name attribute giving a unique name to the web channel.
Tag | Details |
|---|---|
Title | Channel title. This tag is mandatory. |
Description | Shown when editing the channels. This tag is mandatory. |
URL | URL for the web feed. This tag is mandatory. <url>http://www.google.com</url> |
The following channel shows a web feed for the BMC Discovery Community forum.
<title> Tideway Community Update</title>
<description>Shows the Tideway Community update.</description>
<url>http://www.tideway.com/widgets/foundation-forum/</url>
</web-channel>
<page> elements
The <page> element requires a name attribute giving a unique name to the page.
Tag | Details |
|---|---|
Channel | Reference a previously defined channel. There is an optional builtin attribute that must be specified if the channel is builtin. Multiple channel tags can be specified. The order in which the channels appear on a page is governed by the order of the <channel> tags. |
Built-in channels
The following built-in channels are defined:
Built-In Channel Name | Description |
|---|---|
Discovery.Channel.Status | Summary for Discovery status. |
Infrastructure.Channel.Explore | Summary for the Automatic Grouping. |
Built-in page names
The following are the identifiers for pages with configurable content:
Built-in Page Name | Description |
|---|---|
ApplicationHome | The front page of the applications module. |
DiscoveryReports | Reports in the discovery module. |
Home | The appliance home page. |
InfrastructureHome | The front page of the infrastructure module. |
Reports | The front page of the reports module. |

