Skip to content
Snippets Groups Projects
Server.php 1.52 KiB
Newer Older
Tibo's avatar
Tibo committed
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Server extends Model
{

    protected $fillable = ["token"];

    static $sensors = [
        \App\Sensor\LoadAvg::class,
        \App\Sensor\Reboot::class,
Tibo's avatar
Tibo committed
        \App\Sensor\Updates::class,
        \App\Sensor\Disks::class
Tibo's avatar
Tibo committed
    public function __construct(array $attributes = array()) {
        $attributes["token"] = str_random(32);
        parent::__construct($attributes);
    }

    public function organization() {
        return $this->belongsTo("App\Organization");
    }
Tibo's avatar
Tibo committed

    public function lastRecord() {
        $collection = \Mongo::get()->monitoring->records;
Tibo's avatar
Tibo committed
        return $collection->findOne(
                ["server_id" => $this->id],
                ["sort" => ["_id" => -1]]);
    }

Tibo's avatar
Tibo committed
    /**
     *
     * @return \DateTimeZone
     */
Tibo's avatar
Tibo committed
    public function lastRecordTime() {
        $last_record = $this->lastRecord();
        if ($last_record === null) {
            return \Carbon\Carbon::createFromTimestamp(0);
        }

        return \Carbon\Carbon::createFromTimestamp($last_record->time);
Tibo's avatar
Tibo committed
    }

    public function clientVersion() {
        $last_record = $this->lastRecord();
        if ($last_record == null) {
            return "none";
        }

        return $last_record->version;
Tibo's avatar
Tibo committed
    }
Tibo's avatar
Tibo committed

    public function status() {
        return "OK";
    }

    public function getSensors() {

        $sensors = [];
        foreach (self::$sensors as $sensor) {
            $sensors[] = new $sensor($this);
        }
        return $sensors;
    }
Tibo's avatar
Tibo committed
}