Tip
Siehe Zusammenfassung, täglich um 4:00 UTC automatisch aktualisiert
Ein Python-basierter Analyzer für GRETL Jenkins Jobs, der automatisch Dokumentation aus job.properties
Dateien generiert.
- Jenkins H-Syntax Support: Analysiert komplexe Jenkins Cron-Ausdrücke (
H H(1-3) * * *
) - Upstream Dependencies: Erkennt Job-Abhängigkeiten via
triggers.upstream
- SQL Analysis: Automatische Erkennung von Quell- und Ziel-Tabellen
- CTE-Ignorierung: Filtert Common Table Expressions aus der Tabellen-Analyse
- Schema Support: Optimiert für Datenbank-Schemas (agi_, afu_, arp_, ada_)
- Markdown Output: Generiert strukturierte Dokumentation
- Cross-Platform: Läuft auf Windows, macOS und Linux
- Type Hints: Vollständig typisiert für bessere Code-Qualität
- Python 3.7 oder höher
- Keine externen Dependencies (nur Python Standard Library)
# Repository klonen
git clone <your-repo-url>
cd gretl-analyzer-python
# Script ausführbar machen (Linux/macOS)
chmod +x gretl_analyzer.py
# Erste Analyse ausführen
python gretl_analyzer.py --gretl-jobs-dir ../gretljobs
# Erstelle setup.py für Installation
pip install -e .
# Dann verwendbar als:
gretl-analyzer --help
# Standard-Analyse (../gretljobs → GRETL_Jobs_Overview.md)
python gretl_analyzer.py
# Mit Debug-Ausgabe
python gretl_analyzer.py --debug
# Custom Pfade
python gretl_analyzer.py --gretl-jobs-dir /path/to/gretljobs --output-file custom.md
# Hilfe anzeigen
python gretl_analyzer.py --help
# Pfade über Umgebungsvariablen setzen
export GRETL_JOBS_DIR=/path/to/gretljobs
export OUTPUT_FILE=custom_output.md
export DEBUG=true
python gretl_analyzer.py
from gretl_analyzer import GretlJobsAnalyzer
# Analyzer erstellen
analyzer = GretlJobsAnalyzer(
gretl_jobs_dir='../gretljobs',
output_file='GRETL_Jobs_Overview.md',
debug=True
)
# Analyse ausführen
analyzer.run()
# Oder einzelne Methoden verwenden
jobs = analyzer.analyze_jobs()
markdown = analyzer.generate_markdown(jobs)
gretl-analyzer-python/
├── gretl_analyzer.py # Haupt-Analyzer Klasse
├── test_gretl_analyzer.py # Unit Tests
├── requirements.txt # Python Dependencies (leer, da nur stdlib)
├── setup.py # Python Package Setup
├── README.md # Diese Datei
└── examples/
├── example_job.properties # Beispiel job.properties
└── sample_output.md # Beispiel-Ausgabe
gretljobs/
├── job1_name/
│ ├── job.properties # triggers.cron=H H(1-3) * * *
│ ├── main_query.sql # SQL mit Schema-Tabellen
│ └── build.gradle
├── job2_name/
│ ├── job.properties # triggers.upstream=job1_name
│ └── transform.sql
└── ...
Option | Umgebungsvariable | Standard | Beschreibung |
---|---|---|---|
--gretl-jobs-dir |
GRETL_JOBS_DIR |
../gretljobs |
Pfad zum GRETL Jobs Verzeichnis |
--output-file |
OUTPUT_FILE |
GRETL_Jobs_Overview.md |
Ausgabe Markdown-Datei |
--debug |
DEBUG=true |
false |
Debug-Modus aktivieren |
Das Script erkennt folgende Properties:
# Zeitgesteuerte Jobs
triggers.cron=H H(1-3) * * *
triggers.cron=0 2 * * *
triggers.cron=*/15 * * * *
# Upstream-abhängige Jobs
triggers.upstream=other_job_name
# Job Status
disabled=true
enabled=false
Ausdruck | Beschreibung | Ausgabe |
---|---|---|
0 6 * * * |
Täglich um 6:00 | 06:00 |
H H * * * |
Zufällige Zeit | ~zufällig |
H H(1-3) * * * |
Zufällig zwischen 1-3 Uhr | ~1-3h |
0 */4 * * * |
Alle 4 Stunden | alle 4h |
0 9 * * 1 |
Montags um 9:00 | Mo 09:00 |
Das Script generiert eine strukturierte Markdown-Datei mit:
- Zeitgesteuerte Jobs: Cron-Schedule, Status, Tabellen
- Upstream Jobs: Abhängigkeiten, Status, Tabellen
- Schema-Übersicht: Verwendete Datenbank-Schemas
Für jeden Job:
- Status (Aktiv/Inaktiv)
- Trigger-Typ und -Wert
- Pfad zum Job
- Quell-Tabellen (aus SQL-Analyse)
- Ziel-Tabellen (aus SQL-Analyse)
# GRETL Jobs Übersicht
**Automatisch generiert am:** 15.07.2025 10:30
**Anzahl Jobs:** 45
## Zeitgesteuerte Jobs (Cron)
| Job | Status | Schedule | Quell-Tabellen | Ziel-Tabellen |
|-----|--------|----------|----------------|---------------|
| agi_av_gb_abgleich | Aktiv | ~1-3h | agi_av.grundbuch, agi_av.liegenschaften | agi_av.abgleich_result |
# Alle Tests ausführen
python -m unittest test_gretl_analyzer.py
# Tests mit verbose Ausgabe
python -m unittest -v test_gretl_analyzer.py
# Einzelne Testklasse
python -m unittest test_gretl_analyzer.TestGretlJobsAnalyzer
# Mit Coverage (wenn installiert)
pip install coverage
coverage run -m unittest test_gretl_analyzer.py
coverage report
coverage html
- ✅ Job Properties Parsing
- ✅ Cron Expression Parsing
- ✅ SQL File Analysis
- ✅ CTE Detection
- ✅ Schema Analysis
- ✅ Markdown Generation
- ✅ Error Handling
Aspekt | JavaScript/Node.js | Python |
---|---|---|
Dependencies | glob, jest, eslint | Nur Python stdlib |
File Operations | fs.promises | pathlib, open() |
Regex | String.match() | re.findall(), re.match() |
Testing | Jest | unittest |
CLI | process.env | argparse |
Async | async/await | Synchron |
✅ Alle Features der JavaScript-Version portiert ✅ Gleiche Ausgabe-Formate ✅ Identische Cron-Parsing-Logik ✅ Gleiche SQL-Analyse-Features
"No jobs with triggers found"
# Verzeichnis-Struktur prüfen
ls -la ../gretljobs/*/job.properties
# Debug-Modus aktivieren
python gretl_analyzer.py --debug
"GRETL Jobs directory not found"
# Pfad explizit setzen
python gretl_analyzer.py --gretl-jobs-dir /absolute/path/to/gretljobs
# Oder relativ vom aktuellen Verzeichnis
python gretl_analyzer.py --gretl-jobs-dir ./gretljobs
"Permission denied" (Linux/macOS)
# Script ausführbar machen
chmod +x gretl_analyzer.py
# Oder direkt über Python aufrufen
python gretl_analyzer.py
python gretl_analyzer.py --debug
Zeigt detaillierte Informationen über:
- Gefundene job.properties Dateien
- Erkannte CTEs in SQL-Dateien
- Geparste Cron-Expressions
- Extrahierte Tabellen-Namen
- PEP 8 konforme Formatierung
- Type Hints für alle Funktionen
- Docstrings im Google-Stil
- Logging statt print() für Debug-Ausgaben
class GretlJobsAnalyzer:
def custom_analysis(self, jobs: List[Dict]) -> Dict:
"""Füge eigene Analyse-Logik hinzu."""
# Implementierung hier
pass
def generate_custom_output(self, jobs: List[Dict]) -> str:
"""Generiere alternatives Ausgabe-Format."""
# z.B. JSON, HTML, XML
pass
name: GRETL Jobs Analysis (Python)
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Run Analysis
run: |
python gretl_analyzer.py --gretl-jobs-dir ../gretljobs
- name: Run Tests
run: |
python -m unittest test_gretl_analyzer.py
- Issues: https://github.com/sogis/gretljobs-meta/issues
- Kontakt: christian.baumann@bd.so.ch
- Dokumentation: Siehe README im sogis/gretljobs Repository
MIT License