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

namespace App;

Tibo's avatar
Tibo committed
use \Carbon\Carbon;

Tibo's avatar
Tibo committed
/**
 * Represents a change of status, that will be saved in MongoDB.
 *
 * @author tibo
 */
Tibo's avatar
Tibo committed
class StatusChange
{
Tibo's avatar
Tibo committed

    public $server_id = 0;
    public $status = 0;
    public $time = 0;
Tibo's avatar
Tibo committed

Tibo's avatar
Tibo committed
    public function parse($array)
    {
Tibo's avatar
Tibo committed
        if ($array == null) {
            return;
        }

        $fields = ["server_id", "status", "time"];
        foreach ($fields as $field) {
            if (isset($array[$field])) {
                $this->$field = $array[$field];
            }
        }

        return $this;
    }

    public function statusName()
    {
        return \App\Server::getNameForStatus($this->status);
    }

Tibo's avatar
Tibo committed
    public function getStatusBadge()
    {
Tibo's avatar
Tibo committed
        return AbstractSensor::getBadgeForStatus($this->status);
    }

Tibo's avatar
Tibo committed
    public function getTimeCarbon() : Carbon
    {
Tibo's avatar
Tibo committed
        return Carbon::createFromTimestamp($this->time);
    }

Tibo's avatar
Tibo committed
    public function server() : Server
    {
Tibo's avatar
Tibo committed
        return Server::id($this->server_id);
    }

Tibo's avatar
Tibo committed
    {
Tibo's avatar
Tibo committed

        $data = [
            "time" => $this->time,
            "server_id" => $this->server_id,
            "status" => $this->status,
Tibo's avatar
Tibo committed
        ];

        $collection = \Mongo::get()->monitoring->statuschanges;
        $r = $collection->insertOne($data);
        $this->id = $r->getInsertedId()->__toString();
Tibo's avatar
Tibo committed
    }

Tibo's avatar
Tibo committed
    public static function getLastChangesForServer(int $server_id, int $count) : array
    {
Tibo's avatar
Tibo committed
        $collection = \Mongo::get()->monitoring->statuschanges;
        $records = $collection->find(
Tibo's avatar
Tibo committed
            ["server_id" => $server_id],
            ["limit" => $count, "sort" => ["_id" => -1]]
        );
Tibo's avatar
Tibo committed

        $changes = [];
        foreach ($records as $record) {
            $changes[] = (new StatusChange())->parse($record);
        }
        return $changes;
    }

    public static function find(string $id) : StatusChange
    {
        $collection = \Mongo::get()->monitoring->statuschanges;
        $result = $collection->findOne(
                ['_id' => new \MongoDB\BSON\ObjectId($id)]);

        $status = new StatusChange();
        $status->parse($result);
        $status->id = $id;
        return $status;
    }

Tibo's avatar
Tibo committed
    public static function getLastChangeForServer(int $server_id) : StatusChange
    {
Tibo's avatar
Tibo committed
        $collection = \Mongo::get()->monitoring->statuschanges;
        $record = $collection->findOne(
Tibo's avatar
Tibo committed
            ["server_id" => $server_id],
            ["sort" => ["_id" => -1]]
        );
Tibo's avatar
Tibo committed

        $change = new StatusChange();
        $change->server_id = $server_id;
Tibo's avatar
Tibo committed
        $change->parse($record);
Tibo's avatar
Tibo committed
        return $change;
    }
}