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

Runner::createResultCollection()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 9
rs 9.6667
cc 2
eloc 5
nc 2
nop 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