taskName}' executed at " . date('Y-m-d H:i:s'); echo "$message\n"; $logEntry = [ 'task_name' => $this->taskName, 'executed_at' => date('Y-m-d H:i:s'), 'timestamp' => $this->timestamp ]; file_put_contents('/tmp/scheduler-queue-integration.log', json_encode($logEntry) . "\n", FILE_APPEND); return $logEntry; } public function getType(): string { return 'scheduled-background-job'; } public function getTaskName(): string { return $this->taskName; } } echo "šŸ”„ Testing Scheduler + Queue Integration (Fixed)\n"; echo "===============================================\n\n"; try { // Bootstrap framework $clock = new SystemClock(); $highResClock = new SystemHighResolutionClock(); $memoryMonitor = new MemoryMonitor(); $collector = new EnhancedPerformanceCollector($clock, $highResClock, $memoryMonitor, enabled: false); $bootstrapper = new AppBootstrapper(__DIR__ . '/../..', $collector, $memoryMonitor); $container = $bootstrapper->bootstrapWorker(); $scheduler = $container->get(SchedulerService::class); $queue = $container->get(Queue::class); echo "āœ… Framework bootstrapped successfully\n"; echo "āœ… SchedulerService retrieved\n"; echo "āœ… Queue service retrieved\n\n"; // Clean previous test logs if (file_exists('/tmp/scheduler-queue-integration.log')) { unlink('/tmp/scheduler-queue-integration.log'); } // Test 1: Schedule a task that queues background jobs echo "šŸ“‹ Test 1: Scheduling task that dispatches to queue\n"; echo "--------------------------------------------------\n"; $intervalSchedule = IntervalSchedule::every(Duration::fromSeconds(10)); $scheduler->schedule('queue-dispatcher', $intervalSchedule, function() use ($queue) { echo "šŸ“¤ Scheduler dispatching job to queue at " . date('Y-m-d H:i:s') . "\n"; try { $backgroundJob = new ScheduledBackgroundJob('cleanup-task', time()); $jobPayload = JobPayload::immediate($backgroundJob); $queue->push($jobPayload); echo "āœ… Background job queued successfully\n"; return ['status' => 'job_queued', 'timestamp' => time(), 'queue_size' => $queue->size()]; } catch (Exception $e) { echo "āŒ Failed to queue job: " . $e->getMessage() . "\n"; return ['status' => 'queue_failed', 'error' => $e->getMessage()]; } }); echo "āœ… Scheduled task that dispatches to queue\n\n"; // Test 2: Check and execute due scheduler tasks echo "šŸ“‹ Test 2: Execute due scheduler tasks\n"; echo "------------------------------------\n"; $dueTasks = $scheduler->getDueTasks(); echo "šŸ“Š Due scheduler tasks: " . count($dueTasks) . "\n"; if (count($dueTasks) > 0) { echo "āœ… Found due tasks, executing...\n"; $results = $scheduler->executeDueTasks(); foreach ($results as $result) { echo " • Task: {$result->taskId}\n"; echo " Success: " . ($result->success ? 'Yes' : 'No') . "\n"; echo " Execution time: {$result->executionTimeSeconds}s\n"; if ($result->result) { echo " Result: " . json_encode($result->result) . "\n"; } if ($result->error) { echo " Error: " . $result->error->getMessage() . "\n"; } } } else { echo "ā„¹ļø No scheduler tasks due right now\n"; } echo "\n"; // Test 3: Process queued jobs echo "šŸ“‹ Test 3: Process queued background jobs\n"; echo "----------------------------------------\n"; $queueSize = $queue->size(); echo "šŸ“Š Queue size: $queueSize\n"; if ($queueSize > 0) { echo "šŸ”„ Processing all queued jobs:\n"; while ($queue->size() > 0) { $jobPayload = $queue->pop(); if ($jobPayload) { echo "āœ… Processing job: " . $jobPayload->job->getTaskName() . "\n"; $result = $jobPayload->job->handle(); echo "āœ… Job completed with result: " . json_encode($result) . "\n"; } } $finalQueueSize = $queue->size(); echo "šŸ“Š Queue size after processing: $finalQueueSize\n"; } else { echo "ā„¹ļø No jobs in queue to process\n"; } echo "\n"; // Test 4: Verify integration logs echo "šŸ“‹ Test 4: Verify Integration Logs\n"; echo "---------------------------------\n"; if (file_exists('/tmp/scheduler-queue-integration.log')) { echo "āœ… Integration log file created\n"; $logContent = file_get_contents('/tmp/scheduler-queue-integration.log'); echo "šŸ“„ Integration execution log:\n"; echo $logContent; } else { echo "āš ļø No integration log found\n"; } echo "\n"; // Test 5: Multiple cycle test (if jobs were queued) echo "šŸ“‹ Test 5: Multiple Scheduler-Queue Cycles\n"; echo "-----------------------------------------\n"; for ($cycle = 1; $cycle <= 2; $cycle++) { echo "šŸ”„ Cycle #$cycle:\n"; // Manually trigger scheduler job $backgroundJob = new ScheduledBackgroundJob("cycle-$cycle-job", time()); $jobPayload = JobPayload::immediate($backgroundJob); $queue->push($jobPayload); echo " āœ… Job queued for cycle $cycle\n"; // Process the job $jobPayload = $queue->pop(); if ($jobPayload) { $result = $jobPayload->job->handle(); echo " āœ… Job executed for cycle $cycle\n"; } } echo "\nšŸ“Š Final Integration Results:\n"; echo "============================\n"; echo "āœ… Scheduler system operational\n"; echo "āœ… Queue system operational\n"; echo "āœ… Scheduler can dispatch jobs to queue\n"; echo "āœ… Queue can execute background jobs\n"; echo "āœ… Integration logging working\n"; $finalStats = $queue->getStats(); echo "šŸ“Š Final queue stats: " . json_encode($finalStats) . "\n"; } catch (Exception $e) { echo "āŒ Integration test failed: " . $e->getMessage() . "\n"; echo "Stack trace:\n" . $e->getTraceAsString() . "\n"; exit(1); } echo "\nšŸŽÆ Scheduler + Queue integration test completed successfully!\n";