Completed
Pull Request — develop (#200)
by Tony
05:44
created

AvailabilityMap::get()   B

Complexity

Conditions 5
Paths 2

Size

Total Lines 27
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 30

Importance

Changes 0
Metric Value
cc 5
eloc 19
nc 2
nop 1
dl 0
loc 27
ccs 0
cts 10
cp 0
crap 30
rs 8.439
c 0
b 0
f 0
1
<?php
2
/**
3
 * AvailabilityMap.php
4
 *
5
 * -Description-
6
 *
7
 * This program is free software: you can redistribute it and/or modify
8
 * it under the terms of the GNU General Public License as published by
9
 * the Free Software Foundation, either version 3 of the License, or
10
 * (at your option) any later version.
11
 *
12
 * This program is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
15
 * GNU General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU General Public License
18
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
 *
20
 * @package    LibreNMS
21
 * @link       http://librenms.org
22
 * @copyright  2017 Tony Murray
23
 * @author     Tony Murray <[email protected]>
24
 */
25
26
namespace App\Data\Widgets;
27
28
use App\Data\Interfaces\WidgetDataInterface;
29
use App\Models\Device;
30
use Illuminate\Http\Request;
31
use Settings;
32
33
class AvailabilityMap implements WidgetDataInterface
34
{
35
    public function get(Request $request)
36
    {
37
        $user = $request->user();
38
        $uptime_warning = Settings::get('uptime_warning', 84600);
39
40
        if ($user->hasGlobalRead()) {
41
            $deviceQuery = Device::isNotIgnored();
42
        } else {
43
            $deviceQuery = $user->devices()->isNotIgnored();
44
        }
45
        $devices = $deviceQuery->get(['device_id', 'hostname', 'status', 'uptime']);
46
47
        $counts = $devices->reduce(function ($result, $device) use ($uptime_warning) {
48
            if ($device->status == 1) {
49
                if (($device->uptime < $uptime_warning) && ($device->uptime != '0')) {
50
                    $result['warn']++;
51
                } else {
52
                    $result['up']++;
53
                }
54
            } else {
55
                $result['down']++;
56
            }
57
            return $result;
58
        }, ['warn' => 0, 'up' => 0, 'down' => 0]);
59
60
        return compact(['devices', 'counts', 'uptime_warning']);
61
    }
62
}
63