Esempio n. 1
0
 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();
     }
 }
Esempio n. 2
0
 private function _postCreateAction($path)
 {
     $xmlstr = $this->getPayload();
     $xml_in = simplexml_load_string($xmlstr);
     $fields = array();
     $flds = DAO_Sensor::getFields();
     unset($flds[DAO_Sensor::ID]);
     foreach ($flds as $idx => $f) {
         $idx_name = $this->translate($idx, true);
         if ($idx_name == null) {
             continue;
         }
         @($value = DevblocksPlatform::importGPC($xml_in->{$idx_name}, 'string'));
         if ($this->isValid($idx_name, $value)) {
             $fields[$idx] = $value;
         }
     }
     if (empty($fields[DAO_Sensor::NAME])) {
         $this->_error("All required fields were not provided.");
     }
     $id = DAO_Sensor::create($fields);
     // Render
     $this->_getIdAction(array($id));
 }
Esempio n. 3
0
 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());
 }