MonitorController::current()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 6
c 1
b 0
f 0
nc 1
nop 5
dl 0
loc 8
rs 10
1
<?php
2
3
namespace MohsenAbrishami\Stethoscope\Http\Controllers;
4
5
use Carbon\CarbonPeriod;
6
use Illuminate\Support\Facades\DB;
7
use MohsenAbrishami\Stethoscope\Models\ResourceLog;
8
use MohsenAbrishami\Stethoscope\Services\Cpu;
9
use MohsenAbrishami\Stethoscope\Services\Storage;
10
use MohsenAbrishami\Stethoscope\Services\Memory;
11
use MohsenAbrishami\Stethoscope\Services\Network;
12
use MohsenAbrishami\Stethoscope\Services\WebServer;
13
14
class MonitorController extends Controller
15
{
16
    public function current(Cpu $cpu, Memory $memory, Network $network, WebServer $webServer, Storage $storage)
17
    {
18
        return response()->json([
19
            'cpu' => $cpu->check(),
20
            'memory' => $memory->check(),
21
            'network' => $network->check(),
22
            'web_server' => $webServer->check(),
23
            'storage' => $storage->check(),
24
        ]);
25
    }
26
27
    public function history($from, $to)
28
    {
29
        $logs = ResourceLog::where('created_at', '>=', $from.' 00:00:00')
30
            ->where('created_at', '<=', $to.' 23:59:59')
31
            ->select(DB::raw('date(created_at) as date'), 'resource')
32
            ->get();
33
34
        $labels = [];
35
        foreach (CarbonPeriod::create($from, $to) as $date) {
36
            array_push($labels, $date->format('Y-m-d'));
37
        }
38
39
        return response()->json([
40
            'labels' => $labels,
41
            'resource_log_count' => [
42
                'cpu' => $this->resourceLogCount('cpu', $labels, $logs),
43
                'memory' => $this->resourceLogCount('memory', $labels, $logs),
44
                'storage' => $this->resourceLogCount('storage', $labels, $logs),
45
                'network' => $this->resourceLogCount('network', $labels, $logs),
46
                'web_server' => $this->resourceLogCount('webServer', $labels, $logs),
47
            ],
48
        ]);
49
    }
50
51
    protected function resourceLogCount($resource, $labels, $logs)
52
    {
53
        $logCount = [];
54
        foreach ($labels as $label) {
55
            $resourceCount = $logs->countBy(function ($logs) use ($resource, $label) {
56
                return $logs['resource'] == $resource && $logs['date'] == $label;
57
            });
58
            array_push($logCount, count($resourceCount) > 1 ? $resourceCount[1] : 0);
59
        }
60
61
        return $logCount;
62
    }
63
}
64