Completed
Push — master ( 59e0d1...2311d4 )
by Dev
15:01 queued 13:47
created

LogParser   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 8
eloc 38
dl 0
loc 66
ccs 0
cts 17
cp 0
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A setDomain() 0 3 1
A createEntry() 0 3 2
A parse() 0 16 4
A setType() 0 3 1
1
<?php
2
3
namespace PiedWeb\LogsAnalyzer;
4
5
class LogParser extends \Kassner\LogParser\LogParser
6
{
7
    protected $domain;
8
    protected $type;
9
10
    // To be removed when this pull request is accepted : https://github.com/kassner/log-parser/pull/38
11
    protected $patterns = array(
12
        '%%' => '(?P<percent>\%)',
13
        '%a' => '(?P<remoteIp>)',
14
        '%A' => '(?P<localIp>)',
15
        '%h' => '(?P<host>[a-zA-Z0-9\-\._:]+)',
16
        '%l' => '(?P<logname>(?:-|[\w-]+))',
17
        '%m' => '(?P<requestMethod>OPTIONS|GET|HEAD|POST|PUT|DELETE|TRACE|CONNECT|PATCH|PROPFIND)',
18
        '%H' => '(?P<requestProtocol>HTTP/(1\.0|1\.1|2\.0))',
19
        '%p' => '(?P<port>\d+)',
20
        '%r' => '(?P<request>(?:(?:[A-Z]+) .+? HTTP/(1\.0|1\.1|2\.0))|-|)',
21
        '%t' => '\[(?P<time>\d{2}/(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/\d{4}:\d{2}:\d{2}:\d{2}'
22
               .'(?:-|\+)\d{4})\]',
23
        '%u' => '(?P<user>(?:-|[\w\-\.]+))',
24
        '%U' => '(?P<URL>.+?)',
25
        '%v' => '(?P<serverName>([a-zA-Z0-9]+)([a-z0-9.-]*))',
26
        '%V' => '(?P<canonicalServerName>([a-zA-Z0-9]+)([a-z0-9.-]*))',
27
        '%>s' => '(?P<status>\d{3}|-)',
28
        '%b' => '(?P<responseBytes>(\d+|-))',
29
        '%T' => '(?P<requestTime>(\d+\.?\d*))',
30
        '%O' => '(?P<sentBytes>[0-9]+)',
31
        '%I' => '(?P<receivedBytes>[0-9]+)',
32
        '\%\{(?P<name>[a-zA-Z]+)(?P<name2>[-]?)(?P<name3>[a-zA-Z]+)\}i' => '(?P<Header\\1\\3>.*?)',
33
        '%D' => '(?P<timeServeRequest>[0-9]+)',
34
        '%S' => '(?P<scheme>http|https)',
35
    );
36
37
    public function setDomain(string $domain)
38
    {
39
        $this->domain = $domain;
40
    }
41
42
    public function setType(string $type)
43
    {
44
        $this->type = $type;
45
    }
46
47
    public function parse($line)
48
    {
49
        //var_dump($this->pcreFormat); die();
50
        if (!preg_match($this->pcreFormat, $line, $matches)) {
51
            throw new \Kassner\LogParser\FormatException($line);
52
        }
53
54
        $entry = $this->createEntry();
55
        foreach (array_filter(array_keys($matches), 'is_string') as $key) {
56
            $setter = 'set'.$key;
57
            if (method_exists($entry, $setter)) {
58
                $entry->$setter($matches[$key]);
59
            }
60
        }
61
62
        return $entry;
63
    }
64
65
    /**
66
     * @return LogLine
67
     */
68
    protected function createEntry()
69
    {
70
        return null === $this->type ? new LogLine($this->domain) : new $this->type($this->domain);
71
    }
72
}
73