Completed
Push — master ( 4f2fad...dd1cd3 )
by Guillaume
07:10
created

Runner   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6
Metric Value
wmc 5
lcom 1
cbo 6
dl 0
loc 59
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A run() 0 21 2
A createResultCollection() 0 9 2
1
<?php
2
3
namespace Hogosha\Monitor\Runner;
4
5
use GuzzleHttp\Client;
6
use GuzzleHttp\Promise;
7
use GuzzleHttp\TransferStats;
8
use Hogosha\Monitor\Client\GuzzleClient;
9
use Hogosha\Monitor\Model\Result;
10
use Hogosha\Monitor\Model\ResultCollection;
11
use Hogosha\Monitor\Model\UrlProvider;
12
13
/**
14
* @author Guillaume Cavana <[email protected]>
15
*/
16
class Runner
17
{
18
    protected $urlProvider;
19
20
    protected $client;
21
22
    /**
23
     * Constructor.
24
     * @param UrlProvider  $urlProvider
25
     * @param GuzzleClient $client
26
     */
27
    public function __construct(UrlProvider $urlProvider, Client $client)
28
    {
29
        $this->urlProvider = $urlProvider;
30
        $this->client = $client;
31
    }
32
33
    /**
34
     * run.
35
     * @return array
36
     */
37
    public function run()
38
    {
39
        $promises = [];
40
41
        $stats = [];
42
        foreach ($this->urlProvider->getUrls() as $url) {
43
            $promises[$url->getName()] = $this->client->getAsync(
44
                $url->getUrl(),
45
                [
46
                    'timeout' => $url->getTimeout(),
47
                    'on_stats' => function (TransferStats $tranferStats) use (&$stats, $url) {
48
                        $stats[$url->getName()]['total_time'] = $tranferStats->getTransferTime();
49
                    },
50
                ]
51
            );
52
        }
53
54
        $results = Promise\unwrap($promises);
55
56
        return $this->createResultCollection($results, $stats);
57
    }
58
59
    /**
60
     * createResultCollection.
61
     * @param array $results
62
     * @param array $stats
63
     * @return ResultCollection
64
     */
65
    private function createResultCollection(array $results, array $stats)
66
    {
67
        $resultCollection = new ResultCollection();
68
        foreach ($results as $name => $result) {
69
            $resultCollection->append((new Result($name, $result->getStatusCode(), $stats[$name]['total_time'])));
70
        }
71
72
        return $resultCollection;
73
    }
74
}
75