array('num' => 'Endevor', 'name' => 'CA-Endevor Activity Report', 'desc' => "Sample report from third-party SMF records for CA-Endevor, "), 'sample_exporting_smf_as_key_value_file.htm' => array('num' => '110', 'name' => 'Create a KEY=VALUE file with SMF Data', 'desc' => "Sample mainframe export file in KEY-VALUE format, from the SMF 110-2 CICS statistics records. "), 'sample_DB2_V11_Incompatibility_Report.htm' => array('num' => '102', 'name' => 'DB2 V11 Incompatibility Report', 'desc' => "This is a DB2 audit report from the IFCID 376 SMF 102 records. It shows information about each occurance of a program statement containing a DB2 V10 feature that is incompatible under V11. "), 'Sample_SMF102_DB2_Stored_Procedure_Times.htm' => array('num' => '102', 'name' => 'DB2 Stored Procedure Report', 'desc' => "Sample report from SMF 102 IFCID 233/380 records that shows timing info for DB2 stored procedure calls. "), 'sample_db2_response_time_report.htm' => array('num' => '101', 'name' => 'DB2 Response Time Report', 'desc' => "Sample report from SMF 101 records that shows elapsed time and CPU time for individual DB2 transactions. "), 'sample_catalog_activity.htm' => array('num' => '61,65,66', 'name' => 'Integrated Catalog Update Report', 'desc' => "Sample report from SMF 61, 65 and 66 records showing changes made to the integrated catalog facility. "), 'sample_ftp_transfer_report_with_host_lookup.htm' => array('num' => '119', 'name' => 'FTP Transfer Report with IPs and Host Names', 'desc' => "Sample report from SMF 119 subtype 70 records showing information about FTP transfers, including remote and local IPs, z/OS dataset name. This report also illustrates how Spectrum SMF Writer can read records from VSAM files to use along with the SMF data. We use this ability to look up the actual host names, using the IPs as keys. "), 'sample_dataset_statistics_report.htm' => array('num' => '102', 'name' => 'DB2 Dataset Statistics Report', 'desc' => "This report shows dataset statistics over an interval for a specific DB2 Database. This example shows how Spectrum SMF Writer can format reports much wider than 133 bytes. "), 'sample_PrintWay_Report_by_Host.htm' => array('num' => '6', 'name' => 'IP PrintWay Event Log by Host', 'desc' => "This report shows each PrintWay event logged (from SMF 6 records.) It shows the PrintWay events ny Host name. "), 'sample_DB2_V10_Incompatibility_Report.htm' => array('num' => '102', 'name' => 'DB2 V10 Incompatibility Report', 'desc' => "This is a DB2 audit report from the IFCID 366 SMF 102 records. It shows information about each occurance of a program statement containing a DB9 feature that is incompatible under V10. "), 'sample_CICS_cpu_time_report.htm' => array('num' => '110', 'name' => 'CICS Transaction Time Report', 'desc' => "This is a CICS transaction time report. It shows, for each CICS transaction executed, the start and stop times, plus the calculated elapsed time. We also print the CPU time, dispatch time and suspend time for the transaction (when present.) "), 'sample_CICS_uptime_report.htm' => array('num' => '5', 'name' => 'CICS Monthly Up Time Report', 'desc' => "This is a CICS month up time report. It shows, for each CICS region, its total up time during the previous calendar month. This report comes from SMF 5 job termination records. Its also a good example of how extensive use of Spectrum SMF Writer's powerful built-in date and time functions lets you make a complex report with just a few lines of code. "), 'sample_combined_smf16_smf30_report.htm'=> array('num' => '16,30', 'name' => 'DFSORT Statistics Report from SMF 16 and 30 Records', 'desc' => 'This is an example of creating a report from two different SMF records. We are able to match them using a unique JOBID that we compute. This report requires 2 JCL steps to accomplish. In the final report, we show DFSORT information from the SMF 16 record, along with the program name field from the matching SMF 30 record. '), 'sample_dataset_access_log_report.htm'=> array('num' => '14,15,17,30', 'name' => 'Sample Dataset Access Report with RACF User Information', 'desc' => 'This is an example of creating a report that combines 4 different SMF records (14, 15, 17 and 30). We are able to match them using a unique JOBID that we compute from fields that they all have in common. This report requries 2 JCL steps to accomplish. In the final report, we show all dataset accesses (read, write or delete) in dataset name order. We also show the RACF Userid information (taken from the matching SMF 30 record) of the job that accessed the dataset. The report also includes the jobname, program name, and where available, the step name that accessed the dataset. '), 'sample_task_counts_by_type.htm' => array('num' => '30', 'name' => 'Counts of Tasks by Type', 'desc' => 'This is an example of creating multiple reports with a single pass of the SMF file. We select the Type 30 "job termination" SMF records (subtype 5). We assign each terminated task to a class of work (such as Started Task, CICS region, DB2 region, TSO Sessions, etc.) We also compute the elapsed time for each job. Our reports then show the count and total elapsed time for each class of work. We do this using 2 different methods of classifying the tasks. The third report is a summary report, where all of the detail lines are suppressed and we just see the totals. '), 'sample_job_stats_by_time_of_day.htm' => array('num' => '30', 'name' => 'Job Statistics by Time of Day', 'desc' => 'This report shows job performance information, summarized for each quarter hour of the day. It includes such useful statistics as: the number of jobs that ran, average and max CPU time, average and max elapsed time, queue wait time, plus the average storage used and the number of tape mounts and page swaps. '), 'sample_smf30_chargeback_report.htm' => array('num' => '30', 'name' => 'Simple Chargeback Report', 'desc' => 'This report shows a basic intra-company chargeback approach based on job statistics from the SMF 30 records. It computes CPU time and total EXCPs for each job in the SMF file. A unit-cost for each of these is used to assign a chargeback cost to each job. Jobs are then totalled by their owning cost centers, to show total chargeback amounts per cost center. '), 'sample_smf64_vsam_stats_report.htm' => array('num' => '64', 'name' => 'VSAM File Statistics Report', 'desc' => 'We read as input the SMF file and select just the type 64 VSAM statistics records. The report shows various VSAM statistics as of OPEN time. The statistics include number of extents, number of logical records, cumulative number of records inserted and deleted, and the cumulative number of control interval and control area splits, etc. '), 'sample_smf70_rmf_cpu_activity.htm' => array('num' => '70', 'name' => 'CPU Activity from RMF', 'desc' => 'This report reads as input the SMF file and selects just the type 70 RMF Activity records with subtype=1. Each of these SMF records contains multiple LPAR Sections. Each LPAR Section also references a variable number of Logical Processor Sections located elsewhere within the same record. This report shows an example of nested normalization, which is required to handle this relationship before two variable number of segments in the complex RMF record. The report show various pieces of information about the LPAR. It then lists, for each of that LPARs Logical Processors, the total online time, wait time, and 2 types of dispatch time. Each of these times is also shown as a percentage of the total RMF reporting interval. This is a very useful report for understanding how your PR\SM configuration is working out.'), 'sample_smf73_channel_profile_report.htm' => array('num' => '73', 'name' => 'RMF Channel Profile Report', 'desc' => ' This report reads as input the SMF file and selects just the type 73 RMF Channel Path Activity records. We use them to print a report showing channel utilization and average read/write speeds by channel. '), 'sample_smf74_rmf_coupling_report.htm' => array('num' => '74', 'name' => 'RMF Coupling Report', 'desc' => ' This report reads as input the SMF file and selects just the type 74 RMF Activity records with subtype=4. Each of these SMF records contains multiple Request Sections. We normalize these sections in order to easily print the same report information from each request section. We then print a report line for each Request Section, showing various statistics relating to synchronous and asynchronous requests during the interval. It also shows a count of certain requests for which no resource was available. '), 'sample_racf_usage_stats.htm' => array('num' => '89', 'name' => 'RACF Usage Statistics', 'desc' => ' This report reads as input the SMF file and selects just the type 89 RMF Usage records with subtype=1. We print a report showing the TCB and SRB time for each monitored product during each recording interval '), 'sample_db2_address_space_statistics.htm' => array('num' => '100', 'name' => 'DB2 Address Space Statistics', 'desc' => 'Reads as input the SMF 100 DB2 accounting records with IFCID = 1. Prints a report line for each address space found in these DB2 statistics records. (Note that each SMF record has a variable number of the QWSA statistical sections containing the address space information.) The report shows timing information about those DB2 address spaces.'), 'sample_db2_ifc_destination_statistics.htm' => array('num' => '100', 'name' => 'DB2 IFC Destination Statistics', 'desc' => 'Reads as input the SMF 100 DB2 accounting records with IFCID = 1. Prints a report line for each IFC destination entry found in these DB2 statistics records. (Note that each SMF record has a variable number of the QWSB sections containing the IFC destination information.) The report shows various error counts by destination.'), 'sample_normalize_smf_type30.htm' => array('num' => '30', 'name' => 'EXCP Report from SMF 30 Records', 'desc' => 'This example shows how to split each "physical" type 30 SMF record into multiple "logical" records. Each logical record contains just a single EXCP section. Using this logically expanded input file, it is then easy to use the standard 4GL syntax to make useful reports from the array of EXCP data in each type 30 record. This example lists some fields from the EXCP sections of a few records. Specifically, we list the SMF30DEV (device class), SMF30DDN (DDNAME) and SMF30BLK (block count) fields from the EXCP section. The other report fields all come from the constant portion of the SMF 30 record.'), 'sample_smf42_dsn_stats.htm' => array('num' => '42', 'name' => 'Usage and Performance Report for Selected DSNAME', 'desc' => "It reads as input the SMF type 42 DFSMS statistics records. Prints a report line for each CLOSE of a dataset with a name matching the test criteria. The report shows job id and statistical information about the datasets, including average response time and total number of I/O's."), 'sample_smf_comp_code.htm' => array('num' => '30', 'name' => 'Job Completion Code Report', 'desc' => 'Reads as input the SMF type 30 records with a subtype of 4 ("step termination" records.) It prints data to identify the job and step and indicate how it completed.'), 'sample_smf_dsname.htm' => array('num' => '14', 'name' => 'Dataset Usage Statistics for a Given Day', 'desc' => 'Reads as input the SMF type 14 records for the day we want to report on. Prints a report line for each dataset opened on that day. The report shows job information and EXCP count. It groups report lines by unique job and puts two blank lines between jobs.'), 'sample_sql_stmt_count.htm' => array('num' => '101', 'name' => 'DB2 Job Report Showing SQL Statements Used', 'desc' => 'Reads as input the SMF type 101 DB2 accounting records. Prints a report line for each DB2 accounting record written. The report shows statistical information about those DB2 jobs, including a count of the number of DB2 statements executed by each one.'), 'sample_tape_library_statistics.htm' => array('num' => '94', 'name' => 'Tape Library Statistics', 'desc' => 'Reads as input the SMF type 94 subtype 1 tape library ststem records. It selects the record for the hourly statistics for 11AM and prints various statistics for that hour.'), 'sample_smf15_smf17.htm' => array('num' => '15,17', 'name' => 'All Jobs that Updated or Deleted a Specific DSNAME', 'desc' => 'Reads as input both the SMF type 15 (DD Opened for Output or Update) and the type 17 ("dataset deleted") SMF records. It prinst a report from these records for a user-specified Dataset name mask.'), 'sample_db2plan_stats.htm' => array('num' => '101', 'name' => 'DB2 Plan Statistics', 'desc' => 'Sample report from SMF 101 records showing correlation, distribution and data sharing info, for records with specified DB2PLAN names'), 'Sample_SMF102_DB2_Audit_Report.htm' => array('num' => '102', 'name' => 'Which Operators Accessed a Specific DB2 Table', 'desc' => 'Sample report from SMF 102 DB2 Audit records showing all operator IDs which accessed certain DB2 tables during a specified timeframe.'), 'sample_cics_performance_report.htm' => array('num' => '110', 'name' => 'CICS Performance Report', 'desc' => 'Sample report from SMF 110, Subtype 1, Class 3 records (CICS Performance Monitoring records.)'), 'sample_smf113_Hardware_Statistics_Report.htm' => array('num' => '113', 'name' => 'Hardware Capacity and Statistics Report', 'desc' => 'Sample report from SMF 113 records (Hardware Capacity, Reports and Statistics)'), 'sample_smf115_buffer_pool_statistics_report.htm' => array('num' => '115', 'name' => 'Buffer Pool Statistics Report', 'desc' => 'Sample report from SMF 115 subtype 2 records showing buffer pool statistics, including number of buffer pools, stealable buffers, get page old and get page new requests, DASD read and write ops, etc. This report uses data from all 16 QPST sections in each record.'), 'sample_smf116_MQ_queue_cpu_time_report.htm' => array('num' => '116', 'name' => 'MQ Queue CPU Time Report', 'desc' => 'Sample report from SMF 116 subtype 1 records showing queue statistics, including CPU time spent on MQGETs and MQPUT1s.'), 'sample_smf119_ftp_transfer_report.htm' => array('num' => '119', 'name' => 'FTP Transfers Report', 'desc' => 'Sample report from SMF 119 subtype 70 records showing information about FTP transfers, including remote and local IPs, z/OS dataset name, bytes tranferred, time required for tranfer, and more.'), 'Sample_SMF119_OpenSSH_SFTP_Transfer_Completion_report.htm' => array('num' => '119', 'name' => 'OpenSSH SFTP Transfer Report', 'desc' => 'Sample reports from SMF 119 subtypes 96 and 97 records showing OpenSSH Secure FTP (SFTP) transfer completion information.'), 'sample_smf119_tcp_connection_report.htm' => array('num' => '119', 'name' => 'TCP Connection Report', 'desc' => 'Sample report from SMF 119 subtype 2 records showing details about each TCP connection to the z/OS mainframe.'), 'sample_120_subtype05.htm' => array('num' => '120', 'name' => 'Java CPU Times', 'desc' => 'Report from SMF 120 Subtype 5 Records showing Java CPU Time'), 'sample_120_subtype07.htm' => array('num' => '120', 'name' => 'WebContainer Servlet Times', 'desc' => 'Report from SMF 120 Subtype 7 Records showing WebContainer Servlet Time Info'), 'sample_racf_events.htm' => array('num' => '80', 'name' => 'RACF Events Log', 'desc' => 'Reads as input the SMF file and selects just the type 80 (RACF Processing) records. We print a report showing each RACF processing event, with a description of what the event was how it completed. Note that the actual SMF record just contains codes for the event and its status. Our Spectrum SMF WRiter record definitions includes code to expand those numeric values into descriptive texts. These events are grouped by unique JOB and printed in JOB/timestamp order.'), 'sample_smf208_syncsort_statistics.htm' => array('num' => '208', 'name' => 'Syncsort Log', 'desc' => 'Reads as input the SMF file and selects just the type 208 (Syncsort Processing) records. We print a report showing each sort of over 10 miillion bytes performed, with performance information.'), 'Sample_220_RSD_Folder_Report.htm' => array('num' => '220', 'name' => 'RSD Folder Report', 'desc' => 'Selects as input the SMF records written by Folder from RSD and prints selected fields.'), 'final dumy' => array() ) ?> Sample SMF Reports
List of SMF Record Layouts

List of Sample SMF Reports

We have the following SMF report examples, all created with
Spectrum SMF Writer -- the low-cost 4GL for SMF files.
The table is sorted on SMF record. Click on a report to see it.

List of SMF record layouts.
 

 

We also have:

 

$dirfile"; if ((strtolower(substr($dirfile,-4)) == '.htm') and (strtolower(substr($dirfile,0,7)) == 'sample_') ): if (array_key_exists($dirfile,$desc_array)): $link_array["$dirfile"] = $desc_array[$dirfile]; else: $link_array["$dirfile"] = array('num' => ' ', 'desc' => ''); // just add an array with blank values. endif; endif; } $ans="\n"; $ans .= "\n
Report Title
(Click to view report. Hover for a description.)
"; $ans .= "\n
 
SMF Record
"; //$ans .= "\n
Description"; //asort($link_array); //sort array by values (not keys). Keeps key-value association intact $sort_array = array(); // Obtain a list of columns foreach ($link_array as $key => $row) { $sort_array[$key] = $row['num']; } //echo "\n

"; print_r($link_array); // note: MUCH EASIER TO READ IN "SOURCE" THAN AS HTML //echo "\n

"; print_r($sort_array); array_multisort($sort_array, SORT_ASC, $link_array); //echo "\n

"; print_r($link_array); //echo "\n

"; print_r($sort_array); foreach ($link_array as $tmpkey => $tmpval) { if (array_key_exists('name',$tmpval)): $fmt_desc = $tmpval['name']; else: $fmt_desc = str_replace('_',' ',substr($tmpkey,0,-4)); // drop the last ".htm" $fmt_desc = strtoupper(substr($fmt_desc,0,1)) . substr($fmt_desc,1); endif; $ans .= "\n

$fmt_desc"; $ans .= "\n
" . $tmpval['num'] . "
"; // $ans .= "\n
" . $tmpval['desc']; } $ans .= "
"; //echo $debug; return $ans; } ?>