CloudElasticRepository   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 18
dl 0
loc 48
rs 10
c 1
b 0
f 0
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A makeRequest() 0 25 3
A __construct() 0 4 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Repository;
6
7
use GuzzleHttp\Client;
8
use GuzzleHttp\Exception\BadResponseException;
9
use Symfony\Component\HttpKernel\Exception\HttpException;
10
11
/**
12
 * A CloudElasticRepository is responsible for communicating with the CloudElastic service.
13
 * @see https://wikitech.wikimedia.org/wiki/CloudElastic
14
 */
15
class CloudElasticRepository
16
{
17
    /** @var Client The GuzzleHttp client. */
18
    protected $client;
19
20
    /** @var array|mixed[] The array of params to pass to CloudElastic. */
21
    protected $params;
22
23
    /**
24
     * CloudElasticRepository constructor.
25
     * @param Client $client
26
     * @param mixed[] $params
27
     */
28
    public function __construct(Client $client, array $params)
29
    {
30
        $this->client = $client;
31
        $this->params = $params;
32
    }
33
34
    /**
35
     * Query the CloudElastic service with the given params.
36
     * @return mixed[]
37
     */
38
    public function makeRequest(): array
39
    {
40
        $uri = $_ENV['ELASTIC_HOST'].'/*,*:*/_search';
41
42
        $request = new \GuzzleHttp\Psr7\Request('GET', $uri, [
43
            'Content-Type' => 'application/json',
44
        ], \GuzzleHttp\json_encode($this->params));
45
46
        // FIXME: increase cURL timeout
47
        try {
48
            $res = $this->client->send($request);
49
        } catch (BadResponseException $e) {
50
            // Dump the full response in development environments since Guzzle truncates the error messages.
51
            if ('dev' === $_ENV['APP_ENV']) {
52
                dump($e->getResponse()->getBody()->getContents());
53
            }
54
55
            // Convert to Symfony-friendly exception.
56
            throw new HttpException(
57
                $e->getResponse()->getStatusCode(),
58
                $e->getResponse()->getReasonPhrase()
59
            );
60
        }
61
62
        return json_decode($res->getBody()->getContents(), true);
63
    }
64
}
65