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