Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

JCL Doctor V2 – Linter / Analyzer professionnel de JCL MVS / zOS

Objectif du guide

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.

TĂ©lĂ©charger l’utilitaire JCL Doctor V2

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.

Lint
ContrĂŽle des cartes JOB, EXEC, DD, PROC, INCLUDE, JCLLIB, IF/ELSE/ENDIF et paramĂštres critiques.
Risk
Détection des DISP dangereux, datasets sensibles, SPACE incohérents, TIME=NOLIMIT, REGION=0M et SORT incomplet.
Export
Production HTML, JSON, CSV findings, steps, DD statements, datasets, catégories et rÚgles exportables.

Ce que le moteur analyse

DomaineContrÎles réalisésDiagnostic produit
Syntaxe JCLJOB, EXEC, DD, PROC, INCLUDE, JCLLIB, continuations.Structure du job, steps, procédures appelées, includes, cohérence globale.
DD statementsDSN, DISP, SPACE, UNIT, DCB, SYSOUT, DUMMY.Allocations manquantes, suppression dangereuse, DD incomplet ou risqué.
DatasetsGDG, datasets temporaires, production-like DSN, patterns sensibles, banned patterns.Risque sécurité, conformité naming, dataset critique ou suppression potentielle.
RestartRESTART=, granularitĂ© des steps, prĂ©sence d’une stratĂ©gie de relance.PrĂ©paration production insuffisante ou relance difficile aprĂšs incident.
PerformanceSORT, SORTWK, SYSIN, TIME, REGION, allocations faibles.Risque de job long, abend espace, SORT mal préparé, surconsommation mémoire.
GouvernanceCommentaires, profils production/security/strict, policy JSON, diff baseline.Score par catégorie, go/no-go opérationnel, contrÎle avant mise en production.
Positionnement : JCL Doctor V2 sert Ă  sĂ©curiser les mises en production batch, aider les jeunes mainframers, auditer les JCL historiques et dĂ©tecter les patterns dangereux avant qu’ils ne provoquent un incident.

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/.

Utilitaire principal

Script Python autonome, sans dépendance externe, à lancer sur un fichier JCL texte.

Sample Payroll

JCL volontairement risqué : DISP DELETE, datasets sensibles, SPACE faible, TIME=NOLIMIT.

Download payroll

Sample Clean

Baseline plus saine pour comparaison avant/aprÚs ou démonstration de diff.

Download clean

Sample PROC / INCLUDE

Cas PROC, JCLLIB, INCLUDE et contrÎle de structure avancée.

Download proc

Sample Security

Cas datasets sensibles, patterns sécurité, policy custom et profil security.

Download security

Rules catalog

Catalogue JSON des rÚgles intégrées, exportable et documentable.

Download rules

Pack ZIP

Script, samples, policy, exports et rapports de démonstration.

Download ZIP

Arborescence static recommandée

static files
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.html
ContrĂŽle visuel : le bouton Download jcl_doctor_v2.py est prĂ©sent en haut de la page, dans l’onglet TĂ©lĂ©chargement, dans Installation et dans Fichiers input.

Installation 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

Project tree
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/
Lien direct du script Ă  installer

Ce bouton pointe explicitement vers /static/toolbox/jcl_doctor_v2.py.

2. Installation Linux / macOS

Linux / macOS setup
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 payroll

3. Installation Windows PowerShell

Windows PowerShell setup
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 payroll

4. Test de validation

Validation command
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.csv
Résultat attendu : le sample payroll doit produire un rapport HTML avec un score de risque élevé, des findings sur DISP/DELETE, datasets sensibles, restart strategy, TIME/REGION et allocations.

Fichiers 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.

Utilitaire nécessaire pour analyser les inputs

TĂ©lĂ©charger d’abord le script Python, puis lancer l’analyse sur un fichier JCL.

1. Sources acceptées

SourceContenu typiqueUsage
JOB JCLCarte JOB, steps EXEC, DD statements, datasets.Audit complet avant exécution ou mise en production.
PROCProcédures cataloguées ou inline, paramÚtres symboliques.ContrÎle de réutilisabilité et structure batch.
INCLUDEMembres inclus, JCLLIB, standard site.Identification des dĂ©pendances et standards d’exploitation.
Security JCLDatasets RACF, HR, PAYROLL, PROD, SECURITY, DELETE.Audit sécurité et contrÎle de patterns sensibles.
Baseline JCLVersion saine ou précédente du job.Comparaison avec --compare-with.

2. Exemple minimal de JCL

sample_jcl_v2_payroll.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

Payroll risk

Cas Ă  risques pour valider les rĂšgles production.

Download

Clean baseline

JCL plus propre pour comparer les findings.

Download

PROC / INCLUDE

ContrÎle des procédures et includes.

Download

Security

Cas orienté datasets sensibles et policy JSON.

Download

RÚgle de sécurité : un vrai JCL peut révéler datasets, applications, noms de jobs, classes JES, conventions de nommage, volumes, bibliothÚques STEPLIB/JOBLIB et standards internes. Utiliser --redact avant partage externe.

Utilisation quotidienne

1. Modes démo intégrés

Demo modes
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 security

2. Analyse simple d’un JCL

Simple analysis
python jcl_doctor_v2.py input/sample_jcl_v2_payroll.jcl

3. Analyse complĂšte avec exports

Full export analysis
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.csv

4. 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.

Baseline compare
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.html

5. Mode anonymisé

Redacted report
python jcl_doctor_v2.py input/production_job.jcl \
  --redact \
  --html output/reports/production_job_redacted.html \
  --json output/json/production_job_redacted.json

6. Mode batch strict

Batch strict mode
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 ERROR
Lecture recommandĂ©e : ouvrir d’abord le rapport HTML, puis utiliser les CSV pour revue technique, ticket, base SQL, dashboard ou contrĂŽle automatique dans une chaĂźne de mise en production.

ParamĂštres de ligne de commande

1. ParamĂštres d’entrĂ©e et de sortie

ParamĂštreDescriptionExemple
input_fileFichier JCL texte Ă  analyser.input/job.jcl
--demoLance 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/
--jsonExporte l’analyse complùte en JSON.--json output/analysis.json
--htmlGénÚre le rapport HTML.--html output/report.html
--csv-findingsExporte les anomalies détectées.--csv-findings output/findings.csv
--csv-stepsExporte les steps EXEC détectés.--csv-steps output/steps.csv
--csv-ddsExporte les DD statements détectés.--csv-dds output/dds.csv
--csv-datasetsExporte les datasets et attributs extraits.--csv-datasets output/datasets.csv
--csv-categoriesExporte le score par catégorie de risque.--csv-categories output/categories.csv

2. Paramùtres d’analyse et de gouvernance

ParamÚtreEffetUsage recommandé
--profileProfil : production, batch, security, performance, training, strict.Ajuster la sĂ©vĂ©ritĂ© et le focus de l’analyse.
--custom-policyCharge un fichier JSON avec patterns sensibles ou interdits.Adapter aux standards d’une entreprise.
--compare-withCompare avec un JCL baseline.Revue avant/aprĂšs modification.
--export-rulesExporte le catalogue de rÚgles intégré.Documentation, audit, future table SQL.
--redactMasque les noms de datasets dans les sorties.Partage externe ou support.
--fail-onRetourne un code erreur Ă  partir d’une sĂ©vĂ©ritĂ© donnĂ©e.--fail-on ERROR ou --fail-on CRITICAL.
--max-findings-consoleLimite le nombre de findings affichés en console.Réduire le bruit en batch.

3. Exemple profil sécurité avec policy custom

Security policy
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.csv

Exemples d’utilisation

ScĂ©nario 1 – Audit prĂ©-production d’un JCL payroll

Cas classique : vérifier un JCL critique avant mise en production.

Production audit
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.csv

ScĂ©nario 2 – Audit sĂ©curitĂ©

Détecter datasets sensibles, patterns interdits et opérations destructives.

Security audit
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.html

ScĂ©nario 3 – Analyse PROC / INCLUDE

ContrĂŽler la structure et les dĂ©pendances d’un JCL utilisant PROC, INCLUDE et JCLLIB.

PROC analysis
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.csv

ScĂ©nario 4 – Comparaison avant/aprĂšs modification

Comparer une version modifiée avec une baseline saine.

Before after compare
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.json

ScĂ©nario 5 – ContrĂŽle nocturne automatisĂ©

Cron entry
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>&1

Rules 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.

Télécharger le catalogue de rÚgles JCL Doctor V2

Fichier JSON utile pour documentation, audit, enrichissement manuel ou intégration dans une base SQL.

FamilleExemples de rĂšglesObjectif
SafetyDISP=(OLD,DELETE), DELETE sur dataset sensible, DD incomplet.Bloquer les suppressions ou écrasements dangereux.
AllocationNEW sans SPACE, SPACE trop faible, absence de SMS classes.Éviter B37/D37/E37 et allocations fragiles.
PerformanceSORT sans SORTWK, TIME=NOLIMIT, REGION=0M.Réduire les risques batch et consommation excessive.
SecurityPatterns PROD, RACF, SECURITY, PAYROLL, policy custom.Surveiller les datasets sensibles et opérations à risque.
MaintainabilityCommentaires faibles, noms peu clairs, absence de restart strategy.Améliorer exploitation et support production.
StructurePROC/INCLUDE/JCLLIB, IF/ENDIF, mélange COND et IF.Rendre le JCL plus lisible et maßtrisable.

Exporter le catalogue intégré

Export rules catalog
python jcl_doctor_v2.py --export-rules output/json/jcl_doctor_v2_rules_catalog.json

Exemple de policy JSON custom

sample_jcl_v2_policy.json
{
  "sensitive_patterns": ["PAYROLL", "HR", "RACF", "SECURITY", "PROD"],
  "banned_patterns": ["DISP=(OLD,DELETE)", "TIME=NOLIMIT", "REGION=0M"]
}
Important : une policy custom permet d’adapter JCL Doctor aux conventions d’une entreprise : prĂ©fixes datasets, bibliothĂšques interdites, classes JES, standards SPACE/SMS, conventions sĂ©curitĂ© ou rĂšgles DevOps.

Exports et exploitation des résultats

Rapport HTML

Vue lisible : score, findings, catégories, steps, DD, datasets, recommandations et diff baseline.

Analyse JSON

Format complet pour API, ingestion SQL, archivage ou comparaison automatique.

Findings CSV

Une ligne par anomalie, avec sévérité, catégorie, rÚgle et recommandation.

Steps CSV

Une ligne par step EXEC, programme, paramĂštres et contexte.

DD / Datasets CSV

DD statements, DSN, DISP, SPACE, UNIT, DCB, SYSOUT, DUMMY et attributs extraits.

Categories CSV

Score par famille de risque : safety, security, allocation, performance, restart, maintainability.

Exemple de synthĂšse console

Console output
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, restart

Idée de table SQL pour historisation

SQL model idea
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
);
Vision produit : JCL Doctor V2 peut devenir un vrai gate de mise en production batch : historique SQL, revue DevOps, audit sécurité, score de risque, comparaison baseline et décision GO/NO GO.

Dépannage et bonnes pratiques

1. Le script ne détecte pas correctement les steps ou DD

Cause possibleCorrection
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.

Less strict command
python jcl_doctor_v2.py input/job.jcl \
  --profile training \
  --max-findings-console 10 \
  --html output/reports/job_training_report.html

3. Check-list avant partage externe

  • Utiliser --redact pour 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.
Point critique : un JCL peut exposer la structure batch et les conventions d’une entreprise. Les exports doivent ĂȘtre traitĂ©s comme des documents sensibles, surtout avec STEPLIB/JOBLIB, datasets PROD, RACF ou payroll.