Pool   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 100%

Importance

Changes 6
Bugs 1 Features 0
Metric Value
wmc 9
c 6
b 1
f 0
lcom 1
cbo 4
dl 0
loc 76
ccs 24
cts 24
cp 1
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 12 3
A addServer() 0 5 1
A getServers() 0 4 1
A getServer() 0 8 2
A dispatchCommand() 0 7 1
A getRandomServer() 0 4 1
1
<?php
2
3
4
namespace Beanie\Server;
5
6
7
use Beanie\Command\CommandInterface;
8
use Beanie\Exception\InvalidArgumentException;
9
use Beanie\Tube\TubeAwareInterface;
10
use Beanie\Tube\TubeStatus;
11
12
class Pool implements TubeAwareInterface
13
{
14
    use TubeAwareTrait;
15
16
    /** @var Server[] */
17
    protected $servers = [];
18
19
    /**
20
     * @param Server[] $servers
21
     * @throws InvalidArgumentException
22
     */
23 7
    public function __construct(array $servers)
24
    {
25 7
        if (!count($servers)) {
26 1
            throw new InvalidArgumentException('Pool needs servers');
27
        }
28
29 6
        foreach ($servers as $server) {
30 6
            $this->addServer($server);
31 6
        }
32
33 6
        $this->tubeStatus = new TubeStatus();
34 6
    }
35
36
    /**
37
     * @param Server $server
38
     * @return $this
39
     */
40 6
    protected function addServer(Server $server)
41
    {
42 6
        $this->servers[(string) $server] = $server;
43 6
        return $this;
44
    }
45
46
    /**
47
     * @return Server[]
48
     */
49 3
    public function getServers()
50
    {
51 3
        return $this->servers;
52
    }
53
54
    /**
55
     * @param string $name
56
     * @return Server
57
     * @throws InvalidArgumentException
58
     */
59 2
    public function getServer($name)
60
    {
61 2
        if (!isset($this->servers[$name])) {
62 1
            throw new InvalidArgumentException('Server not found by name: ' . $name);
63
        }
64
65 1
        return $this->servers[$name];
66
    }
67
68
    /**
69
     * @param CommandInterface $command
70
     * @return \Beanie\Server\ResponseOath
71
     */
72 2
    public function dispatchCommand(CommandInterface $command)
73
    {
74 2
        return $this
75 2
            ->getRandomServer()
76 2
            ->transformTubeStatusTo($this->tubeStatus, TubeStatus::TRANSFORM_USE)
77 2
            ->dispatchCommand($command);
78
    }
79
80
    /**
81
     * @return Server
82
     */
83 1
    public function getRandomServer()
84
    {
85 1
        return $this->servers[array_rand($this->servers, 1)];
86
    }
87
}
88