Cet inventaire est la première étape pour détecter des "fichiers fantômes" (références en métadonnées pointant vers des fichiers supprimés du disque). Pour aller plus loin, vous pourriez coupler ce script avec la fonction fileexist() afin de valider immédiatement l'existence réelle de chaque ressource sur le serveur.
Type : CREATION_INTERNE
Les données sont extraites dynamiquement du référentiel de métadonnées via les fonctions SAS (metadata_resolve, metadata_getnobj, etc.).
| 1 | options |
| 2 | metaserver='my.sas.server' |
| 3 | metaport=8561 |
| 4 | metaprotocol='bridge' |
| 5 | metauser='sasadm @saspw' |
| 6 | metapass='password' |
| 7 | metarepository='Foundation' |
| 8 | metaconnect='NONE'; |
| 1 | DATA directories; |
| 2 | |
| 3 | /* Initialize variables. */ |
| 4 | LENGTH type id dir_uri file_uri $ 50 path file_name fqn $ 255; |
| 5 | call missing(of _character_); |
| 6 | keep fqn; |
| 7 | |
| 8 | /* Define a query to find all directory objects */ |
| 9 | obj="omsobj:Directory?Directory[Files/File[ @code_sas_json/downside_frequency_test.json contains '.']"; |
| 10 | |
| 11 | /* Count the objects that match this query. */ |
| 12 | dir_count=metadata_resolve(obj,type,id); |
| 13 | |
| 14 | /* Proceed if any directories are found. */ |
| 15 | IF dir_count > 0 THEN DO i=1 to dir_count; |
| 16 | rc=metadata_getnobj(obj,i,dir_uri); |
| 17 | rc=metadata_getattr(dir_uri,"DirectoryName",path); |
| 18 | |
| 19 | /* Find the files associated with the path. */ |
| 20 | file_count=metadata_getnasn(dir_uri,"Files",1,file_uri); |
| 21 | IF file_count > 0 THEN DO j=1 to file_count; |
| 22 | rc=metadata_getnasn(dir_uri,"Files",j,file_uri); |
| 23 | rc=metadata_getattr(file_uri,"FileName",file_name); |
| 24 | fqn=catx("/",path,file_name); |
| 25 | OUTPUT; |
| 26 | END; |
| 27 | END; |
| 28 | /* Define a search query to find any "SASFileRef" object types. */ |
| 29 | obj2="omsobj:SASFileRef? @code_sas_json/downside_frequency_test.json contains '.'"; |
| 30 | fileref_count=metadata_resolve(obj2,type,id); |
| 31 | IF fileref_count > 0 THEN DO i = 1 to fileref_count; |
| 32 | rc=metadata_getnobj(obj2,i,file_uri); |
| 33 | rc=metadata_getattr(file_uri,"Name",fqn); |
| 34 | OUTPUT; |
| 35 | END; |
| 36 | |
| 37 | RUN; |