JCL Doctor V2 â Linter / Analyzer professionnel de JCL MVS / zOS
Installer, tester et exploiter jcl_doctor_v2.py, un utilitaire autonome qui analyse un JCL avant exécution ou aprÚs incident : syntaxe, JOB/EXEC/DD, datasets, DISP, SPACE, SORT, sécurité, restart strategy, PROC/INCLUDE et risques opérationnels.
Le bouton principal pointe explicitement vers /static/toolbox/jcl_doctor_v2.py. DĂ©pose ce script dans static/toolbox/ pour lâexposer depuis IDEO-Lab.
JCL Doctor V2 est conçu comme un contrĂŽle qualitĂ© avant lancement batch ou comme outil dâaudit aprĂšs incident. Il transforme un listing JCL en findings exploitables, avec score de risque, catĂ©gories, DD statements, datasets, steps, comparaison avec une baseline et exports HTML/JSON/CSV.
Ce que le moteur analyse
| Domaine | ContrÎles réalisés | Diagnostic produit |
|---|---|---|
| Syntaxe JCL | JOB, EXEC, DD, PROC, INCLUDE, JCLLIB, continuations. | Structure du job, steps, procédures appelées, includes, cohérence globale. |
| DD statements | DSN, DISP, SPACE, UNIT, DCB, SYSOUT, DUMMY. | Allocations manquantes, suppression dangereuse, DD incomplet ou risqué. |
| Datasets | GDG, datasets temporaires, production-like DSN, patterns sensibles, banned patterns. | Risque sécurité, conformité naming, dataset critique ou suppression potentielle. |
| Restart | RESTART=, granularitĂ© des steps, prĂ©sence dâune stratĂ©gie de relance. | PrĂ©paration production insuffisante ou relance difficile aprĂšs incident. |
| Performance | SORT, SORTWK, SYSIN, TIME, REGION, allocations faibles. | Risque de job long, abend espace, SORT mal préparé, surconsommation mémoire. |
| Gouvernance | Commentaires, profils production/security/strict, policy JSON, diff baseline. | Score par catégorie, go/no-go opérationnel, contrÎle avant mise en production. |
Téléchargement des fichiers
Cette page fournit les liens explicites vers le script Python, les samples, le catalogue de rĂšgles, le fichier de policy et le pack complet. Pour IDEO-Lab, les fichiers doivent ĂȘtre dĂ©posĂ©s sous /static/toolbox/.
Script Python autonome, sans dépendance externe, à lancer sur un fichier JCL texte.
JCL volontairement risqué : DISP DELETE, datasets sensibles, SPACE faible, TIME=NOLIMIT.
Baseline plus saine pour comparaison avant/aprÚs ou démonstration de diff.
Cas PROC, JCLLIB, INCLUDE et contrÎle de structure avancée.
Cas datasets sensibles, patterns sécurité, policy custom et profil security.
Catalogue JSON des rÚgles intégrées, exportable et documentable.
Script, samples, policy, exports et rapports de démonstration.
Arborescence static recommandée
static/
toolbox/
jcl_doctor_v2.py
jcl_doctor_v2_pack.zip
jcl_doctor_v2_rules_catalog.json
sample_jcl_v2_policy.json
sample_jcl_v2_payroll.jcl
sample_jcl_v2_clean.jcl
sample_jcl_v2_proc.jcl
sample_jcl_v2_security.jcl
jcl_doctor_v2_guide.htmlInstallation de JCL Doctor V2
Le script est autonome. Il suffit dâune version Python moderne et dâun fichier JCL texte. Il peut ĂȘtre utilisĂ© sur un poste Windows, Linux, macOS ou sur un serveur dâaudit batch.
1. Arborescence locale recommandée
jcl_doctor_lab/
bin/
jcl_doctor_v2.py
input/
sample_jcl_v2_payroll.jcl
sample_jcl_v2_clean.jcl
sample_jcl_v2_proc.jcl
sample_jcl_v2_security.jcl
sample_jcl_v2_policy.json
output/
reports/
csv/
json/Ce bouton pointe explicitement vers /static/toolbox/jcl_doctor_v2.py.
2. Installation Linux / macOS
mkdir -p jcl_doctor_lab/bin jcl_doctor_lab/input jcl_doctor_lab/output/reports jcl_doctor_lab/output/csv jcl_doctor_lab/output/json
cp jcl_doctor_v2.py jcl_doctor_lab/bin/
cp sample_jcl_v2_*.jcl jcl_doctor_lab/input/
cp sample_jcl_v2_policy.json jcl_doctor_lab/input/
cd jcl_doctor_lab
python3 bin/jcl_doctor_v2.py --demo payroll3. Installation Windows PowerShell
New-Item -ItemType Directory -Force jcl_doctor_lab\bin, jcl_doctor_lab\input, jcl_doctor_lab\output\reports, jcl_doctor_lab\output\csv, jcl_doctor_lab\output\json
Copy-Item .\jcl_doctor_v2.py .\jcl_doctor_lab\bin\
Copy-Item .\sample_jcl_v2_*.jcl .\jcl_doctor_lab\input\
Copy-Item .\sample_jcl_v2_policy.json .\jcl_doctor_lab\input\
Set-Location .\jcl_doctor_lab
python .\bin\jcl_doctor_v2.py --demo payroll4. Test de validation
python bin/jcl_doctor_v2.py input/sample_jcl_v2_payroll.jcl \
--profile production \
--compare-with input/sample_jcl_v2_clean.jcl \
--html output/reports/sample_jcl_v2_payroll_report.html \
--json output/json/sample_jcl_v2_payroll_analysis.json \
--csv-findings output/csv/sample_jcl_v2_payroll_findings.csv \
--csv-steps output/csv/sample_jcl_v2_payroll_steps.csv \
--csv-dds output/csv/sample_jcl_v2_payroll_dds.csv \
--csv-datasets output/csv/sample_jcl_v2_payroll_datasets.csv \
--csv-categories output/csv/sample_jcl_v2_payroll_categories.csvFichiers input attendus
JCL Doctor V2 attend un fichier texte brut contenant un job JCL. Lâextension peut ĂȘtre .jcl, .txt, .proc, .cntl ou Ă©quivalent. Le point clĂ© est de conserver les cartes JCL et les espaces de continuation.
TĂ©lĂ©charger dâabord le script Python, puis lancer lâanalyse sur un fichier JCL.
1. Sources acceptées
| Source | Contenu typique | Usage |
|---|---|---|
JOB JCL | Carte JOB, steps EXEC, DD statements, datasets. | Audit complet avant exécution ou mise en production. |
PROC | Procédures cataloguées ou inline, paramÚtres symboliques. | ContrÎle de réutilisabilité et structure batch. |
INCLUDE | Membres inclus, JCLLIB, standard site. | Identification des dĂ©pendances et standards dâexploitation. |
Security JCL | Datasets RACF, HR, PAYROLL, PROD, SECURITY, DELETE. | Audit sécurité et contrÎle de patterns sensibles. |
Baseline JCL | Version saine ou précédente du job. | Comparaison avec --compare-with. |
2. Exemple minimal de JCL
//PAYROLL1 JOB (ACCT),'PAYROLL NIGHTLY',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//STEP010 EXEC PGM=IEFBR14,TIME=NOLIMIT,REGION=0M
//SYSUT1 DD DSN=PAYROLL.PROD.INPUT,DISP=OLD
//SYSUT2 DD DSN=PAYROLL.PROD.OUTPUT,DISP=(OLD,DELETE)
//STEP020 EXEC PGM=SORT
//SORTIN DD DSN=PAYROLL.PROD.INPUT,DISP=SHR
//SORTOUT DD DSN=PAYROLL.PROD.SORTED,DISP=(NEW,CATLG,DELETE),SPACE=(TRK,(1,1))
//SYSIN DD *
SORT FIELDS=(1,10,CH,A)
/*3. Samples disponibles
Cas Ă risques pour valider les rĂšgles production.
JCL plus propre pour comparer les findings.
ContrÎle des procédures et includes.
Cas orienté datasets sensibles et policy JSON.
--redact avant partage externe.Utilisation quotidienne
1. Modes démo intégrés
python jcl_doctor_v2.py --demo payroll
python jcl_doctor_v2.py --demo clean
python jcl_doctor_v2.py --demo proc
python jcl_doctor_v2.py --demo security2. Analyse simple dâun JCL
python jcl_doctor_v2.py input/sample_jcl_v2_payroll.jcl3. Analyse complĂšte avec exports
python jcl_doctor_v2.py input/sample_jcl_v2_payroll.jcl \
--profile production \
--json output/json/payroll_analysis.json \
--html output/reports/payroll_report.html \
--csv-findings output/csv/payroll_findings.csv \
--csv-steps output/csv/payroll_steps.csv \
--csv-dds output/csv/payroll_dds.csv \
--csv-datasets output/csv/payroll_datasets.csv \
--csv-categories output/csv/payroll_categories.csv4. Comparaison avec une baseline
Le paramÚtre --compare-with permet de comparer un JCL courant avec une version précédente ou une version propre.
python jcl_doctor_v2.py input/sample_jcl_v2_payroll.jcl \
--compare-with input/sample_jcl_v2_clean.jcl \
--html output/reports/payroll_vs_clean.html5. Mode anonymisé
python jcl_doctor_v2.py input/production_job.jcl \
--redact \
--html output/reports/production_job_redacted.html \
--json output/json/production_job_redacted.json6. Mode batch strict
python jcl_doctor_v2.py input/nightly_job.jcl \
--profile strict \
--html output/reports/nightly_job_report.html \
--csv-findings output/csv/nightly_job_findings.csv \
--fail-on ERRORParamĂštres de ligne de commande
1. ParamĂštres dâentrĂ©e et de sortie
| ParamĂštre | Description | Exemple |
|---|---|---|
input_file | Fichier JCL texte Ă analyser. | input/job.jcl |
--demo | Lance un sample intégré : payroll, clean, proc, security. | --demo payroll |
--write-sample-jcl | Ăcrit un sample intĂ©grĂ© dans un fichier. | --sample-name payroll --write-sample-jcl sample.jcl |
--write-all-samples | Ăcrit tous les samples intĂ©grĂ©s dans un dossier. | --write-all-samples samples/ |
--json | Exporte lâanalyse complĂšte en JSON. | --json output/analysis.json |
--html | GénÚre le rapport HTML. | --html output/report.html |
--csv-findings | Exporte les anomalies détectées. | --csv-findings output/findings.csv |
--csv-steps | Exporte les steps EXEC détectés. | --csv-steps output/steps.csv |
--csv-dds | Exporte les DD statements détectés. | --csv-dds output/dds.csv |
--csv-datasets | Exporte les datasets et attributs extraits. | --csv-datasets output/datasets.csv |
--csv-categories | Exporte le score par catégorie de risque. | --csv-categories output/categories.csv |
2. ParamĂštres dâanalyse et de gouvernance
| ParamÚtre | Effet | Usage recommandé |
|---|---|---|
--profile | Profil : production, batch, security, performance, training, strict. | Ajuster la sĂ©vĂ©ritĂ© et le focus de lâanalyse. |
--custom-policy | Charge un fichier JSON avec patterns sensibles ou interdits. | Adapter aux standards dâune entreprise. |
--compare-with | Compare avec un JCL baseline. | Revue avant/aprĂšs modification. |
--export-rules | Exporte le catalogue de rÚgles intégré. | Documentation, audit, future table SQL. |
--redact | Masque les noms de datasets dans les sorties. | Partage externe ou support. |
--fail-on | Retourne un code erreur Ă partir dâune sĂ©vĂ©ritĂ© donnĂ©e. | --fail-on ERROR ou --fail-on CRITICAL. |
--max-findings-console | Limite le nombre de findings affichés en console. | Réduire le bruit en batch. |
3. Exemple profil sécurité avec policy custom
python jcl_doctor_v2.py input/sample_jcl_v2_security.jcl \
--profile security \
--custom-policy input/sample_jcl_v2_policy.json \
--html output/reports/security_jcl_report.html \
--csv-findings output/csv/security_jcl_findings.csvExemples dâutilisation
ScĂ©nario 1 â Audit prĂ©-production dâun JCL payroll
Cas classique : vérifier un JCL critique avant mise en production.
python jcl_doctor_v2.py input/sample_jcl_v2_payroll.jcl \
--profile production \
--html output/reports/payroll_preprod_report.html \
--csv-findings output/csv/payroll_preprod_findings.csvScĂ©nario 2 â Audit sĂ©curitĂ©
Détecter datasets sensibles, patterns interdits et opérations destructives.
python jcl_doctor_v2.py input/sample_jcl_v2_security.jcl \
--profile security \
--custom-policy input/sample_jcl_v2_policy.json \
--redact \
--html output/reports/security_jcl_redacted.htmlScĂ©nario 3 â Analyse PROC / INCLUDE
ContrĂŽler la structure et les dĂ©pendances dâun JCL utilisant PROC, INCLUDE et JCLLIB.
python jcl_doctor_v2.py input/sample_jcl_v2_proc.jcl \
--profile batch \
--html output/reports/proc_analysis.html \
--csv-steps output/csv/proc_steps.csv \
--csv-dds output/csv/proc_dds.csvScĂ©nario 4 â Comparaison avant/aprĂšs modification
Comparer une version modifiée avec une baseline saine.
python jcl_doctor_v2.py input/new_job_version.jcl \
--compare-with input/old_job_version.jcl \
--profile production \
--html output/reports/jcl_diff_report.html \
--json output/json/jcl_diff_analysis.jsonScĂ©nario 5 â ContrĂŽle nocturne automatisĂ©
0 5 * * * /opt/jcl-doctor/bin/python /opt/jcl-doctor/jcl_doctor_v2.py \
/data/jcl/nightly_job.jcl \
--profile strict \
--html /var/www/reports/jcl/nightly_job_report.html \
--csv-findings /var/log/jcl-doctor/nightly_job_findings.csv \
--json /var/log/jcl-doctor/nightly_job_analysis.json \
--fail-on ERROR >> /var/log/jcl-doctor/jcl_doctor.log 2>&1Rules catalog â Lecture des contrĂŽles intĂ©grĂ©s
JCL Doctor V2 embarque un catalogue de rÚgles exportable. Il couvre les risques de structure, sécurité, allocation, performance, restart, exploitabilité et comparaison baseline.
Fichier JSON utile pour documentation, audit, enrichissement manuel ou intégration dans une base SQL.
| Famille | Exemples de rĂšgles | Objectif |
|---|---|---|
| Safety | DISP=(OLD,DELETE), DELETE sur dataset sensible, DD incomplet. | Bloquer les suppressions ou écrasements dangereux. |
| Allocation | NEW sans SPACE, SPACE trop faible, absence de SMS classes. | Ăviter B37/D37/E37 et allocations fragiles. |
| Performance | SORT sans SORTWK, TIME=NOLIMIT, REGION=0M. | Réduire les risques batch et consommation excessive. |
| Security | Patterns PROD, RACF, SECURITY, PAYROLL, policy custom. | Surveiller les datasets sensibles et opérations à risque. |
| Maintainability | Commentaires faibles, noms peu clairs, absence de restart strategy. | Améliorer exploitation et support production. |
| Structure | PROC/INCLUDE/JCLLIB, IF/ENDIF, mélange COND et IF. | Rendre le JCL plus lisible et maßtrisable. |
Exporter le catalogue intégré
python jcl_doctor_v2.py --export-rules output/json/jcl_doctor_v2_rules_catalog.jsonExemple de policy JSON custom
{
"sensitive_patterns": ["PAYROLL", "HR", "RACF", "SECURITY", "PROD"],
"banned_patterns": ["DISP=(OLD,DELETE)", "TIME=NOLIMIT", "REGION=0M"]
}Exports et exploitation des résultats
Vue lisible : score, findings, catégories, steps, DD, datasets, recommandations et diff baseline.
Format complet pour API, ingestion SQL, archivage ou comparaison automatique.
Une ligne par anomalie, avec sévérité, catégorie, rÚgle et recommandation.
Une ligne par step EXEC, programme, paramĂštres et contexte.
DD statements, DSN, DISP, SPACE, UNIT, DCB, SYSOUT, DUMMY et attributs extraits.
Score par famille de risque : safety, security, allocation, performance, restart, maintainability.
Exemple de synthĂšse console
JCL Doctor V2
Status : BLOCKED
Highest severity : CRITICAL
Risk score : 100/100
Steps : 3
DD statements : 13
Datasets : 6
Findings : 16
Categories : safety, security, allocation, performance, restartIdée de table SQL pour historisation
CREATE TABLE jcl_doctor_run (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
source_name VARCHAR(255),
profile VARCHAR(32),
status VARCHAR(32),
highest_severity VARCHAR(16),
risk_score INTEGER,
step_count INTEGER,
dd_count INTEGER,
dataset_count INTEGER,
finding_count INTEGER,
report_path VARCHAR(500),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Dépannage et bonnes pratiques
1. Le script ne détecte pas correctement les steps ou DD
| Cause possible | Correction |
|---|---|
| Le fichier nâest pas un texte brut. | Exporter le JCL en texte, pas en PDF image ou Word. |
| Les continuations JCL ont été cassées. | Conserver les colonnes et éviter les copier/coller qui suppriment les espaces. |
| Le JCL utilise des standards site spécifiques. | Ajouter une policy custom ou enrichir le catalogue de rÚgles. |
| Les PROC/INCLUDE ne sont pas résolus. | Fournir le JCL expandé ou analyser séparément les membres PROC/INCLUDE. |
2. Trop de findings remontées
Commencer avec le profil training ou batch, puis passer à production, security ou strict lorsque les rÚgles sont calibrées. Utiliser --max-findings-console pour réduire le bruit en console.
python jcl_doctor_v2.py input/job.jcl \
--profile training \
--max-findings-console 10 \
--html output/reports/job_training_report.html3. Check-list avant partage externe
- Utiliser
--redactpour masquer les datasets dans les rapports. - Anonymiser jobnames, user IDs, classes JES, volumes, bibliothÚques, applications et préfixes datasets.
- Conserver une copie brute interne pour valider le parsing et les findings.
- Ne jamais bloquer une mise en production uniquement sur une rÚgle non calibrée : valider avec un expert production.
- Enrichir progressivement la policy JSON avec les standards internes.
