Completed
Pull Request — master (#2)
by ARCANEDEV
02:57
created

LogViewerController::calcPercentages()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 15
ccs 0
cts 13
cp 0
rs 9.4286
cc 2
eloc 9
nc 2
nop 2
crap 6
1
<?php namespace Arcanesoft\Foundation\Http\Controllers;
2
3
use Arcanedev\LogViewer\Contracts\LogViewerInterface;
4
use Arcanedev\LogViewer\Entities\Log;
5
use Arcanedev\LogViewer\Exceptions\LogNotFound;
6
use Arcanesoft\Foundation\Bases\FoundationController;
7
use Arcanesoft\Foundation\Presenters\PaginationPresenter;
8
use Illuminate\Http\Request;
9
use Illuminate\Pagination\LengthAwarePaginator;
10
11
/**
12
 * Class     LogViewerController
13
 *
14
 * @package  Arcanesoft\Foundation\Http\Controllers
15
 * @author   ARCANEDEV <[email protected]>
16
 */
17
class LogViewerController extends FoundationController
18
{
19
    /* ------------------------------------------------------------------------------------------------
20
     |  Properties
21
     | ------------------------------------------------------------------------------------------------
22
     */
23
    /**
24
     * The LogViewer instance.
25
     *
26
     * @var \Arcanedev\LogViewer\Contracts\LogViewerInterface
27
     */
28
    protected $logViewer;
29
30
    /**
31
     * Logs per page.
32
     *
33
     * @var int
34
     */
35
    protected $perPage = 30;
36
37
    /* ------------------------------------------------------------------------------------------------
38
     |  Constructor
39
     | ------------------------------------------------------------------------------------------------
40
     */
41
    /**
42
     * LogViewerController constructor.
43
     *
44
     * @param  \Arcanedev\LogViewer\Contracts\LogViewerInterface  $logViewer
45
     */
46
    public function __construct(LogViewerInterface $logViewer)
47
    {
48
        parent::__construct();
49
50
        $this->logViewer = $logViewer;
51
52
        $this->setCurrentPage('foundation-logviewer');
53
        $this->addBreadcrumbRoute('LogViewer', 'foundation::log-viewer.index');
54
    }
55
56
    /* ------------------------------------------------------------------------------------------------
57
     |  Main Functions
58
     | ------------------------------------------------------------------------------------------------
59
     */
60
    public function index()
61
    {
62
        $stats    = $this->logViewer->statsTable();
63
        $percents = $this->calcPercentages($stats->footer(), $stats->header());
64
65
        $this->addBreadcrumb('Dashboard');
66
67
        return $this->view('log-viewer.dashboard', compact('percents'));
68
    }
69
70
    public function listLogs()
71
    {
72
        $stats   = $this->logViewer->statsTable();
73
        $headers = $stats->header();
74
        // $footer   = $stats->footer();
75
76
        $page    = request('page', 1);
77
        $offset  = ($page * $this->perPage) - $this->perPage;
78
79
        $rows    = new LengthAwarePaginator(
80
            array_slice($stats->rows(), $offset, $this->perPage, true),
81
            count($stats->rows()),
82
            $this->perPage,
83
            $page
84
        );
85
        $rows->setPath(request()->url());
86
87
        $this->addBreadcrumb('Logs List');
88
89
        return $this->view('log-viewer.list', compact('headers', 'rows', 'footer'));
90
    }
91
92
    /**
93
     * Show the log.
94
     *
95
     * @param  string  $date
96
     *
97
     * @return \Illuminate\View\View
98
     */
99
    public function show($date)
100
    {
101
        $log       = $this->getLogOrFail($date);
102
        $levels    = $this->logViewer->levelsNames();
103
        $entries   = $log->entries()->paginate($this->perPage);
104
        $presenter = new PaginationPresenter($entries);
105
106
        $this->addBreadcrumbRoute('Logs List', 'foundation::log-viewer.logs.list');
107
        $this->addBreadcrumb($date);
108
109
        return $this->view('log-viewer.show', compact('log', 'levels', 'entries', 'presenter'));
110
    }
111
112
    /**
113
     * Filter the log entries by level.
114
     *
115
     * @param  string  $date
116
     * @param  string  $level
117
     *
118
     * @return \Illuminate\View\View|\Illuminate\Http\RedirectResponse
119
     */
120
    public function showByLevel($date, $level)
121
    {
122
        $log = $this->getLogOrFail($date);
123
124
        if ($level == 'all') {
125
            return redirect()->route('foundation::log-viewer.logs.show', [$date]);
126
        }
127
128
        $levels    = $this->logViewer->levelsNames();
129
        $entries   = $this->logViewer->entries($date, $level)->paginate($this->perPage);
130
        $presenter = new PaginationPresenter($entries);
131
132
        $this->addBreadcrumbRoute('Logs List', 'foundation::log-viewer.logs.list');
133
        $this->addBreadcrumbRoute($date, 'foundation::log-viewer.logs.show', [$date]);
134
        $this->addBreadcrumb(ucfirst($level));
135
136
        return $this->view('log-viewer.show', compact('log', 'levels', 'entries', 'presenter'));
137
    }
138
139
    /**
140
     * Download the log
141
     *
142
     * @param  string  $date
143
     *
144
     * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
145
     */
146
    public function download($date)
147
    {
148
        return $this->logViewer->download($date);
149
    }
150
151
    /**
152
     * Delete a log.
153
     *
154
     * @param  \Illuminate\Http\Request  $request
155
     *
156
     * @return \Illuminate\Http\JsonResponse
157
     */
158
    public function delete(Request $request)
159
    {
160
        self::onlyAjax($message = 'Access denied !');
161
162
        $date = $request->get('date');
163
        $ajax = [
164
            'result' => $this->logViewer->delete($date) ? 'success' : 'error'
165
        ];
166
167
        return response()->json($ajax);
168
    }
169
170
    /* ------------------------------------------------------------------------------------------------
171
     |  Other Functions
172
     | ------------------------------------------------------------------------------------------------
173
     */
174
    /**
175
     * Get a log or fail
176
     *
177
     * @param  string  $date
178
     *
179
     * @return Log|null
180
     */
181
    private function getLogOrFail($date)
182
    {
183
        $log = null;
184
185
        try {
186
            $log = $this->logViewer->get($date);
187
        }
188
        catch(LogNotFound $e) {
189
            abort(404, $e->getMessage());
190
        }
191
192
        return $log;
193
    }
194
195
    /**
196
     * Calculate the percentage
197
     *
198
     * @param  array  $total
199
     * @param  array  $names
200
     *
201
     * @return array
202
     */
203
    private function calcPercentages(array $total, array $names)
204
    {
205
        $percents = [];
206
        $all      = array_get($total, 'all');
207
208
        foreach ($total as $level => $count) {
209
            $percents[$level] = [
210
                'name'    => $names[$level],
211
                'count'   => $count,
212
                'percent' => round(($count / $all) * 100, 2),
213
            ];
214
        }
215
216
        return $percents;
217
    }
218
}
219