Allow monitoring/Controller to handle rendering errors while serving JSON or CSV

refs #13623
This commit is contained in:
Alexander A. Klimov 2016-12-16 15:28:15 +01:00
parent 75ad40f5a3
commit 735a4cb152
3 changed files with 10 additions and 4 deletions

View File

@ -25,6 +25,7 @@ class Csv
{ {
$csv = new static(); $csv = new static();
$csv->query = $query; $csv->query = $query;
$csv->render();
return $csv; return $csv;
} }
@ -50,10 +51,10 @@ class Csv
$first = true; $first = true;
foreach ($this->query as $row) { foreach ($this->query as $row) {
if ($first) { if ($first) {
$this->renderBuffer->append($this->renderRow(array_keys((array)$row))); $this->renderBuffer->append($this->renderRow(array_keys((array) $row)));
$first = false; $first = false;
} }
$this->renderBuffer->append($this->renderRow(array_values((array)$row))); $this->renderBuffer->append($this->renderRow(array_values((array) $row)));
} }
} }

View File

@ -35,6 +35,7 @@ class Json
protected function __construct(Traversable $query) protected function __construct(Traversable $query)
{ {
$this->query = $query; $this->query = $query;
$this->render();
} }
/** /**

View File

@ -52,6 +52,8 @@ class Controller extends IcingaWebController
. '</pre>'; . '</pre>';
exit; exit;
case 'json': case 'json':
$json = Json::create($query);
$response = $this->getResponse(); $response = $this->getResponse();
$response $response
->setHeader('Content-Type', 'application/json') ->setHeader('Content-Type', 'application/json')
@ -65,10 +67,12 @@ class Controller extends IcingaWebController
while (ob_get_level()) { while (ob_get_level()) {
ob_end_clean(); ob_end_clean();
} }
Json::create($query)->dump(); $json->dump();
exit; exit;
case 'csv': case 'csv':
$csv = Csv::fromQuery($query);
$response = $this->getResponse(); $response = $this->getResponse();
$response $response
->setHeader('Content-Type', 'text/csv') ->setHeader('Content-Type', 'text/csv')
@ -82,7 +86,7 @@ class Controller extends IcingaWebController
while (ob_get_level()) { while (ob_get_level()) {
ob_end_clean(); ob_end_clean();
} }
Csv::fromQuery($query)->dump(); $csv->dump();
exit; exit;
} }