コード例 #1
0
ファイル: App.php プロジェクト: jstanden/portsensor
 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());
 }
コード例 #2
0
ファイル: cron.classes.php プロジェクト: jstanden/portsensor
 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!");
 }
コード例 #3
0
 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.");
             }
         }
     }
 }
コード例 #4
0
ファイル: sensors.php プロジェクト: jstanden/portsensor
 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;
 }
コード例 #5
0
ファイル: Rest.php プロジェクト: sluther/portsensor
 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());
 }
コード例 #6
0
ファイル: Model.class.php プロジェクト: jstanden/portsensor
 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);
 }
コード例 #7
0
ファイル: DAO.class.php プロジェクト: sluther/portsensor
 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));
     }
 }
コード例 #8
0
ファイル: classes.php プロジェクト: sluther/portsensor
 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');
     }
 }
コード例 #9
0
 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);
 }