2017-01-04 23:16:12 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace SilverStripe\EnvironmentCheck;
|
|
|
|
|
|
|
|
use InvalidArgumentException;
|
|
|
|
use SilverStripe\ORM\ArrayList;
|
|
|
|
use SilverStripe\View\ArrayData;
|
|
|
|
use SilverStripe\View\ViewableData;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A single set of results from running an EnvironmentCheckSuite
|
|
|
|
*
|
|
|
|
* @package environmentcheck
|
|
|
|
*/
|
|
|
|
class EnvironmentCheckSuiteResult extends ViewableData
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var ArrayList
|
|
|
|
*/
|
|
|
|
protected $details;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var int
|
|
|
|
*/
|
|
|
|
protected $worst = 0;
|
|
|
|
|
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
parent::__construct();
|
|
|
|
$this->details = new ArrayList();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param int $status
|
|
|
|
* @param string $message
|
|
|
|
* @param string $checkIdentifier
|
|
|
|
*/
|
|
|
|
public function addResult($status, $message, $checkIdentifier)
|
|
|
|
{
|
2017-03-21 11:57:07 +01:00
|
|
|
$this->details->push(new ArrayData([
|
2017-01-04 23:16:12 +01:00
|
|
|
'Check' => $checkIdentifier,
|
|
|
|
'Status' => $this->statusText($status),
|
|
|
|
'StatusCode' => $status,
|
|
|
|
'Message' => $message,
|
2017-03-21 11:57:07 +01:00
|
|
|
]));
|
2017-01-04 23:16:12 +01:00
|
|
|
|
|
|
|
$this->worst = max($this->worst, $status);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns true if there are no errors.
|
|
|
|
*
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
public function ShouldPass()
|
|
|
|
{
|
|
|
|
return $this->worst <= EnvironmentCheck::WARNING;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns overall (i.e. worst) status as a string.
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function Status()
|
|
|
|
{
|
|
|
|
return $this->statusText($this->worst);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns detailed status information about each check.
|
|
|
|
*
|
|
|
|
* @return ArrayList
|
|
|
|
*/
|
|
|
|
public function Details()
|
|
|
|
{
|
|
|
|
return $this->details;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Convert the final result status and details to JSON.
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function toJSON()
|
|
|
|
{
|
2017-03-21 11:57:07 +01:00
|
|
|
$result = [
|
2017-01-04 23:16:12 +01:00
|
|
|
'Status' => $this->Status(),
|
|
|
|
'ShouldPass' => $this->ShouldPass(),
|
2017-03-21 11:57:07 +01:00
|
|
|
'Checks' => []
|
|
|
|
];
|
2017-01-04 23:16:12 +01:00
|
|
|
foreach ($this->details as $detail) {
|
|
|
|
$result['Checks'][] = $detail->toMap();
|
|
|
|
}
|
|
|
|
return json_encode($result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return a text version of a status code.
|
|
|
|
*
|
|
|
|
* @param int $status
|
|
|
|
* @return string
|
|
|
|
* @throws InvalidArgumentException
|
|
|
|
*/
|
|
|
|
protected function statusText($status)
|
|
|
|
{
|
|
|
|
switch ($status) {
|
|
|
|
case EnvironmentCheck::ERROR:
|
|
|
|
return 'ERROR';
|
|
|
|
break;
|
|
|
|
case EnvironmentCheck::WARNING:
|
|
|
|
return 'WARNING';
|
|
|
|
break;
|
|
|
|
case EnvironmentCheck::OK:
|
|
|
|
return 'OK';
|
|
|
|
break;
|
|
|
|
case 0:
|
|
|
|
return 'NO CHECKS';
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
throw new InvalidArgumentException("Bad environment check status '$status'");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|