4 Uebersicht
muke edited this page 2026-03-01 18:41:27 +01:00
This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Architektur & Überblick

Die vier Säulen

1 Autoloader (src/Autoloader.php)

Ein simpler PSR-4-Autoloader für das App\-Namespace. Er definiert drei globale Konstanten:

BASE_DIR      // Basis-Verzeichnis des Projekts
CONFIG_DIR    // Konfigurationsverzeichnis
CONFIG_FILE   // Pfad zur config.php

Diese Konstanten werden von allen anderen Klassen benötigt. Alle Skripte müssen den Autoloader zuerst laden.

2 Datenbank (src/Database/DBManager.php)

Ein minimaler PDO-Wrapper mit sicheren Methoden für CRUD-Operationen:

Methode Zweck
query() Prepared Statement ausführen
fetch() Eine Zeile zurückgeben
fetchAll() Alle Zeilen zurückgeben
insert() Datensatz einfügen
update() Datensatz aktualisieren
delete() Datensatz löschen

Wichtig: Alle WHERE-Klauseln müssen Platzhalter (:id) enthalten. Keine direkten Werte einbauen!

3 Logging (src/Log/LogManager.php)

Drei Ausgabeziele:

  • Datenbank (logs-Tabelle)
  • Datei (logs/app.log, logs/error.log)
  • Konsole (STDOUT)

Jeder Logeintrag enthält:

  • Fingerprint (eindeutige ID des Tasks)
  • Job ID (falls zugeordnet)
  • Phorge ID (z.B. T123 für ein Ticket)
  • Severity Level (debug, info, warning, error, critical)

4 Tasks (src/Tasks/AbstractTask.php + konkrete Implementierungen)

Die Kernlogik des Projekts. Jeder Task:

  • Erbt von AbstractTask
  • Überschreibt die Methode run()
  • Nutzt fluent Setters für Parameter
  • Wird via execute() aufgerufen (nicht run() direkt)

Beispiel:

$task = (new ManiphestCreateTask())
    ->setTitle('Foo')
    ->setDescription('Bar')
    ->setOwner('PHID-USER-xyz');

$result = $task->execute();

Datenfluss

┌─────────────────────────┐
│ CLI-Skript / Cron       │
└────────────┬────────────┘
             │
             ▼
┌─────────────────────────┐
│ Task instanziieren      │
│ (new ManiphestTask())   │
└────────────┬────────────┘
             │
             ▼
┌─────────────────────────┐
│ Autoloader + Config     │
│ laden (AbstractTask)    │
└────────────┬────────────┘
             │
             ▼
┌─────────────────────────┐
│ Parameter setzen        │
│ (Fluent API)            │
└────────────┬────────────┘
             │
             ▼
┌─────────────────────────┐
│ execute() aufrufen      │
│ (start Logging)         │
└────────────┬────────────┘
             │
             ▼
┌─────────────────────────┐
│ run() ausführen         │
│ (Task-Logik)            │
└────────────┬────────────┘
             │
             ▼
┌─────────────────────────┐
│ Phorge API Call         │
│ (callPhorgeApi())       │
└────────────┬────────────┘
             │
             ▼
┌─────────────────────────┐
│ Ergebnis verarbeiten    │
│ & Logging               │
└────────────┬────────────┘
             │
             ▼
┌─────────────────────────┐
│ Rückgabe an Aufrufer    │
└─────────────────────────┘

Tabellen-Schema

Siehe sql/create.sql für die Details:

  • jobs - Definiert wiederholbare Aufgaben
  • jobs_runplan - Protokolliert, wann was ausgeführt wurde
  • logs - Zentrale Log-Tabelle mit Fingerprints
  • settings - Optional: globale Einstellungen

Siehe auch: Setup, Tasks, Datenbank