1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeau/* 4*04fd306cSNickeau * This file is part of the Symfony package. 5*04fd306cSNickeau * 6*04fd306cSNickeau * (c) Fabien Potencier <fabien@symfony.com> 7*04fd306cSNickeau * 8*04fd306cSNickeau * For the full copyright and license information, please view the LICENSE 9*04fd306cSNickeau * file that was distributed with this source code. 10*04fd306cSNickeau */ 11*04fd306cSNickeau 12*04fd306cSNickeaunamespace Symfony\Component\Process\Exception; 13*04fd306cSNickeau 14*04fd306cSNickeauuse Symfony\Component\Process\Process; 15*04fd306cSNickeau 16*04fd306cSNickeau/** 17*04fd306cSNickeau * Exception that is thrown when a process times out. 18*04fd306cSNickeau * 19*04fd306cSNickeau * @author Johannes M. Schmitt <schmittjoh@gmail.com> 20*04fd306cSNickeau */ 21*04fd306cSNickeauclass ProcessTimedOutException extends RuntimeException 22*04fd306cSNickeau{ 23*04fd306cSNickeau public const TYPE_GENERAL = 1; 24*04fd306cSNickeau public const TYPE_IDLE = 2; 25*04fd306cSNickeau 26*04fd306cSNickeau private $process; 27*04fd306cSNickeau private $timeoutType; 28*04fd306cSNickeau 29*04fd306cSNickeau public function __construct(Process $process, int $timeoutType) 30*04fd306cSNickeau { 31*04fd306cSNickeau $this->process = $process; 32*04fd306cSNickeau $this->timeoutType = $timeoutType; 33*04fd306cSNickeau 34*04fd306cSNickeau parent::__construct(sprintf( 35*04fd306cSNickeau 'The process "%s" exceeded the timeout of %s seconds.', 36*04fd306cSNickeau $process->getCommandLine(), 37*04fd306cSNickeau $this->getExceededTimeout() 38*04fd306cSNickeau )); 39*04fd306cSNickeau } 40*04fd306cSNickeau 41*04fd306cSNickeau public function getProcess() 42*04fd306cSNickeau { 43*04fd306cSNickeau return $this->process; 44*04fd306cSNickeau } 45*04fd306cSNickeau 46*04fd306cSNickeau public function isGeneralTimeout() 47*04fd306cSNickeau { 48*04fd306cSNickeau return self::TYPE_GENERAL === $this->timeoutType; 49*04fd306cSNickeau } 50*04fd306cSNickeau 51*04fd306cSNickeau public function isIdleTimeout() 52*04fd306cSNickeau { 53*04fd306cSNickeau return self::TYPE_IDLE === $this->timeoutType; 54*04fd306cSNickeau } 55*04fd306cSNickeau 56*04fd306cSNickeau public function getExceededTimeout() 57*04fd306cSNickeau { 58*04fd306cSNickeau switch ($this->timeoutType) { 59*04fd306cSNickeau case self::TYPE_GENERAL: 60*04fd306cSNickeau return $this->process->getTimeout(); 61*04fd306cSNickeau 62*04fd306cSNickeau case self::TYPE_IDLE: 63*04fd306cSNickeau return $this->process->getIdleTimeout(); 64*04fd306cSNickeau 65*04fd306cSNickeau default: 66*04fd306cSNickeau throw new \LogicException(sprintf('Unknown timeout type "%d".', $this->timeoutType)); 67*04fd306cSNickeau } 68*04fd306cSNickeau } 69*04fd306cSNickeau} 70