xref: /plugin/combo/vendor/symfony/process/Exception/ProcessTimedOutException.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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