SOA 12.2.1.2.0: Schedule your Integration Workload Statistics (IWS) Report by Command Line

Posted by Dirk Nachbar on Thursday, February 09, 2017
From Oracle SOA Suite 12.2.1 on, Oracle added a nice feature - The Integration Workload Statistics, which you can compare to an Oracle Database AWR report for your SOA Suite.

Kevin King from AVIO Consulting has released for this a really good blog post about the IWS http://www.avioconsulting.com/blog/no-more-hidden-soa-performance-problems

As I am more coming from the Administration site, I prefer to have script-based solutions.

Here I will show you how to scheduled an automated way for the generation of your Integration Workload Statistics including mailing of the report for UNIX platforms:

On your server which is hosting your SOA suite simply perform following steps as SOA Suite Software owner:


1
2
3
cd $HOME
mkdir -p iws_report/logs
cd iws_report

Create in the new folder $HOME/iws_report a script called create_soa_iws_report.ksh with following content:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/ksh
#
# Author: Dirk Nachbar
#
# Purpose: Script to create an IWS Report for a given SOA Domain
#          and Managed Server
#
#---------------------------------------------------------------------
 
 
#---------------------------------------------------------------------
# CONSTANTS
#---------------------------------------------------------------------
MyName="$(basename $0)"
# Align the value for your Middleware Home directory
MW_HOME=/u00/app/oracle/product/fmw-soa-12.2.1.2.0
WorkDir=`pwd`
 
 
#---------------------------------------------------------------------
Usage()
#
# PURPOSE: Verwendung
#---------------------------------------------------------------------
{
 
  echo "ERR: create_soa_iws_report.ksh called with wrong parameters"
  cat <<_EOI
 
SYNOPSIS
       create_soa_iws_report.ksh  -d <Domain_Name> -s <ManagedServer>
               -t <Number of Hours to look back>
                
DESCRIPTION
        
Creation of IWS Report for a given SOA Domain and Managed Server
 
_EOI
 
 
    exit 1
}
 
#---------------------------------------------------------------------
CheckParams()
#
# PURPOSE: Checks the input Parmeters
#---------------------------------------------------------------------
{
    if [ "${TheDomain}" = "" ] ; then
        echo "ERR: Missing parameter(s), the flags -d must be used."
        Usage
    fi
 
    if [ "${TheManagedServer}" = "" ] ; then
        echo "ERR: Missing parameter(s), the flags -s must be used."
        Usage
    fi
 
    if [ "${TheHoursBack}" = "" ] ; then
        echo "ERR: Missing parameter(s), the flags -t must be used."
        Usage
    fi
 
}
 
 
#---------------------------------------------------------------------
CreateIWSReport()
#
# PURPOSE: Creates an IWS Report for the given ManagedServer
#
#---------------------------------------------------------------------
{
 
echo "STARTING: Creating IWS Report for ${TheDomain} / ${TheManagedServer} over the last ${TheHoursBack} hours"
HighDate="$(date '+%Y-%m-%dT%H:%M:%S+0200')"
 
LowDate=$(eval "date '+%Y-%m-%dT%H:%M:%S+0200' -d '${TheHoursBack} hours ago'")
 
LogFileDate="$(date '+%Y-%m-%d_%H:%M:%S')"
 
export TheLogFile=${WorkDir}/logs/iws_report_${TheDomain}_${TheManagedServer}_${LogFileDate}.html
 
 
${MW_HOME}/oracle_common/common/bin/wlst.sh ${WorkDir}/soa_iws_report.py ${TheManagedServer} ${LowDate} ${HighDate}
 
echo "DONE: Creating IWS Report for ${TheDomain} / ${TheManagedServer} over the last ${TheHoursBack} hours"
echo "INFO: IWS Report = ${TheLogFile}"
 
 
}
 
#---------------------------------------------------------------------
MailIWSReport()
#
# PURPOSE: Mail the prior create IWS Report
#
#---------------------------------------------------------------------
{
 
# Getting the Email Recipients
ConfigFile=${TheManagedServer}.properties
 
TheMailRecipients="$(cat ${WorkDir}/${ConfigFile} | grep -i "^mailrecipients=" | head -n 1 | cut -d= -f2-)"
TheEmailSubject="IWS for ${TheDomain} - ${TheManagedServer}"
 
echo "STARTING: Mail the IWS Report ${TheLogFile}"
 
echo "IWS Report" | mailx -s "${TheEmailSubject}" -a ${TheLogFile} ${TheMailRecipients}
 
echo "DONE: Mail the IWS Report ${TheLogFile}"
 
}
 
 
#---------------------------------------------------------------------
# MAIN
#---------------------------------------------------------------------
 
TheDomain=""
TheManagedServer=""
TheHoursBack=""
 
while getopts d:s:t:h: CurOpt; do
    case ${CurOpt} in
        d) TheDomain="${OPTARG}"        ;;
        s) TheManagedServer="${OPTARG}" ;;
        t) TheHoursBack="${OPTARG}"     ;;
        h) Usage           exit 1       ;;
        ?) Usage           exit 1       ;;
    esac
done
shift $((${OPTIND}-1))
 
if [ $# -ne 0 ]; then
    Usage
fi
 
 
CheckParams
 
CreateIWSReport
 
MailIWSReport


Create in the folder $HOME/iws_report a property file with following naming convention <your_managed_server_name>.properties and fill it with following content:

1
2
3
4
5
domain.name=<your_domain_name>
soa.url=<your_server_name>:<port_of_your_managed_server>
admin.userName=weblogic
admin.password=<password_of_weblogic_user>
mailrecipients=<email>


Moreover we need in the $HOME/iws_report directory a Python script named soa_iws_report.py with following content:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# ============================================================
#
# Script: soa_iws_report.py
#
# Author: Dirk Nachbar
#
# Purpose: Generates an IWS Report based on input time range
#
# ============================================================
 
import sys, os, getopt
from java.util import Date
from java.text import SimpleDateFormat
from java.io import File
from java.io import FileOutputStream
from java.io import FileInputStream
 
# Load the WLS Connection Credential and establish the connection
propInputStream = FileInputStream(sys.argv[1]+".properties")
# propInputStream = FileInputStream("domain.properties")
configProps = Properties()
configProps.load(propInputStream)
domainName=configProps.get("domain.name")
soaURL=configProps.get("soa.url")
adminUserName=configProps.get("admin.userName")
adminPassword=configProps.get("admin.password")
LogFile=os.environ['TheLogFile']
 
connect(adminUserName,adminPassword,soaURL)
 
getSoaIWSReportByDateTime(sys.argv[1], 0, sys.argv[2], sys.argv[3], 'default', None, 10, 'html', LogFile)
disconnect()


After that validate that the IWS is activated, either by Enterprise Manager Fusion Middleware or with wlst:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
cd $ORACLE_HOME/oracle_common/common/bin
./wlst.sh
Initializing WebLogic Scripting Tool (WLST) ...
 
Welcome to WebLogic Server Administration Scripting Shell
 
Type help() for help on available commands
 
wls:/offline> connect('weblogic','<your_weblogic_password>','<your_server_name>:<port_of_your_managed_server>')
 
# Check the current status of the IWS
wls:/demo_domain/serverConfig/> getSoaIWSStatisticsLevel()
 
Successfully executed the command. SOA IWS Statistics Level is : OFF
 
# Check the current Snapshot Interval for IWS
wls:/demo_domain/serverConfig/> getSoaIWSSnapshotInterval()
 
Successfully executed the command. SOA IWS Snapshot Interval is : 10 minutes.
 
# List all available Statistics Levels
wls:/demo_domain/serverConfig/> getSoaIWSStatisticsLevelList()
 
Successfully executed the command. SOA IWS Statistics Level List :
--------------------------------------------------------------
FINEST
NORMAL
BASIC
MINIMUM
OFF
--------------------------------------------------------------
 
# Set your IWS Statistics Level, e.g. NORMAL
wls:/demo_domain/serverConfig/> setSoaIWSStatisticsLevel('NORMAL')
 
# Validate your IWS Statistics Level
wls:/demo_domain/serverConfig/> getSoaIWSStatisticsLevel()
 
Successfully executed the command. SOA IWS Statistics Level is : NORMAL
 
wls:/demo_domain/serverConfig/> exit()


Perform some activities on your SOA Suite and after some time run the create_soa_iws_report.ksh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
cd $HOME/iws_report
./create_soa_iws_report.ksh
ERR: Missing parameter(s), the flags -d must be used.
ERR: create_soa_iws_report.ksh called with wrong parameters
 
SYNOPSIS
       create_soa_iws_report.ksh  -d <domain_name> -s <managedserver>
               -t <Number of Hours to look back>
                
DESCRIPTION
        
Creation of IWS Report for a given SOA Domain and Managed Server
 
./create_soa_iws_report.ksh -d demo_domain -s soa_server1 -t 1
 
STARTING: Creating IWS Report for demo_domain / soa_server1 over the last 1 hours
 
Initializing WebLogic Scripting Tool (WLST) ...
 
Welcome to WebLogic Server Administration Scripting Shell
 
Type help() for help on available commands
 
Connecting to t3://soaserver1:7004 with userid weblogic ...
Successfully connected to managed Server "soa_server1" that belongs to domain "demo_domain".
 
Warning: An insecure protocol was used to connect to the server.
To ensure on-the-wire security, the SSL port or Admin port should be used instead.
 
 
Successfully executed the command. Report generated in the file given.
 
Disconnected from weblogic server: soa_server1
DONE: Creating IWS Report for demo_domain / soa_server1 over the last 1 hours
INFO: IWS Report = /home/oracle/iws_report/logs/iws_report_demo_domain_soa_server1_2017-02-09_15:58:23.html
STARTING: Mail the IWS Report /home/oracle/iws_report/logs/iws_report_demo_domain_soa_server1_2017-02-09_15:58:23.html
DONE: Mail the IWS Report /home/oracle/iws_report/logs/iws_report_demo_domain_soa_server1_2017-02-09_15:58:23.html


Now you should find in your Inbox for your Mail your IWS Report and under the $HOME/iws_report/logs directory the generated HTML IWS Report.