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()); }
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)); } }
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(); } }
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()); }