public function executeRead(AgaviRequestDataHolder $rd)
 {
     $filter = $this->getContext()->getModel("SLA.SLAFilter", "Api");
     $params = $rd->getParameters();
     foreach ($params as $name => $value) {
         switch ($name) {
             case 'starttime':
                 $filter->setStartTime($value);
                 break;
             case 'endtime':
                 $filter->setEndTime($value);
                 break;
             case 'hostsonly':
                 $filter->useOnlyHosts();
                 break;
             case 'timespan':
                 $filter->setTimespan($value);
                 break;
             case 'servicesonly':
                 $filter->useOnlyServices();
                 break;
             case 'instanceIds':
                 $filter->setInstanceIds($value);
                 break;
             case 'hostnames':
                 $filter->setHostnamePattern($value);
                 break;
             case 'servicenames':
                 $filter->setServicenamePattern($value);
                 break;
             case 'hostgroups':
                 $filter->setHostgroupnames($value);
                 break;
             case 'servicegroups':
                 $filter->setServicegroupnames($value);
                 break;
             case 'ids':
                 $filter->setObjectId($value);
                 break;
         }
     }
     $this->addPrincipalsToFilter($filter);
     $stmt = IcingaSlahistoryTable::getSummary(null, $filter);
     $this->setAttribute("result", $stmt);
     return "Success";
 }
 private function addSLAData(array &$result, $timespan)
 {
     $objIds = array();
     $map = array();
     //hashmap for fast lookup
     foreach ($result as $idx => &$record) {
         $id = "";
         if (isset($record["HOST_OBJECT_ID"])) {
             $id = $record["HOST_OBJECT_ID"];
         } else {
             if (isset($record["SERVICE_OBJECT_ID"])) {
                 $id = $record["SERVICE_OBJECT_ID"];
             } else {
                 continue;
             }
         }
         $record["SLA_STATE_AVAILABLE"] = 0;
         $record["SLA_STATE_UNAVAILABLE"] = 0;
         $record["SLA_STATE_0"] = 0;
         $record["SLA_STATE_1"] = 0;
         $record["SLA_STATE_2"] = 0;
         $record["SLA_STATE_3"] = 0;
         $map[$id] = $idx;
         $objIds[] = $id;
     }
     $filter = $this->getContext()->getModel("SLA.SLAFilter", "Api");
     $filter->setObjectId($objIds);
     $filter->setTimespan($timespan);
     $stmt = IcingaSlahistoryTable::getSummary(null, $filter);
     foreach ($stmt as $sla_entry) {
         $oid = $sla_entry->object_id;
         $state = $sla_entry->sla_state;
         if (!isset($map[$oid])) {
             continue;
         }
         $entry =& $result[$map[$oid]];
         if ($state > 0 && $sla_entry->objecttype_id == 1 || $state > 1 && $sla_entry->objecttype_id == 2) {
             $entry["SLA_STATE_UNAVAILABLE"] += $sla_entry->percentage;
         } else {
             $entry["SLA_STATE_AVAILABLE"] += $sla_entry->percentage;
         }
         if (isset($entry["SLA_STATE_" . $state])) {
             $entry["SLA_STATE_" . $state] += $sla_entry->percentage;
         }
     }
 }