Skip to content
Snippets Groups Projects
AbstractSensor.php 1.78 KiB
<?php

namespace App;

use Illuminate\Support\Facades\Log;

/**
 * Description of AbstractSensor
 *
 * @author tibo
 */
abstract class AbstractSensor implements Sensor
{
    /**
     *
     * @var \App\Server
     */
    private $server;

    public function __construct(\App\Server $server)
    {
        $this->server = $server;
    }

    protected function getServer() : \App\Server
    {
        return $this->server;
    }

    public function getName() : string
    {
        return (new \ReflectionClass($this))->getShortName();
    }

    public static function getColorForStatus(int $status) : string
    {
        switch ($status) {
            case 0:
                return 'success';
            case 10:
                return 'warning';
            case 20:
                return 'danger';
            default:
                return 'secondary';
        }
    }

    public static function getBadgeForStatus(int $status) : string
    {
        switch ($status) {
            case 0:
                return '<span class="badge badge-success">OK</span>';
            case 10:
                return '<span class="badge badge-warning">WARNING</span>';
            case 20:
                return '<span class="badge badge-danger">ERROR</span>';
            default:
                return '<span class="badge badge-secondary">Unknown</span>';
        }
    }

    public function getBadge(array $records) : string
    {
        return self::getBadgeForStatus($this->status($records));
    }

    public function reportHTML(array $records) : string
    {
        try {
            return $this->report($records);
        } catch (\Exception $ex) {
            Log::error('Sensor failed : ' . $ex->getTraceAsString());
            return "<p>Sensor " . $this->getName() . " failed :-(</p>";
        }
    }
}