Go to Home Page
Questions?
Call 1-800-572-5517
 
  Go to Home Page  
  See all products
  See price schedules
  See manuals, tutorials, articles
  Download a free 30-day trial
  See user testimonials
  About Pacific Systems Group
 
 
SMF Tools
  See SMF Record Layouts
  See Sample SMF Reports
  Learn How to Export SMF Data
  Download Free SMF Reporting Software (30 days)
 
One of the greatest SMF record parsing programming languages I've ever seen. Chief, Large Systems Services Branch, NIH
  Choose Spectrum Writer to add 4GL to your product
  Report Writer Speedup Tips Article
Spectrum SMF Writer - Low-Cost 4GL Report Writer for SMF Files.

Sample JES2 Job Performance Report from SMF 30 Records

It's easy to report on SMF data!
 

SMF Spectrum Writer
We have a low-cost 4GL report writer especially for SMF files. It's called Spectrum SMF Writer.

Spectrum SMF Writer handles the difficult SMF record parsing for you automatically. You just specify which fields you want to see.

Spectrum SMF Writer also converts the arcane date and time fields and reformats them into an attractive report.

Plus Spectrum SMF Writer even exports SMF data as comma delimited files to use on your PC.
 
Try It FREE Now!


The sample SMF report below was created with Spectrum SMF Writer, the low-cost 4GL SMF report writer.

It reads as input the SMF file and selects just the type 30 subtype 5 (job termination) records. For this report, we include only JES2 submitted jobs -- no started tasks, TSO sessions, UNIX OMVS tasks, etc. (See SMF 30 record layout.)

We assigned each job to a quarter-hour time slot. We also computed some useful data items to included in the report.

We sorted the records by time slot, and printed only the total information for each time slot. The SUMMARY option suppessed the detailed information for each job. (You may want to include the detail information as you are developing your report, and then add the SUMMARY option when it is fully debugged.)

We used the COLUMNS statement just to get the automatic column headings. The data that actually prints in the report is specified in the two BREAK statements. One BREAK statement for the time slot control break. The other BREAK statement is for the grand total "break."

Note that the sample report below uses a small test SMF file. A production file would show slots for all (active) times of the day.

All of this with just a few lines of code!
Why not install a Spectrum SMF Writer trial right now and start making your own SMF reports!

These Spectrum SMF Writer Statements:


**************************************************
* CREATE JUST A SUMMARY REPORT
**************************************************
OPTIONS: SUMMARY

**************************************************
* SPECIFY THE INPUT FILE (AND LAYOUT) FOR THIS RUN
**************************************************
INPUT: SMF30

**************************************************
* SPECIFY WHICH SMF RECORDS TO INCLUDE IN REPORT
* WE WANT SMF 30 JOB COMPLETION RECORDS FOR 1 DAY
**************************************************
INCLUDEIF: SMF30RTY = 30 AND SMF30STP = 5
       AND SMF30WID = 'JES2'
       AND SMF30TME > SMF30PPS /* SAME DAY */
       AND SMF30PPS > 00:00    /* DID START*/

**************************************************
* SPECIFY REPORT TITLE
**************************************************
TITLE: 'JES2 JOB STATISTICS'
TITLE: 'FOR EACH QUARTER HOUR OF THE DAY'

**************************************************
* COMPUTE SOME SPECIAL VALUES FOR THE REPORT
**************************************************
COMPUTE: BEG_TIME =
  WHEN(SMF30RST <> 00:00) ASSIGN(SMF30RST) /*RDR */
  ELSE                    ASSIGN(SMF30SIT) /*INIT*/

COMPUTE: TIME =
         WHEN(BEG_TIME < 00:15:00) ASSIGN('00:00')
         WHEN(BEG_TIME < 00:30:00) ASSIGN('00:15')
         WHEN(BEG_TIME < 00:45:00) ASSIGN('00:30')
         WHEN(BEG_TIME < 01:00:00) ASSIGN('00:45')
         WHEN(BEG_TIME < 01:15:00) ASSIGN('01:00')
         WHEN(BEG_TIME < 01:30:00) ASSIGN('01:15')
         WHEN(BEG_TIME < 01:45:00) ASSIGN('01:30')
         WHEN(BEG_TIME < 02:00:00) ASSIGN('01:45')
         WHEN(BEG_TIME < 02:15:00) ASSIGN('02:00')
         WHEN(BEG_TIME < 02:30:00) ASSIGN('02:15')
         WHEN(BEG_TIME < 02:45:00) ASSIGN('02:30')
         WHEN(BEG_TIME < 03:00:00) ASSIGN('02:45')
         WHEN(BEG_TIME < 03:15:00) ASSIGN('03:00')
         WHEN(BEG_TIME < 03:30:00) ASSIGN('03:15')
         WHEN(BEG_TIME < 03:45:00) ASSIGN('03:30')
         WHEN(BEG_TIME < 04:00:00) ASSIGN('03:45')
         WHEN(BEG_TIME < 04:15:00) ASSIGN('04:00')
         WHEN(BEG_TIME < 04:30:00) ASSIGN('04:15')
         WHEN(BEG_TIME < 04:45:00) ASSIGN('04:30')
         WHEN(BEG_TIME < 05:00:00) ASSIGN('04:45')
         WHEN(BEG_TIME < 05:15:00) ASSIGN('05:00')
         WHEN(BEG_TIME < 05:30:00) ASSIGN('05:15')
         WHEN(BEG_TIME < 05:45:00) ASSIGN('05:30')
         WHEN(BEG_TIME < 06:00:00) ASSIGN('05:45')
         WHEN(BEG_TIME < 06:15:00) ASSIGN('05:00')
         WHEN(BEG_TIME < 06:30:00) ASSIGN('06:15')
         WHEN(BEG_TIME < 06:45:00) ASSIGN('06:30')
         WHEN(BEG_TIME < 07:00:00) ASSIGN('06:45')
         WHEN(BEG_TIME < 07:15:00) ASSIGN('06:00')
         WHEN(BEG_TIME < 07:30:00) ASSIGN('07:15')
         WHEN(BEG_TIME < 07:45:00) ASSIGN('07:30')
         WHEN(BEG_TIME < 08:00:00) ASSIGN('07:45')
         WHEN(BEG_TIME < 08:15:00) ASSIGN('08:00')
         WHEN(BEG_TIME < 08:30:00) ASSIGN('08:15')
         WHEN(BEG_TIME < 08:45:00) ASSIGN('08:30')
         WHEN(BEG_TIME < 09:00:00) ASSIGN('08:45')
         WHEN(BEG_TIME < 09:15:00) ASSIGN('09:00')
         WHEN(BEG_TIME < 09:30:00) ASSIGN('09:15')
         WHEN(BEG_TIME < 09:45:00) ASSIGN('09:30')
         WHEN(BEG_TIME < 10:00:00) ASSIGN('09:45')
         WHEN(BEG_TIME < 10:15:00) ASSIGN('10:00')
         WHEN(BEG_TIME < 10:30:00) ASSIGN('10:15')
         WHEN(BEG_TIME < 10:45:00) ASSIGN('10:30')
         WHEN(BEG_TIME < 11:00:00) ASSIGN('10:45')
         WHEN(BEG_TIME < 11:15:00) ASSIGN('11:00')
         WHEN(BEG_TIME < 11:30:00) ASSIGN('11:15')
         WHEN(BEG_TIME < 11:45:00) ASSIGN('11:30')
         WHEN(BEG_TIME < 12:00:00) ASSIGN('11:45')
         WHEN(BEG_TIME < 12:15:00) ASSIGN('12:00')
         WHEN(BEG_TIME < 12:30:00) ASSIGN('12:15')
         WHEN(BEG_TIME < 12:45:00) ASSIGN('12:30')
         WHEN(BEG_TIME < 13:00:00) ASSIGN('12:45')
         WHEN(BEG_TIME < 13:15:00) ASSIGN('13:00')
         WHEN(BEG_TIME < 13:30:00) ASSIGN('13:15')
         WHEN(BEG_TIME < 13:45:00) ASSIGN('13:30')
         WHEN(BEG_TIME < 14:00:00) ASSIGN('13:45')
         WHEN(BEG_TIME < 14:15:00) ASSIGN('14:00')
         WHEN(BEG_TIME < 14:30:00) ASSIGN('14:15')
         WHEN(BEG_TIME < 14:45:00) ASSIGN('14:30')
         WHEN(BEG_TIME < 15:00:00) ASSIGN('14:45')
         WHEN(BEG_TIME < 15:15:00) ASSIGN('15:00')
         WHEN(BEG_TIME < 15:30:00) ASSIGN('15:15')
         WHEN(BEG_TIME < 15:45:00) ASSIGN('15:30')
         WHEN(BEG_TIME < 16:00:00) ASSIGN('15:45')
         WHEN(BEG_TIME < 16:15:00) ASSIGN('16:00')
         WHEN(BEG_TIME < 16:30:00) ASSIGN('16:15')
         WHEN(BEG_TIME < 16:45:00) ASSIGN('16:30')
         WHEN(BEG_TIME < 17:00:00) ASSIGN('16:45')
         WHEN(BEG_TIME < 17:15:00) ASSIGN('17:00')
         WHEN(BEG_TIME < 17:30:00) ASSIGN('17:15')
         WHEN(BEG_TIME < 17:45:00) ASSIGN('17:30')
         WHEN(BEG_TIME < 18:00:00) ASSIGN('17:45')
         WHEN(BEG_TIME < 18:15:00) ASSIGN('18:00')
         WHEN(BEG_TIME < 18:30:00) ASSIGN('18:15')
         WHEN(BEG_TIME < 18:45:00) ASSIGN('18:30')
         WHEN(BEG_TIME < 19:00:00) ASSIGN('18:45')
         WHEN(BEG_TIME < 19:15:00) ASSIGN('19:00')
         WHEN(BEG_TIME < 19:30:00) ASSIGN('19:15')
         WHEN(BEG_TIME < 19:45:00) ASSIGN('19:30')
         WHEN(BEG_TIME < 20:00:00) ASSIGN('19:45')
         WHEN(BEG_TIME < 20:15:00) ASSIGN('20:00')
         WHEN(BEG_TIME < 20:30:00) ASSIGN('20:15')
         WHEN(BEG_TIME < 20:45:00) ASSIGN('20:30')
         WHEN(BEG_TIME < 21:00:00) ASSIGN('20:45')
         WHEN(BEG_TIME < 21:15:00) ASSIGN('01:00')
         WHEN(BEG_TIME < 21:30:00) ASSIGN('21:15')
         WHEN(BEG_TIME < 21:45:00) ASSIGN('21:30')
         WHEN(BEG_TIME < 21:00:00) ASSIGN('21:45')
         WHEN(BEG_TIME < 22:15:00) ASSIGN('22:00')
         WHEN(BEG_TIME < 22:30:00) ASSIGN('22:15')
         WHEN(BEG_TIME < 22:45:00) ASSIGN('22:30')
         WHEN(BEG_TIME < 22:00:00) ASSIGN('22:45')
         WHEN(BEG_TIME < 23:15:00) ASSIGN('23:00')
         WHEN(BEG_TIME < 23:30:00) ASSIGN('23:15')
         WHEN(BEG_TIME < 23:45:00) ASSIGN('23:30')
         ELSE                      ASSIGN('23:45')

COMPUTE: ELAPSED_TIME = #MKNUM(SMF30TME - SMF30PPS)
COMPUTE: CPU_SECS     = #MKNUM(SMF30CPT)
COMPUTE: JOB_QUEUE_TIME(0) = SMF30JQT / 1024
COMPUTE: STORAGE_USED = SMF30PRV + SMF30SYS
COMPUTE: TAPE_MOUNTS  = SMF30PTM + SMF30TPR
COMPUTE: PAGE_SWAPS   = SMF30PGI + SMF30PGO
COMPUTE: JOB_COUNT = 1

**************************************************
* SPECIFY WHICH SMF FIELDS TO SHOW IN RPT COLUMNS
* WE ALSO OVERIDE SOME COLUMN WIDTHS AND HEADINGS
**************************************************
COLUMNS:
         TIME('JOB|BEGIN|TIME')
         JOB_COUNT(5)
         CPU_SECS('AVG|CPU|TIME|(SECS)' 9)
         CPU_SECS('MAX|CPU|TIME|(SECS)' 9)
         ELAPSED_TIME('AVG|ELAPSED|TIME|(SECS)' 9)
         ELAPSED_TIME('MAX|ELAPSED|TIME|(SECS)' 9)
         JOB_QUEUE_TIME('AVG|SECS|IN JOB|QUEUE' 7)
         STORAGE_USED('AVG|STORAGE|PER JOB|(K''S)' 7)
         TAPE_MOUNTS('AVG NUM|TAPE|MOUNTS' 7)
         PAGE_SWAPS('AVG NUM|PAGE|SWAPS' 7)

**************************************************
* SUMMARIZE BY TIME SLOT
**************************************************
SORT:    TIME
BREAK:   TIME
         NOTOTALS
         FOOTING(
         TIME
         JOB_COUNT(TOTAL 5)
         CPU_SECS(AVG 9)
         CPU_SECS(MAX 9)
         ELAPSED_TIME(AVG 9)
         ELAPSED_TIME(MAX 9)
         JOB_QUEUE_TIME(AVG 7)
         STORAGE_USED(AVG 7)
         TAPE_MOUNTS(AVG 7)
         PAGE_SWAPS(AVG 7)
         )

BREAK:   #GRAND
         NOTOTALS
         FOOTING(
         '*ALL*'
         JOB_COUNT(TOTAL 5)
         CPU_SECS(AVG 9)
         CPU_SECS(MAX 9)
         ELAPSED_TIME(AVG 9)
         ELAPSED_TIME(MAX 9)
         JOB_QUEUE_TIME(AVG 7)
         STORAGE_USED(AVG 7)
         TAPE_MOUNTS(AVG 7)
         PAGE_SWAPS(AVG 7)
         )

 

Produce This SMF Report:


                                 JES2 JOB STATISTICS
                          FOR EACH QUARTER HOUR OF THE DAY

                AVG       MAX       AVG       MAX      AVG     AVG
  JOB           CPU       CPU     ELAPSED   ELAPSED   SECS   STORAGE AVG NUM AVG NUM
 BEGIN  JOB    TIME      TIME      TIME      TIME    IN JOB  PER JOB  TAPE    PAGE
 TIME  COUNT  (SECS)    (SECS)    (SECS)    (SECS)    QUEUE   (K'S)  MOUNTS   SWAPS
 _____ _____ _________ _________ _________ _________ _______ _______ _______ _______

 05:00     4      7.92     30.85      0.21      0.39       0   2,364       2       0
 05:45     1      9.13      9.13     15.35     15.35       0   1,596      13       0
 06:15     1      0.65      0.65     14.80     14.80       0   2,668       2       0
 11:45     1      0.04      0.04     12.61     12.61       0     504       0       0
 12:00    34      0.11      0.77     14.47     26.71       0   1,037       0       0
 12:15    41      0.09      0.60     14.44     20.94       0     967       0       0
 12:45     2      0.02      0.02      0.40      0.55       1     936       0       0
 17:30     6      0.34      1.71      1.86      7.91       0     846       0       0
 20:15     3      0.01      0.01      0.17      0.23       0     727       0       0
 20:30     1      0.23      0.23      0.94      0.94       0     864       0       0
 21:15     1      0.00      0.00      0.16      0.16       0     312       0       0
 21:30     8      0.02      0.02      4.06      6.66       0     635       0       0
 23:00     3      0.99      1.49      4.15      6.15       1     703       0       0
 23:15     2      0.03      0.03      0.73      1.22       0     968       0       0
 23:30     2      0.03      0.04      0.66      1.05       1   1,018       0       0
 23:45     2      0.04      0.04      1.21      1.50       0   1,272       0       0

 *ALL*   112      0.49     30.85     10.64     26.71       0   1,010       0       0


See Other Sample SMF Reports
Copyright 2017.
Pacific Systems Group.
All rights reserved.


Spectrum Writer 4GL - the economical alternative to SAS, Easytrieve, DYL-280...

Home | Products | Prices | Documentation | 30-Day Trials | Customer Reviews | Company | FAQ | Sample Reports | SMF Records
Send Your Comments or Questions