%macro detect(dir=,type=,keyword=);
options symbolgen;
/* CREATE A MACRO THAT COUNTS 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;
/* REFRESH A TEXT FILE THAT CAPTURES THE RESULTS FROM A GREP
SEARCH */
x "cd /home/your_directory";
x "rm my.log";
x "cd &dir.&type";
x "grep &keyword * > /home/your_directory/my.log";
/* GIVE THE GREP COMMAND AT LEAST FIVE SECONDS TO EXECUTE */
data _null_;
snooze=sleep(5000);
run;
/* USE THE THE TEXT FILE AS INPUT FOR PROCESSING */
/* STORE THE RESULTS IN A MACRO VARIABLE
*/
filename test "/home/your_directory/my.log" lrecl=256;
data one;
infile test pad missover;
input @1 var1 $char256.;
call symput('text',var1);
run;
/* COUNT THE OBSERVATIONS */
%metadata(one);
/* IF ANOMALIES ARE DETECTED, THEN SEND THE RESULTS IN AN EMAIL
MESSAGE */
%if &nobs>0 %then %do;
data _null_;
filename outbox email "SOMEBODY@EMAIL.NET" ;
file outbox
subject="ATTENTION!!!: Possible Processing Anomalies ( &keyword
) Dectected in &dir.&type !";
put "There was at least one file in &dir.&type where
the string ( &keyword ) was found";
put " ";
put "&text";
run;
%end;
%mend detect;
/* EXECUTE THE APPLICATION FOR EACH TERM OF INTEREST */
%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));
|