public function detailAction()
 {
     if (isset($_REQUEST["resource_id"]) && isset($_REQUEST["service_id"]) && isset($_REQUEST["time"])) {
         $resource_id = (int) $_REQUEST["resource_id"];
         $service_id = (int) $_REQUEST["service_id"];
         $time = (int) $_REQUEST["time"];
         $this->view->detail_service_id = $service_id;
         $this->view->detail_time = $time;
         //get service information
         $model = new ResourceServices();
         $params = array("resource_id" => $resource_id, "service_id" => $service_id);
         $this->view->detail_service = $model->get($params);
         //get statuses at specified timestamp
         $metricdata_model = new MetricData();
         $params = array("resource_id" => $resource_id, "time" => $time);
         $latest_metrics = $metricdata_model->get($params);
         //pull metric info
         $model = new Metric();
         $this->view->metric_details = $model->getindex();
         //pull all metric for this service
         $model = new MetricService();
         $this->view->detail_critical_metrics = array();
         $this->view->detail_noncritical_metrics = array();
         foreach ($model->get(array("service_id" => $service_id)) as $metric) {
             $info = array();
             $info["metric_id"] = $metric->metric_id;
             //find the reported detail (if not, leave it empty)
             foreach ($latest_metrics as $latest_metric) {
                 if ($latest_metric->metric_id == $metric->metric_id) {
                     $info["detail_id"] = $latest_metric->id;
                     $info["detail"] = $this->fetchMetricDetail($latest_metric->id);
                     $info["status"] = Status::getStatus($latest_metric->metric_status_id);
                     $info["timestamp"] = $latest_metric->timestamp;
                     break;
                 }
             }
             if ($metric->critical == 1) {
                 $this->view->detail_critical_metrics[] = $info;
             } else {
                 $this->view->detail_noncritical_metrics[] = $info;
             }
         }
         //load service status
         $service_status_model = new ServiceStatusChange();
         $params = array();
         $params["resource_id"] = $resource_id;
         $params["service_id"] = $service_id;
         $params["start_time"] = $time;
         $params["end_time"] = $time;
         $service_statuses = $service_status_model->get($params);
         $this->view->detail_service_status = null;
         if (isset($service_statuses[0])) {
             $this->view->detail_service_status = $service_statuses[0];
         }
         //load downtime
         $downtime_model = new Downtime();
         $params = array("resource_id" => $resource_id, "start_time" => $time, "end_time" => $time);
         $downtimes = $downtime_model->get($params);
         $downtimes_forservice = $this->getDowntimesForService($downtimes, $service_id);
         if (count($downtimes_forservice) > 0) {
             $this->view->downtime = $downtimes_forservice[0];
             //grab first one for this service
         }
     }
 }
 public function loadStatusChanges()
 {
     /////////////////////////////////////////////////////////////////////////////////
     //get paramters
     if (!isset($_REQUEST["resource_id"])) {
         echo "resource_id missing";
         exit;
     }
     $dirty_resource_id = $_REQUEST["resource_id"];
     if (Zend_Validate::is($dirty_resource_id, 'Int')) {
         $resource_id = $dirty_resource_id;
     }
     list($start_time, $end_time) = getLastNDayRange(7);
     //this default shouldn't be used..
     if (isset($_REQUEST["start"]) && isset($_REQUEST["end"])) {
         $dirty_start_time = $_REQUEST["start"];
         if (Zend_Validate::is($dirty_start_time, 'Int')) {
             $start_time = $dirty_start_time;
         }
         $dirty_end_time = $_REQUEST["end"];
         if (Zend_Validate::is($dirty_end_time, 'Int')) {
             $end_time = $dirty_end_time;
         }
     }
     $service_id = null;
     if (isset($_REQUEST["service_id"])) {
         $service_id = (int) $_REQUEST["service_id"];
     }
     /////////////////////////////////////////////////////////////////////////////////
     //pull status changes
     if ($service_id === null) {
         //resource status
         $resource_statuschange_model = new ResourceStatusChange();
         $params = array();
         $params["resource_id"] = $resource_id;
         $params["start_time"] = $start_time;
         $params["end_time"] = $end_time;
         $status_changes = $resource_statuschange_model->get($params);
     } else {
         $service_statuschange_model = new ServiceStatusChange();
         $params = array();
         $params["service_id"] = $service_id;
         $params["resource_id"] = $resource_id;
         $params["start_time"] = $start_time;
         $params["end_time"] = $end_time;
         $status_changes = $service_statuschange_model->get($params);
     }
     /////////////////////////////////////////////////////////////////////////////////
     //pull downtime info
     $downtime_model = new Downtime();
     $params = array("resource_id" => $resource_id, "start_time" => $start_time, "end_time" => $end_time);
     $downtimes = $downtime_model->get($params);
     $downtimes_forservice = $this->getDowntimesForService($downtimes, $service_id);
     return array($status_changes, $start_time, $end_time, $downtimes_forservice);
 }