sábado, janeiro 23, 2021

Programando Natural - 5 Parte - SMF via e-mail

Visualize a seguinte circunstância: você deseja ser notificado por e-mail sempre que a utilização do SMF atingir ou ultrapassar a marca de 50%. Essa demanda foi apresentada como um desafio a ser solucionado, e, com a colaboração de uma colega de trabalho, foi desenvolvido um programa Natural acompanhado de um JCL para abordar essa necessidade específica. Quando o JCL é executado e a taxa de utilização do SMF alcança ou excede os 50%, automaticamente, uma notificação por e-mail é enviada para a caixa de correio da equipe do Centro de Processamento de Dados (CPD). O programa Natural desempenha um papel crucial nesse contexto, pois é responsável por filtrar e avaliar as condições estabelecidas para a notificação. Essa solução não apenas automatiza o processo, tornando-o eficiente e preciso, mas também oferece uma maneira proativa de gerenciar e monitorar a utilização do SMF, garantindo que a equipe seja alertada prontamente sempre que a porcentagem desejada for atingida ou ultrapassada. Essa abordagem integrada demonstra como a colaboração e a implementação de soluções customizadas podem aprimorar a eficiência e a capacidade de resposta em ambientes operacionais.

O programa Natural pra fazer este filtro foi esse:
                                       > +  Program     AAFSCSMF Lib SUPORTE2
Top    ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
   0010 ** ----------------------------------------------------------------    
   0020 ** PROCEDIMENTO : FAZ UM FILTRO DO SMF RELATORIO % ATUAL               
   0030 ** AUTOR        : CLAUDEMAR MARTINS/KATIA UETI                             
   0040 ** DATA         : 03/02/2020                                           
   0050 ** ----------------------------------------------------------------    
   0060 DEFINE DATA LOCAL                                                      
   0070 1 #CONT             (A04)                                              
   0080 1 #SMF1             (A88)                                              
   0090 1 REDEFINE #SMF1                                                       
   0100   2 FILLER           13X                                               
   0110   2 #NOME_SMF        (A09)                                             
   0120   2 FILLER           1X                                                
   0130   2 #VOLSER          (A06)                                             
   0140   2 FILLER           1X                                                
   0150   2 #SIZE            (A10)                                             
   0160   2 FILLER           1X                                                
   0170   2 #FULL            (A5)                                              
   0180   2 FILLER           1X                                                
   0190   2 #STATUS          (A9)                                              
   0200 ****                                                                   
   0210 1 #SMF2             (A88)                                              
   0220 1 REDEFINE #SMF2                                                       
   0230    2 FILLER           13X                                              
   0240    2 #NOME_SMF_2      (A09)                                            
   0250    2 FILLER           1X                                               
   0260    2 #VOLSER_2        (A06)                                            
   0270    2 FILLER           1X                                               
   0280    2 #SIZE_2          (A10)                                            
   0290    2 FILLER           1X                                               
   0300    2 #FULL_2          (A05)                                            
   0310    2 FILLER           1X                                               
   0320    2 #STATUS_2        (A09)                                            
   0330 **                                                                     
   0340 1 #ERRO-TST           (N03)                                            
   0350 1 #NOME-TST           (A09)                                            
   0360 1 #PERC-TST           (A05)                                            
   0370 1 REDEFINE #PERC-TST                                                   
   0380   2 #PERC-TST-NUM     (N05)                                            
   0390 **                                                                     
   0400 END-DEFINE                                                             
   0410 * ---------------------------------------------------------------      
   0420   READ WORK FILE 1 #SMF1 #CONT                                         
   0430    IF #NOME_SMF = 'SYS1.MAN1' OR = 'SYS1.MAN2' OR = 'SYS1.MAN3'        
   0440 **  AND #FULL >=   '   1 '                                             
   0450     AND #FULL >=   '  50 '                                             
   0460     AND #STATUS =  'ACTIVE       '                                     
   0470 * ---------------------------------------------------------------      
   0480 * CALLNAT 'AAFTSMF1'                                                   
   0490 * ---------------------------------------------------------------      
   0500      MOVE #NOME_SMF TO #NOME_SMF_2                                     
   0510      MOVE #VOLSER   TO #VOLSER_2                                       
   0520      MOVE #SIZE     TO #SIZE_2                                         
   0530      MOVE #FULL     TO #FULL_2                                         
   0540      MOVE #STATUS   TO #STATUS_2                                       
   0550 * ---------------------------------------------------------------      
   0560      WRITE WORK FILE 2 #SMF2                                           
   0570 * ---------------------------------------------------------------      
   0580      MOVE #NOME_SMF TO #NOME-TST                                       
   0590      MOVE RIGHT JUSTIFIED #FULL TO #PERC-TST                           
   0600      EXAMINE FULL #PERC-TST ' ' REPLACE WITH '0'                       
   0610 * ---------------------------------------------------------------      
   0620    END-IF                                                              
   0630   END-WORK                                                             
   0640 **                                                                     
   0650    IF #NOME-TST = 'SYS1.MAN1' OR = 'SYS1.MAN2' OR = 'SYS1.MAN3'        
   0660     AND #PERC-TST-NUM >= 50                                            
   0670     ADD 1003 TO #ERRO-TST                                              
   0680    END-IF                                                              
   0690 **                                                                     
   0700 END
       ....+....1....+....2....+....3....+....4....+....5....+... S 70   L 41 

Esses foram os datasets que vamos usar, coisa pequena, só para pegar os comandos do D SMF e processar via programa Natural.
MEMBER=IEFBR14J 000016 REC SAVE:06.11.2020 22:37 BY   USERID DBA005  R=00000001
DSN=AAB.DIBD.JCLS                                LIB=S3 VOL=PRL303 UNIT=1526    
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
//AABSBR14 JOB (AABS,DIBD),CLAUDEMAR,CLASS=S,MSGCLASS=A,TYPRUN=HOLD 
//*UQ ALLOW
//* ------------------------------------------------------------                
//*                 CRIAR ARQUIVO NO MAINFRAME                                  
//* ------------------------------------------------------------                
//IEFBR14  EXEC PGM=IEFBR14                                                     
//SYSUT1   DD   DSN=AAF.S.CSASMF1,DISP=(,CATLG,DELETE),                         
//         VOL=SER=PRD302,SPACE=(TRK,(3,1)),UNIT=SYSDA,                         
//         DCB=(LRECL=133,BLKSIZE=1330,RECFM=FBA)                               
//*                                                                             
//SYSUT2   DD   DSN=AAF.S.CSASMF2,DISP=(,CATLG,DELETE),                         
//         VOL=SER=PRD302,SPACE=(TRK,(3,1)),UNIT=SYSDA,                         
//         DCB=(LRECL=133,BLKSIZE=1330,RECFM=FBA)                               
//*                                                                             
//SYSUT3   DD   DSN=AAF.S.CSASMF3,DISP=(,CATLG,DELETE),                         
//         VOL=SER=PRD302,SPACE=(TRK,(3,1)),UNIT=SYSDA,                         
//         DCB=(LRECL=133,BLKSIZE=1330,RECFM=FBA)                               
//* 

Este foi o JCL que foi usado para checar o SMF e enviar um e-mail se ele estiver igual ou maior que 50%
MEMBER=AAFSNSMF 000065 REC SAVE:26.11.2020 20:45 BY   USERID DBA005  R=00000001
DSN=PROD.USER.JCLS                               LIB=PS VOL=PRL301 UNIT=1524   
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
//AAFSNSMF JOB (AAF,TSS),CLAUD,CLASS=S,MSGCLASS=Z,USER=AAUSER1                 
//*UQ ALLOW                                                                    
//* ----------------------------------------------------------------           
//*      CHECANDO % DO SMF E ENVIANDO POR EMAIL - FUNCIONANDO                  
//* ----------------------------------------------------------------           
//SDSF     EXEC PGM=SDSF                                                       
//ISFOUT   DD DSN=AAF.S.CSASMF1,DISP=SHR                                       
//ISFIN    DD *                                                                
SET CONSOLE BATCH                                                              
SET DELAY 600                                                                  
ULOG                                                                           
/D SMF                                                                         
END                                                                            
//* ----------------------------------------------------------------           
//*          FILTRO NATURAL - PEGANDO OS DATASETS DO SMF                       
//* ----------------------------------------------------------------           
//NATD EXEC NATURAL,PARM1='SYS=P,MT=0,STACK=(LOGON SUPORTE2)'                  
//CMWKF01  DD DSN=AAF.S.CSASMF1,DISP=SHR                                       
//CMWKF02  DD DSN=AAF.S.CSASMF2,DISP=SHR                                       
//SYSOUT   DD SYSOUT=Z                                                         
//SYSPRINT DD SYSOUT=Z                                                         
//CMPRT01  DD SYSOUT=Z                                                         
//CMPRINT  DD SYSOUT=Z                                                         
//SYSIN    DD *                                                                
AAFSCSMF                                                                       
//* --------------------------------------------------------                   
//* COPIANDO O ARQUIVO PARA OUTRO DATASET                                      
//* --------------------------------------------------------                   
//GRAVA1   EXEC PGM=ICEGENER                                                   
//SYSPRINT DD SYSOUT=Z                                                         
//SYSUT1   DD DSN=AAF.S.CSASMF2,DISP=MOD                                       
//SYSUT2   DD DSN=AAF.S.CSASMF3,DISP=SHR                                       
//SYSIN    DD DUMMY                                                            
//* --------------------------------------------------------                   
//SMTP1    EXEC PGM=ICEGENER                                                   
//SYSPRINT DD SYSOUT=Z                                                         
//SYSOUT   DD SYSOUT=Z                                                         
//SYSUT1   DD DSN=AAF.S.CSASMF3,DISP=SHR                                       
//SYSUT2   DD SYSOUT=Z,DCB=(LRECL=80,BLKSIZE=3120,RECFM=FB),DEST=RMT1          
//SYSIN    DD DUMMY                                                            
//* --------------------------------------------------------                   
//* ENVIAR MENSAGEM SMF MAIOR QUE 50%                                          
//* --------------------------------------------------------                   
//PRODUCAO IF RC > 0 THEN                                                      
//* ESTE STEP ENVIA E-MAIL                                                     
//SMTP1    EXEC PGM=ICEGENER                                                   
//SYSPRINT DD SYSOUT=Z                                                         
//SYSOUT   DD SYSOUT=Z                                                         
//SYSUT2   DD SYSOUT=Y,DCB=(LRECL=80,BLKSIZE=3120,RECFM=FB),                   
//         DEST=RMT1                                                           
//SYSIN    DD DUMMY                                                            
//SYSUT1   DD *,DLM=##                                                         
X-FROM: naoresponda@gmail.com                                          
X-TO: claudemar@gmail.com                                                    
FROM: naoresponda@gmail.com                                            
TO: claudemar@gmail.com                                                      
SUBJECT: SMF IGUAL OU MAIOR QUE 50%                                            
                                                                               
OBSERVE O SMF POIS ELE ESTA IGUAL OU MAIOR QUE 50%;                            
                                                                               
PROD.USER.JCLS(AAFSNSMF                                                        
##                                                                             
//AACPFIM ENDIF                                                                

Este é o e-mail que o pessoal do CPD vão receber:
OBSERVE O SMF POIS ELE ESTA IGUAL OU MAIOR QUE 50%;

PROD.USER.JCLS(AAFSNSMF

0 comentários:

Enviar um comentário