SQL à la rescousse pour alimenter un log FTP
Exemple
Un CL permet d’envoyer automatiquement le fichier BIBLIO/SAUVE vers la machine SYSTEME. Le log FTP est conservé mais il ne contient pas d’information d’horodatage. Comment ajouter cette information ?
En effet, FTP ne donne pas plus que ce qui est prévu dans sa conception : une série d’invites, de messages d’information ou d’erreurs.
La méthode
Insérer dans le log une info supplémentaire, à l’aide d’une simple commande SQL.
Le CL
- INPUT désigne le "script" FTP, OUTPUT montre où va le log.
- SYSTEME = nom du système éloigné.
PGM
DLTOVR INPUT
MONMSG CPF0000
DLTOVR OUTPUT
MONMSG CPF0000
CRTSRCPF BIBLIO/DGFTP 240 /* CREE LOG FTP */
MONMSG CPF0000
OVRDBF INPUT BIBLIO/QCLSRC DGFTP01 /* NOM DU SCRIPT FTP */
OVRDBF OUTPUT BIBLIO/DGFTP FTPLOG /* REDIRIGE SORTIE LOG */
RUNSQLSTM BIBLIO/QCLSRC FTPSQL1 /* INSERE DATE-HEURE DEBUT */
MONMSG CPF0000
DLTSPLF FTPSQL1 SPLNBR(*LAST) /* MENAGE SPOOL */
MONMSG CPF0000
FTP SYSTEME /* LANCE LE TRANSFERT FTP */
RUNSQLSTM BIBLIO/QCLSRC FTPSQL2 /* INSERE DATE-HEURE FIN */
MONMSG CPF0000
DLTSPLF FTPSQL2 SPLNBR(*LAST) /* MENAGE SPOOL */
MONMSG CPF0000
DLTOVR INPUT
MONMSG CPF0000
DLTOVR OUTPUT
MONMSG CPF0000
ENDPGM
|
Le script FTP DGFTP01
Les commandes lancées par QUOTE RCMD peuvent nécessiter une adaptation à chaque lancement.
USERID PASSWORD est à remplacer par le code utilisateur et le mot-de-passe.
USERID PASSWORD CD BIBLIO_WRK LCD BIBLIO_WRK QUOTE RCMD CLRSAVF SAUVE BINARY PUT SAUVE QUOTE RCMD RSTOBJ *ALL USERID *SAVF SAVF(BIBLIO_WRK/SAUVE) MBROPT(*ALL) ALWOBJDIF(*ALL) QUOTE RCMD CLRSAVF BIBLIO_WRK/SAUVE QUIT |
Modules SQL FTPSQL1 et FTPSQL2
Appelé par la commande RUNSQLSTM, il s’agit d’un membre source, de type TXT. CHAR permet de récupérer en texte simple les données numériques date et heure.
-- ** FTPSQL1 *******************************
-- ** Cette commande SQL ajoute dans le LOG FTP
-- ** une ligne indiquant la date et l'heure
--
-- WITH NC évite les ennuis de journalisation validation etc..
--
INSERT INTO OUTPUT (SRCDTA) VALUES('** Début ' CONCAT
CHAR(CURRENT DATE) CONCAT ' ' CONCAT CHAR(CURRENT TIME)) WITH NC
|
-- ** FTPSQL2 *******************************
-- ** Cette commande SQL ajoute dans le LOG FTP
-- ** une ligne indiquant la date et l'heure
--
-- WITH NC évite les ennuis de journalisation validation etc..
--
INSERT INTO OUTPUT (SRCDTA) VALUES('** Fin ' CONCAT
CHAR(CURRENT DATE) CONCAT ' ' CONCAT CHAR(CURRENT TIME)) WITH NC
|
Remarque
Si la commande INSERT ne comporte pas la clause WITH NC, va falloir faire quelque chose comme :
CRTJRNRCV JRNRCV(*CURLIB/TRFJRNRCV) THRESHOLD(100000)
MONMSG CPF0000
CRTJRN JRN(TRFJRN) JRNRCV(*CURLIB/TRFJRNRCV)
MONMSG CPF0000
STRJRNPF FILE(BIBLIO/DGFTP) JRN(*CURLIB/TRFJRN) +
OMTJRNE(*OPNCLO)
MONMSG CPF0000
/* ************************************* */
OVRDBF FILE(OUTPUT) TOFILE(BIBLIO/DGFTP)
RUNSQLSTM SRCFILE(QCLSRC) SRCMBR(TRFSQL1)
/* ************************************* */
ENDJRNPF FILE(BIBLIO/DGFTP)
MONMSG CPF0000
DLTJRN TRFJRN
MONMSG CPF0000
DLTJRNRCV TRFJRNRCV
MONMSG CPF0000
|
Exemple de "log" résultant
Affichage des données
Largeur des données . . : 249
Première ligne à afficher . . Première colonne à afficher .
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....
SRCSEQ SRCDAT SRCDTA
,00 0 ** Début 03/09/06 12:35:24
,00 0 Output redirected to a file.
,00 0 Input read from specified override file.
,00 0 Connecting to host SYSTEME at address 192.168.11.2 using p
,00 0 220-QTCP at SYSTEME.
,00 0 220 Connection will close if idle more than 5 minutes.
,00 0 Enter login ID (userid):
,00 0 331 Enter password.
,00 0 230 USERID logged on.
,00 0 OS/400 is the remote operating system. The TCP/IP version
,00 0 250 Now using naming format "0".
,00 0 257 "QGPL" is current library.
,00 0 Enter an FTP subcommand.
,00 0 > CD BIBLIO_WRK
,00 0 250 "BIBLIO_WRK" is current library.
,00 0 Enter an FTP subcommand.
,00 0 > LCD BIBLIO_WRK
,00 0 Local working directory is BIBLIO_WRK
,00 0 Enter an FTP subcommand.
,00 0 > QUOTE RCMD CLRSAVF SAUVE
,00 0 250 Command CLRSAVF SAUVE successful.
,00 0 Enter an FTP subcommand.
,00 0 > BINARY
,00 0 200 Representation type is binary IMAGE.
,00 0 Enter an FTP subcommand.
,00 0 > PUT SAUVE
,00 0 250 Now using naming format "0".
,00 0 257 "BIBLIO_WRK" is current library.
,00 0 227 Entering Passive Mode (192,168,168,3,83,101).
,00 0 150 Sending file to member SAUVE in file SAUVE in library
,00 0 250 File transfer completed successfully.
,00 0 105600 bytes transferred in 0.076 seconds. Transfer rate 1
,00 0 Enter an FTP subcommand.
,00 0 > QUIT
,00 0 221 QUIT subcommand received.
,00 0 ** Fin 03/09/06 12:35:25
******** Fin de données ********
|
Autre exemple où le fichier est expédié vers un système non OS400. D’où l’utilisation de NAMEFMT = 1 et d’un chemin de type IFS (/u04/INFOCENT/bddbo)
SRCSEQ SRCDAT SRCDTA
,00 0 ** Debut 01/09/06 11:47:14
1,00 0 Output redirected to a file.
2,00 0 Input read from specified override file.
3,00 0 Connecting to host XZYTRF at address 172.31.3.21 using por
4,00 0 220 XZYTRF FTP server (SunOS 5.8) ready.
5,00 0 Enter login ID (couzon):
6,00 0 331 Password required for ifcftp.
7,00 0 230 User ifcftp logged in.
8,00 0 UNIX Type: L8 Version: SUNOS
9,00 0 Enter an FTP subcommand.
10,00 0 > cd /u04/INFOCENT/bddbo
11,00 0 250 CWD command successful.
12,00 0 Enter an FTP subcommand.
13,00 0 > namefmt 1
14,00 0 502 SITE command not implemented.
15,00 0 Client NAMEFMT is 1.
16,00 0 Enter an FTP subcommand.
,00 0 ** Fin 01/09/06 11:47:14
******** Fin de données ********
|