. * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ /** * The ProcessMaker memcached class * * @package workflow.engine.ProcessMaker */ class PMmemcached { const ONE_MINUTE = 60; const ONE_HOUR = 3600; const TWO_HOURS = 7200; const EIGHT_HOURS = 28800; var $version; var $mem; var $connected = false; var $enabled = false; var $supported = false; private static $instance = null; public function __construct ($workspace) { $this->enabled = MEMCACHED_ENABLED; $this->connected = false; $this->workspace = $workspace; if (class_exists( 'Memcached' )) { $this->mem = new Memcached(); $this->class = 'Memcached'; $this->connected = true; } else { if (class_exists( 'Memcache' )) { $this->mem = new Memcache(); $this->class = 'Memcache'; $this->supported = true; $this->connected = @$this->mem->connect( MEMCACHED_SERVER, 11211 ); if ($this->connected) { $this->version = $this->mem->getVersion(); } } else { require_once ("classes" . PATH_SEP . "class.fileCache.php"); //Create cache folder $cacheFolder = PATH_DATA . "sites". PATH_SEP . $workspace . PATH_SEP . "cachefiles" . PATH_SEP; if (! file_exists( $cacheFolder )) { if (! mkdir( $cacheFolder )) { return false; } } $this->class = 'fileCache'; $this->connected = true; $this->mem = new FileCache( $cacheFolder ); } } if (! MEMCACHED_ENABLED) { $this->connected = false; return false; } } /** * to get singleton instance * * @access public * @return object */ public static function getSingleton ($workspace) { if (! self::$instance instanceof self) { self::$instance = new PMmemcached( $workspace ); } return self::$instance; } public function __clone () { throw new Exception( "Clone is not allowed." ); } public function __wakeup () { throw new Exception( "Deserializing is not allowed." ); } public function set ($key, $object, $timeout = 0) { if (! $this->connected) { return false; } if ($this->class != "fileCache") { $this->mem->set( $this->workspace . '_' . $key, $object, false, $timeout ); } else { $this->mem->set( $this->workspace . '_' . $key, $object ); } } public function get ($key) { if (! $this->connected) { return false; } return $this->mem->get( $this->workspace . '_' . $key ); } public function add ($key, $value) { if (!$this->connected || $this->class == "fileCache") { return false; } return $this->mem->add( $this->workspace . '_' . $key, $value ); } public function increment ($key, $value) { if (!$this->connected || $this->class == "fileCache") { return false; } return $this->mem->increment( $this->workspace . '_' . $key, $value ); } public function delete($key) { if (! $this->connected || $this->class == 'filecache') { return false; } return $this->mem->delete($this->workspace . "_" . $key); } public function flush() { if (! $this->connected || $this->class == 'filecache') { return false; } return $this->mem->flush(); } public function getStats() { if (! $this->connected || $this->class == 'filecache') { return false; } return $status = $this->mem->getStats(); } public function printDetails() { if (! $this->connected || $this->class == 'filecache') { return false; } $status = $this->mem->getStats(); if (! is_array($status)) { return false; } echo "
| Memcache Server version: | " . $status["version"] . " |
| Number of hours this server has been running | " . ($status["uptime"] / 3660) . " |
| Total number of items stored by this server ever since it started | " . $status["total_items"] . " |
| Number of open connections | " . $status["curr_connections"] . " |
| Total number of connections opened since the server started running | " . $status["total_connections"] . " |
| Number of connection structures allocated by the server | " . $status["connection_structures"] . " |
| Cumulative number of retrieval requests | " . $status["cmd_get"] . " |
| Cumulative number of storage requests | " . $status["cmd_set"] . " |
| Number of keys that have been requested and found present | " . $status["get_hits"] . " ($percCacheHit%) |
| Number of items that have been requested and not found | " . $status["get_misses"] . "($percCacheMiss%) |
| Total number of bytes read by this server from network | " . $MBRead . " Mega Bytes |
| Total number of bytes sent by this server to network | " . $MBWrite . " Mega Bytes |
| Number of bytes this server is allowed to use for storage. | " . $MBSize . " Mega Bytes |
| Number of valid items removed from cache to free memory for new items. | " . $status["evictions"] . " |