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

EchoLogger   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 15
dl 0
loc 41
ccs 0
cts 19
cp 0
rs 10
c 0
b 0
f 0
wmc 8

6 Methods

Rating   Name   Duplication   Size   Complexity  
A onException() 0 3 1
A onServerStart() 0 4 1
A log() 0 3 1
A onQueryResponse() 0 4 2
A getSubscribedEvents() 0 8 1
A onQueryReceive() 0 4 2
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