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()); }
function run() { $logger = DevblocksPlatform::getConsoleLog(); $logger->info("[Alerts] Starting..."); $alerts = DAO_Alert::getAll(); $check_sensors = DAO_Sensor::getAll(); $workers = DAO_Worker::getAll(); if (is_array($alerts)) { foreach ($alerts as $alert) { /* @var $alert Model_Alert */ if (!isset($workers[$alert->worker_id])) { continue; } $logger->info(sprintf("[Alerts] Checking '%s' for %s...", $alert->name, $workers[$alert->worker_id]->getName())); $hit_sensors = $alert->getMatches($check_sensors); if (is_array($hit_sensors)) { $alert->run($hit_sensors); } } } $logger->info("[Alerts] Finished!"); }
private function _handleCronSensorsPost($event) { $logger = DevblocksPlatform::getConsoleLog(); $translate = DevblocksPlatform::getTranslationService(); $sensors = DAO_Sensor::getAll(); // Check that all external sensors aren't over their M.I.A. time if (is_array($sensors)) { foreach ($sensors as $sensor) { /* @var $sensor Model_Sensor */ // Only external sensors if ('sensor.external' != $sensor->extension_id) { continue; } // Skip if the sensor hasn't run once yet if (0 == $sensor->updated_date) { continue; } $mia_secs = intval($sensor->params->mia_secs); $elapsed = time() - $sensor->updated_date; if ($mia_secs && $elapsed > $mia_secs) { $fields = array(DAO_Sensor::STATUS => 2, DAO_Sensor::FAIL_COUNT => intval($sensor->fail_count) + 1, DAO_Sensor::METRIC => $translate->_('sensor.status.mia'), DAO_Sensor::OUTPUT => $translate->_('sensor.status.mia')); DAO_Sensor::update($sensor->id, $fields); $logger->info($sensor->name . " is M.I.A. for {$elapsed} seconds."); } } } }
function viewRunNowAction() { @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'], 'string')); @($ids = DevblocksPlatform::importGPC($_REQUEST['row_id'], 'array')); $sensor_types = DevblocksPlatform::getExtensions('portsensor.sensor', true); if (is_array($ids) && !empty($ids)) { try { $sensors = DAO_Sensor::getWhere(sprintf("%s IN (%s)", DAO_Sensor::ID, implode(',', $ids))); if (is_array($sensors)) { foreach ($sensors as $sensor) { if (isset($sensor_types[$sensor->extension_id])) { // Skip external sensors if ('sensor.external' == $sensor->extension_id) { continue; } $runner = $sensor_types[$sensor->extension_id]; // [TODO] This duplicates cron if (method_exists($runner, 'run')) { $fields = array(); $success = $runner->run($sensor, $fields); $fields[DAO_Sensor::UPDATED_DATE] = time(); $fields[DAO_Sensor::FAIL_COUNT] = $success ? 0 : intval($sensor->fail_count) + 1; DAO_Sensor::update($sensor->id, $fields); } } } } } catch (Exception $e) { // ... } } $view = Ps_AbstractViewLoader::getView($view_id); $view->render(); return; }
protected function _getListAction($path) { $sensors = DAO_Sensor::getWhere(); $xml = new SimpleXMLElement("<sensors></sensors>"); foreach ($sensors as $sensor) { /* @var $device Model_Sensor */ $eSensor =& $xml->addChild('sensor'); $eSensor->addChild('id', $sensor->id); $eSensor->addChild('device_id', $sensor->device_id); $eSensor->addChild('monitor_id', $sensor->monitor_id); $eSensor->addChild('status', $sensor->status); $eSensor->addChild('output', $sensor->output); $eSensor->addChild('metric', $sensor->metric); $eSensor->addChild('last_updated', $sensor->last_updated); } $this->_render($xml->asXML()); }
function doBulkUpdate($filter, $do, $ids = array()) { @set_time_limit(600); // [TODO] Temp! $change_fields = array(); $custom_fields = array(); if (empty($do)) { return; } if (is_array($do)) { foreach ($do as $k => $v) { switch ($k) { // case 'is_disabled': // $change_fields[DAO_Sensor::IS_DISABLED] = intval($v); // break; default: // Custom fields if (substr($k, 0, 3) == "cf_") { $custom_fields[substr($k, 3)] = $v; } break; } } } $pg = 0; if (empty($ids)) { do { list($objects, $null) = DAO_Sensor::search(array(), $this->params, 100, $pg++, SearchFields_Sensor::ID, true, false); $ids = array_merge($ids, array_keys($objects)); } while (!empty($objects)); } $batch_total = count($ids); for ($x = 0; $x <= $batch_total; $x += 100) { $batch_ids = array_slice($ids, $x, 100); DAO_Sensor::update($batch_ids, $change_fields); // Custom Fields self::_doBulkSetCustomFields(PsCustomFieldSource_Sensor::ID, $custom_fields, $batch_ids); unset($batch_ids); } unset($ids); }
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 render() { $path = dirname(__FILE__); $tpl = DevblocksPlatform::getTemplateService(); $tpl->cache_lifetime = "0"; $tpl->assign('path', $path . '/templates/'); $visit = Application::getVisit(); /* @var $visit PortSensorVisit */ $response = DevblocksPlatform::getHttpResponse(); $stack = $response->path; @array_shift($stack); // events @($id = array_shift($stack)); // id if (empty($id)) { $tpl->assign('now_secs', time()); // Devices if (!$visit->is_admin && !empty($visit->is_feed)) { $devices = DAO_FeedItem::getFeedDevices($visit->is_feed->id); $tpl->assign('devices', $devices); // Events $plots = DAO_SensorEvent::getWhere(sprintf("%s IN (%s) ", "se.device_id", implode(',', array_keys($devices)))); $tpl->assign('plots', $plots); } elseif ($visit->is_admin) { $devices = DAO_Device::getWhere(); $tpl->assign('devices', $devices); // Events $plots = DAO_SensorEvent::getWhere(); $tpl->assign('plots', $plots); } $tpl->display('file:' . dirname(__FILE__) . '/templates/events/index.tpl.php'); } else { $db = DevblocksPlatform::getDatabaseService(); $tpl->assign('now_secs', time()); $sensor = DAO_Sensor::get($id); $tpl->assign('sensor', $sensor); $device = DAO_Device::getByID($sensor->device_id); $tpl->assign('device', $device); // Security check for device for current logged in user if (!$visit->is_admin && !empty($visit->is_feed)) { $feed_devices = DAO_FeedItem::getFeedDevices($visit->is_feed->id); if (!isset($feed_devices[$sensor->device_id])) { return; } } $events = DAO_SensorEvent::getWhere(sprintf("%s = %d", DAO_SensorEvent::SENSOR_ID, $sensor->id)); $tpl->assign('plots', $events); $tpl->display('file:' . dirname(__FILE__) . '/templates/events/sensor.tpl.php'); } }
function saveConfig(Model_Sensor $sensor) { @($host = DevblocksPlatform::importGPC($_POST['host'], 'string', '')); @($port = DevblocksPlatform::importGPC($_POST['port'], 'integer', 0)); $fields = array(DAO_Sensor::PARAMS_JSON => json_encode(array('host' => $host, 'port' => $port))); DAO_Sensor::update($sensor->id, $fields); }