예제 #1
0
 /**
  * @param Scalr_Integration_ZohoCrm_Task $task
  * @return void
  */
 private function enqueueTask($task)
 {
     if ($this->taskQueue === null) {
         $this->taskQueue = TaskQueue::Attach(self::TASK_QUEUE_NAME);
     }
     $this->taskQueue->AppendTask($task);
 }
 public function StartThread($data)
 {
     // Reconfigure observers;
     Scalr::ReconfigureObservers();
     //
     // Create pid file
     //
     @file_put_contents(CACHEPATH . "/" . __CLASS__ . ".Daemon.pid", posix_getpid());
     // Get memory usage on start
     $memory_usage = $this->GetMemoryUsage();
     $this->Logger->info("DBQueueEventProcess daemon started. Memory usage: {$memory_usage}M");
     // Get DB instance
     $db = Core::GetDBInstance();
     $FarmObservers = array();
     while (true) {
         // Process tasks from Deferred event queue
         while ($Task = TaskQueue::Attach(QUEUE_NAME::DEFERRED_EVENTS)->Poll()) {
             $Task->Run();
         }
         // Reset task
         TaskQueue::Attach(QUEUE_NAME::DEFERRED_EVENTS)->Reset();
         // Cleaning
         unset($current_memory_usage);
         unset($event);
         // Check memory usage
         $current_memory_usage = $this->GetMemoryUsage() - $memory_usage;
         if ($current_memory_usage > $this->DaemonMemoryLimit) {
             $this->Logger->warn("DBQueueEventProcess daemon reached memory limit {$this->DaemonMemoryLimit}M, Used:{$current_memory_usage}M");
             $this->Logger->warn("Restart daemon.");
             exit;
         }
         // Sleep for 60 seconds
         sleep(15);
         // Clear stat file cache
         clearstatcache();
         // Check daemon file for modifications.
         if ($this->DaemonMtime && $this->DaemonMtime < @filemtime(__FILE__)) {
             $this->Logger->warn(__FILE__ . " - updated. Exiting for daemon reload.");
             exit;
         }
     }
 }
예제 #3
0
 /**
  * Store event in database
  *
  * @param integer $farmid
  * @param string $event_name
  */
 public static function StoreEvent($farmid, Event $event)
 {
     if ($event->SkipDeferredOperations) {
         return true;
     }
     try {
         $DB = Core::GetDBInstance();
         // Get Smarty object
         $Smarty = Core::GetSmartyInstance();
         // Assign vars
         $Smarty->assign(array("event" => $event));
         // Generate event message
         if (file_exists(CF_TEMPLATES_PATH . "/event_messages/{$event->GetName()}.tpl")) {
             $message = $Smarty->fetch("event_messages/{$event->GetName()}.tpl");
             $short_message = $Smarty->fetch("event_messages/{$event->GetName()}.short.tpl");
             // Store event in database
             $DB->Execute("INSERT INTO events SET \r\n\t\t\t\t\t\tfarmid\t= ?, \r\n\t\t\t\t\t\ttype\t= ?, \r\n\t\t\t\t\t\tdtadded\t= NOW(),\r\n\t\t\t\t\t\tmessage\t= ?,\r\n\t\t\t\t\t\tshort_message = ?, \r\n\t\t\t\t\t\tevent_object = ?,\r\n\t\t\t\t\t\tevent_id\t = ?\r\n\t\t\t\t\t\t", array($farmid, $event->GetName(), $message, $short_message, serialize($event), $event->GetEventID()));
             $eventid = $DB->Insert_ID();
             // Add task for fire deferred event
             TaskQueue::Attach(QUEUE_NAME::DEFERRED_EVENTS)->AppendTask(new FireDeferredEventTask($eventid));
         } else {
             Logger::getLogger(__CLASS__)->warn(sprintf(_("Cannot store event in database: '{$event->GetName()}' message template not found")));
         }
     } catch (Exception $e) {
         Logger::getLogger(__CLASS__)->fatal(sprintf(_("Cannot store event in database: %s"), $e->getMessage()));
     }
 }