MainframeSupports
tip week 6/2016:

On my installation we are forced to use SDSF and we have no access to SYSVIEW which is a far better product than SDSF. One of the things I really miss in SDSF is the possibility to view different prefixes on the same display. For those of you who do not know this already: in SYSVIEW you can for example issue the command PRE MYUSER* DSN*. This command will make SYSVIEW display jobs with both of these prefixes on the different overviews.

Fortunately SDSF is equipped with a REXX interface which makes you able to design your own SDSF and I have done so. It is a very simple SDSF because it is designed to fulfil my special needs for viewing different jobs at the same time:

/* REXX */
address ispexec "CONTROL ERRORS RETURN"
address isredit "MACRO (PARM)"
address isredit "RESET SPECIAL"
address isredit "(LINENO) = LINENUM .ZF"

header='Jobname CPU-Usage CPU% ECPU-Usage ECPU%'
address isredit "LINE_BEFORE "lineno" = MSGLINE (HEADER)"

rc=isfcalls('ON')
DO wordno = 1 to words(parm)
  isfprefix=word(parm,wordno)
  Address SDSF "ISFEXEC DA"
  do ix=1 to JNAME.0
    line=left(jname.ix,8)''right(cpu.ix,9)' 'right(cpupr.ix,5)
    line=line'  'right(ecpu.ix,9)' 'right(cpupr.ix,5)
    address isredit "LINE_BEFORE "lineno" = MSGLINE (LINE)"
  END
END
rc=isfcalls('OFF')

exit 0

I have designed the REXX as an EDIT MACRO as I am in EDIT anyway when I submit jobs. The first line ensures that the REXX is not stopped by inconvenient errors from the different ADDRESS commands. RESET SPECIAL removes any left over MSG-lines from a previous execution of the REXX. Output are placed above the first line in the EDIT session and I have chosen to create a header that fits to the columns I have chosen to show.

The interesting stuff starts with RC=ISFCALLS('ON') which activates the SDSF-interface. Here the program loops once for each parameter specified in the call to the EDIT macro. Each parameter is assigned to the variable ISFPREFIX which is part of the SDSF interface and corresponds to the PREFIX command. Then the DA command (Display Active) is executed in SDSF and the result is returned in a series of stem variables, one for each column in the DA display. The columns available for use is documented in the SDSF manual. The inner loop processes the jobs that matches the prefix in ISFPREFIX.

The result of an execution of the above REXX program may look like this:

Command ===> &MYSDSF MYUSER* DSN*MSTR
****** ***************************** Top of Data ******************************
==MSG> Jobname CPU-Usage  CPU% ECPU-Usage ECPU%
==MSG> MYUSER       2.43  3.37       2.43  3.37
==MSG> DSNTMSTR   139.83  0.00     149.73  0.00
==MSG> DSNPMSTR   189.98  0.00     228.40  0.00

In this example I have called the REXX for MYSDSF. I have placed an & in front of the command because it makes the command stay in the command line (this is general ISPF functionality). When the command stays put I can just press Enter in order to repeat the command. I have specified two parameters/prefixes as input and jobs matching these prefixes are shown at the top of my EDIT-session. Yes, it is that easy. And if you do not know: CPU-usage is the usage that your installations software licensing charges are based on. ECPU-usage is the total CPU consumption for the job including CPU usage on the so-called ZIIP processors. CPU consumption on ZIIP processors does not influence the software license charge. You are able to calculate the ZIIP usage by subtracting the CPU-usage from the ECPU-usage. In most cases the result will be zero as normal jobs does not exploit ZIIP processors, unfortunately.

And one last comment about CPU consumption. The REXX interface to SDSF consumes a lot of CPU. Maybe it is cheaper and faster not to use the ISFPREFIX variable, but instead loop through the JNAME stem variable and find the mathcing jobs this way. It requires more programming and as I said I do not know if it is more efficient, I just have a hunch.

Previous tip in english        Forrige danske tip        Tip list