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