Files
michaelschiemer/tests/debug/test-ml-adapters-manual.php
Michael Schiemer fc3d7e6357 feat(Production): Complete production deployment infrastructure
- Add comprehensive health check system with multiple endpoints
- Add Prometheus metrics endpoint
- Add production logging configurations (5 strategies)
- Add complete deployment documentation suite:
  * QUICKSTART.md - 30-minute deployment guide
  * DEPLOYMENT_CHECKLIST.md - Printable verification checklist
  * DEPLOYMENT_WORKFLOW.md - Complete deployment lifecycle
  * PRODUCTION_DEPLOYMENT.md - Comprehensive technical reference
  * production-logging.md - Logging configuration guide
  * ANSIBLE_DEPLOYMENT.md - Infrastructure as Code automation
  * README.md - Navigation hub
  * DEPLOYMENT_SUMMARY.md - Executive summary
- Add deployment scripts and automation
- Add DEPLOYMENT_PLAN.md - Concrete plan for immediate deployment
- Update README with production-ready features

All production infrastructure is now complete and ready for deployment.
2025-10-25 19:18:37 +02:00

166 lines
6.8 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
/**
* Manual Test for ML Model Management Adapters
*
* Tests all three adapters with manual framework initialization
*/
require_once __DIR__ . '/../../vendor/autoload.php';
use App\Framework\Core\AppBootstrapper;
use App\Framework\Database\NPlusOneDetection\MachineLearning\NPlusOneModelAdapter;
use App\Framework\Queue\MachineLearning\QueueAnomalyModelAdapter;
use App\Framework\Waf\MachineLearning\WafBehavioralModelAdapter;
use App\Framework\MachineLearning\ModelManagement\ModelRegistry;
use App\Framework\MachineLearning\Scheduler\MLMonitoringScheduler;
echo "=== ML Model Management Integration Manual Test ===\n\n";
try {
// Bootstrap framework
echo "1. Bootstrapping framework...\n";
// Create required dependencies for AppBootstrapper
$basePath = dirname(__DIR__, 2);
// Create minimal dependencies
$clock = new \App\Framework\DateTime\SystemClock();
$highResClock = new \App\Framework\DateTime\SystemHighResolutionClock();
$memoryMonitor = new \App\Framework\Performance\MemoryMonitor();
$collector = new \App\Framework\Performance\EnhancedPerformanceCollector(
$clock,
$highResClock,
$memoryMonitor,
enabled: false // Disabled for testing
);
$bootstrapper = new AppBootstrapper($basePath, $collector, $memoryMonitor);
$container = $bootstrapper->bootstrapWorker(); // Use worker bootstrap for testing
echo " ✓ Framework bootstrapped\n\n";
// Manually initialize ML Model Management (since discovery might not have run)
echo " → Manually registering ML Model Management services...\n";
$mlInitializer = new \App\Framework\MachineLearning\ModelManagement\MLModelManagementInitializer($container);
$mlInitializer->initialize();
echo " ✓ ML Model Management initialized\n\n";
// Test Model Registry
echo "2. Testing Model Registry...\n";
$registry = $container->get(ModelRegistry::class);
echo " ✓ ModelRegistry retrieved from container\n";
echo " Type: " . get_class($registry) . "\n\n";
// Test N+1 Detection Adapter
echo "3. Testing N+1 Detection Model Adapter...\n";
try {
$n1Adapter = $container->get(NPlusOneModelAdapter::class);
echo " ✓ NPlusOneModelAdapter retrieved\n";
// Try to get metadata (will work if auto-registered)
$metadata = $n1Adapter->getModelMetadata();
if ($metadata !== null) {
echo " ✓ Model already registered: {$metadata->modelName} v{$metadata->version->toString()}\n";
echo " - Model Type: {$metadata->modelType->value}\n";
echo " - Configuration keys: " . implode(', ', array_keys($metadata->configuration)) . "\n";
} else {
echo " Model not yet registered (auto-registration may be disabled)\n";
// Try manual registration
echo " → Attempting manual registration...\n";
$metadata = $n1Adapter->registerCurrentModel();
echo " ✓ Model registered: {$metadata->modelName} v{$metadata->version->toString()}\n";
}
} catch (\Throwable $e) {
echo " ✗ N+1 Adapter error: " . $e->getMessage() . "\n";
echo " (This is expected if N+1 ML is not enabled)\n";
}
echo "\n";
// Test WAF Behavioral Adapter
echo "4. Testing WAF Behavioral Model Adapter...\n";
try {
$wafAdapter = $container->get(WafBehavioralModelAdapter::class);
echo " ✓ WafBehavioralModelAdapter retrieved\n";
$metadata = $wafAdapter->getModelMetadata();
if ($metadata !== null) {
echo " ✓ Model already registered: {$metadata->modelName} v{$metadata->version->toString()}\n";
echo " - Model Type: {$metadata->modelType->value}\n";
echo " - Configuration keys: " . implode(', ', array_keys($metadata->configuration)) . "\n";
} else {
echo " Model not yet registered\n";
echo " → Attempting manual registration...\n";
$metadata = $wafAdapter->registerCurrentModel();
echo " ✓ Model registered: {$metadata->modelName} v{$metadata->version->toString()}\n";
}
} catch (\Throwable $e) {
echo " ✗ WAF Adapter error: " . $e->getMessage() . "\n";
echo " (This is expected if WAF ML is not enabled)\n";
}
echo "\n";
// Test Queue Anomaly Adapter
echo "5. Testing Queue Anomaly Model Adapter...\n";
try {
$queueAdapter = $container->get(QueueAnomalyModelAdapter::class);
echo " ✓ QueueAnomalyModelAdapter retrieved\n";
$metadata = $queueAdapter->getModelMetadata();
if ($metadata !== null) {
echo " ✓ Model already registered: {$metadata->modelName} v{$metadata->version->toString()}\n";
echo " - Model Type: {$metadata->modelType->value}\n";
echo " - Configuration keys: " . implode(', ', array_keys($metadata->configuration)) . "\n";
} else {
echo " Model not yet registered\n";
echo " → Attempting manual registration...\n";
$metadata = $queueAdapter->registerCurrentModel();
echo " ✓ Model registered: {$metadata->modelName} v{$metadata->version->toString()}\n";
}
} catch (\Throwable $e) {
echo " ✗ Queue Adapter error: " . $e->getMessage() . "\n";
echo " (This is expected if Queue ML is not enabled)\n";
}
echo "\n";
// Test ML Monitoring Scheduler
echo "6. Testing ML Monitoring Scheduler...\n";
try {
$scheduler = $container->get(MLMonitoringScheduler::class);
echo " ✓ MLMonitoringScheduler retrieved\n";
echo " Type: " . get_class($scheduler) . "\n";
} catch (\Throwable $e) {
echo " ✗ Scheduler error: " . $e->getMessage() . "\n";
}
echo "\n";
// Test Model Registry functionality
echo "7. Testing Model Registry Operations...\n";
try {
$productionModels = $registry->getProductionModels();
echo " ✓ getProductionModels() works\n";
echo " - Production models count: " . count($productionModels) . "\n";
if (count($productionModels) > 0) {
foreach ($productionModels as $model) {
echo " - {$model->modelName} v{$model->version->toString()} ({$model->modelType->value})\n";
}
}
} catch (\Throwable $e) {
echo " ✗ Registry operations error: " . $e->getMessage() . "\n";
}
echo "\n";
echo "=== All Tests Completed ===\n";
echo "✓ Integration test successful\n";
} catch (\Throwable $e) {
echo "\n!!! FATAL ERROR !!!\n";
echo "Error: " . $e->getMessage() . "\n";
echo "File: " . $e->getFile() . ":" . $e->getLine() . "\n";
echo "\nStack trace:\n" . $e->getTraceAsString() . "\n";
exit(1);
}