Server.php 7.47 KiB
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Server extends Model
{
protected $fillable = ["token"];
/**
* Last record from this server (used for caching).
* @var String
*/
private $last_record = null;
private static $sensors = [
\App\Sensor\LoadAvg::class,
\App\Sensor\MemInfo::class,
\App\Sensor\Ifconfig::class,
\App\Sensor\ListeningPorts::class,
\App\Sensor\Reboot::class,
\App\Sensor\Updates::class,
\App\Sensor\Disks::class,
\App\Sensor\Inodes::class,
\App\Sensor\Ssacli::class,
\App\Sensor\Perccli::class,
\App\Sensor\Date::class,
\App\Sensor\ClientVersion::class,
\App\Sensor\Heartbeat::class,
\App\Sensor\DiskEvolution::class
];
public function __construct(array $attributes = array())
{
$attributes["token"] = str_random(32);
parent::__construct($attributes);
}
public function organization()
{
return $this->belongsTo("App\Organization");
}
public function lastRecord()
{
if ($this->last_record == null) {
$collection = \Mongo::get()->monitoring->records;
$this->last_record = $collection->findOne(
["server_id" => $this->id],
["sort" => ["_id" => -1]]
);
}
return $this->last_record;
}
/**
* Return the last record if it contains the field $field,
* otherwise return null.
* @param string $field
* @return string
*/
public function lastRecordContaining(string $field)
{
if (isset($this->lastRecord()->$field)) {
return $this->lastRecord();
}