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.
This commit is contained in:
2025-10-25 19:18:37 +02:00
parent caa85db796
commit fc3d7e6357
83016 changed files with 378904 additions and 20919 deletions

View File

@@ -13,6 +13,7 @@ use PHPUnit\Framework\TestCase;
final class DistributedLockPerformanceTest extends TestCase
{
private DatabaseManager $database;
private DatabaseDistributedLock $lockService;
protected function setUp(): void
@@ -38,11 +39,12 @@ final class DistributedLockPerformanceTest extends TestCase
$lockKey = new LockKey("test_lock_{$i}");
$owner = new LockOwner("owner_{$i}");
$time = PerformanceTestHelper::measureTime(function() use ($lockKey, $owner) {
$time = PerformanceTestHelper::measureTime(function () use ($lockKey, $owner) {
$acquired = $this->lockService->acquire($lockKey, $owner, 30);
if ($acquired) {
$this->lockService->release($lockKey, $owner);
}
return $acquired;
});
@@ -87,7 +89,7 @@ final class DistributedLockPerformanceTest extends TestCase
// Measure release times
foreach ($locks as $lock) {
$time = PerformanceTestHelper::measureTime(function() use ($lock) {
$time = PerformanceTestHelper::measureTime(function () use ($lock) {
return $this->lockService->release($lock['key'], $lock['owner']);
});
$releaseTimes[] = $time;
@@ -130,14 +132,16 @@ final class DistributedLockPerformanceTest extends TestCase
$failures = 0;
for ($attempt = 0; $attempt < $attemptsPerWorker; $attempt++) {
$result = PerformanceTestHelper::measureTimeWithResult(function() use ($lockKey, $owner) {
$result = PerformanceTestHelper::measureTimeWithResult(function () use ($lockKey, $owner) {
$acquired = $this->lockService->acquire($lockKey, $owner, 1); // 1 second timeout
if ($acquired) {
// Hold lock briefly then release
usleep(100); // 0.1ms
$this->lockService->release($lockKey, $owner);
return true;
}
return false;
});
@@ -194,7 +198,7 @@ final class DistributedLockPerformanceTest extends TestCase
// Second owner repeatedly tries to acquire with short timeouts
for ($i = 0; $i < $iterations; $i++) {
$result = PerformanceTestHelper::measureTimeWithResult(function() use ($lockKey, $owner2) {
$result = PerformanceTestHelper::measureTimeWithResult(function () use ($lockKey, $owner2) {
return $this->lockService->acquire($lockKey, $owner2, 0.1); // 100ms timeout
});
@@ -251,7 +255,7 @@ final class DistributedLockPerformanceTest extends TestCase
}
// Measure cleanup performance
$cleanupTime = PerformanceTestHelper::measureTime(function() {
$cleanupTime = PerformanceTestHelper::measureTime(function () {
$this->lockService->cleanupExpiredLocks();
});
@@ -282,7 +286,7 @@ final class DistributedLockPerformanceTest extends TestCase
));
}
$largeCleanupTime = PerformanceTestHelper::measureTime(function() {
$largeCleanupTime = PerformanceTestHelper::measureTime(function () {
$this->lockService->cleanupExpiredLocks();
});
@@ -301,7 +305,7 @@ final class DistributedLockPerformanceTest extends TestCase
echo "Target: {$operationsPerSecond} operations/second for {$testDuration} seconds\n";
$loadResult = PerformanceTestHelper::simulateLoad(
function($index) {
function ($index) {
$lockKey = new LockKey("throughput_lock_{$index}");
$owner = new LockOwner("owner_{$index}");
@@ -309,8 +313,10 @@ final class DistributedLockPerformanceTest extends TestCase
$acquired = $this->lockService->acquire($lockKey, $owner, 5);
if ($acquired) {
$this->lockService->release($lockKey, $owner);
return true;
}
return false;
},
$totalOperations,
@@ -324,7 +330,7 @@ final class DistributedLockPerformanceTest extends TestCase
$successfulOperations = count(array_filter(
array_column($loadResult['results'], 'result'),
fn($result) => $result['result'] === true
fn ($result) => $result['result'] === true
));
echo "Actual Throughput: {$actualThroughput} operations/second\n";
@@ -371,18 +377,19 @@ final class DistributedLockPerformanceTest extends TestCase
$this->lockService->release($lockKey, $owner1);
}
$result = PerformanceTestHelper::measureTimeWithResult(function() use ($lockKey, $owner2) {
$result = PerformanceTestHelper::measureTimeWithResult(function () use ($lockKey, $owner2) {
return $this->lockService->acquire($lockKey, $owner2, 0.01); // 10ms timeout
});
$retryAttempts[] = [
'time_ms' => $result['time_ms'],
'success' => $result['result']
'success' => $result['result'],
];
if ($result['result']) {
// Successfully acquired, release it and stop
$this->lockService->release($lockKey, $owner2);
break;
}
@@ -432,4 +439,4 @@ final class DistributedLockPerformanceTest extends TestCase
$pdo = $this->database->getConnection();
$pdo->exec('DELETE FROM distributed_locks');
}
}
}