Enable Discovery debug logging for production troubleshooting

- Add DISCOVERY_LOG_LEVEL=debug
- Add DISCOVERY_SHOW_PROGRESS=true
- Temporary changes for debugging InitializerProcessor fixes on production
This commit is contained in:
2025-08-11 20:13:26 +02:00
parent 59fd3dd3b1
commit 55a330b223
3683 changed files with 2956207 additions and 16948 deletions

View File

@@ -1,77 +0,0 @@
#!/usr/bin/env php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
use App\Framework\Core\Container;
use App\Framework\Performance\PerformanceDatabaseWorker;
use Pest\Support\Container;
$lockFile = sys_get_temp_dir() . '/performance_processing.lock';
// Lock-File prüfen um Doppelausführung zu verhindern
if (file_exists($lockFile)) {
$lockTime = filemtime($lockFile);
if (time() - $lockTime < 300) { // 5 Minuten Timeout
echo "Performance log processing already running\n";
exit(1);
}
// Altes Lock entfernen
unlink($lockFile);
}
// Lock setzen
touch($lockFile);
try {
$container = new Container();
$worker = $container->get(PerformanceDatabaseWorker::class);
$logFile = $argv[1] ?? null;
if ($logFile && file_exists($logFile)) {
echo "Processing specific log file: {$logFile}\n";
$worker->processLogFile($logFile);
echo "Processing completed\n";
} else {
// Alle pending Log-Dateien verarbeiten
$logDir = $container->get('paths.storage') . '/logs/performance';
$pattern = $logDir . '/performance-*.jsonl';
$files = glob($pattern);
echo "Found " . count($files) . " log files to process\n";
foreach ($files as $file) {
echo "Processing: " . basename($file) . "\n";
$worker->processLogFile($file);
}
echo "All files processed\n";
// Statistiken anzeigen
$stats = $worker->getStatistics();
if (!empty($stats)) {
echo "\nStatistics (last 24h):\n";
echo "Total requests: " . $stats['total_logs'] . "\n";
echo "Avg response time: " . round($stats['avg_response_time'], 2) . "ms\n";
echo "Max response time: " . round($stats['max_response_time'], 2) . "ms\n";
echo "Avg memory: " . round($stats['avg_memory'], 2) . "MB\n";
echo "Max memory: " . round($stats['max_memory'], 2) . "MB\n";
}
}
} catch (\Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
echo $e->getTraceAsString() . "\n";
exit(1);
} finally {
// Lock entfernen
if (file_exists($lockFile)) {
unlink($lockFile);
}
}
echo "Performance log processing completed\n";
exit(0);

240
scripts/server-deploy.sh Normal file
View File

@@ -0,0 +1,240 @@
#!/bin/bash
# Server-side Deployment Script für Custom PHP Framework
# Läuft auf dem Production-Server (94.16.110.151)
set -euo pipefail # Exit on any error
DEPLOY_TAG="$1"
DEPLOY_PATH="$2"
BACKUP_PATH="${DEPLOY_PATH}-backup-$(date +%Y%m%d-%H%M%S)"
TEMP_PATH="${DEPLOY_PATH}-deploying"
# Farben
GREEN="\e[32m"
YELLOW="\e[33m"
RED="\e[31m"
BLUE="\e[34m"
RESET="\e[0m"
log() {
echo -e "${BLUE}[SERVER $(date +'%H:%M:%S')]${RESET} $1"
}
success() {
echo -e "${GREEN}$1${RESET}"
}
error() {
echo -e "${RED}$1${RESET}"
cleanup_on_error
exit 1
}
cleanup_on_error() {
log "Cleanup nach Fehler..."
[[ -d "$TEMP_PATH" ]] && rm -rf "$TEMP_PATH"
[[ -d "$BACKUP_PATH" ]] && {
log "Stelle vorherige Version wieder her..."
[[ -d "$DEPLOY_PATH" ]] && rm -rf "$DEPLOY_PATH"
mv "$BACKUP_PATH" "$DEPLOY_PATH"
cd "$DEPLOY_PATH" && docker compose restart
}
}
# Atomic Deployment mit Git
atomic_git_deployment() {
log "Starte atomic git deployment..."
# 1. Backup der aktuellen Version erstellen
if [[ -d "$DEPLOY_PATH" ]]; then
log "Erstelle Backup der aktuellen Version..."
cp -r "$DEPLOY_PATH" "$BACKUP_PATH"
success "Backup erstellt: $BACKUP_PATH"
fi
# 2. Neue Version in temporäres Verzeichnis clonen
log "Clone neue Version mit Tag: $DEPLOY_TAG"
if [[ -d "$TEMP_PATH" ]]; then
rm -rf "$TEMP_PATH"
fi
# Git Repository klonen oder pullen
if [[ -d "$DEPLOY_PATH/.git" ]]; then
# Existierendes Repository - fetch und checkout
log "Update existierendes Repository..."
cd "$DEPLOY_PATH"
git fetch --tags origin
git checkout "$DEPLOY_TAG"
success "Git checkout zu $DEPLOY_TAG erfolgreich"
else
# Neues Repository klonen
log "Klone Repository neu..."
git clone --depth 1 --branch "$DEPLOY_TAG" "$(git -C . remote get-url origin)" "$TEMP_PATH" || {
error "Git clone fehlgeschlagen"
}
# Atomic Switch: Temp → Live
if [[ -d "$DEPLOY_PATH" ]]; then
mv "$DEPLOY_PATH" "${DEPLOY_PATH}-old"
fi
mv "$TEMP_PATH" "$DEPLOY_PATH"
fi
}
# Framework-spezifische Deployment-Schritte
framework_deployment() {
log "Führe Framework-Deployment durch..."
cd "$DEPLOY_PATH"
# 1. Environment Setup
if [[ ! -f .env ]]; then
if [[ -f .env.production ]]; then
log "Kopiere .env.production zu .env"
cp .env.production .env
else
error ".env.production nicht gefunden"
fi
fi
# 2. Composer Dependencies (Production)
log "Installiere Composer Dependencies..."
if ! composer install --no-dev --optimize-autoloader --no-interaction; then
error "Composer Install fehlgeschlagen"
fi
# 3. Framework Cache warming (falls implementiert)
if [[ -f console.php ]] && php console.php list | grep -q "cache:warm"; then
log "Wärme Framework Caches auf..."
php console.php cache:warm || warning "Cache warming fehlgeschlagen"
fi
# 4. Database Migrations
log "Führe Database Migrations durch..."
if php console.php list | grep -q "db:migrate"; then
php console.php db:migrate || error "Database Migration fehlgeschlagen"
else
warning "Keine Database Migrations gefunden"
fi
# 5. Framework optimizations
if php console.php list | grep -q "framework:optimize"; then
log "Optimiere Framework..."
php console.php framework:optimize || warning "Framework Optimization fehlgeschlagen"
fi
success "Framework-Deployment abgeschlossen"
}
# Docker Services Management
manage_docker_services() {
log "Manage Docker Services..."
cd "$DEPLOY_PATH"
# Prüfe ob docker-compose.yml existiert
if [[ ! -f docker-compose.yml ]]; then
error "docker-compose.yml nicht gefunden"
fi
# Services neu starten mit minimaler Downtime
log "Starte Services neu..."
# Rolling Update Strategy
docker compose pull --quiet || warning "Docker Pull Warnings (nicht kritisch)"
# Restart mit Health Checks
if docker compose up -d --force-recreate --remove-orphans; then
success "Docker Services erfolgreich neu gestartet"
else
error "Docker Restart fehlgeschlagen"
fi
# Warte auf Service-Start
log "Warte auf Service-Start..."
sleep 10
}
# Health Checks
health_checks() {
log "Führe Health Checks durch..."
cd "$DEPLOY_PATH"
# 1. Framework Health Check
if php console.php health:check; then
success "Framework Health Check OK"
else
error "Framework Health Check fehlgeschlagen"
fi
# 2. Docker Services Check
if ! docker compose ps | grep -q "Up"; then
error "Docker Services nicht verfügbar"
fi
success "Docker Services OK"
# 3. MCP Server Test (optional)
if timeout 5 php console.php mcp:server --test 2>/dev/null; then
success "MCP Server OK"
else
log "MCP Server Test übersprungen (optional)"
fi
# 4. Web Response Test
sleep 5
if curl -f -s -H "User-Agent: Mozilla/5.0 (Deployment Health Check)" "http://localhost" > /dev/null; then
success "HTTP Response OK"
else
warning "HTTP Response Test fehlgeschlagen (möglicherweise nginx-Problem)"
fi
}
# Cleanup alte Backups (behalte nur die letzten 5)
cleanup_old_backups() {
log "Räume alte Backups auf..."
# Finde alle Backup-Ordner und behalte nur die 5 neuesten
find "$(dirname "$DEPLOY_PATH")" -maxdepth 1 -name "*-backup-*" -type d | \
sort -r | \
tail -n +6 | \
xargs -r rm -rf
success "Backup-Cleanup abgeschlossen"
}
# Deployment-Summary
deployment_summary() {
echo -e "${GREEN}"
echo "🎉 Server-Deployment erfolgreich!"
echo "📋 Tag: $DEPLOY_TAG"
echo "📁 Path: $DEPLOY_PATH"
echo "💾 Backup: $BACKUP_PATH"
echo "⏰ Zeit: $(date)"
echo -e "${RESET}"
}
# Hauptprogramm
main() {
log "🚀 Server-side Deployment gestartet"
log "📦 Tag: $DEPLOY_TAG"
log "📁 Path: $DEPLOY_PATH"
atomic_git_deployment
framework_deployment
manage_docker_services
health_checks
cleanup_old_backups
deployment_summary
# Cleanup erfolgreicher Deployment
[[ -d "${DEPLOY_PATH}-old" ]] && rm -rf "${DEPLOY_PATH}-old"
}
# Error Handling
trap cleanup_on_error ERR
# Script ausführen
main "$@"