function run() { $logger = DevblocksPlatform::getConsoleLog(); $logger->info("[Sensors] Starting..."); // Only pull enabled sensors with an extension_id $sensors = DAO_Sensor::getWhere(sprintf("%s=%d", DAO_Sensor::IS_DISABLED, 0)); $sensor_types = DevblocksPlatform::getExtensions('portsensor.sensor', true); if (is_array($sensors)) { foreach ($sensors as $sensor) { if (!empty($sensor->extension_id) && isset($sensor_types[$sensor->extension_id])) { // Skip external sensors if ('sensor.external' == $sensor->extension_id) { continue; } $runner = $sensor_types[$sensor->extension_id]; $output = sprintf("%s (%s)", $sensor->name, $sensor->extension_id); 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); } $logger->info("[Sensors] Running {$output}... {$result}"); } } } // Sensor Runner Event $eventMgr = DevblocksPlatform::getEventService(); $eventMgr->trigger(new Model_DevblocksEvent('cron.sensors.post', array())); $logger->info("[Sensors] Finished!"); }
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; }
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)); } }
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 render() { $tpl = DevblocksPlatform::getTemplateService(); $tpl->cache_lifetime = "0"; $tpl->assign('path', dirname(__FILE__) . '/templates/'); $session = DevblocksPlatform::getSessionService(); $visit = $session->getVisit(); /* @var $visit PortSensorVisit */ $response = DevblocksPlatform::getHttpResponse(); $stack = $response->path; @array_shift($stack); // home switch (array_shift($stack)) { default: $tpl->assign('now_secs', time()); if ($visit->is_feed) { $devices = DAO_FeedItem::getFeedDevices($visit->is_feed->id); $tpl->assign('devices', $devices); } elseif ($visit->is_admin) { $devices = DAO_Device::getWhere(); $tpl->assign('devices', $devices); } $sensors = DAO_Sensor::getWhere(); $sensors_by_device = array(); $total_ok = 0; $total_warning = 0; $total_critical = 0; foreach ($sensors as $sensor) { if (!isset($devices[$sensor->device_id])) { continue; } if (!isset($sensors_by_device[$sensor->device_id])) { $sensors_by_device[$sensor->device_id] = array(); } if (1 == $sensor->status) { $total_warning++; } elseif (2 == $sensor->status) { $total_critical++; } else { $total_ok++; } $sensors_by_device[$sensor->device_id][$sensor->id] = $sensor; } $tpl->assign('sensors_by_device', $sensors_by_device); $tpl->assign('total_ok', $total_ok); $tpl->assign('total_warning', $total_warning); $tpl->assign('total_critical', $total_critical); $tpl->display('file:' . dirname(__FILE__) . '/templates/home/index.tpl.php'); break; } }