Deduplicate Hosts and Services-Controller

Create functions in abstract class for filtering hosts and services, instead of reimplementing it in the controller.
This commit is contained in:
Matthias Jentsch 2015-03-06 17:52:06 +01:00
parent 1cfcb934b0
commit 266e781a93
3 changed files with 61 additions and 43 deletions

View File

@ -105,27 +105,19 @@ class Monitoring_HostsController extends Controller
'host_active_checks_enabled',
'host_obsessing'*/
));
$unhandledObjects = array();
$unhandledObjects = $this->hostList->getUnhandledObjects();
$unhandledFilterExpressions = array();
$acknowledgedObjects = array();
$objectsInDowntime = array();
$downtimeFilterExpressions = array();
foreach ($this->hostList as $host) {
/** @var Host $host */
$unhandled = (bool) $host->problem === true && (bool) $host->handled === false;
if ($unhandled) {
$unhandledObjects[] = $host;
$unhandledFilterExpressions[] = Filter::where('host', $host->getName());
}
if ((bool) $host->acknowledged === true) {
$acknowledgedObjects[] = $host;
}
if ((bool) $host->in_downtime === true) {
$objectsInDowntime[] = $host;
$downtimeFilterExpressions[] = Filter::where('downtime_host', $host->getName());
}
foreach ($unhandledObjects as $object) {
$unhandledFilterExpressions[] = Filter::where('host', $object->getName());
}
$objectsInDowntime = $this->hostList->getObjectsInDowntime();
$downtimeFilterExpressions = array();
foreach ($objectsInDowntime as $object) {
$downtimeFilterExpressions[] = Filter::where('downtime_host', $object->getName());
}
$acknowledgedObjects = $this->hostList->getAcknowledgedObjects();
if (! empty($acknowledgedObjects)) {
$removeAckForm = new RemoveAcknowledgementCommandForm();
$removeAckForm

View File

@ -127,32 +127,25 @@ class Monitoring_ServicesController extends Controller
'service_active_checks_enabled',
'service_obsessing'*/
));
$unhandledObjects = array();
$unhandledObjects = $this->serviceList->getUnhandledObjects();
$unhandledFilterExpressions = array();
$acknowledgedObjects = array();
$objectsInDowntime = array();
$downtimeFilterExpressions = array();
foreach ($this->serviceList as $service) {
/** @var Service $service */
if ((bool) $service->problem === true && (bool) $service->handled === false) {
$unhandledObjects[] = $service;
$unhandledFilterExpressions[] = Filter::matchAll(
Filter::where('host', $service->getHost()->getName()),
Filter::where('service', $service->getName())
);
}
if ((bool) $service->acknowledged === true) {
$acknowledgedObjects[] = $service;
}
if ((bool) $service->in_downtime === true) {
$objectsInDowntime[] = $service;
$downtimeFilterExpressions[] = Filter::matchAll(
Filter::where('downtime_host', $service->getHost()->getName()),
Filter::where('downtime_service', $service->getName())
);
}
foreach ($unhandledObjects as $service) {
$unhandledFilterExpressions[] = Filter::matchAll(
Filter::where('host', $service->getHost()->getName()),
Filter::where('service', $service->getName())
);
}
$objectsInDowntime = $this->serviceList->getObjectsInDowntime();
$downtimeFilterExpressions = array();
foreach ($objectsInDowntime as $service) {
$downtimeFilterExpressions[] = Filter::matchAll(
Filter::where('downtime_host', $service->getHost()->getName()),
Filter::where('downtime_service', $service->getName())
);
}
$acknowledgedObjects = $this->serviceList->getAcknowledgedObjects();
if (! empty($acknowledgedObjects)) {
$removeAckForm = new RemoveAcknowledgementCommandForm();
$removeAckForm

View File

@ -86,6 +86,39 @@ abstract class ObjectList implements Countable, IteratorAggregate
return $this->backend->select()->from('comment')->applyFilter($this->filter);
}
public function getAcknowledgedObjects()
{
$acknowledgedObjects = array();
foreach ($this as $object) {
if ((bool) $object->acknowledged === true) {
$acknowledgedObjects[] = $object;
}
}
return $acknowledgedObjects;
}
public function getObjectsInDowntime()
{
$objectsInDowntime = array();
foreach ($this as $object) {
if ((bool) $object->in_downtime === true) {
$objectsInDowntime[] = $object;
}
}
return $objectsInDowntime;
}
public function getUnhandledObjects()
{
$unhandledObjects = array();
foreach ($this as $object) {
if ((bool) $object->problem === true && (bool) $object->handled === false) {
$unhandledObjects[] = $object;
}
}
return $unhandledObjects;
}
protected function prepareStateNames($prefix, array $names) {
$new = array();
foreach ($names as $name) {