示例#1
0
 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!");
 }
示例#2
0
 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;
 }
示例#3
0
 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));
     }
 }
示例#4
0
 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());
 }
示例#5
0
 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;
     }
 }