MINI MINI MANI MO
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions">
<xsl:strip-space elements="*"/>
<xsl:include href="../xplan/xplHtml.xsl"/>
<xsl:preserve-space elements="indent"/>
<xsl:decimal-format name="kecpr"
decimal-separator="."
grouping-separator=","
infinity="0"
minus-sign="-"
NaN="0"
percent="%"
zero-digit="0"
digit="9"/>
<!-- Define globals here -->
<xsl:variable name="max_count_plus1" select="'6'"/>
<xsl:template match="/">
<html lang="en">
<head>
<title> DB Replay Report </title>
<script type="text/javascript">
function toggle_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'none') {
e.style.display = '';
}
else {
e.style.display = 'none';
}
}
</script>
<style type="text/css">
body, table {
font-size: 8pt;
font-family: Verdana,Arial;
text-decoration: none;
color: #000000;
background-color: #ffffff;
}
th {
color: #ffffff;
background-color: #0066CC;
padding: 2px;
}
td {
padding: 2px;
}
.report_title {
font-size: 20pt;
font-weight: bold;
color: #336699;
}
.chapter_title {
font-size: 14pt;
font-weight: bold;
color: #336699;
text-decoration: underline;
}
.section_title {
font-size: 12pt;
font-weight: bold;
color: #336699;
}
.subsection_title {
font-size: 10pt;
font-weight: bold;
color: #336699;
padding-left: 8px;
}
.no_data_message {
font-size: 8pt;
font-weight: bold;
padding-left: 4px;
color: #000000;
background-color: #ffffff;
}
.hide_this {
display: none;
}
.row0 {
background-color: #ffffbb;
}
.row1 {
background-color: #ffffff;
}
table { empty-cells: show;}
</style>
</head>
<body>
<xsl:apply-templates select="report/header"/>
<xsl:apply-templates select="report/summary"/>
<xsl:apply-templates select="report/consolidated_summary"/>
<xsl:apply-templates select="report/body"/>
<br/>
<b> End of Report. </b>
</body>
</html>
</xsl:template>
<!-- report header -->
<xsl:template match="header">
<!-- report title -->
<div class="report_title">
DB Replay Report for
<xsl:value-of select="replay_info/name"/>
</div>
<hr/>
<p/>
<!-- show database header -->
<table cellspacing="0" cellpadding="0" border="2"
summary="database header">
<tr>
<th scope="col"> DB Name </th>
<th scope="col"> DB Id </th>
<th scope="col"> Release </th>
<th scope="col"> RAC </th>
<th scope="col"> Replay Name </th>
<th scope="col"> Replay Status </th>
</tr>
<tr>
<td scope="row">
<xsl:value-of select="database_header/database_name"/>
</td>
<td>
<xsl:value-of select="database_header/database_id"/>
</td>
<td>
<xsl:value-of select="database_header/database_version"/>
</td>
<td>
<xsl:value-of select="database_header/database_parallel"/>
</td>
<td>
<xsl:value-of select="replay_info/name"/>
</td>
<td>
<xsl:value-of select="replay_info/status"/>
</td>
</tr>
</table>
<p/>
<div class="subsection_title">
Replay Information
</div>
<!-- show capture/replay header -->
<table cellspacing="0" cellpadding="0" border="2"
summary="capture/replay header">
<tr>
<th align="center">
Information
</th>
<th scope="col">
Replay
</th>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<th scope="col">
Capture
</th>
</xsl:if>
</tr>
<tr class="row1">
<td scope="row">
Name
</td>
<td>
<xsl:value-of select="replay_info/name"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/name"/>
</td>
</xsl:if>
</tr>
<tr class="row0">
<td scope="row">
Status
</td>
<td>
<xsl:value-of select="replay_info/status"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/status"/>
</td>
</xsl:if>
</tr>
<tr class="row1">
<td scope="row">
Database Name
</td>
<td>
<xsl:value-of select="replay_info/database_name"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/database_name"/>
</td>
</xsl:if>
</tr>
<tr class="row0">
<td scope="row">
Database Version
</td>
<td>
<xsl:value-of select="replay_info/database_version"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/database_version"/>
</td>
</xsl:if>
</tr>
<xsl:if test="replay_info/error_code != ''">
<tr class="row1">
<td scope="row">
Error Code
</td>
<td>
<xsl:value-of select="replay_info/error_code"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
</td>
</xsl:if>
</tr>
<tr class="row0">
<td scope="row">
Error Message
</td>
<td>
<xsl:value-of select="replay_info/error_message"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
</td>
</xsl:if>
</tr>
</xsl:if>
<tr class="row1">
<td scope="row">
Start Time
</td>
<td>
<xsl:value-of select="replay_info/start_time"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/start_time"/>
</td>
</xsl:if>
</tr>
<tr class="row0">
<td scope="row">
End Time
</td>
<td>
<xsl:value-of select="replay_info/end_time"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/end_time"/>
</td>
</xsl:if>
</tr>
<tr class="row1">
<td scope="row">
Duration
</td>
<td>
<xsl:value-of select="replay_info/duration"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/duration"/>
</td>
</xsl:if>
</tr>
<tr class="row0">
<td scope="row">
Directory Object
</td>
<td>
<xsl:value-of select="replay_info/directory"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/directory"/>
</td>
</xsl:if>
</tr>
<tr class="row1">
<td scope="row">
Directory Path
</td>
<td>
<xsl:value-of select="replay_info/dir_path"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/dir_path"/>
</td>
</xsl:if>
</tr>
<tr class="row0">
<td scope="row">
AWR DB Id
</td>
<td>
<xsl:value-of select="replay_info/awr_dbid"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/awr_dbid"/>
</td>
</xsl:if>
</tr>
<tr class="row1">
<td scope="row">
AWR Begin Snap Id
</td>
<td>
<xsl:value-of select="replay_info/awr_begin_snap"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/awr_begin_snap"/>
</td>
</xsl:if>
</tr>
<tr class="row0">
<td scope="row">
AWR End Snap Id
</td>
<td>
<xsl:value-of select="replay_info/awr_end_snap"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/awr_end_snap"/>
</td>
</xsl:if>
</tr>
<tr class="row1">
<td scope="row">
PL/SQL Mode
</td>
<td>
<xsl:value-of select="replay_info/plsql_mode"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/plsql_mode"/>
</td>
</xsl:if>
</tr>
<tr class="row0">
<td scope="row">
Encryption Algorithm
</td>
<td>
<xsl:value-of select="capture_info/encryption_algorithm"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="capture_info/encryption_algorithm"/>
</td>
</xsl:if>
</tr>
<tr class="row1">
<td scope="row">
Replay Directory Number
</td>
<td>
<xsl:value-of select="replay_info/replay_dir_number"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:text></xsl:text>
</td>
</xsl:if>
</tr>
<tr class="row0">
<td scope="row">
Replay Schedule Name
</td>
<td>
<xsl:value-of select="replay_info/schedule_name"/>
</td>
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<td>
<xsl:value-of select="replay_info/schedule_name"/>
</td>
</xsl:if>
</tr>
</table>
<p/>
<xsl:if test="string-length(replay_info/schedule_name) > 0">
<div class="subsection_title">
Replay Schedule Information
</div>
<xsl:variable name="capnum" select="count(schedule_info/capture_info)"/>
<div class="subsection_title">
Schedule <xsl:value-of select="replay_info/schedule_name"/>
contains <xsl:value-of select="$capnum"/>
<xsl:if test="$capnum>1">
captures:
</xsl:if>
<xsl:if test="$capnum=1">
capture:
</xsl:if>
</div>
<xsl:for-each select="schedule_info/capture_info">
<xsl:sort select="cap_id"/>
<!-- show schedule capture info -->
<table cellspacing="0" cellpadding="0" border="2"
summary="schedule capture header">
<tr>
<th align="center">
Information
</th>
<th scope="col">
Capture <xsl:value-of select="cap_id"/>
</th>
</tr>
<tr class="row1">
<td scope="row">Name</td>
<td> <xsl:value-of select="name"/></td>
</tr>
<tr class="row0">
<td scope="row">Status</td>
<td> <xsl:value-of select="status"/> </td>
</tr>
<tr class="row1">
<td scope="row">Database Name </td>
<td> <xsl:value-of select="database_name"/> </td>
</tr>
<tr class="row0">
<td scope="row">Database Version </td>
<td> <xsl:value-of select="database_version"/> </td>
</tr>
<tr class="row1">
<td scope="row">Start Time </td>
<td> <xsl:value-of select="start_time"/> </td>
</tr>
<tr class="row0">
<td scope="row"> End Time </td>
<td> <xsl:value-of select="end_time"/> </td>
</tr>
<tr class="row1">
<td scope="row"> Duration </td>
<td> <xsl:value-of select="duration"/> </td>
</tr>
<tr class="row0">
<td scope="row"> DB Time </td>
<td>
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="dbtime div 1000000"/>
<xsl:with-param name="round_to"
select="3"/>
</xsl:call-template> seconds
</td>
</tr>
<tr class="row1">
<td scope="row"> User Calls </td>
<td> <xsl:value-of select="user_calls"/> </td>
</tr>
<tr class="row0">
<td scope="row"> Average Active Sessions </td>
<td> <xsl:value-of select="average_active_sessions"/> </td>
</tr>
<tr class="row1">
<td scope="row"> Directory Object </td>
<td> <xsl:value-of select="directory"/> </td>
</tr>
<tr class="row0">
<td scope="row"> Directory Path </td>
<td> <xsl:value-of select="dir_path"/> </td>
</tr>
<tr class="row1">
<xsl:variable name="sdelay" select="start_delay"/>
<td scope="row"> Start Delay</td>
<td> <xsl:value-of select="start_delay"/>
<xsl:if test="$sdelay < 2"> second </xsl:if>
<xsl:if test="$sdelay > 1"> seconds </xsl:if>
</td>
</tr>
<tr class="row0">
<td scope="row"> Query Only </td>
<td> <xsl:value-of select="query_only"/> </td>
</tr>
</table>
<p/>
</xsl:for-each>
<p/>
<xsl:if test="count(schedule_ordering_info/ordering_info)>0">
<div class="subsection_title">
Replay Schedule Ordering Information
</div>
<!-- show replay schedule ordering header -->
<table cellspacing="0" cellpadding="0" border="2"
summary="replay schedule ordering header">
<tr>
<th scope="col">
Schedule Cap#
</th>
<th scope="col">
Waitfor Cap#
</th>
</tr>
<xsl:for-each select="schedule_ordering_info/ordering_info">
<xsl:if test="position() mod 2 = 0">
<tr class="row0">
<td scope="row" align="center">
<xsl:value-of select="schedule_cap_id"/>
</td>
<td align="center">
<xsl:value-of select="waitfor_cap_id"/>
</td>
</tr>
</xsl:if>
<xsl:if test="position() mod 2 = 1">
<tr>
<td scope="row" align="center">
<xsl:value-of select="schedule_cap_id"/>
</td>
<td align="center">
<xsl:value-of select="waitfor_cap_id"/>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
<p/>
</xsl:if>
</xsl:if>
<div class="subsection_title">
Replay Options
</div>
<!-- show replay configuration -->
<table cellspacing="0" cellpadding="0" border="2"
summary="replay options">
<tr>
<th align="center">
Option Name
</th>
<th scope="col">
Value
</th>
</tr>
<tr class="row1">
<td scope="row">
Synchronization
</td>
<td>
<xsl:value-of select="replay_info/synchronization"/>
</td>
</tr>
<tr class="row0">
<td scope="row">
Connect Time
</td>
<td>
<xsl:value-of select="replay_info/connect_time_scale"/>%
</td>
</tr>
<tr class="row1">
<td scope="row">
Think Time
</td>
<td>
<xsl:value-of select="replay_info/think_time_scale"/>%
</td>
</tr>
<tr class="row0">
<td scope="row">
Think Time Auto Correct
</td>
<td>
<xsl:value-of select="replay_info/think_time_auto_correct"/>
</td>
</tr>
<tr class="row1">
<td scope="row">
Number of WRC Clients
</td>
<td>
<xsl:value-of select="replay_info/num_clients"/>
(<xsl:value-of select="replay_info/num_clients_done"/> Completed,
<xsl:choose>
<xsl:when test="replay_info/num_clients
>
replay_info/num_clients_done">
<xsl:value-of select="replay_info/num_clients
- replay_info/num_clients_done"/>
</xsl:when>
<xsl:otherwise>
0
</xsl:otherwise>
</xsl:choose>
Running
)
</td>
</tr>
</table>
<p/>
<div class="subsection_title">
Replay Statistics
</div>
<!-- show capture/replay stats -->
<table cellspacing="0" cellpadding="0" border="2"
summary="capture/replay statistics">
<tr>
<th align="center">
Statistic
</th>
<th scope="col">
Replay
</th>
<th scope="col">
<xsl:if test="string-length(replay_info/schedule_name) = 0">
Capture
</xsl:if>
<xsl:if test="string-length(replay_info/schedule_name) > 0">
Consolidated Captures
</xsl:if>
</th>
</tr>
<tr class="row1">
<td scope="row">
DB Time
</td>
<td align="right">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="replay_info/dbtime div 1000000"/>
<xsl:with-param name="round_to"
select="3"/>
</xsl:call-template> seconds
</td>
<td align="right">
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="capture_info/dbtime div 1000000"/>
<xsl:with-param name="round_to"
select="3"/>
</xsl:call-template> seconds
</xsl:if>
<xsl:if test="string-length(replay_info/schedule_name) > 0">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="sum(schedule_info/capture_info/dbtime) div 1000000"/>
<xsl:with-param name="round_to"
select="3"/>
</xsl:call-template> seconds
</xsl:if>
</td>
</tr>
<tr class="row0">
<td scope="row">
PL/SQL DB Time
</td>
<td align="right">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="replay_info/plsql_dbtime div 1000000"/>
<xsl:with-param name="round_to"
select="3"/>
</xsl:call-template> seconds
</td>
<td align="right">
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="capture_info/plsql_dbtime div 1000000"/>
<xsl:with-param name="round_to"
select="3"/>
</xsl:call-template> seconds
</xsl:if>
<xsl:if test="string-length(replay_info/schedule_name) > 0">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="sum(schedule_info/capture_info/plsql_dbtime) div 1000000"/>
<xsl:with-param name="round_to"
select="3"/>
</xsl:call-template> seconds
</xsl:if>
</td>
</tr>
<tr class="row1">
<td scope="row">
Average Active Sessions
</td>
<td align="right">
<xsl:value-of select="replay_info/average_active_sessions"/>
</td>
<td align="right">
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<xsl:value-of select="capture_info/average_active_sessions"/>
</xsl:if>
<xsl:if test="string-length(replay_info/schedule_name) > 0">
<xsl:value-of select="sum(schedule_info/capture_info/average_active_sessions)"/>
</xsl:if>
</td>
</tr>
<tr class="row0">
<td scope="row">
User calls
</td>
<td align="right">
<xsl:value-of select="replay_info/user_calls"/>
</td>
<td align="right">
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<xsl:value-of select="capture_info/user_calls"/>
</xsl:if>
<xsl:if test="string-length(replay_info/schedule_name) > 0">
<xsl:value-of select="sum(schedule_info/capture_info/user_calls)"/>
</xsl:if>
</td>
</tr>
<tr class="row1">
<td scope="row">
PL/SQL user calls
</td>
<td align="right">
<xsl:value-of select="replay_info/plsql_calls"/>
</td>
<td align="right">
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<xsl:value-of select="capture_info/plsql_calls"/>
</xsl:if>
<xsl:if test="string-length(replay_info/schedule_name) > 0">
<xsl:value-of select="sum(schedule_info/capture_info/plsql_calls)"/>
</xsl:if>
</td>
</tr>
<tr class="row0">
<td scope="row">
PL/SQL subcalls
</td>
<td align="right">
<xsl:value-of select="replay_info/plsql_subcalls"/>
</td>
<td align="right">
<xsl:if test="string-length(replay_info/schedule_name) = 0">
<xsl:value-of select="capture_info/plsql_subcalls"/>
</xsl:if>
<xsl:if test="string-length(replay_info/schedule_name) > 0">
<xsl:value-of select="sum(schedule_info/capture_info/plsql_subcalls)"/>
</xsl:if>
</td>
</tr>
</table>
</xsl:template>
<!-- report summary -->
<xsl:template match="summary">
<p/>
<div class="chapter_title">
Replay Divergence Summary
</div>
<xsl:call-template name="summary_display"/>
<p/>
<hr/>
</xsl:template>
<!-- new report summary -->
<xsl:template match="consolidated_summary">
<p/>
<div class="chapter_title">
Consolidated Replay Divergence Summary
</div>
<xsl:for-each select="summary">
<xsl:choose>
<xsl:when test="@schedule_capture_id">
<xsl:call-template name="summary_display">
<xsl:with-param name="sched_cap_id"
select="@schedule_capture_id"/>
<xsl:with-param name="cap_name" select="@capture_name"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="summary_display">
<xsl:with-param name="cap_name" select="'total'"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<p/>
<hr/>
</xsl:template>
<!-- report body -->
<xsl:template match="body">
<div class="chapter_title">
Workload Profile
</div>
<xsl:apply-templates select="workload_profile"/>
<xsl:apply-templates select="divergence"/>
<xsl:apply-templates select="consolidated_divergence"/>
<div class="chapter_title">
Replay Clients Alerts
</div>
<xsl:apply-templates select="alerts"/>
<div class="chapter_title">
Replay Filters
</div>
<xsl:apply-templates select="filters"/>
</xsl:template>
<!-- render workload profile -->
<xsl:template match="workload_profile">
<div class="section_title">
Top Events
</div>
<xsl:apply-templates select="top_events"/>
<div class="section_title">
Top Service/Module/Action
</div>
<xsl:apply-templates select="top_service_module_actions"/>
<div class="section_title">
Top SQL with Top Events
</div>
<xsl:apply-templates select="top_sql_events"/>
<div class="section_title">
Top Sessions with Top Events
</div>
<xsl:apply-templates select="top_session_events"/>
<hr/>
</xsl:template>
<!-- render top events profile -->
<xsl:template match="top_events">
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="'top_events'"/>
</xsl:call-template>
<table id="top_events" cellpadding="0" cellspacing="0" border="2"
summary="top events">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'Event'"/>
<xsl:with-param name="heading2" select="'Event Class'"/>
<xsl:with-param name="heading3" select="'% Activity'"/>
</xsl:call-template>
</tr>
<xsl:call-template name="show_1d_rows">
<xsl:with-param name="element" select="'event'"/>
<xsl:with-param name="prm1" select="'event_name'"/>
<xsl:with-param name="prm2" select="'wait_class'"/>
<xsl:with-param name="count" select="'ash_count'"/>
</xsl:call-template>
</table>
</xsl:template>
<!-- render top service/module/action profile -->
<xsl:template match="top_service_module_actions">
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="'top_service_module_actions'"/>
</xsl:call-template>
<table id="top_service_module_actions"
cellpadding="0" cellspacing="0" border="2"
summary="top service/module/action">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'Service Name'"/>
<xsl:with-param name="heading2" select="'Module Name'"/>
<xsl:with-param name="heading3" select="'% Activity'"/>
<xsl:with-param name="heading4" select="'Action Drilldown'"/>
</xsl:call-template>
</tr>
<xsl:call-template name="show_2d_rows">
<xsl:with-param name="element" select="'service_module'"/>
<xsl:with-param name="prm1" select="'service_name'"/>
<xsl:with-param name="prm2" select="'module_name'"/>
<xsl:with-param name="count" select="'ash_count'"/>
<xsl:with-param name="delement" select="'action'"/>
<xsl:with-param name="dprm1_heading" select="'Action Name'"/>
<xsl:with-param name="dprm1" select="'action_name'"/>
<xsl:with-param name="dcount_heading" select="'% Activity'"/>
<xsl:with-param name="dcount" select="'ash_count'"/>
</xsl:call-template>
</table>
</xsl:template>
<!-- render top sql with events profile -->
<xsl:template match="top_sql_events">
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="'top_sql_events'"/>
</xsl:call-template>
<table id="top_sql_events" cellpadding="0" cellspacing="0" border="2"
summary="top SQL with top events">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'SQL ID'"/>
<xsl:with-param name="heading2" select="'Planhash'"/>
<xsl:with-param name="heading3" select="'Sampled Number of Executions'"/>
<xsl:with-param name="heading4" select="'% Activity'"/>
<xsl:with-param name="heading5" select="'Event Drilldown'"/>
</xsl:call-template>
</tr>
<xsl:call-template name="show_2d_rows">
<xsl:with-param name="element" select="'sql"/>
<xsl:with-param name="prm1" select="'sql_id'"/>
<xsl:with-param name="prm2" select="'planhash'"/>
<xsl:with-param name="prm3" select="'ash_num_executions'"/>
<xsl:with-param name="count" select="'ash_count'"/>
<xsl:with-param name="delement" select="'event'"/>
<xsl:with-param name="dprm1_heading" select="'Event'"/>
<xsl:with-param name="dprm1" select="'event_name'"/>
<xsl:with-param name="dcount_heading" select="'% Activity'"/>
<xsl:with-param name="dcount" select="'ash_count'"/>
</xsl:call-template>
</table>
</xsl:template>
<!-- render top session with events profile -->
<xsl:template match="top_session_events">
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="'top_session_events'"/>
</xsl:call-template>
<table id="top_session_events" cellpadding="0" cellspacing="0" border="2"
summary="top sessions with top events">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'Session ID'"/>
<xsl:with-param name="heading2" select="'Session Serial'"/>
<xsl:with-param name="heading3" select="'Username'"/>
<xsl:with-param name="heading4" select="'Program'"/>
<xsl:with-param name="heading5" select="'% Activity'"/>
<xsl:with-param name="heading6" select="'Event Drilldown'"/>
</xsl:call-template>
</tr>
<xsl:call-template name="show_2d_rows">
<xsl:with-param name="element" select="'session'"/>
<xsl:with-param name="prm1" select="'session_id'"/>
<xsl:with-param name="prm2" select="'session_serial'"/>
<xsl:with-param name="prm3" select="'user_name'"/>
<xsl:with-param name="prm4" select="'program_name'"/>
<xsl:with-param name="count" select="'ash_count'"/>
<xsl:with-param name="delement" select="'event'"/>
<xsl:with-param name="dprm1_heading" select="'Event'"/>
<xsl:with-param name="dprm1" select="'event_name'"/>
<xsl:with-param name="dcount_heading" select="'% Activity'"/>
<xsl:with-param name="dcount" select="'ash_count'"/>
</xsl:call-template>
</table>
</xsl:template>
<!-- render alerts -->
<xsl:template match="alerts">
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="'alerts'"/>
</xsl:call-template>
<table id="alerts" cellpadding="0" cellspacing="0" border="2"
summary="alerts">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'Alert Name'"/>
</xsl:call-template>
</tr>
<xsl:call-template name="show_1d_rows">
<xsl:with-param name="element" select="'alert'"/>
<xsl:with-param name="prm1" select="'alert_name'"/>
</xsl:call-template>
</table>
</xsl:template>
<xsl:template match="divergence">
<div class="chapter_title">
Replay Divergence
</div>
<xsl:call-template name="divergence_details"/>
</xsl:template>
<xsl:template match="consolidated_divergence">
<div class="chapter_title">
Consolidated Replay Divergence
</div>
<xsl:for-each select="divergence">
<xsl:call-template name="divergence_details">
<xsl:with-param name="schedule_capture_id"
select="@schedule_capture_id"/>
<xsl:with-param name="capture_name" select="@capture_name"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<!-- render filters -->
<xsl:template match="filters">
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="'filters'"/>
</xsl:call-template>
<table id="filters" cellpadding="0" cellspacing="0" border="2"
summary="replay filters">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'#'"/>
<xsl:with-param name="heading2" select="'Type'"/>
<xsl:with-param name="heading3" select="'Attribute'"/>
<xsl:with-param name="heading4" select="'Value'"/>
</xsl:call-template>
</tr>
<xsl:call-template name="show_1d_rows">
<xsl:with-param name="element" select="'filter'"/>
<xsl:with-param name="prm1" select="'fnumber'"/>
<xsl:with-param name="prm2" select="'type'"/>
<xsl:with-param name="prm3" select="'attribute'"/>
<xsl:with-param name="prm4" select="'value'"/>
</xsl:call-template>
</table>
</xsl:template>
<xsl:template name="ora_round">
<xsl:param name="number" select=""/>
<xsl:param name="round_to" select=""/>
<xsl:variable name="format_string">
<xsl:choose>
<xsl:when test="$round_to = 0">999999999999999999999990</xsl:when>
<xsl:when test="$round_to = 1">999999999999999999999990.0</xsl:when>
<xsl:when test="$round_to = 2">999999999999999999999990.00</xsl:when>
<xsl:when test="$round_to = 3">999999999999999999999990.000</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="format-number($number,
$format_string,
'kecpr')"/>
</xsl:template>
<xsl:template name="show_hide_controls">
<xsl:param name="id" select=""/>
<xsl:variable name="id_show_divname"
select="concat($id, '_show')"/>
<xsl:variable name="id_hide_divname"
select="concat($id, '_hide')"/>
<xsl:variable name="javascript_onclick_code"
select='concat("toggle_visibility('",
$id,
"'); ",
"toggle_visibility('",
$id_show_divname,
"'); ",
"toggle_visibility('",
$id_hide_divname,
"'); "
)'/>
<ora_invisible>
<xsl:element name="div">
<xsl:attribute name="id">
<xsl:value-of select="$id_show_divname"/>
</xsl:attribute>
<xsl:attribute name="style">
<xsl:value-of select="'display: none;'"/>
</xsl:attribute>
<xsl:element name="a">
<xsl:attribute name="href">#anchor_<xsl:value-of select="$id_show_divname"/></xsl:attribute>
<xsl:attribute name="name">anchor_<xsl:value-of select="$id_show_divname"/></xsl:attribute>
<xsl:attribute name="onclick">
<xsl:value-of select="$javascript_onclick_code"
disable-output-escaping="yes"/>
</xsl:attribute>
(+) Show
</xsl:element>
</xsl:element>
</ora_invisible>
<ora_invisible>
<xsl:element name="div">
<xsl:attribute name="id">
<xsl:value-of select="$id_hide_divname"/>
</xsl:attribute>
<xsl:element name="a">
<xsl:attribute name="href">#anchor_<xsl:value-of select="$id_hide_divname"/></xsl:attribute>
<xsl:attribute name="name">anchor_<xsl:value-of select="$id_hide_divname"/></xsl:attribute>
<xsl:attribute name="onclick">
<xsl:value-of select="$javascript_onclick_code"
disable-output-escaping="yes"/>
</xsl:attribute>
(-) Hide
</xsl:element>
</xsl:element>
</ora_invisible>
</xsl:template>
<xsl:template name="show_table_header">
<xsl:param name="element" select=""/>
<xsl:param name="heading1" select=""/>
<xsl:param name="heading2" select=""/>
<xsl:param name="heading3" select=""/>
<xsl:param name="heading4" select=""/>
<xsl:param name="heading5" select=""/>
<xsl:param name="heading6" select=""/>
<xsl:param name="heading7" select=""/>
<xsl:param name="heading8" select=""/>
<xsl:param name="heading9" select=""/>
<xsl:param name="heading10" select=""/>
<xsl:choose>
<xsl:when test="count(child::*) = 0">
<td scope="row">
<div class="no_data_message">
No data exists for this section of the report.
</div>
</td>
</xsl:when>
<xsl:otherwise>
<xsl:if test="$heading1 != ''">
<th scope="col">
<xsl:value-of select="$heading1"/>
</th>
</xsl:if>
<xsl:if test="$heading2 != ''">
<th scope="col">
<xsl:value-of select="$heading2"/>
</th>
</xsl:if>
<xsl:if test="$heading3 != ''">
<th scope="col">
<xsl:value-of select="$heading3"/>
</th>
</xsl:if>
<xsl:if test="$heading4 != ''">
<th scope="col">
<xsl:value-of select="$heading4"/>
</th>
</xsl:if>
<xsl:if test="$heading5 != ''">
<th scope="col">
<xsl:value-of select="$heading5"/>
</th>
</xsl:if>
<xsl:if test="$heading6 != ''">
<th scope="col">
<xsl:value-of select="$heading6"/>
</th>
</xsl:if>
<xsl:if test="$heading7 != ''">
<th scope="col">
<xsl:value-of select="$heading7"/>
</th>
</xsl:if>
<xsl:if test="$heading8 != ''">
<th scope="col">
<xsl:value-of select="$heading8"/>
</th>
</xsl:if>
<xsl:if test="$heading9 != ''">
<th scope="col">
<xsl:value-of select="$heading9"/>
</th>
</xsl:if>
<xsl:if test="$heading10 != ''">
<th scope="col">
<xsl:value-of select="$heading10"/>
</th>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="show_1d_1row">
<xsl:param name="prm1" select=""/>
<xsl:param name="prm2" select=""/>
<xsl:param name="prm3" select=""/>
<xsl:param name="prm4" select=""/>
<xsl:param name="prm5" select=""/>
<xsl:param name="prm6" select=""/>
<xsl:param name="count" select=""/>
<xsl:if test="$prm1 != ''">
<td scope="row">
<xsl:value-of select="$prm1"/>
</td>
</xsl:if>
<xsl:if test="$prm2 != ''">
<td>
<xsl:value-of select="$prm2"/>
</td>
</xsl:if>
<xsl:if test="$prm3 != ''">
<td>
<xsl:value-of select="$prm3"/>
</td>
</xsl:if>
<xsl:if test="$prm4 != ''">
<td>
<xsl:value-of select="$prm4"/>
</td>
</xsl:if>
<xsl:if test="$prm5 != ''">
<td>
<xsl:value-of select="$prm5"/>
</td>
</xsl:if>
<xsl:if test="$prm6 != ''">
<td>
<xsl:value-of select="$prm6"/>
</td>
</xsl:if>
<xsl:if test="$count != ''">
<td align="right">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="$count * 100
div
/report/body/workload_profile/ash/total_ash_count"/>
<xsl:with-param name="round_to"
select="2"/>
</xsl:call-template>
</td>
</xsl:if>
</xsl:template>
<xsl:template name="show_1d_rows">
<xsl:param name="element" select=""/>
<xsl:param name="prm1" select=""/>
<xsl:param name="prm2" select=""/>
<xsl:param name="prm3" select=""/>
<xsl:param name="prm4" select=""/>
<xsl:param name="prm5" select=""/>
<xsl:param name="prm6" select=""/>
<xsl:param name="count" select=""/>
<xsl:for-each select="child::*[name() = $element and
position() < $max_count_plus1]">
<xsl:variable name="odd_or_even"
select="position() mod 2"/>
<tr>
<xsl:attribute name="class">
row<xsl:value-of select="$odd_or_even"/>
</xsl:attribute>
<xsl:call-template name="show_1d_1row">
<xsl:with-param name="prm1"
select="attribute::*[name() = $prm1]"/>
<xsl:with-param name="prm2"
select="attribute::*[name() = $prm2]"/>
<xsl:with-param name="prm3"
select="attribute::*[name() = $prm3]"/>
<xsl:with-param name="prm4"
select="attribute::*[name() = $prm4]"/>
<xsl:with-param name="prm5"
select="attribute::*[name() = $prm5]"/>
<xsl:with-param name="prm6"
select="attribute::*[name() = $prm6]"/>
<xsl:with-param name="count"
select="attribute::*[name() = $count]"/>
</xsl:call-template>
</tr>
</xsl:for-each>
</xsl:template>
<xsl:template name="show_2d_rows">
<xsl:param name="element" select=""/>
<xsl:param name="prm1" select=""/>
<xsl:param name="prm2" select=""/>
<xsl:param name="prm3" select=""/>
<xsl:param name="prm4" select=""/>
<xsl:param name="prm5" select=""/>
<xsl:param name="prm6" select=""/>
<xsl:param name="count" select=""/>
<xsl:param name="delement" select=""/>
<xsl:param name="dprm1_heading" select=""/>
<xsl:param name="dprm1" select=""/>
<xsl:param name="dprm2_heading" select=""/>
<xsl:param name="dprm2" select=""/>
<xsl:param name="dprm3_heading" select=""/>
<xsl:param name="dprm3" select=""/>
<xsl:param name="dprm4_heading" select=""/>
<xsl:param name="dprm4" select=""/>
<xsl:param name="dprm5_heading" select=""/>
<xsl:param name="dprm5" select=""/>
<xsl:param name="dprm6_heading" select=""/>
<xsl:param name="dprm6" select=""/>
<xsl:param name="dcount_heading" select=""/>
<xsl:param name="dcount" select=""/>
<xsl:for-each select="child::*[name() = $element and
position() < $max_count_plus1]">
<xsl:variable name="odd_or_even"
select="position() mod 2"/>
<tr valign="top">
<xsl:attribute name="class">
row<xsl:value-of select="$odd_or_even"/>
</xsl:attribute>
<xsl:call-template name="show_1d_1row">
<xsl:with-param name="prm1"
select="attribute::*[name() = $prm1]"/>
<xsl:with-param name="prm2"
select="attribute::*[name() = $prm2]"/>
<xsl:with-param name="prm3"
select="attribute::*[name() = $prm3]"/>
<xsl:with-param name="prm4"
select="attribute::*[name() = $prm4]"/>
<xsl:with-param name="prm5"
select="attribute::*[name() = $prm5]"/>
<xsl:with-param name="prm6"
select="attribute::*[name() = $prm6]"/>
<xsl:with-param name="count"
select="attribute::*[name() = $count]"/>
</xsl:call-template>
<td>
<table cellpadding="0" cellspacing="0" border="2" width="100%"
summary="embedded data table">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="$dprm1_heading"/>
<xsl:with-param name="heading2" select="$dprm2_heading"/>
<xsl:with-param name="heading3" select="$dprm3_heading"/>
<xsl:with-param name="heading4" select="$dprm4_heading"/>
<xsl:with-param name="heading5" select="$dprm5_heading"/>
<xsl:with-param name="heading6" select="$dprm6_heading"/>
<xsl:with-param name="heading7" select="$dcount_heading"/>
</xsl:call-template>
</tr>
<xsl:call-template name="show_1d_rows">
<xsl:with-param name="element" select="$delement"/>
<xsl:with-param name="prm1" select="$dprm1"/>
<xsl:with-param name="prm2" select="$dprm2"/>
<xsl:with-param name="prm3" select="$dprm3"/>
<xsl:with-param name="prm4" select="$dprm4"/>
<xsl:with-param name="prm5" select="$dprm5"/>
<xsl:with-param name="prm6" select="$dprm6"/>
<xsl:with-param name="count" select="$dcount"/>
</xsl:call-template>
</table>
</td>
</tr>
</xsl:for-each>
</xsl:template>
<xsl:template name="show_divergence_row">
<xsl:param name="prm1" select=""/>
<xsl:param name="prm2" select=""/>
<xsl:param name="prm3" select=""/>
<xsl:param name="prm4" select=""/>
<xsl:param name="prm5" select=""/>
<xsl:param name="prm6" select=""/>
<xsl:param name="count" select=""/>
<xsl:param name="first_occur" select=""/>
<xsl:param name="last_occur" select=""/>
<xsl:if test="$prm1 != ''">
<td>
<xsl:value-of select="$prm1"/>
</td>
</xsl:if>
<xsl:if test="$prm2 != ''">
<td>
<xsl:value-of select="$prm2"/>
</td>
</xsl:if>
<xsl:if test="$prm3 != ''">
<td>
<xsl:value-of select="$prm3"/>
</td>
</xsl:if>
<xsl:if test="$prm4 != ''">
<td>
<xsl:value-of select="$prm4"/>
</td>
</xsl:if>
<xsl:if test="$prm5 != ''">
<td>
<xsl:value-of select="$prm5"/>
</td>
</xsl:if>
<xsl:if test="$prm6 != ''">
<td>
<xsl:value-of select="$prm6"/>
</td>
</xsl:if>
<td>
<xsl:value-of select="$count"/>
</td>
<xsl:if test="$first_occur != ''">
<td>
<xsl:value-of select="$first_occur"/>
</td>
</xsl:if>
<xsl:if test="$last_occur != ''">
<td>
<xsl:value-of select="$last_occur"/>
</td>
</xsl:if>
</xsl:template>
<xsl:template name="summary_display">
<xsl:param name="sched_cap_id" select=""/>
<xsl:param name="cap_name" select=""/>
<p/>
<xsl:if test="$sched_cap_id != ''">
<div class="subsection_title">
Capture <xsl:value-of select="$sched_cap_id"/>:
<xsl:value-of select="$cap_name"/><br/>
</div>
</xsl:if>
<xsl:if test="$cap_name = 'total'">
<div class="subsection_title">
Total Workload
</div>
</xsl:if>
<!-- adjust on whether this is for a regular or consolidated replay -->
<xsl:variable name="total_user_calls">
<xsl:choose>
<xsl:when test="$sched_cap_id != ''">
<xsl:value-of
select="/report/header/schedule_info/capture_info[cap_id=$sched_cap_id]/user_calls"/>
</xsl:when>
<xsl:when test="$cap_name = 'total'">
<xsl:value-of
select="sum(/report/header/schedule_info/capture_info/user_calls)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="/report/header/capture_info/user_calls"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- show replay divergence summary -->
<table cellspacing="0" cellpadding="0" border="2"
summary="replay divergence summary">
<tr>
<th align="center">
Divergence Type
</th>
<th scope="col">
Count
</th>
<th scope="col">
% Total
</th>
</tr>
<tr class="row1">
<td scope="row">
Session Failures During Replay
</td>
<td align="right">
<xsl:value-of select="divergence/session_failures/count"/>
</td>
<td align="right">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="divergence/session_failures/count * 100
div
$total_user_calls"/>
<xsl:with-param name="round_to"
select="2"/>
</xsl:call-template>
</td>
</tr>
<tr class="row0">
<td scope="row">
Errors No Longer Seen During Replay
</td>
<td align="right">
<xsl:value-of select="divergence/error/capture_only"/>
</td>
<td align="right">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="divergence/error/capture_only * 100
div
$total_user_calls"/>
<xsl:with-param name="round_to"
select="2"/>
</xsl:call-template>
</td>
</tr>
<tr class="row1">
<td scope="row">
New Errors Seen During Replay
</td>
<td align="right">
<xsl:value-of select="divergence/error/new_errors"/>
</td>
<td align="right">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="divergence/error/new_errors * 100
div
$total_user_calls"/>
<xsl:with-param name="round_to"
select="2"/>
</xsl:call-template>
</td>
</tr>
<tr class="row0">
<td scope="row">
Errors Mutated During Replay
</td>
<td align="right">
<xsl:value-of select="divergence/error/mutated_errors"/>
</td>
<td align="right">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="divergence/error/mutated_errors * 100
div
$total_user_calls"/>
<xsl:with-param name="round_to"
select="2"/>
</xsl:call-template>
</td>
</tr>
<tr class="row1">
<td scope="row">
DMLs with Different Number of Rows Modified
</td>
<td align="right">
<xsl:value-of select="divergence/dml_data/count"/>
</td>
<td align="right">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="divergence/dml_data/count * 100
div
$total_user_calls"/>
<xsl:with-param name="round_to"
select="2"/>
</xsl:call-template>
</td>
</tr>
<tr class="row0">
<td scope="row">
SELECTs with Different Number of Rows Fetched
</td>
<td align="right">
<xsl:value-of select="divergence/query_data/count"/>
</td>
<td align="right">
<xsl:call-template name="ora_round">
<xsl:with-param name="number"
select="divergence/query_data/count * 100
div
$total_user_calls"/>
<xsl:with-param name="round_to"
select="2"/>
</xsl:call-template>
</td>
</tr>
</table>
<p/>
</xsl:template>
<xsl:template name="divergence_details">
<xsl:param name="schedule_capture_id" select=""/>
<xsl:param name="capture_name" select=""/>
<xsl:if test="$schedule_capture_id != ''">
<div class="section_title">
Capture <xsl:value-of select="$schedule_capture_id"/>:
<xsl:value-of select="$capture_name"/>
</div>
</xsl:if>
<div class="section_title">
Session Failures
</div>
<xsl:apply-templates select="session_failures"/>
<div class="section_title">
Error Divergence
</div>
<xsl:apply-templates select="error"/>
<div class="section_title">
DML Data Divergence
</div>
<xsl:apply-templates select="dml_data"/>
<div class="section_title">
SELECT Data Divergence
</div>
<xsl:apply-templates select="query_data"/>
<hr/>
</xsl:template>
<!-- render session failures divergence details -->
<xsl:template match="session_failures">
<div class="subsection_title">
By Application
</div>
<xsl:apply-templates select="by_app"/>
</xsl:template>
<!-- render error divergence details -->
<xsl:template match="error">
<div class="subsection_title">
By Application
</div>
<xsl:apply-templates select="by_app"/>
<div class="subsection_title">
By SQL
</div>
<xsl:apply-templates select="by_sql"/>
<!-- REMOVE by session reporting as it is not meaningful
<div class="subsection_title">
By Session
</div>
<xsl:apply-templates select="by_session"/>
-->
</xsl:template>
<!-- render DML data divergence details -->
<xsl:template match="dml_data">
<div class="subsection_title">
By Application
</div>
<xsl:apply-templates select="by_app"/>
<div class="subsection_title">
By SQL
</div>
<xsl:apply-templates select="by_sql"/>
</xsl:template>
<!-- render SELECT data divergence details -->
<xsl:template match="query_data">
<div class="subsection_title">
By Application
</div>
<xsl:apply-templates select="by_app"/>
</xsl:template>
<xsl:template match="session_failures/by_app">
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="'session_failures_by_app'"/>
</xsl:call-template>
<table id="session_failures_by_app"
cellpadding="0" cellspacing="0" border="2"
summary="session failures by application">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'Error'"/>
<xsl:with-param name="heading2" select="'Module Name'"/>
<xsl:with-param name="heading4" select="'Count'"/>
</xsl:call-template>
</tr>
<xsl:for-each select="row">
<tr>
<xsl:call-template name="show_divergence_row">
<xsl:with-param name="prm1" select="error_number"/>
<xsl:with-param name="prm2" select="module_name"/>
<xsl:with-param name="count" select="count"/>
</xsl:call-template>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="error/by_app">
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="'error_by_app'"/>
</xsl:call-template>
<table id="error_by_app" cellpadding="0" cellspacing="0" border="2"
summary="error divergence by application">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'Service Name"/>
<xsl:with-param name="heading2" select="'Module Name"/>
<xsl:with-param name="heading4" select="'Capture Error'"/>
<xsl:with-param name="heading5" select="'Replay Error'"/>
<xsl:with-param name="heading6" select="'Count'"/>
</xsl:call-template>
</tr>
<xsl:for-each select="row">
<tr>
<xsl:call-template name="show_divergence_row">
<xsl:with-param name="prm1" select="service_name"/>
<xsl:with-param name="prm2" select="module_name"/>
<xsl:with-param name="prm4" select="capture_error"/>
<xsl:with-param name="prm5" select="replay_error"/>
<xsl:with-param name="count" select="count"/>
</xsl:call-template>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="error/by_sql">
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="'error_by_sql'"/>
</xsl:call-template>
<table id="error_by_sql" cellpadding="0" cellspacing="0" border="2"
summary="error divergence by SQL">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'SQL ID'"/>
<xsl:with-param name="heading2" select="'Capture Error'"/>
<xsl:with-param name="heading3" select="'Replay Error'"/>
<xsl:with-param name="heading4" select="'Count'"/>
</xsl:call-template>
</tr>
<xsl:for-each select="row">
<tr>
<xsl:call-template name="show_divergence_row">
<xsl:with-param name="prm1" select="sql_id"/>
<xsl:with-param name="prm2" select="capture_error"/>
<xsl:with-param name="prm3" select="replay_error"/>
<xsl:with-param name="count" select="count"/>
</xsl:call-template>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="error/by_session">
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="'error_by_session'"/>
</xsl:call-template>
<table id="error_by_session" cellpadding="0" cellspacing="0" border="2"
summary="error divergence by session">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'Session ID'"/>
<xsl:with-param name="heading2" select="'Session Serial'"/>
<xsl:with-param name="heading3" select="'Capture Error'"/>
<xsl:with-param name="heading4" select="'Replay Error'"/>
<xsl:with-param name="heading5" select="'Count'"/>
<xsl:with-param name="heading6" select="'First Occurrence'"/>
<xsl:with-param name="heading7" select="'Last Occurrence'"/>
</xsl:call-template>
</tr>
<xsl:for-each select="row">
<tr>
<xsl:call-template name="show_divergence_row">
<xsl:with-param name="prm1" select="session_id"/>
<xsl:with-param name="prm2" select="session_serial"/>
<xsl:with-param name="prm3" select="capture_error"/>
<xsl:with-param name="prm4" select="replay_error"/>
<xsl:with-param name="count" select="count"/>
<xsl:with-param name="first_occur" select="first_occurrence"/>
<xsl:with-param name="last_occur" select="last_occurrence"/>
</xsl:call-template>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="dml_data/by_app|query_data/by_app">
<xsl:variable name="id_name"
select="concat(name(parent::*), name(self::*))"/>
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="$id_name"/>
</xsl:call-template>
<table id="$id_name" cellpadding="0" cellspacing="0" border="2"
summary="DML data divergence by application">
<xsl:attribute name="id">
<xsl:value-of select="$id_name"/>
</xsl:attribute>
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'Service Name'"/>
<xsl:with-param name="heading2" select="'Module Name'"/>
<xsl:with-param name="heading3" select="'Count'"/>
</xsl:call-template>
</tr>
<xsl:for-each select="row">
<tr>
<xsl:call-template name="show_divergence_row">
<xsl:with-param name="prm1" select="service_name"/>
<xsl:with-param name="prm2" select="module_name"/>
<xsl:with-param name="count" select="count"/>
</xsl:call-template>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="dml_data/by_sql">
<xsl:call-template name="show_hide_controls">
<xsl:with-param name="id" select="'dml_data_by_sql"/>
</xsl:call-template>
<table id="dml_data_by_sql" cellpadding="0" cellspacing="0" border="2"
summary="DML data divergence by SQL">
<tr>
<xsl:call-template name="show_table_header">
<xsl:with-param name="heading1" select="'SQL ID'"/>
<xsl:with-param name="heading5" select="'Count'"/>
</xsl:call-template>
</tr>
<xsl:for-each select="row">
<tr>
<xsl:call-template name="show_divergence_row">
<xsl:with-param name="prm1" select="sql_id"/>
<xsl:with-param name="count" select="count"/>
</xsl:call-template>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
OHA YOOOO