コード例 #1
0
ファイル: App.php プロジェクト: jstanden/portsensor
 private function _deleteIdAction($path)
 {
     $in_id = array_shift($path);
     if (empty($in_id)) {
         $this->_error("ID was not provided.");
     }
     if (null == ($sensor = DAO_Sensor::get($in_id))) {
         $this->_error("ID is not valid.");
     }
     DAO_Sensor::delete($sensor->id);
     $out_xml = new SimpleXMLElement('<success></success>');
     $this->_render($out_xml->asXML());
 }
コード例 #2
0
ファイル: DAO.class.php プロジェクト: sluther/portsensor
 static function delete($ids)
 {
     if (!is_array($ids)) {
         $ids = array($ids);
     }
     $db = DevblocksPlatform::getDatabaseService();
     $ids_list = implode(',', $ids);
     if (empty($ids_list)) {
         return;
     }
     $db->Execute(sprintf("DELETE FROM device WHERE id IN (%s)", $ids_list));
     // Cascade Sensors
     $sensors = DAO_Sensor::getWhere(sprintf("%s IN (%s)", DAO_Sensor::DEVICE_ID, $ids_list));
     if (!empty($sensors)) {
         DAO_Sensor::delete(array_keys($sensors));
     }
 }
コード例 #3
0
ファイル: sensors.php プロジェクト: jstanden/portsensor
 function saveSensorPeekAction()
 {
     $translate = DevblocksPlatform::getTranslationService();
     $active_worker = PortSensorApplication::getActiveWorker();
     // [TODO] ACL
     // return;
     @($id = DevblocksPlatform::importGPC($_POST['id'], 'integer'));
     @($view_id = DevblocksPlatform::importGPC($_POST['view_id'], 'string'));
     @($name = DevblocksPlatform::importGPC($_POST['name'], 'string'));
     @($extension_id = DevblocksPlatform::importGPC($_POST['extension_id'], 'string'));
     @($disabled = DevblocksPlatform::importGPC($_POST['is_disabled'], 'integer', 0));
     @($delete = DevblocksPlatform::importGPC($_POST['do_delete'], 'integer', 0));
     // [TODO] The superuser set bit here needs to be protected by ACL
     if (empty($name)) {
         $name = "New Sensor";
     }
     if (!empty($id) && !empty($delete)) {
         DAO_Sensor::delete($id);
     } else {
         $fields = array(DAO_Sensor::NAME => $name, DAO_Sensor::EXTENSION_ID => $extension_id, DAO_Sensor::IS_DISABLED => $disabled);
         if (empty($id)) {
             $id = DAO_Sensor::create($fields);
         } else {
             DAO_Sensor::update($id, $fields);
         }
         // Save sensor extension config
         if (!empty($extension_id)) {
             if (null != ($ext = DevblocksPlatform::getExtension($extension_id, true))) {
                 if (null != ($sensor = DAO_Sensor::get($id)) && $ext instanceof Extension_Sensor) {
                     $ext->saveConfig($sensor);
                 }
             }
         }
         // Custom field saves
         @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array()));
         DAO_CustomFieldValue::handleFormPost(PsCustomFieldSource_Sensor::ID, $id, $field_ids);
     }
     if (!empty($view_id)) {
         $view = Ps_AbstractViewLoader::getView($view_id);
         $view->render();
     }
 }
コード例 #4
0
ファイル: classes.php プロジェクト: sluther/portsensor
 private function _postPostAction($stack, Model_Monitor $monitor)
 {
     $xmlstr = $this->getPayload();
     $xml_in = simplexml_load_string($xmlstr);
     $devices = array();
     // Monitor
     if (empty($monitor)) {
         // Unknown monitor
         $this->_error(sprintf("Access denied! (Unknown monitor)"));
         return;
     }
     DAO_Monitor::update($monitor->id, array(DAO_Monitor::LAST_UPDATED => time()));
     // Load up all the sensors this monitor has provided in the past
     $monitor_stale_sensors = DAO_Sensor::getWhere(sprintf("%s = %d", DAO_Sensor::MONITOR_ID, $monitor->id));
     foreach ($xml_in->xpath('/sensors/sensor') as $eSensor) {
         $sensor = new stdClass();
         $sensor->name = (string) $eSensor->name;
         $sensor->device = (string) $eSensor->device;
         $sensor->status = (int) $eSensor->status;
         $sensor->metric = (string) $eSensor->metric;
         $sensor->output = (string) $eSensor->output;
         $sensor->runtime = (string) $eSensor->runtime;
         if (null == ($device = DAO_Device::getByGUID($sensor->device))) {
             continue;
         }
         // invalid device
         // New sensor instance
         if (null == ($lookup = DAO_Sensor::getWhere(sprintf("%s = '%s' AND %s = %d", DAO_Sensor::NAME, addslashes($sensor->name), DAO_Sensor::DEVICE_ID, $device->id)))) {
             $fields = array(DAO_Sensor::NAME => $sensor->name, DAO_Sensor::DEVICE_ID => $device->id, DAO_Sensor::STATUS => $sensor->status, DAO_Sensor::METRIC => $sensor->metric, DAO_Sensor::OUTPUT => $sensor->output, DAO_Sensor::LAST_UPDATED => $sensor->runtime, DAO_Sensor::MONITOR_ID => $monitor->id);
             $sensor_id = DAO_Sensor::create($fields);
             DAO_SensorEvent::log($sensor_id, $device->id, $sensor->status, $sensor->metric);
         } else {
             // Updating an existing sensor
             $parent_sensor = array_shift($lookup);
             // This updated sensor is not stale
             unset($monitor_stale_sensors[$parent_sensor->id]);
             $fields = array(DAO_Sensor::STATUS => $sensor->status, DAO_Sensor::METRIC => $sensor->metric, DAO_Sensor::OUTPUT => $sensor->output, DAO_Sensor::LAST_UPDATED => $sensor->runtime, DAO_Sensor::MONITOR_ID => $monitor->id);
             DAO_Sensor::update($parent_sensor->id, $fields);
             if ($parent_sensor->status != $sensor->status) {
                 DAO_SensorEvent::log($parent_sensor->id, $device->id, $sensor->status, $sensor->metric);
             }
         }
         if ($sensor->status !== 0) {
             // push notification
             $this->_pushNotification($sensor);
         }
     }
     // Purge any sensors no longer provided by this monitor
     // [TODO] We need to consider if any monitors won't always send a full update
     if (!empty($monitor_stale_sensors)) {
         DAO_Sensor::delete(array_keys($monitor_stale_sensors));
     }
     $xml_out = new SimpleXMLElement("<success></success>");
     $this->_render($xml_out->asXML());
 }