Completed
Pull Request — develop (#121)
by Neil
03:08
created

Device::boot()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 11
ccs 0
cts 2
cp 0
rs 9.4285
cc 1
eloc 6
nc 1
nop 0
crap 2
1
<?php
2
3
namespace App\Models;
4
5
use Illuminate\Database\Eloquent\Model;
6
7
/**
8
 * App\Models\Device
9
 *
10
 * @property integer $device_id
11
 * @property string $hostname
12
 * @property string $sysName
13
 * @property mixed $ip
14
 * @property string $community
15
 * @property string $authlevel
16
 * @property string $authname
17
 * @property string $authpass
18
 * @property string $authalgo
19
 * @property string $cryptopass
20
 * @property string $cryptoalgo
21
 * @property string $snmpver
22
 * @property integer $port
23
 * @property string $transport
24
 * @property integer $timeout
25
 * @property integer $retries
26
 * @property string $bgpLocalAs
27
 * @property string $sysObjectID
28
 * @property string $sysDescr
29
 * @property string $sysContact
30
 * @property string $version
31
 * @property string $hardware
32
 * @property string $features
33
 * @property string $location
34
 * @property string $os
35
 * @property boolean $status
36
 * @property string $status_reason
37
 * @property boolean $ignore
38
 * @property boolean $disabled
39
 * @property integer $uptime
40
 * @property integer $agent_uptime
41
 * @property string $last_polled
42
 * @property string $last_poll_attempted
43
 * @property float $last_polled_timetaken
44
 * @property float $last_discovered_timetaken
45
 * @property string $last_discovered
46
 * @property string $last_ping
47
 * @property float $last_ping_timetaken
48
 * @property string $purpose
49
 * @property string $type
50
 * @property string $serial
51
 * @property string $icon
52
 * @property integer $poller_group
53
 * @property boolean $override_sysLocation
54
 * @property string $notes
55
 * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\User[] $users
56
 * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Port[] $ports
57
 * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\General\Syslog[] $syslogs
58
 * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\General\Eventlog[] $eventlogs
59
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereDeviceId($value)
60
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereHostname($value)
61
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereSysName($value)
62
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereIp($value)
63
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereCommunity($value)
64
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereAuthlevel($value)
65
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereAuthname($value)
66
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereAuthpass($value)
67
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereAuthalgo($value)
68
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereCryptopass($value)
69
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereCryptoalgo($value)
70
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereSnmpver($value)
71
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device wherePort($value)
72
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereTransport($value)
73
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereTimeout($value)
74
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereRetries($value)
75
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereBgpLocalAs($value)
76
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereSysObjectID($value)
77
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereSysDescr($value)
78
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereSysContact($value)
79
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereVersion($value)
80
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereHardware($value)
81
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereFeatures($value)
82
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereLocation($value)
83
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereOs($value)
84
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereStatus($value)
85
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereStatusReason($value)
86
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereIgnore($value)
87
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereDisabled($value)
88
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereUptime($value)
89
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereAgentUptime($value)
90
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereLastPolled($value)
91
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereLastPollAttempted($value)
92
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereLastPolledTimetaken($value)
93
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereLastDiscoveredTimetaken($value)
94
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereLastDiscovered($value)
95
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereLastPing($value)
96
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereLastPingTimetaken($value)
97
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device wherePurpose($value)
98
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereType($value)
99
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereSerial($value)
100
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereIcon($value)
101
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device wherePollerGroup($value)
102
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereOverrideSysLocation($value)
103
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Device whereNotes($value)
104
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Notification DeviceUp()
105
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Notification DeviceDown()
106
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Notification DeviceIgnored()
107
 * @method static \Illuminate\Database\Query\Builder|\App\Models\Notification DeviceDisabled()
108
 * @mixin \Eloquent
109
 */
110
class Device extends Model
111
{
112
    /**
113
     * Indicates if the model should be timestamped.
114
     *
115
     * @var bool
116
     */
117
    public $timestamps = false;
118
    /**
119
     * The table associated with the model.
120
     *
121
     * @var string
122
     */
123
    protected $table = 'devices';
124
    /**
125
     * The primary key column name.
126
     *
127
     * @var string
128
     */
129
    protected $primaryKey = 'device_id';
130 20
131
    /**
132 20
     * The attributes that are mass assignable.
133
     *
134 20
     * @var array
135
     */
136 1
    protected $fillable = ['hostname', 'ip', 'status', 'status_reason'];
137 1
138 1
    /**
139 20
     * Initialize this class
140 20
     */
141
    public static function boot()
142
    {
143
        parent::boot();
144
145
        static::deleting(function(Device $device) {
146
            // delete related data
147
            $device->ports()->delete();
148
            $device->syslogs()->delete();
149
            $device->eventlogs()->delete();
150
        });
151
    }
152
153
    // ---- Define Reletionships ----
154
155 18
    /**
156
     * Returns a list of users that can access this device.
157 18
     */
158
    public function users()
159
    {
160
        return $this->belongsToMany('App\Models\User', 'devices_perms', 'device_id', 'user_id');
161
    }
162
163 1
    /**
164
     * Returns a list of the ports this device has.
165 1
     */
166
    public function ports()
167
    {
168
        return $this->hasMany('App\Models\Port', 'device_id', 'device_id');
169
    }
170
171 1
    /**
172
     * Returns a list of the Syslog entries this device has.
173 1
     */
174
    public function syslogs()
175
    {
176
        return $this->hasMany('App\Models\General\Syslog', 'device_id', 'device_id');
177
    }
178
179
    /**
180
     * Returns a list of the Eventlog entries this device has.
181
     */
182
    public function eventlogs()
183
    {
184
        return $this->hasMany('App\Models\General\Eventlog', 'host', 'device_id');
185
    }
186
187
    /**
188
     * @return \Illuminate\Database\Eloquent\Relations\hasMany
189
     */
190
    public function alerts()
191
    {
192
        return $this->hasMany('App\Models\Alerting\Alert', 'device_id');
193
    }
194
195
    /**
196
     * @return \Illuminate\Database\Eloquent\Relations\hasMany
197
     */
198
    public function rules()
199
    {
200
        return $this->hasMany('App\Models\Alerting\Rule', 'device_id');
201
    }
202
203
    /**
204 1
     * @return \Illuminate\Database\Eloquent\Relations\hasMany
205
     */
206 1
    public function eventlog()
207 1
    {
208
        return $this->hasMany('App\Models\General\Eventlog', 'device_id');
209
    }
210
211
    /**
212 18
     * @return \Illuminate\Database\Eloquent\Relations\hasMany
213
     */
214 18
    public function sensors()
215 18
    {
216
        return $this->hasMany('App\Models\Sensor', 'device_id');
217
    }
218
219
    /**
220
     * @return string
221
     */
222
    public function logo()
223
    {
224
        $icon = $this->icon;
225
        if (isset($icon)) {
226
            return asset('images/os/'.$icon.'.png');
227
        }
228
        else {
229
            return asset('images/os/generic.png');
230
        }
231
    }
232
233
    /**
234
     * @param int $seconds
235
     * @return string
236
     */
237
    public function formatUptime($seconds)
238
    {
239
        $from = new \DateTime("@0");
240
        $to = new \DateTime("@$seconds");
241
        return $from->diff($to)->format('%a d, %h h, %i m and %s s');
242
    }
243
244
    // ---- Accessors/Mutators ----
245
246
    public function getIpAttribute($ip)
247
    {
248
        if (!empty($ip)) {
249
            return inet_ntop($ip);
250
        }
251
        return null;
252
    }
253
254
    public function setIpAttribute($ip)
255
    {
256
        $this->attributes['ip'] = inet_pton($ip);
257
    }
258
259
    // ---- Query scopes ----
260
261
    public function scopeDeviceUp($query)
262
    {
263
        return $query->where([
264
            ['status', '=', 1],
265
            ['ignore', '=', 0],
266
            ['disabled', '=', 0]
267
        ]);
268
    }
269
270
    public function scopeDeviceDown($query)
271
    {
272
        return $query->where([
273
            ['status', '=', 0],
274
            ['ignore', '=', 0],
275
            ['disabled', '=', 0]
276
        ]);
277
    }
278
279
    public function scopeDeviceIgnored($query)
280
    {
281
        return $query->where([
282
            ['ignore', '=', 1],
283
            ['disabled', '=', 0]
284
        ]);
285
    }
286
287
    public function scopeDeviceNotIgnored($query)
288
    {
289
        return $query->where([
290
            ['ignore', '=', 0]
291
        ]);
292
    }
293
294
    public function scopeDeviceDisabled($query)
295
    {
296
        return $query->where([
297
            ['disabled', '=', 1]
298
        ]);
299
    }
300
301
}
302