LogService   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 111
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 13
lcom 1
cbo 6
dl 0
loc 111
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A getLogs() 0 17 2
A lastLog() 0 17 2
A getLogByName() 0 12 3
A removeLog() 0 12 3
A removeAll() 0 7 2
1
<?php
2
3
namespace Spiral\LogViewer\Services;
4
5
use Spiral\Files\FileManager;
6
use Spiral\LogViewer\Config;
7
use Spiral\LogViewer\Entities\LogFile;
8
use Symfony\Component\Finder\Finder;
9
use Symfony\Component\Finder\SplFileInfo;
10
use Vvval\Spiral\PaginableArray;
11
12
class LogService
13
{
14
    /** @var Finder */
15
    private $finder;
16
17
    /** @var Config */
18
    private $config;
19
20
    /** @var FileManager */
21
    private $files;
22
23
    /**
24
     * LogService constructor.
25
     *
26
     * @param Finder      $finder
27
     * @param Config      $config
28
     * @param FileManager $files
29
     */
30
    public function __construct(Finder $finder, Config $config, FileManager $files)
31
    {
32
        $this->finder = $finder;
33
        $this->files = $files;
34
        $this->config = $config;
35
    }
36
37
    /**
38
     * @return PaginableArray
39
     */
40
    public function getLogs(): PaginableArray
41
    {
42
        $order = [];
43
        $logs = [];
44
        $files = $this->finder->files()->sortByName()->in($this->config->directories());
45
46
        /** @var SplFileInfo $file */
47
        foreach ($files as $file) {
48
            $filename = $file->getFilename();
49
            $logs[$filename] = new LogFile($file);
50
            $order[$filename] = $this->files->time($file);
51
        }
52
53
        array_multisort($order, SORT_DESC, $logs);
54
55
        return new PaginableArray($logs);
56
    }
57
58
    /**
59
     * @return null|LogFile
60
     */
61
    public function lastLog()
62
    {
63
        $files = $this->finder->files()->in($this->config->directories())->sort(function ($a, $b) {
64
            /**
65
             * @var SplFileInfo $a
66
             * @var SplFileInfo $b
67
             */
68
            return $b->getMTime() - $a->getMTime();
69
        });
70
71
        /** @var SplFileInfo $file */
72
        foreach ($files as $file) {
73
            return new LogFile($file);
74
        }
75
76
        return null;
77
    }
78
79
    /**
80
     * @param string $filename
81
     * @return null|LogFile
82
     */
83
    public function getLogByName(string $filename)
84
    {
85
        foreach ($this->config->directories() as $directory) {
86
            if (!file_exists($directory . $filename)) {
87
                continue;
88
            }
89
90
            return new LogFile($directory . $filename);
91
        }
92
93
        return null;
94
    }
95
96
    /**
97
     * @param LogFile $filename
98
     */
99
    public function removeLog(LogFile $filename)
100
    {
101
        foreach ($this->config->directories() as $directory) {
102
            if (!file_exists($directory . $filename->name())) {
103
                continue;
104
            }
105
106
            $this->files->delete($directory . $filename->name());
107
108
            return;
109
        }
110
    }
111
112
    /**
113
     *
114
     */
115
    public function removeAll()
116
    {
117
        /** @var SplFileInfo $file */
118
        foreach ($this->finder->in($this->config->directories()) as $file) {
119
            $this->files->delete($file->getRealPath());
120
        }
121
    }
122
}