Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
101 / 101
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
AbstractStorage
100.00% covered (success)
100.00%
101 / 101
100.00% covered (success)
100.00%
1 / 1
16
100.00% covered (success)
100.00%
1 / 1
 prepareEvents
100.00% covered (success)
100.00%
101 / 101
100.00% covered (success)
100.00%
1 / 1
16
 save
n/a
0 / 0
n/a
0 / 0
0
 clear
n/a
0 / 0
n/a
0 / 0
0
1<?php
2declare(strict_types=1);
3/**
4 * Pop PHP Framework (https://www.popphp.org/)
5 *
6 * @link       https://github.com/popphp/popphp-framework
7 * @author     Nick Sagona, III <dev@noladev.com>
8 * @copyright  Copyright (c) 2009-2027 NOLA Interactive, LLC.
9 * @license    https://www.popphp.org/license     New BSD License
10 */
11
12/**
13 * @namespace
14 */
15namespace Pop\Debug\Storage;
16
17use Pop\Debug\Handler\AbstractHandler;
18
19/**
20 * Debug storage abstract class
21 *
22 * @category   Pop
23 * @package    Pop\Debug
24 * @author     Nick Sagona, III <dev@noladev.com>
25 * @copyright  Copyright (c) 2009-2027 NOLA Interactive, LLC.
26 * @license    https://www.popphp.org/license     New BSD License
27 * @version    4.0.0
28 */
29abstract class AbstractStorage implements StorageInterface
30{
31
32
33    /**
34     * Prepare events
35     *
36     * @param  string          $id
37     * @param  string          $name
38     * @param  AbstractHandler $handler
39     * @return array
40     */
41    public function prepareEvents(string $id, string $name, AbstractHandler $handler): array
42    {
43        $events       = [];
44        $handlerClass = get_class($handler);
45
46        switch ($handlerClass) {
47            case 'Pop\Debug\Handler\ExceptionHandler':
48                $data = $handler->prepare();
49                foreach ($data as $datum) {
50                    $events[] = [
51                        'key'       => $id,
52                        'handler'   => $name,
53                        'start'     => $datum['timestamp'],
54                        'end'       => null,
55                        'elapsed'   => null,
56                        'type'      => (is_string($datum['exception']) ? $datum['exception'] : get_class($datum['exception'])),
57                        'message'   => (is_array($datum) && isset($datum['message']) ? $datum['message'] : $datum['exception']->getMessage()),
58                        'context'   => (is_array($datum) && isset($datum['message']) ? json_encode($datum) : json_encode($data)),
59                    ];
60                }
61                break;
62            case 'Pop\Debug\Handler\MemoryHandler':
63                $data = $handler->prepare();
64                $events[] = [
65                    'key'       => $id,
66                    'handler'   => $name,
67                    'start'     => $handler->getStart(),
68                    'end'       => null,
69                    'elapsed'   => null,
70                    'type'      => 'limit',
71                    'message'   => $data['limit'],
72                    'context'   => json_encode($data),
73                ];
74                foreach ($data['usages'] as $usage) {
75                    $events[] = [
76                        'key'       => $id,
77                        'handler'   => $name,
78                        'start'     => $usage['timestamp'],
79                        'end'       => null,
80                        'elapsed'   => null,
81                        'type'      => 'usage',
82                        'message'   => $usage['memory'],
83                        'context'   => null,
84                    ];
85                }
86                foreach ($data['peaks'] as $peak) {
87                    $events[] = [
88                        'key'       => $id,
89                        'handler'   => $name,
90                        'start'     => $peak['timestamp'],
91                        'end'       => null,
92                        'elapsed'   => null,
93                        'type'      => 'peak',
94                        'message'   => $peak['memory'],
95                        'context'   => null,
96                    ];
97                }
98                break;
99            case 'Pop\Debug\Handler\MessageHandler':
100                $data = $handler->prepare();
101                foreach ($data as $datum) {
102                    $events[] = [
103                        'key'       => $id,
104                        'handler'   => $name,
105                        'start'     => $datum['timestamp'],
106                        'end'       => null,
107                        'elapsed'   => null,
108                        'type'      => 'message',
109                        'message'   => $datum['message'],
110                        'context'   => null,
111                    ];
112                }
113                break;
114            case 'Pop\Debug\Handler\QueryHandler':
115                $data = $handler->prepare();
116                $events[] = [
117                    'key'       => $id,
118                    'handler'   => $name,
119                    'start'     => $data['start'] ?? $handler->getStart(),
120                    'end'       => $data['end'] ?? $handler->getEnd(),
121                    'elapsed'   => $data['elapsed'] ?? $handler->getElapsed(),
122                    'type'      => 'query-set',
123                    'message'   => $handler->prepareMessage(),
124                    'context'   => json_encode($data),
125                ];
126                foreach ($data['steps'] as $step) {
127                    $events[] = [
128                        'key'       => $id,
129                        'handler'   => $name,
130                        'start'     => $step['start'] ?? null,
131                        'end'       => $step['end'] ?? null,
132                        'elapsed'   => $step['elapsed'] ?? null,
133                        'type'      => 'query',
134                        'message'   => $step['query'] ?? null,
135                        'context'   => json_encode($step),
136                    ];
137                }
138                break;
139            // Pop\Debug\Handler\PhpHandler
140            // Pop\Debug\Handler\RequestHandler
141            // Pop\Debug\Handler\TimeHandler
142            default:
143                $data = $handler->prepare();
144                $events[] = [
145                    'key'       => $id,
146                    'handler'   => $name,
147                    'start'     => $handler->getStart(),
148                    'end'       => $handler->getEnd(),
149                    'elapsed'   => $handler->getElapsed(),
150                    'type'      => null,
151                    'message'   => $handler->prepareMessage(),
152                    'context'   => json_encode($data),
153                ];
154        }
155
156        return $events;
157    }
158
159    /**
160     * Save debug data
161     *
162     * @param  string          $id
163     * @param  string          $name
164     * @param  AbstractHandler $handler
165     * @return void
166     */
167    abstract public function save(string $id, string $name, AbstractHandler $handler): void;
168
169    /**
170     * Clear all debug data
171     *
172     * @return void
173     */
174    abstract public function clear(): void;
175
176}