Completed
Push — master ( 0cd2cd...e2ec22 )
by Sam
02:48
created

EchoLogger::onQueryReceive()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 2
nc 2
nop 1
dl 0
loc 4
ccs 0
cts 3
cp 0
crap 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * This file is part of PHP DNS Server.
5
 *
6
 * (c) Yif Swery <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace yswery\DNS\Event\Subscriber;
13
14
use Psr\Log\AbstractLogger;
15
use Psr\Log\LogLevel;
16
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
17
use yswery\DNS\Event\Events;
18
use yswery\DNS\Event\ServerExceptionEvent;
19
use yswery\DNS\Event\QueryReceiveEvent;
20
use yswery\DNS\Event\QueryResponseEvent;
21
use yswery\DNS\Event\ServerStartEvent;
22
23
class EchoLogger extends AbstractLogger implements EventSubscriberInterface
24
{
25
    public static function getSubscribedEvents(): array
26
    {
27
        return [
28
            Events::SERVER_START => 'onServerStart',
29
            Events::SERVER_START_FAIL => 'onException',
30
            Events::SERVER_EXCEPTION => 'onException',
31
            Events::QUERY_RECEIVE => 'onQueryReceive',
32
            Events::QUERY_RESPONSE => 'onQueryResponse',
33
        ];
34
    }
35
36
    public function onServerStart(ServerStartEvent $event): void
37
    {
38
        $this->log(LogLevel::INFO, 'Server started.');
39
        $this->log(LogLevel::INFO, sprintf('Listening on %s', $event->getSocket()->getLocalAddress()));
40
    }
41
42
    public function onException(ServerExceptionEvent $event): void
43
    {
44
        $this->log(LogLevel::ERROR, $event->getException()->getMessage());
45
    }
46
47
    public function onQueryReceive(QueryReceiveEvent $event): void
48
    {
49
        foreach ($event->getMessage()->getQuestions() as $question) {
50
            $this->log(LogLevel::INFO, 'Query: '.$question);
51
        }
52
    }
53
54
    public function onQueryResponse(QueryResponseEvent $event): void
55
    {
56
        foreach ($event->getMessage()->getAnswers() as $answer) {
57
            $this->log(LogLevel::INFO, 'Answer: '.$answer);
58
        }
59
    }
60
61
    public function log($level, $message, array $context = [])
62
    {
63
        echo sprintf('[%s] %s: %s'.PHP_EOL, date('c'), $level, $message);
64
    }
65
}
66