Completed
Push — main ( 72e6f8...077cf1 )
by mohsen
15s queued 14s
created

MonitorController::current()   A

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\HardDisk;
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, HardDisk $hardDisk)
17
    {
18
        return response()->json([
19
            'cpu' => $cpu->check(),
20
            'memory' => $memory->check(),
21
            'network' => $network->check(),
22
            'web_server' => $webServer->check(),
23
            'hard_disk' => $hardDisk->check(),
24
        ]);
25
    }
26
27
    public function history($from, $to)
28
    {
29
        $resourceLogs = 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, $resourceLogs),
43
                'memory' => $this->resourceLogCount('memory', $labels, $resourceLogs),
44
                'hard_disk' => $this->resourceLogCount('hardDisk', $labels, $resourceLogs),
45
                'network' => $this->resourceLogCount('network', $labels, $resourceLogs),
46
                'web_server' => $this->resourceLogCount('webServer', $labels, $resourceLogs)
47
            ]
48
        ]);
49
    }
50
51
    protected function resourceLogCount($resource, $labels, $resourceLogs)
52
    {
53
        $logCount = [];
54
        foreach ($labels as $label) {
55
            $resourceCount = $resourceLogs->countBy(function ($resourceLogs) use ($resource, $label) {
56
                return $resourceLogs['resource'] == $resource && $resourceLogs['date'] == $label;
57
            });
58
            array_push($logCount, count($resourceCount) > 1 ? $resourceCount[1] : 0);
59
        }
60
        return $logCount;
61
    }
62
}
63