Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
38 / 38
100.00% covered (success)
100.00%
24 / 24
CRAP
100.00% covered (success)
100.00%
1 / 1
AbstractHandler
100.00% covered (success)
100.00%
38 / 38
100.00% covered (success)
100.00%
24 / 24
27
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
3
 setName
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getName
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasName
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setData
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getData
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasData
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 start
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 stop
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setStart
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getStart
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasStart
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setEnd
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 getEnd
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasEnd
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setElapsed
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getElapsed
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasElapsed
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setLogger
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getLogger
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasLogger
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setLoggingParams
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getLoggingParams
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasLoggingParams
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 prepare
n/a
0 / 0
n/a
0 / 0
0
 prepareMessage
n/a
0 / 0
n/a
0 / 0
0
 log
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\Handler;
15
16use Pop\Log\Logger;
17
18/**
19 * Debug handler 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 AbstractHandler implements HandlerInterface
29{
30
31    /**
32     * Name of handler
33     * @var ?string
34     */
35    protected ?string $name = null;
36
37
38    /**
39     * Data
40     * @var array
41     */
42    protected array $data = [];
43
44    /**
45     * Start time
46     * @var ?float
47     */
48    protected ?float $start = null;
49
50    /**
51     * End time
52     * @var ?float
53     */
54    protected ?float $end = null;
55
56    /**
57     * Elapsed time
58     * @var ?float
59     */
60    protected ?float $elapsed = null;
61
62    /**
63     * Logger object
64     * @var ?Logger
65     */
66    protected ?Logger $logger = null;
67
68    /**
69     * Logging params
70     * @var array
71     */
72    protected array $loggingParams = [];
73
74    /**
75     * Constructor
76     *
77     * Instantiate a handler object
78     *
79     * @param ?string $name
80     * @param ?Logger $logger
81     * @param array   $loggingParams
82     */
83    public function __construct(?string $name = null, ?Logger $logger = null, array $loggingParams = [])
84    {
85        $this->setStart();
86        if ($name !== null) {
87            $this->setName($name);
88        }
89        if ($logger !== null) {
90            $this->setLogger($logger);
91            $this->setLoggingParams($loggingParams);
92        }
93    }
94
95    /**
96     * Set name
97     *
98     * @param  string $name
99     * @return AbstractHandler
100     */
101    public function setName(string $name): AbstractHandler
102    {
103        $this->name = $name;
104        return $this;
105    }
106
107    /**
108     * Get name
109     *
110     * @return ?string
111     */
112    public function getName(): ?string
113    {
114        return $this->name;
115    }
116
117    /**
118     * Has name
119     *
120     * @return bool
121     */
122    public function hasName(): bool
123    {
124        return !empty($this->name);
125    }
126
127    /**
128     * Set data
129     *
130     * @param  array $data
131     * @return AbstractHandler
132     */
133    public function setData(array $data = []): AbstractHandler
134    {
135        $this->data = $data;
136        return $this;
137    }
138
139    /**
140     * Get data
141     *
142     * @return array
143     */
144    public function getData(): array
145    {
146        return $this->data;
147    }
148
149    /**
150     * Has data
151     *
152     * @return bool
153     */
154    public function hasData(): bool
155    {
156        return !empty($this->data);
157    }
158
159    /**
160     * Start
161     *
162     * @return AbstractHandler
163     */
164    public function start(): AbstractHandler
165    {
166        return $this->setStart();
167    }
168
169    /**
170     * Stop
171     *
172     * @return AbstractHandler
173     */
174    public function stop(): AbstractHandler
175    {
176        return $this->setEnd();
177    }
178
179    /**
180     * Set start
181     *
182     * @param  ?float $start
183     * @return AbstractHandler
184     */
185    public function setStart(?float $start = null): AbstractHandler
186    {
187        $this->start = $start ?? microtime(true);
188        return $this;
189    }
190
191    /**
192     * Get start
193     *
194     * @return ?float
195     */
196    public function getStart(): ?float
197    {
198        return $this->start;
199    }
200
201    /**
202     * Has start
203     *
204     * @return bool
205     */
206    public function hasStart(): bool
207    {
208        return !empty($this->start);
209    }
210
211    /**
212     * Set end
213     *
214     * @param  ?float $end
215     * @return AbstractHandler
216     */
217    public function setEnd(?float $end = null): AbstractHandler
218    {
219        $this->end = $end ?? microtime(true);
220        if (!empty($this->start)) {
221            $this->setElapsed(($this->end - $this->start));
222        }
223        return $this;
224    }
225
226    /**
227     * Get end
228     *
229     * @return ?float
230     */
231    public function getEnd(): ?float
232    {
233        return $this->end;
234    }
235
236    /**
237     * Has end
238     *
239     * @return bool
240     */
241    public function hasEnd(): bool
242    {
243        return !empty($this->end);
244    }
245
246    /**
247     * Set elapsed
248     *
249     * @param  float $elapsed
250     * @return AbstractHandler
251     */
252    public function setElapsed(float $elapsed): AbstractHandler
253    {
254        $this->elapsed = $elapsed;
255        return $this;
256    }
257
258    /**
259     * Get elapsed
260     *
261     * @return ?float
262     */
263    public function getElapsed(): ?float
264    {
265        return $this->elapsed;
266    }
267
268    /**
269     * Has elapsed
270     *
271     * @return bool
272     */
273    public function hasElapsed(): bool
274    {
275        return !empty($this->elapsed);
276    }
277
278    /**
279     * Set logger
280     *
281     * @param  Logger $logger
282     * @return AbstractHandler
283     */
284    public function setLogger(Logger $logger): AbstractHandler
285    {
286        $this->logger = $logger;
287        return $this;
288    }
289
290    /**
291     * Get logger
292     *
293     * @return ?Logger
294     */
295    public function getLogger(): ?Logger
296    {
297        return $this->logger;
298    }
299
300    /**
301     * Has logger
302     *
303     * @return bool
304     */
305    public function hasLogger(): bool
306    {
307        return !empty($this->logger);
308    }
309
310    /**
311     * Set logger
312     *
313     * @param  array $loggingParams
314     * @return AbstractHandler
315     */
316    public function setLoggingParams(array $loggingParams): AbstractHandler
317    {
318        $this->loggingParams = $loggingParams;
319        return $this;
320    }
321
322    /**
323     * Get logging params
324     *
325     * @return array
326     */
327    public function getLoggingParams(): array
328    {
329        return $this->loggingParams;
330    }
331
332    /**
333     * Has logging parameters
334     *
335     * @return bool
336     */
337    public function hasLoggingParams(): bool
338    {
339        return !empty($this->loggingParams);
340    }
341
342    /**
343     * Prepare handler data for storage
344     *
345     * @return array
346     */
347    abstract public function prepare(): array;
348
349    /**
350     * Prepare handler message
351     *
352     * @param  ?array $context
353     * @return string
354     */
355    abstract public function prepareMessage(?array $context = null): string;
356
357    /**
358     * Trigger handle logging
359     *
360     * @return void
361     */
362    abstract public function log(): void;
363
364}