AbstractEventBuilder::prepareHeaders()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 10
c 0
b 0
f 0
rs 10
cc 2
nc 2
nop 1
1
<?php
2
3
namespace SamuelBednarcik\ElasticAPMAgent\Builder;
4
5
use Symfony\Component\HttpFoundation\HeaderBag;
6
use Symfony\Component\HttpFoundation\Request;
7
use Symfony\Component\HttpFoundation\Response;
8
9
abstract class AbstractEventBuilder
10
{
11
    const TRANSACTION_ID_SIZE = 64;
12
    const ERROR_ID_SIZE = 128;
13
    const SPAN_ID_SIZE = 64;
14
    const TRACE_ID_SIZE = 128;
15
16
    /**
17
     * @param int $bits
18
     * @return string
19
     * @throws \Exception
20
     */
21
    public static function generateRandomBitsInHex(int $bits): string
22
    {
23
        return bin2hex(random_bytes($bits/8));
24
    }
25
26
    /**
27
     * @param Request $request
28
     * @param Response $response
29
     * @return array
30
     */
31
    public static function buildContext(Request $request, Response $response): array
32
    {
33
        return [
34
            'request' => [
35
                'url' => [
36
                    'raw' => $request->getSchemeAndHttpHost() . $request->getRequestUri(),
37
                    'full' => $request->getSchemeAndHttpHost() . $request->getRequestUri(),
38
                    'hostname' => $request->getHttpHost(),
39
                    'protocol' => $request->getScheme() . ":",
40
                    'pathname' => $request->getPathInfo(),
41
                    'search' => $request->getQueryString() !== null ? '?' . $request->getQueryString() : null
42
                ],
43
                'http_version' => $request->getProtocolVersion(),
44
                'method' => $request->getMethod(),
45
                'headers' => self::prepareHeaders($request->headers)
46
            ],
47
            'response' => [
48
                'status_code' => $response->getStatusCode(),
49
                'headers' => self::prepareHeaders($response->headers)
50
            ]
51
        ];
52
    }
53
54
    /**
55
     * Get array of headers from header bag
56
     *
57
     * @param HeaderBag $headerBag
58
     * @return array
59
     */
60
    private static function prepareHeaders(HeaderBag $headerBag)
61
    {
62
        $headers = $headerBag->all();
63
        $result = [];
64
65
        foreach ($headers as $header => $values) {
66
            $result[$header] = $values[0];
67
        }
68
69
        return $result;
70
    }
71
}
72