/** * @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; } } }
/** * 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())); } }