Passed
Pull Request — master (#82)
by Mark
07:57
created

SessionController::stop()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 2
c 1
b 0
f 1
dl 0
loc 4
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Socialblue\LaravelQueryAdviser\Http\Controllers;
4
5
use Illuminate\Routing\Controller;
6
use Illuminate\Http\Request;
7
use Illuminate\Support\Arr;
8
use Illuminate\Support\Facades\Cache;
9
10
/**
11
 * Class SessionController
12
 * @package Socialblue\LaravelQueryAdviser\Http\Controllers
13
 */
14
class SessionController extends Controller
15
{
16
    /**
17
     * Start a new query log session
18
     *
19
     *
20
     * @param Request $request
21
     * @return array
22
     */
23
    public function start(Request $request): array
0 ignored issues
show
Unused Code introduced by
The parameter $request is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

23
    public function start(/** @scrutinizer ignore-unused */ Request $request): array

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
24
    {
25
        $sessionId = uniqid('laravel-query-adviser', true);
26
        $sessionIds = Cache::get(config('laravel-query-adviser.cache.session.key_list'), []);
27
        if (!is_array($sessionIds)) {
28
            $sessionIds = [$sessionId];
29
        }
30
        $sessionIds[] = $sessionId;
31
32
        Cache::put(config('laravel-query-adviser.cache.session.key_list'), $sessionIds, null);
33
        Cache::put(config('laravel-query-adviser.cache.session_id'), $sessionId, config('laravel-query-adviser.cache.session.max_time'));
34
        return ['session_id' => $sessionId];
35
    }
36
37
    /**
38
     * Stop current query log session
39
     *
40
     *
41
     * @param Request $request
42
     * @return array
43
     */
44
    public function stop(Request $request): array
0 ignored issues
show
Unused Code introduced by
The parameter $request is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

44
    public function stop(/** @scrutinizer ignore-unused */ Request $request): array

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
45
    {
46
        Cache::forget(config('laravel-query-adviser.cache.session_id'));
47
        return ['session_id' => ''];
48
    }
49
50
51
    /**
52
     * @param Request $request
53
     * @return mixed
54
     */
55
    public function show(Request $request)
56
    {
57
        $data = Cache::tags(['laravel-query-adviser-sessions'])->get($request->input('id'));
58
59
        if (!is_array($data)) {
60
            return [];
61
        }
62
63
        return $data;
64
    }
65
66
    /**
67
     * Stop current query log session
68
     *
69
     *
70
     * @param Request $request
71
     * @return array
72
     */
73
    public function isActive(Request $request): array
0 ignored issues
show
Unused Code introduced by
The parameter $request is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

73
    public function isActive(/** @scrutinizer ignore-unused */ Request $request): array

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
74
    {
75
        return ['active' => Cache::has(config('laravel-query-adviser.cache.session_id'))];
76
    }
77
78
79
    /**
80
     * @return array
81
     */
82
    public function getList(): array
83
    {
84
        $keys = Cache::get(config('laravel-query-adviser.cache.session.key_list'), []);
85
86
        foreach ($keys as $key) {
87
            $sessionData = Cache::tags(['laravel-query-adviser-sessions'])->get($key) ?? [];
88
            $flattedSessionData = Arr::flatten($sessionData, 1);
89
90
            if (empty($flattedSessionData)) {
91
                continue;
92
            }
93
94
            $queries = count($flattedSessionData);
95
            $totalQueryTime = array_sum(array_column($flattedSessionData, 'queryTime'));
96
            $routes = count(array_unique(array_column($flattedSessionData, 'url')));
97
            $firstQueryLoggedTime = min(array_keys($sessionData));
98
            $lastQueryLoggedTime = max(array_keys($sessionData));
99
100
            $dataList[] = [
101
                'sessionKey' => $key,
102
                'queries' => $queries,
103
                'queryTime' => $totalQueryTime,
104
                'routes' => $routes,
105
                'firstQueryLogged' => $firstQueryLoggedTime,
106
                'lastQueryLogged' => $lastQueryLoggedTime,
107
            ];
108
        }
109
110
        return $dataList ?? [];
111
    }
112
113
    /**
114
     * @return array
115
     */
116
    public function clear(): array
117
    {
118
        return ['success' => Cache::forget(config('laravel-query-adviser.cache.session.key_list'))];
119
    }
120
}
121