• principal_3

    Desde 2015, enseñando sobre el sistema operativo z/OS de IBM en esta web. z/OS se utiliza en máquinas llamadas Mainframe.

  • principal_1

    Para realizar el contenido, utilizo el producto de IBM llamado z/Development and Test Environtment Personal Edition. Este software permite emular un Mainframe y así poder utilizar z/OS para aprender.

  • principal_2

    Es utilizado por grandes empresas (bancos, aseguradoras...). Aquí aprenderás a instalar y configurar productos relacionados con z/OS.

  • principal_4

    ADCD es una distribución de z/OS que contiene productos de IBM como IMS, DB2, CICS, ZOWE, TWS, NetView, System Automation, etc.

Obteniendo datos de ejecución de jobs del spool por REXX

Adjuntos:
Descargar este archivo (datosspl.txt)Datos Spool[Rexx datos spool]3 kB
Descargar este archivo (datosspl_v22.txt)Datos Spool NUEVA VERSIÓN[Incluye campos fecha y hora de entrada a spool, MAX-RC. Se añade OWNER * y PREFIX **]3 kB

NOTA: Se añade versión nueva del código para añadir los campos, fecha y hora de entrada al spool y MAX-RC.

Esta ocasión vamos a sacar datos de los jobs que se encuentren en el spool usando REXX. Los datos que sacaremos serán la fecha de inicio y fin de los jobs, no incluye STCs, que hayan terminado de ejecutarse.

El código, con comentarios, es el siguiente:

/* REXX */
/* Extrae las fechas de inicio y fin de los jobs del spool (ST) */
/* Escrito por: JFG */
/* Fecha: 02/10/2017 */
rc=isfcalls('ON')
/* Seleccionar las columnas que vamos a usar */
isfcols = "jname jobid queue timee datee timen daten"
/* Filtrar las salidas por jobid JOB* y estado PRINT */
isffilter = "jobid eq JOB* queue eq PRINT"
/* Relacion entre los filtros jobid y queue = AND */
isffiltermode = "AND"
/* Ordenar por columnas St-Date y St-Time en ascendente */
isfsort = "datee A timee A"
/* Accede al panel ST de SDSF. Opcion DELAYED para usar todas
las columnas del panel. Opcion ALTERNATE para que funcione
isfsort con los campos St-Date (datee) y St-Time (timee) */
Address SDSF "ISFEXEC ST (DELAYED ALTERNATE)"
/* Comprobamos si se ha producido algun error en el acceso. */
lrc=rc
if lrc<>0 then
do
call msgrtn
exit 20
end
/* Guardar el numero maximo de lineas y creamos la cabecera
del fichero de salida.
x2c(05)->Es la tabulacion en hexadecimal al exportar a Excel */
numrows=isfrows
cabecera="JobName "||x2c(05)||"JobID "||x2c(05)||"F Inicio "||,
x2c(05)||"H Inicio "||x2c(05)||"F Fin "||x2c(05)||"H Fin"
/* Guardar la cabecera en una cola para escribirla en fichero */
queue cabecera
/* Recorrer los jobs del panel ST*/
do ix=1 to numrows
/* Formatear fecha incio a dd/mm/yyyy */
fechaI=fechaGre(DATEE.ix)
/* Formatear fecha fin a dd/mm/yyyy */
fechaF=fechaGre(DATEN.ix)
/* Guardar JobName JobID Fecha y Hora de inicio y fin */
datos=JNAME.ix||x2c(05)||JOBID.ix||x2c(05)||fechaI||,
x2c(05)||TIMEE.ix||x2c(05)||fechaF||x2c(05)||TIMEN.ix
/* Guardar los datos en una cola para escribir en fichero */
queue datos
end
rc=isfcalls('OFF')
Address TSO
"PROFILE NOPREFIX"
/* Comprobar si existe la libreria de salida */
LIBRERIA=SYSDSN(USERID().JOBS.SPOOL)
if LIBRERIA <> "OK" then
do
/* Si no existe, la cre */
"ALLOCATE F(FICH) DA("USERID()".JOBS.SPOOL) NEW TRACKS
DSORG(PS) SPACE(2,2) RECFM(F,B) LRECL(80) BLKSIZE(800)"
"FREE F(FICH)"
end
/* Grabar la informacion de la cola en la libreria de salida */
"ALLOCATE F(FICH) DA("USERID()".JOBS.SPOOL) OLD"
"EXECIO "queued()" DISKW FICH (FINIS"
"FREE F(FICH)"
Say "Comprobar salida en libreria "USERID()".JOBS.SPOOL"
Exit
/* Funcion para formatear la fecha juliana a dd/mm/yyyy */
fechaGre:
PARSE ARG fecha
/* Formatear de yyyy.ddd a yyddd */
fecha=Translate('34678',fecha,'12345678')
/* Pasar fecha juliana a yyyymmdd */
fecha=DATE('S',fecha,'J')
/* Formatear fecha yyyymmdd a dd/mm/yyyy */
fecha=Translate('78/56/1234',fecha,'12345678')
return fecha
/* Subrutina generica para controlar los errores */
msgrtn: procedure expose isfmsg isfmsg2.
/* The isfmsg variable contains a short message */
if isfmsg<>"" then
Say "isfmsg is:" isfmsg
/* The isfmsg2 stem contains additional descriptive */
/* error messages */
do ix=1 to isfmsg2.0
Say "isfmsg2."ix "is:" isfmsg2.ix
end
return

 

Guardamos el código en una librería que queramos. Si queremos ejecutarlo mediante el comando “TSO DATOSSPL”, debemos guardarlo en una librería que tengamos concatenada en la DD SYSPROC del procedimiento de logon de ISPF que estemos usando. También podemos guardarlo en una librería de usuario y ejecutarlo mediante “exec”.

 

Usamos el comando “TSO DATOSSPL”.

 

Saldrá un mensaje indicando “Comprobar salida en la librería XXXXXXXX.JOBS.SPOOL”. Las X son el usuario que estemos usando en ese momento.

 

Si tenemos el código en una librería de usuario, por ejemplo, IBMUSER.CLIST, lo ejecutamos con “exec” desde la opción 3.4.

 

Comprobamos que, en mi caso, los jobs del spool no están ordenados por fecha y hora de inicio.

 

 

Buscamos la salida que ha creado el REXX y entramos con “view”.

NOTA: Recomiendo entrar con view o edit poque con browse, las tabulaciones aparecen como puntos.

 

Comprobamos que no salen STCs y los datos están ordenados por fecha y hora de inicio.

 

Si queremos descargar el fichero para exportarlo a Excel, vamos a la opción 6 de ISPF.

NOTA: El transfer no funciona con versiones antiguas de Personal Communications (v5.8, v5.9). Se puede usar, por ejemplo, la versión 6.0.14 o ya las versiones 12.0.x.

Si no funciona el transfer, quizá se podrían usar otras opciones, como mandarlo por mail o FTP.

 

Pulsamos en el icono de “recibir un fichero del host”. Y rellenamos los datos.

 

Si abrimos el fichero txt, que hemos descargado, aparecerá con tabulaciones.

 

Si abrimos un Excel e importamos los datos desde texto, aparecerán distribuidos por filas y columnas, como una tabla.

 

 

Pulsamos siguiente hasta que solo se pueda pulsar finalizar.

 

Vemos que los datos están distribuidos en forma de tabla.

 

Una vez que tenemos los datos en Excel, ya podemos crear alguna macro, por ejemplo, para sacar cuanto tiempo ha estado ejecutándose cada job.

 

Publish modules to the "offcanvs" position.