%macro detect(dir=,type=,keyword=);
options symbolgen;
/* CRÉER UNE MACRO QUI COMPTE LES OBSERVATIONS */
%macro metadata (ds);
%global dset nvars nobs;
%let dset = &ds;
%let dsid = %sysfunc(open(&dset));
%let nobs = %sysfunc(attrn(&dsid,NOBS));
%let nvars = %sysfunc(attrn(&dsid,NVARS));
%let rc = %sysfunc(close(&dsid));
%mend metadata;
/* ACTUALISER UN FICHIER TEXTE QUI SAISIT LES RÉSULTATS D'UNE RECHERCHE GREP */
x "cd /home/your_directory";
x "rm my.log";
x "cd &dir.&type";
x "grep &keyword * > /home/your_directory/my.log";
/* PRÉVOIR AU MOINS CINQ SECONDES POUR L'EXÉCUTION DE LA COMMANDE GREP */
data _null_;
snooze=sleep(5000);
run;
/* UTILISER LE FICHIER TEXTE COMME ENTRÉE À DES FINS DE TRAITEMENT */
/* ENREGISTRER LES RÉSULTATS DANS UNE VARIABLE MACRO */
filename test "/home/your_directory/my.log" lrecl=256;
data one;
infile test pad missover;
input @1 var1 $char256.;
call symput('text',var1);
run;
/* COMPTER LES OBSERVATIONS */
%metadata(one);
/* SI DES ANOMALIES SONT DÉCELÉES, ENVOYER LES RÉSULTATS SOUS FORME DE COURRIEL */
%if &nobs>0 %then %do;
data _null_;
filename outbox email "QUELQU_UN@EMAIL.NET" ;
file outbox
subject="ATTENTION !!!: Possibilité d'anomalies de traitement ( &keyword ) détectées dans &dir.&type !";
put "La chaîne ( &keyword ) a été repérée dans au moins un fichier du répertoire &dir.&type";
put " ";
put "&text";
run;
%end;
%mend detect;
/* EXÉCUTER L'APPLICATION POUR CHAQUE TERME VISÉ */
%detect(dir=%str(/TOP_DIRECTORY),type=%str(/SUBDIRECTORY),keyword=%str(failure));
%detect(dir=%str(/TOP_DIRECTORY),type=%str(/SUBDIRECTORY),keyword=%str(ERROR:));
%detect(dir=%str(/TOP_DIRECTORY),type=%str(/SUBDIRECTORY),keyword=%str(stopped));
|