From 8feb7789d16979112906b551e2b3b5abb5adeb0d Mon Sep 17 00:00:00 2001 From: John Bouzakis Date: Fri, 18 Aug 2017 09:26:08 -0400 Subject: [PATCH] Add SMF-Tools --- SMF-Tools/SMF87Formatter/GRS87.JCL.txt | 93 ++++++ SMF-Tools/SMF87Formatter/GRS87RPT.REXX.txt | 350 +++++++++++++++++++++ SMF-Tools/SMF87Formatter/README.txt | 47 +++ SMF-Tools/readme.md | 10 + readme.md | 2 + 5 files changed, 502 insertions(+) create mode 100644 SMF-Tools/SMF87Formatter/GRS87.JCL.txt create mode 100644 SMF-Tools/SMF87Formatter/GRS87RPT.REXX.txt create mode 100644 SMF-Tools/SMF87Formatter/README.txt create mode 100644 SMF-Tools/readme.md diff --git a/SMF-Tools/SMF87Formatter/GRS87.JCL.txt b/SMF-Tools/SMF87Formatter/GRS87.JCL.txt new file mode 100644 index 00000000..10f9bfe3 --- /dev/null +++ b/SMF-Tools/SMF87Formatter/GRS87.JCL.txt @@ -0,0 +1,93 @@ +//GRS87 JOB CLASS=U,NOTIFY=&SYSUID., 00001000 +// MSGLEVEL=(1,1),LINES=200000, 00020000 +// SYSTEM=* 00021000 +//* 00030000 +//********************************************************************/ 00030100 +//* Copyright 2017 IBM Corp. */ 00030200 +//* */ 00030300 +//* Licensed under the Apache License, Version 2.0 (the "License"); */ 00030400 +//* you may not use this file except in compliance with the License. */ 00030500 +//* You may obtain a copy of the License at */ 00030600 +//* */ 00030700 +//* http://www.apache.org/licenses/LICENSE-2.0 */ 00030800 +//* */ 00030900 +//* Unless required by applicable law or agreed to in writing, */ 00031000 +//* software distributed under the License is distributed on an */ 00031100 +//* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, */ 00031200 +//* either express or implied. See the License for the specific */ 00031300 +//* language governing permissions and limitations under the */ 00031400 +//* License. */ 00031500 +//********************************************************************/ 00031600 +//*-------------------------------------------------------------------- 00040000 +//* ==> SET SMFOUT TO SMF WORK DATASET NAME 00050000 +//* ==> SET REPOUT TO REPORT DATASET NAME 00060000 +//*-------------------------------------------------------------------- 00070000 +// EXPORT SYMLIST=(SMFOUT,REPOUT) 00071000 +//SET1 SET SMFOUT=SMF87.WORK 00080000 +//SET2 SET REPOUT=SMF87.RPT.TXT 00090000 +//*-------------------------------------------------------------------- 00100000 +//* ==> DELETE WORK AND REPORT DATASETS 00110000 +//*-------------------------------------------------------------------- 00120000 +//KILL01 EXEC PGM=IDCAMS 00130000 +//SYSPRINT DD SYSOUT=* 00140000 +//SYSIN DD *,SYMBOLS=JCLONLY 00141000 + DELETE &SMFOUT. 00150000 + DELETE &REPOUT. 00160000 + SET MAXCC=0 00170000 +/* 00180000 +//*-------------------------------------------------------------------- 00190000 +//* ==> START ISPF AND EXECUTE THE REXX 00200000 +//*-------------------------------------------------------------------- 00210000 +//READSMF EXEC PGM=IKJEFT01,REGION=0M 00220000 +//* 00230000 +//ISPPROF DD UNIT=SYSDA,SPACE=(TRK,(9,1,4)), 00240000 +// DCB=(LRECL=80,BLKSIZE=3120,RECFM=FB,DSORG=PO), 00250000 +// DISP=(NEW,PASS) 00260000 +//* 00270000 +//*-------------------------------------------------------------------- 00280000 +//ISPMLIB DD DISP=SHR,DSN=SYS1.ISP.SISPMENU 00290000 +// DD DISP=SHR,DSN=SYS1.ISF.SISFMLIB 00300000 +//ISPPLIB DD DISP=SHR,DSN=SYS1.ISP.SISPPENU 00310000 +// DD DISP=SHR,DSN=SYS1.ISF.SISFPLIB 00320000 +//ISPSLIB DD DISP=SHR,DSN=SYS1.ISP.SISPSENU 00330000 +//* DD DISP=SHR,DSN=SYS1.ISF.SISFSLIB 00340000 +//ISPTLIB DD DISP=SHR,DSN=SYS1.ISP.SISPTENU 00350000 +// DD DISP=SHR,DSN=SYS1.ISF.SISFTLIB 00360000 +//ISPLOG DD DUMMY 00370000 +//* --------------------------------------------------------------- 00380000 +//* ==> DUMPIN: SMF DATASET 00390000 +//* ==> SYSIN: RECORD TYPE, DAY AND TIME SELECTION 00400000 +//* --------------------------------------------------------------- 00410000 +//DUMPIN1 DD DISP=SHR,DSN=SMF87.SMFDUMP, 00420000 +// DCB=(LRECL=32756,BLKSIZE=32760,RECFM=VB,DSORG=PS) 00420100 +//DUMPOUT DD DISP=(,PASS),SPACE=(CYL,(800,200)),UNIT=SYSDA, 00430000 +// DSN=&&DP 00440000 +//SYSIN DD * 00450000 +INDD(DUMPIN1,OPTIONS(DUMP)) 00460000 +OUTDD(DUMPOUT,TYPE(87(2))) 00470000 +/* 00471000 +//* 00472000 +//* DATE(2013334,2013334) 00480000 +//* START(0000) 00490000 +//* END(0100) 00500000 +//*-------------------------------------------------------------------- 00520000 +//SYSEXEC DD DISP=SHR,DSN=SMF87.EXEC 00530000 +//WORKSMF DD DSN=&SMFOUT, 00540000 +// DCB=(LRECL=32756,BLKSIZE=32760,RECFM=VB,DSORG=PS), 00550000 +// DISP=(NEW,CATLG), 00560000 +// STORCLAS=SCTEMP, 00570000 +// SPACE=(CYL,(800,200),RLSE) 00580000 +//OUTDS DD DSN=&REPOUT, 00590000 +// DCB=(LRECL=800,BLKSIZE=31200,RECFM=FB,DSORG=PS), 00600000 +// DISP=(NEW,CATLG), 00610000 +// STORCLAS=SCLARGE, 00620000 +// SPACE=(CYL,(2500,250),RLSE),VOL=(,,,8),DSNTYPE=EXTPREF 00630000 +//SYSTSPRT DD SYSOUT=* 00640000 +//SYSPRINT DD SYSOUT=* 00650000 +//*-------------------------------------------------------------------- 00660000 +//* OPTIONS FOR GRS87RPT EXEC INCLUDE TEST, TIMES, DLM(,) AND SCOPE(S) 00661000 +//* WHERE DLM(C) SETS A DELIMITER CHAR BETWEEN COLS AND 00662000 +//* AND SCOPE(S) FILTERS ON SCOPE STEP, SYSTEM, SYSTEMS 00663000 +//SYSTSIN DD * 00670000 + EX 'SMF87.EXEC(GRS87RPT)' 'TIMES DLM(,)' 00680000 +/* 00690000 diff --git a/SMF-Tools/SMF87Formatter/GRS87RPT.REXX.txt b/SMF-Tools/SMF87Formatter/GRS87RPT.REXX.txt new file mode 100644 index 00000000..eb442a0b --- /dev/null +++ b/SMF-Tools/SMF87Formatter/GRS87RPT.REXX.txt @@ -0,0 +1,350 @@ +/*REXX----------------------------------------------------------------- + ENQ Report from SMF87 Records + + Copyright 2017 IBM Corp. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ---------------------------------------------------------------------*/ + parse upper arg parms + numeric digits 20 + Signal on novalue + trace O + call initialize + call process_parms(parms) + call process_smf_data +exit 0 + +/*--------------------------------------------------------------------- + ---------------------------------------------------------------------*/ +initialize: procedure expose __. + __. = '' + __.0border = copies('-',70) + __.0IncludeTimes = 0 + __.0IncludeTest = 0 + __.0IncludeScope = 4 + __.0dlm = ' ' + return +/*--------------------------------------------------------------------- + ---------------------------------------------------------------------*/ +process_parms: procedure expose __. + parse UPPER arg locparms + If index(locparms,'TIMES') > 0 then + __.0IncludeTimes = 1 + If index(locparms,'TEST') > 0 then + __.0IncludeTest = 1 + If index(locparms,'SCOPE') > 0 then + do + parse locparms . 'SCOPE('zzz')' . + If zzz = 'STEP' then + __.0IncludeScope = 1 + If zzz = 'SYSTEM' then + __.0IncludeScope = 2 + If zzz = 'SYSTEMS' then + __.0IncludeScope = 3 + end + If index(locparms,'DLM(') > 0 then + do + parse VAR locparms . 'DLM(' __.0dlm ')' . + end + return +/*--------------------------------------------------------------------- + ---------------------------------------------------------------------*/ +process_smf_data: procedure expose __. + "CALL 'SYS1.LINKLIB(IFASMFDP)'" + "REPRO IFILE(DUMPOUT) OFILE(WORKSMF)" + "EXECIO * DISKR WORKSMF ( FINIS STEM SMF." + drop GRS_OUT. + count = 1 + j = 1 + AlphaNumNat='.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@#$0123456789' + say date() time() "GRS Report => read " smf.0 "input records" + /*------------------------------------------------------------------- + -------------------------------------------------------------------*/ + do i = 1 to smf.0 + line = smf.i + /* trace r*/ + say c2x(substr(line,1,4)) c2x(substr(line,5,4)) c2x(substr(line,9,4)) c2x(substr(line,13,4)) , + c2x(substr(line,17,4)) c2x(substr(line,21,4)) c2x(substr(line,25,4)) c2x(substr(line,29,4)) + /*----------------------------------------------------------------- + The standard SMF record header with subtypes . . . + We're ignoring SMFxLEN (Offset 00) and SMFxSEG (Offset 02) since + the IDCAMS PRINT utility doesn't include the record length and + segment descriptor fields. + ----------------------------------------------------------------*/ + SMFxFLG = binary_b(line,offset(4),1) + PARSE VAR SMFxFLG , /* Parse out the bits */ + 1 dummy1 +1, /* unused */ + 2 SMF87FST +1, /* Subtypes defined */ + 3 dummy3 +1, /* unused */ + 4 dummy4 +1, /* unused */ + 5 dummy5 +1, /* unused */ + 6 dummy6 +1, /* unused */ + 7 dummy7 +1, /* unused */ + 8 dummy8 +1 /* unused */ + rectype = binary_d(line,offset(5),1) /* SMFxRTY: Record type */ + subtype = binary_d(line,offset(22),2) /* SMFxSTP: subrec type */ + If SMF87FST = 0 then + say 'Line:' right(i,6,'0') 'Record Type:' rectype + Else + say 'Line:' right(i,6,'0') 'Record Type:' rectype 'Subtype:' subtype + /*----------------------------------------------------------------- + -----------------------------------------------------------------*/ + if (rectype = 87) & subtype = 2 then do; + SMFxTME = smftime(line,offset(6),4) + SMFxDTE = smfjdate(line,offset(10),4) + olddate = substr(smfxdte,3,2)||, /* YYYY.DDD in YYDDD */ + substr(smfxdte,6,3) + Datum = date('S',olddate,'J') /* Date Conversion */ + SMF87SID = ebcdic(line,offset(14),4) /* SMF87SID: System ID */ + /* trace r */ + SMF87DEF_REQ_off = binary_d(line,offset(28),4) /* section length*/ + SMF87DEF_REQ_len = binary_d(line,offset(32),2) /* section offset*/ + SMF87DEF_REQ_NUM = binary_d(line,offset(34),2) /* section number*/ + SMF87DEF_DATA_Off = binary_d(line,offset(36),4) /* section length*/ + SMF87DEF_DATA_Len = binary_d(line,offset(40),2) /* section iffset*/ + SMF87DEF_DATA_Num = binary_d(line,offset(42),2) /* section number*/ + + do K = 1 to SMF87DEF_REQ_NUM + SMF87REQ_ASID=binary_x(line,SMF87DEF_Req_Off+Offset(28),2) + SMF87REQ_JOB=ebcdic(line,SMF87DEF_Req_Off+Offset(36),8) + SMF87REQ_TCB=binary_x(line,SMF87DEF_Req_Off+Offset(32),4) + SMF87REQ_PSW=binary_x(line,SMF87DEF_Req_Off+Offset(84),8) + SMF87REQ_TimeStart=binary_d(line,SMF87DEF_Req_Off+Offset(45),8) /* 8 bytes of TOD, from 1 byte into ETOD */ + SMF87REQ_TimeComp =binary_d(line,SMF87DEF_Req_Off+Offset(61),8) /* 8 bytes of TOD, from 1 byte into ETOD */ + + SMF87DATA_FL1=binary_x(line,SMF87DEF_DATA_Off+Offset(12),1) + + SMF87DATA_FL2=binary_b(line,SMF87DEF_DATA_Off+Offset(13),1) + /* 08x - Obtain, 20x - SHR*/ + SMF87DATA_Scope=binary_d(line,SMF87DEF_DATA_Off+Offset(14),1) + /* Scope: 1=step, 2=system,3=systems */ + SMF87DATA_RnameLen=right(binary_d(line,SMF87DEF_DATA_Off+Offset(15),1),3,'0') + SMF87DATA_ReqType =RIGHT(binary_d(line,SMF87DEF_DATA_Off+Offset(16),1),2,'0') + /* ReqType: 0=NONE, 2=RET=HAVE, 7 TEST */ + SMF87DATA_Qname =ebcdic(line,SMF87DEF_DATA_Off+Offset(28),8) + SMF87DATA_Rname =ebcdic(line, , + SMF87DEF_DATA_Off+Offset(36),SMF87DATA_RnameLen) + If Pos(left(SMF87DATA_Rname,1),alphanumnat) = 0 then + SMF87DATA_Rname =binary_x(line, , + SMF87DEF_DATA_Off+Offset(36),SMF87DATA_RnameLen) + + SMF87DATA_FL2_e = '' + If SMF87DATA_ReqType = 7 Then + SMF87DATA_FL2_e = SMF87DATA_FL2_e||'Tst' + Else + If substr(smf87data_FL2,5,1)='1' then + SMF87DATA_FL2_e = SMF87DATA_FL2_e||'Obt' + Else + SMF87DATA_FL2_e = SMF87DATA_FL2_e||'Rel' + If substr(smf87data_FL2,3,1)='1' then + SMF87DATA_FL2_e = SMF87DATA_FL2_e||'Shr' + Else + SMF87DATA_FL2_e = SMF87DATA_FL2_e||'Exc' + + SMF87DEF_REQ_OFF = SMF87DEF_REQ_OFF+ SMF87DEF_REQ_LEN /* + section offset */ + SMF87DEF_DATA_OFF = SMF87DEF_DATA_OFF+ SMF87DEF_DATA_LEN /* + section offset */ + If SMF87DATA_ReqType = 7 Then + say 'Debug:Test Request!' + If SMF87DATA_ReqType/= 7 | , + __.0IncludeTest = 1 Then + If __.0IncludeScope = 4 | , + SMF87DATA_Scope = __.0IncludeScope Then + do + j=j+1 + GRS_out.j = datum||__.0dlm||SMFxTME||__.0dlm||SMF87SID||__.0dlm||, + SMF87REQ_JOB||__.0dlm||, + SMF87REQ_ASID||__.0dlm||, + SMF87REQ_TCB||__.0dlm||, + SMF87REQ_PSW||__.0dlm||, + SMF87DATA_FL1||__.0dlm||, + SMF87DATA_FL2||__.0dlm||, + SMF87DATA_FL2_e||__.0dlm||, + SMF87DATA_Scope||__.0dlm||, + SMF87DATA_RnameLen||__.0dlm||, + SMF87DATA_ReqType||__.0dlm||, + SMF87DATA_Qname||__.0dlm||, + SMF87DATA_Rname + if __.0IncludeTimes then + GRS_out.j = GRS_OUT.j||__.0dlm||, + TodDateTime(SMF87REQ_TimeStart)||__.0dlm||, + TodDateTime(SMF87REQ_TimeComp) + end + end + trace o + + /*----------------------------------------------------------------- + -----------------------------------------------------------------*/ + count = count + 1 + end + end + GRS_out.0 = count + say GRS_out.0' Records written' + GRS_out.1 = 'DATE'||__.0dlm||'TIME'||__.0dlm||'SMF'||__.0dlm||'SYS'||__.0dlm||'ASID'||__.0dlm||'TCB'||__.0dlm||, + 'PSW'||__.0dlm||'F1'||__.0dlm||'F2'||__.0dlm||'F2-e'||__.0dlm||'Sc'||__.0dlm||'rln'||__.0dlm||'typ'||__.0dlm||'Qname'||__.0dlm||'Rname' + if __.0IncludeTimes then GRS_out.1 = GRS_out.1||__.0dlm||'obtain_time'||__.0dlm||'release_time' + + "Execio * Diskw OUTDS (finis stem grs_out." + + return +/*--------------------------------------------------------------------- + Functions: + + These functions are from the following articles by George Ng: + http://ibmsystemsmag.com/mainframe/tipstechniques/applicationdevelopment/rexx_smf_part1/ + http://ibmsystemsmag.com/mainframe/tipstechniques/applicationdevelopment/rexx_smf_part2/ + http://ibmsystemsmag.com/mainframe/tipstechniques/applicationdevelopment/rexx_smf_part3/ + + The original code appears to also published here in one place: + https://en.wikibooks.org/wiki/SMF_Records/How_to_Extract_Values_from_SMF_Record_Fields + + ---------------------------------------------------------------------*/ +/*--------------------------------------------------------------------- + Function: OFFSET + Input: Field offset (decimal) per SMF Reference (SA22-7630, Chapter 14) + Output: Input offset minus three + To get the correct offset into the SMF input line, subtract three + bytes. These three bytes consist of: + 2 bytes, to account for RDW not being present + 1 byte, because in Rexx, indices begin at position 1, not zero + ---------------------------------------------------------------------*/ +offset: procedure + arg this_offset + return (this_offset-3) +/*--------------------------------------------------------------------- + Function: Binary_d + Returns : Decimal + ---------------------------------------------------------------------*/ +binary_d: procedure expose __. + parse arg $dumpline,$offset,$field_length + this_field = substr($dumpline,$offset,$field_length) + translated_field = x2d(c2x(this_field)) + return (translated_field) +/*--------------------------------------------------------------------- + Function: Binary4_d --> for negative Values in 4 Byte binary fields + Returns : Decimal + ---------------------------------------------------------------------*/ +binary4_d: procedure expose __. + parse arg $dumpline,$offset,$field_length + this_field = substr($dumpline,$offset,$field_length) + translated_field = x2d(c2x(this_field),8) + return (translated_field) +/*--------------------------------------------------------------------- + Function: Binary_h + Returns : Decimal + ---------------------------------------------------------------------*/ +binary_h: procedure expose __. + parse arg $dumpline,$offset,$field_length + this_field = substr($dumpline,$offset,$field_length) + translated_field = x2d(c2x(this_field)) + return (translated_field) +/*--------------------------------------------------------------------- + Function: Binary_x + Returns : Hexadecimal + ---------------------------------------------------------------------*/ +binary_x: procedure expose __. + parse arg $dumpline,$offset,$field_length + this_field = substr($dumpline,$offset,$field_length) + translated_field = c2x(this_field) + return (translated_field) +/*--------------------------------------------------------------------- + Function: Binary_b + Returns : Binary + ---------------------------------------------------------------------*/ +binary_b: procedure expose __. + parse arg $dumpline,$offset,$field_length + this_field = substr($dumpline,$offset,$field_length) + translated_field = x2b(c2x(this_field)) + return (translated_field) +/*--------------------------------------------------------------------- + Function: Packed + ---------------------------------------------------------------------*/ +packed: procedure expose __. + parse arg $dumpline,$offset,$field_length + translated_field = binary_x($dumpline,$offset,$field_length) + return (translated_field) +/*--------------------------------------------------------------------- + Function: EBCDIC + Returns: EBCDIC + ---------------------------------------------------------------------*/ +ebcdic: procedure expose __. + parse arg $dumpline,$offset,$field_length + this_field = substr($dumpline,$offset,$field_length) + return (this_field) +/*--------------------------------------------------------------------- + Function: Smftime + Returns: hh:mm:ss + ---------------------------------------------------------------------*/ +smftime: procedure + parse arg $dumpline,$offset,$field_length + _time = binary_d($dumpline,$offset,$field_length) + hundreths = _time % 100 + hh = hundreths % 3600 + hh = RIGHT("0"||hh,2) + mm = (hundreths % 60) - (hh * 60) + mm = RIGHT("0"||mm,2) + ss = hundreths - (hh * 3600) - (mm * 60) + ss = RIGHT("0"||ss,2) + this_time = hh||":"||mm||":"||ss + return (this_time) +/*--------------------------------------------------------------------- + Function: Smfjdate + Returns: Julian date yyyy.ddd + Per SMF documentation, SMFxDTE is the date when the record was moved + into the SMF buffer, in the form 0cyydddF where + c is 0 for 19xx and 1 for 20xx + yy is the current year (0-99) + ddd is the current day (1-366) + F is the sign) + ---------------------------------------------------------------------*/ +smfjdate: procedure + parse arg $dumpline,$offset,$field_length + this_field = c2x(substr($dumpline,$offset,$field_length)) + parse value this_field with 1 . 2 c 3 yy 5 ddd 8 . + if (c = 0) then + yyyy = '19'||yy + else + yyyy = '20'||yy + julian_date = yyyy||'.'||ddd + return (julian_date) +/*--------------------------------------------------------------------- + Function: TodDateTime + Returns: 27 char Human readable date/time + ---------------------------------------------------------------------*/ +TodDateTime: procedure expose __. + parse arg tod_val /* input TOD in decimal */ + + tod_val = tod_val /* + CvtLDTO - CVTLSO */ + useconds = tod_val % 4096 + seconds = useconds % 1000000 + days = seconds % 86400 + seconds = seconds // 86400 + useconds = right(useconds // 1000000,6,0) + day = date('N',days+693595,'B') + hours = right(seconds % 3600,2,0) + minutes = right((seconds - hours * 3600) % 60,2,0) + seconds = right(seconds // 60,2,0) + htime = day hours':'minutes':'seconds'.'useconds + return (htime) + +Novalue: + Say ' Error Text = 'Errortext(rc) + Say ' Line in Error = 'Sourceline(sigl) + say ' Context: ' + If sigl-2 > 0 then say sourceline(sigl-2) + If sigl-1 > 0 then say sourceline(sigl-1) + say sourceline(sigl) + say sourceline(sigl+1) + say sourceline(sigl+2) +Exit 12 diff --git a/SMF-Tools/SMF87Formatter/README.txt b/SMF-Tools/SMF87Formatter/README.txt new file mode 100644 index 00000000..ff373a89 --- /dev/null +++ b/SMF-Tools/SMF87Formatter/README.txt @@ -0,0 +1,47 @@ +README + +** Beginning of Copyright and License ** + +Copyright 2017 IBM Corp. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +** End of Copyright and License ** + +PURPOSE + +This tool can be used to format SMF 87 subtype 2 records, into a table/CSV file where each +row represents either an ENQ or a DEQ request. + +INSTRUCTIONS + +1) Customize the GRS87 driver JCL so that the data sets correspond with the locations of +the GRS87RPT REXX exec (SYSEXEC and SYSTSIN DDs) and input, output, and work data sets +(SMFOUT and REPOUT symbols and DUMPIN1 DD). Ensure the data set High-Level Qualifiers are +appropriate for your security access. +2) If desired, customize input parameters to GRS87RPT. +3) Ensure the Job Card in the JCL meets any standards for your installation. +4) Submit the JCL. + +INPUT/OUTPUT DDs FOR GRS87: +DUMPIN1 - input smf data sets +SMFOUT - working data set for just SMF 87-2 records +REPOUT - output report data set. This contains the table/csv file. + +INPUT PARAMETERS TO GRS87RPT: + +1) TEST - include test ENQs. Default: they are not included. +2) TIMES - include ENQ start and end times. Default: they are not included. +3) SCOPE(x) - only return ENQ/DEQs with SCOPE x where x can be STEP, SYSTEM, or SYSTEMS. + Only one value supported. Default: return all scopes. +4) DLM(d) - d is a character which delimits columns. Default: single space. \ No newline at end of file diff --git a/SMF-Tools/readme.md b/SMF-Tools/readme.md new file mode 100644 index 00000000..59c086a9 --- /dev/null +++ b/SMF-Tools/readme.md @@ -0,0 +1,10 @@ +IBM SMF resources for the z/OS platform +================================================= + +This repository contains SMF resources that might be useful to the z/OS community. Here you might find items of interest about new functions in z/OS. + +We welcome your feedback on anything you see here. + +There are no warranties of any kind, and there is no service or technical support available for these materials from IBM. As a recommended practice, review carefully any materials that you download from this site before using them on a live system. + +Though the materials provided herein are not supported by the IBM Service organization, your comments are welcome by the developers, who reserve the right to revise or remove the materials at any time. To report a problem, or provide suggestions or comments, contact zosmig@us.ibm.com. \ No newline at end of file diff --git a/readme.md b/readme.md index 57b99177..e1e7d0b6 100644 --- a/readme.md +++ b/readme.md @@ -11,6 +11,8 @@ The following major categories are used: * [z/OSMF workflows](zOS-Workflow) +* [SMF Tools](SMF-Tools) + There are no warranties of any kind, and there is no service or technical support available for these materials from IBM®. As a recommended practice, review carefully any materials that you download from this site before using them on a live system. Though the materials provided herein are not supported by the IBM Service organization, your comments are welcome by the developers, who reserve the right to revise or remove the materials at any time. To report a problem, or provide suggestions or comments, contact zosmig@us.ibm.com.