public function testListensForEvents() { $listener = new EventListener(); $es = fopen('php://memory', 'w+'); $is = fopen('php://memory', 'w+'); $os = fopen('php://memory', 'w+'); $listener->setErrorStream($es)->setOutputStream($os)->setInputStream($is); // Make sure blank lines are ignored fwrite($is, "\n"); fwrite($is, "ver:3.0 server:supervisor serial:313 pool:event_listener poolserial:313 eventname:TICK_5 len:15\n"); fwrite($is, "when:1313021985"); fwrite($is, "ver:3.0 server:supervisor serial:313 pool:event_listener poolserial:313 eventname:TICK_60 len:15\n"); fwrite($is, "when:1313021990"); fwrite($is, "ver:3.0 server:supervisor serial:313 pool:event_listener poolserial:313 eventname:TICK_3600 len:15\n"); fwrite($is, "when:1313021995"); rewind($is); $total = 0; $listener->listen(function (EventListener $listener, EventNotification $event) use(&$total) { $listener->log((string) $event); if (++$total == 1) { return true; } else { if ($total == 2) { return false; } else { return 'quit'; } } }); rewind($es); rewind($os); // Ensure that the correct output was given $this->assertEquals("READY\nRESULT 2\nOKREADY\nRESULT 4\nFAILREADY\n", stream_get_contents($os)); // Ensure that the messages were logged properly $this->assertEquals(6, count(explode("\n", trim(stream_get_contents($es))))); // Make sure the entire stream was read $this->assertEquals('', stream_get_contents($is)); }
<?php /** * Here is a simple example of creating a supervisor event listener */ require_once __DIR__ . '/../vendor/autoload.php'; use Mtdowling\Supervisor\EventListener; use Mtdowling\Supervisor\EventNotification; $listener = new EventListener(); $listener->listen(function (EventListener $listener, EventNotification $event) { // Log information about the event $listener->log($event->getEventName()); $listener->log($event->getServer()); $listener->log($event->getPool()); // Try messing around with supervisorctl to restart processes and see what // data is available $listener->log(var_export($event->getData(), true)); return true; });