Audit SAS Metadata : Comment lister vos répertoires de déploiement et jobs associés

Ce code est également disponible en : English
Niveau de difficulté
Confirmé
Publié le :
Simon

Le Conseil de l'Expert

Simon
Expert SAS et fondateur.

La clé du succès ici réside dans l'utilisation de l'URI de recherche et de la fonction metadata_getnasn. Cette dernière est cruciale car elle permet de "parcourir" les associations (comme DeployedComponents ou ResponsibleParties) définies dans le modèle objet SAS. C'est une méthode d'une efficacité redoutable pour générer des rapports d'impact ou des inventaires de déploiement en temps réel, garantissant ainsi une traçabilité totale entre le code exécuté sur le serveur et son propriétaire dans les métadonné

Attention : Ce code nécessite des droits administrateur.
Le programme se connecte à un serveur de métadonnées SAS© via les options système. Il utilise ensuite un DATA STEP avec les fonctions de métadonnées (`metadata_resolve`, `metadata_getnobj`, `metadata_getattr`, `metadata_getnasn`) pour rechercher tous les objets de type `Directory` qui sont des répertoires de déploiement. Pour chaque répertoire trouvé, il récupère les informations sur les fichiers déployés, les jobs de transformation associés et les propriétaires de ces jobs. Le résultat est stocké dans une table `work.deployfiles` et finalement affiché avec une `PROC PRINT`.
Analyse des données

Type : CREATION_INTERNE


Les données sont générées dynamiquement en interrogeant le serveur de métadonnées SAS à l'aide des fonctions `metadata_*`. Aucune source de données externe n'est lue ou requise pour l'exécution.

1 Bloc de code
OPTIONS
Explication :
Ce bloc configure les paramètres de connexion au serveur de métadonnées SAS. Il définit le serveur, le port, l'utilisateur, le mot de passe, le référentiel et le protocole à utiliser. Ces options sont indispensables pour que les fonctions de métadonnées puissent communiquer avec le serveur.
Copié !
1options
2 metaserver="my.sas.server"
3 metaport=8561
4 metauser="sasadm @saspw"
5 metapass="password"
6 metarepository=Foundation
7 metaprotocol=BRIDGE;
2 Bloc de code
DATA STEP Data
Explication :
Ce DATA STEP est le cœur du programme. Il interroge les métadonnées SAS pour trouver les répertoires de déploiement via une requête 'omsobj'. À l'aide de fonctions spécifiques aux métadonnées (`metadata_resolve`, `metadata_getnobj`, etc.), il navigue à travers les associations d'objets pour extraire les noms des applications, des répertoires, des fichiers, des jobs et de leurs propriétaires. Les informations collectées sont écrites dans la table `work.deployfiles`.
Copié !
1DATA work.deployfiles;
2 
3 /* declare and initialize variables */
4 
5 LENGTH app_name type dir_uri app_uri dir_name file_uri file_name owner trans_uri resp_uri job_name $ 50 id $ 17 dir_path $ 255;
6 call missing(of _character_);
7 
8 /* variables to store to table */
9 
10 keep app_name dir_name dir_path file_name owner job_name;
11 
12 dir_obj="omsobj:Directory?Directory[ @build_example_from_doc/SAS Help Center_ Bucket Binning and Weight-of-Evidence Computation.html contains '.'][DeployedComponents/ServerContext]";
13 dir_rc=metadata_resolve(dir_obj,type,id); /* Count number of directories with an associated server context. */
14
15 IF dir_rc > 0 THEN DO n=1 to dir_rc; /* if directories exist, pull data from them. */
16 
17 rc=metadata_getnobj(dir_obj,n,dir_uri);
18 rc=metadata_getnasn(dir_uri,"DeployedComponents",1,app_uri);
19 rc=metadata_getattr(app_uri,"Name",app_name);
20 rc=metadata_getattr(dir_uri,"Name",dir_name);
21 rc=metadata_getattr(dir_uri,"DirectoryName",dir_path);
22 
23 file_rc=metadata_getnasn(dir_uri,"Files",1,file_uri);
24 
25 IF file_rc > 0 THEN DO m=1 to file_rc; /* if files are associated with the directory, pull data on them. */
26 
27 rc=metadata_getnasn(dir_uri,"Files",m,file_uri);
28 rc=metadata_getattr(file_uri,"FileName",file_name);
29 trans_rc=metadata_getnasn(file_uri,"AssociatedTransformation",1,trans_uri);
30 
31 IF trans_rc > 0 THEN DO o=1 to trans_rc; /* if jobs are associated with the files, pull the responsible party of that job. */
32
33 rc=metadata_getnasn(file_uri,"AssociatedTransformation",o,trans_uri);
34 rc=metadata_getattr(trans_uri,"Name",job_name);
35 rc=metadata_getnasn(trans_uri,"ResponsibleParties",1,resp_uri);
36 rc=metadata_getattr(resp_uri,"Name",owner);
37 OUTPUT;
38 END;
39 ELSE put "INFO: No Associations Found";
40 END;
41 ELSE put "INFO: No Associated Files Found";
42 
43 END;
44 ELSE put "INFO: No Deployment Directories Found";
45RUN;
3 Bloc de code
PROC PRINT
Explication :
Cette procédure affiche le contenu de la table `work.deployfiles` qui a été créée dans l'étape de données précédente. Elle permet de visualiser la liste des répertoires de déploiement et les informations associées.
Copié !
1PROC PRINT DATA=deployfiles; RUN;
L'Astuce Pro
Pour optimiser le temps d'exécution lors de l'extraction de nombreux objets, remplacez les multiples appels METADATA_GETATTR par l'instruction METADATA_GETNOBJ avec un filtre d'attribut directement dans le prédicat XML, ce qui réduit les allers-retours avec le serveur de métadonnées et évite les erreurs de résolution si l'association DeployedComponents est manquante sur certains répertoires.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright © 2023, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. SPDX-License-Identifier: Apache-2.0


Documentation liée

Aucune documentation spécifique pour cette catégorie.